Jurica Resetar / Mbed OS acnSensa_LIS

Dependencies:   Lis2dh12 aconno_I2C aconno_nrf52_uart adc52832_common aconno_SEGGER_RTT

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /* 
00002  * aconno.de
00003  * Made by Jurica Resetar
00004  * All right reserved 
00005  *
00006  */
00007 
00008 #include "main.h"
00009 
00010 void disableI2C(){
00011     NRF_TWI0->ENABLE = 0;
00012     NRF_TWI0->PSELSCL = 0xFFFFFFFF;
00013     NRF_TWI1->ENABLE = 0;
00014     NRF_TWI1->PSELSCL = 0xFFFFFFFF;
00015     NRF_TWIM0->ENABLE = 0;
00016     NRF_TWIM0->PSEL.SCL = 0x80000000;
00017     NRF_TWIM0->PSEL.SDA = 0x80000000;
00018     NRF_TWIM1->ENABLE = 0;
00019     NRF_TWIM0->PSEL.SCL = 0x80000000;
00020     NRF_TWIM0->PSEL.SDA = 0x80000000;
00021     DigitalOut foo(I2C_DATA);
00022     DigitalOut bar(I2C_CLK);
00023     foo = 1;
00024     bar = 1;
00025 }
00026 
00027 void disableBle(){
00028     bleTicker.detach();
00029     bleT.signal_set(DISABLE_BLE_SIG);
00030 }
00031 
00032 void int1Handler(){
00033     __disable_irq();
00034     I2C i2c(I2C_DATA,I2C_CLK);
00035     mems.clearIntFlag();
00036     bleT.signal_set(ACC_INT_SIG);
00037     bleTicker.attach(disableBle, BLE_ACTIVE_TIME_S);
00038     disableI2C();
00039     __enable_irq();
00040     
00041 }
00042 
00043 
00044 void bleF(BLE *ble){
00045     // Thread function for managing BLE radio
00046     // First wait for acc interrupt signal
00047     while(true){
00048         Thread::signal_wait(ACC_INT_SIG);
00049         Thread::signal_clr(ACC_INT_SIG);
00050         //I2C i2c(I2C_DATA,I2C_CLK);
00051         
00052         printf("\r\n\r\n**********************\r\n");
00053         printf("Interrupt on accelerometer.\r\n");
00054         printf("X acceleration data: %d [mg]\r\n", mems.readXAxis()*LSB_VALUE);
00055         printf("Y acceleration data: %d [mg]\r\n", mems.readYAxis()*LSB_VALUE);
00056         printf("Z acceleration data: %d [mg]\r\n", mems.readZAxis()*LSB_VALUE);
00057         printf("******************************\r\n");
00058         
00059         //disableI2C();
00060         //__enable_irq();
00061         
00062         ble->gap().startAdvertising();
00063         printf("Ble advertisement is ON.\r\n");
00064         #if DEBUG_LED
00065             redLed = 0;
00066         #endif
00067         Thread::signal_wait(DISABLE_BLE_SIG);
00068         Thread::signal_clr(DISABLE_BLE_SIG);
00069         ble->gap().stopAdvertising();
00070         printf("Ble advertisement is OFF.\r\n\r\n");
00071         #if DEBUG_LED
00072             redLed = 1;
00073         #endif
00074     }
00075 }
00076 
00077 void measureF( void )
00078 {
00079     while(1){
00080         printf("X acceleration data: %d [mg]\r\n", mems.readXAxis()*LSB_VALUE);
00081         printf("Y acceleration data: %d [mg]\r\n", mems.readYAxis()*LSB_VALUE);
00082         printf("Z acceleration data: %d [mg]\r\n\r\n", mems.readZAxis()*LSB_VALUE);
00083         wait_ms(100);
00084     }
00085 }
00086 
00087 int main(){
00088     
00089     printf("Main program started.\r\n");
00090     
00091     NRF_NVMC->CONFIG = 0x00000002;      // Erase enable UICR
00092     NRF_NVMC->ERASEUICR = 0x00000001;   // Erase all
00093     NRF_NVMC->CONFIG = 0x00000001;      // Write enable UICR
00094     NRF_UICR->NFCPINS = 0xFFFFFFFE;     // Change NFC to GPIO function
00095     
00096     redLed = 1;
00097     AccVcc = 1;
00098     wait_ms(POWER_UP_DELAY_MS);
00099 
00100     INT1.rise(int1Handler);
00101     NRF_GPIO->PIN_CNF[INT_PIN1] &= 0xFFFFFFF3;  // NO PullUps
00102     
00103     BLE &ble = BLE::Instance();
00104     ble.init(bleInitComplete);
00105     
00106     mems.setMode(LOW_POWER);
00107     
00108     mems.enableAxes(X_axis);
00109     mems.enableAxes(Y_axis);
00110     mems.enableAxes(Z_axis);    
00111     mems.setODR(ODR_50Hz);
00112     mems.setScale(_16g);
00113     mems.int1Setup(0x40);       // IntActivity 1 driven to INT1 pad
00114     mems.int1Latch(0x01);       // Enable int1 latch
00115     mems.int1Threshold(INT1_THRESHOLD); 
00116     mems.int1Duration(INT1_DUR);            
00117     mems.int1Config(0x2A);      // Enable XHigh, YHigh and ZHigh
00118     
00119     bleT.start(callback(bleF, &ble));   // Start bleT
00120     //measureT.start(callback(measureF));
00121     
00122     while(1){
00123         disableI2C();
00124         Thread::wait(0xFFFFFFFF);
00125     }
00126 }