Edit
Dependencies: Lis2dh12 aconno_I2C aconno_nrf52_uart adc52832_common aconno_SEGGER_RTT
source/main.cpp
- Committer:
- jurica238814
- Date:
- 2018-03-01
- Branch:
- NanoModule
- Revision:
- 12:d5d47f848af5
- Parent:
- 10:83dab6cc625d
- Child:
- 13:7ae1c5bcccb5
File content as of revision 12:d5d47f848af5:
/* * aconno.de * Made by Jurica Resetar * All right reserved * */ #include "main.h" void disableI2C(){ NRF_TWI0->ENABLE = 0; NRF_TWI0->PSELSCL = 0xFFFFFFFF; NRF_TWI1->ENABLE = 0; NRF_TWI1->PSELSCL = 0xFFFFFFFF; NRF_TWIM0->ENABLE = 0; NRF_TWIM0->PSEL.SCL = 0x80000000; NRF_TWIM0->PSEL.SDA = 0x80000000; NRF_TWIM1->ENABLE = 0; NRF_TWIM0->PSEL.SCL = 0x80000000; NRF_TWIM0->PSEL.SDA = 0x80000000; DigitalOut foo(I2C_DATA); DigitalOut bar(I2C_CLK); foo = 1; bar = 1; } void disableBle(){ bleTicker.detach(); bleT.signal_set(DISABLE_BLE_SIG); } void int1Handler(){ __disable_irq(); //I2C i2c(I2C_DATA,I2C_CLK); mems.clearIntFlag(); bleT.signal_set(ACC_INT_SIG); bleTicker.attach(disableBle, BLE_ACTIVE_TIME_S); //disableI2C(); __enable_irq(); } void bleF(BLE *ble){ // Thread function for managing BLE radio // First wait for acc interrupt signal while(true){ Thread::signal_wait(ACC_INT_SIG); Thread::signal_clr(ACC_INT_SIG); //I2C i2c(I2C_DATA,I2C_CLK); printf("\r\n\r\n**********************\r\n"); printf("Interrupt on accelerometer.\r\n"); printf("X acceleration data: %d [mg]\r\n", mems.readXAxis()*LSB_VALUE); printf("Y acceleration data: %d [mg]\r\n", mems.readYAxis()*LSB_VALUE); printf("Z acceleration data: %d [mg]\r\n", mems.readZAxis()*LSB_VALUE); printf("******************************\r\n"); //disableI2C(); //__enable_irq(); ble->gap().startAdvertising(); printf("Ble advertisement is ON.\r\n"); #if DEBUG_LED redLed = 0; #endif Thread::signal_wait(DISABLE_BLE_SIG); Thread::signal_clr(DISABLE_BLE_SIG); ble->gap().stopAdvertising(); printf("Ble advertisement is OFF.\r\n\r\n"); #if DEBUG_LED redLed = 1; #endif } } void measureF( void ) { while(1){ printf("X acceleration data: %d [mg]\r\n", mems.readXAxis()*LSB_VALUE); printf("Y acceleration data: %d [mg]\r\n", mems.readYAxis()*LSB_VALUE); printf("Z acceleration data: %d [mg]\r\n\r\n", mems.readZAxis()*LSB_VALUE); wait_ms(100); } } int main(){ printf("Main program started.\r\n"); NRF_NVMC->CONFIG = 0x00000002; // Erase enable UICR NRF_NVMC->ERASEUICR = 0x00000001; // Erase all NRF_NVMC->CONFIG = 0x00000001; // Write enable UICR NRF_UICR->NFCPINS = 0xFFFFFFFE; // Change NFC to GPIO function redLed = 1; AccVcc = 1; wait_ms(POWER_UP_DELAY_MS); INT1.rise(int1Handler); NRF_GPIO->PIN_CNF[INT_PIN1] &= 0xFFFFFFF3; // NO PullUps BLE &ble = BLE::Instance(); ble.init(bleInitComplete); mems.setMode(LOW_POWER); mems.enableAxes(X_axis); mems.enableAxes(Y_axis); mems.enableAxes(Z_axis); mems.setODR(ODR_50Hz); mems.int1Setup(0x40); // IntActivity 1 driven to INT1 pad mems.int1Latch(0x01); // Enable int1 latch mems.int1Threshold(INT1_THRESHOLD); mems.int1Duration(INT1_DUR); mems.int1Config(0x2A); // Enable XHigh, YHigh and ZHigh bleT.start(callback(bleF, &ble)); // Start bleT measureT.start(callback(measureF)); while(1){ //disableI2C(); Thread::wait(0xFFFFFFFF); } }