Lizzy project

Dependencies:   aconno_I2C Lis2dh12 adc52832_common aconno_SEGGER_RTT

source/main.cpp

Committer:
dbartolovic
Date:
2018-09-17
Branch:
testing-ignore
Revision:
23:bf9c1dd2b5cb
Parent:
16:482d8f81d6f3
Child:
24:7539258b015c

File content as of revision 23:bf9c1dd2b5cb:

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

#include "main.h"
#include "bsp.h"
#include "tasks.h"


char memsI2CAddress = I2C_ADDRESS;
Thread bleT;
Thread measureT;
Thread updateServiceT;
Thread updateBuzzLedsT;
Thread servLoopT;

DigitalOut AccVcc(ACC_POWER_PIN);
InterruptIn INT1(INT_PIN1);
//InterruptIn INT2(INT_PIN2);
I2C i2c(I2C_DATA,I2C_CLK);

Lis2dh12 mems(&i2c, memsI2CAddress);

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;
}

extern int untilSleep;
void int1Handler(void)
{
    __disable_irq();
    
    mems.clearIntFlag();
    
    untilSleep = ACTIVE_PERIOD / MEASURE_INTERVAL_MS;
    
    measureT.signal_set(START_MEAS);
    
    __enable_irq();
}

int main(){
    
    tasks_init();
    
    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
    
    AccVcc = 1;
    //wait_ms(POWER_UP_DELAY_MS);
    Thread::wait(POWER_UP_DELAY_MS);

    
    //measureT.signal_set(START_MEAS);
    INT1.rise(int1Handler);
    NRF_GPIO->PIN_CNF[INT_PIN1] &= 0xFFFFFFF3;  // NO PullUps
    
    
    BLE &ble = BLE::Instance();
    ble.init(bleInitComplete);

    mems.setMode(LOW_POWER);
    //mems.setMode(HIGH_RES);
    mems.enableAxes(X_axis);
    mems.enableAxes(Y_axis);
    mems.enableAxes(Z_axis);    
    mems.setODR(ACC_ODR_SLEEP_MODE);
    //mems.setScale(_16g);
    mems.setScale(_8g);
    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, &mems));
    updateServiceT.start(updateServiceF);
    updateBuzzLedsT.start(updateBuzzLedsF);
    servLoopT.start(servLoopC);
    
    
    while(1){
        //disableI2C();
        //ble.waitForEvent();
        Thread::wait(0xFFFFFFFF);
    }
}