Edit

Dependencies:   Lis2dh12 aconno_I2C aconno_nrf52_uart adc52832_common aconno_SEGGER_RTT

source/main.cpp

Committer:
jurica238814
Date:
2018-02-28
Branch:
NanoModule
Revision:
9:a9c5db477f35
Parent:
8:4b1ac4733b3d
Child:
10:83dab6cc625d

File content as of revision 9:a9c5db477f35:

/* 
 * aconno.de
 * Made by Jurica Resetar
 * All right reserved 
 *
 */

#include "main.h"

void printOnUart(){
    while(1){
        SEND("Uart works...\r\n");
        wait_ms(500);
    }
}

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);
        ble->gap().startAdvertising();
        #if DEBUG_LED
            redLed = 0;
        #endif
        Thread::signal_wait(DISABLE_BLE_SIG);
        Thread::signal_clr(DISABLE_BLE_SIG);
        ble->gap().stopAdvertising();
        #if DEBUG_LED
            redLed = 1;
        #endif
    }
}

int main(){
    
    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;
    //rgbLEDR = 1;
    //rgbLEDG = 1;
    //rgbLEDB = 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.disableAxes(X_axis);
    mems.disableAxes(Y_axis);
    mems.enableAxes(Z_axis);    
    mems.setODR(ODR_10Hz);
    mems.int1Setup(0x40);       // IntActivity 1 driven to INT1 pad
    
    mems.int1Latch(0x01);       // Enable int1 latch
    mems.int1Threshold(INT1_THRESHOLD); 
    mems.int1Duration(INT1_DURATION);            
    mems.int1Config(0x20);      // Enable XHigh and YHigh
    
    bleT.start(callback(bleF, &ble));   // Start bleT
    
    while(1){
        disableI2C();
        Thread::wait(0xFFFFFFFF);
    }
}