Lizzy project
Dependencies: aconno_I2C Lis2dh12 adc52832_common aconno_SEGGER_RTT
Revision 24:7539258b015c, committed 2018-09-20
- Comitter:
- dbartolovic
- Date:
- Thu Sep 20 07:34:35 2018 +0000
- Branch:
- testing-ignore
- Parent:
- 23:bf9c1dd2b5cb
- Child:
- 25:d021d86568e5
- Commit message:
- Not a branch to be ignored, added proj_config, changed logic.
Changed in this revision
--- a/bsp/bsp.h Mon Sep 17 12:46:41 2018 +0000
+++ b/bsp/bsp.h Thu Sep 20 07:34:35 2018 +0000
@@ -2,6 +2,7 @@
#define __BSP_H__
#include "main.h"
+#include "bspAcc.h"
#if NANO_MODULE
#define I2C_DATA (p2)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bsp/bspAcc.cpp Thu Sep 20 07:34:35 2018 +0000
@@ -0,0 +1,42 @@
+
+#include "mbed.h"
+#include "Lis2dh12.h"
+#include "Lis2dh12_regs.h"
+#include "bspAcc.h"
+#include "main.h"
+
+
+extern DigitalOut AccVcc;
+
+extern Lis2dh12 mems;
+
+extern InterruptIn INT1;
+
+void init_acc()
+{
+ INT1.disable_irq();
+ //__disable_irq();
+
+ AccVcc = 1;
+
+ wait_ms(POWER_UP_DELAY_MS);
+
+ //__enable_irq();
+
+ mems.setMode(LOW_POWER);
+ //mems.setMode(HIGH_RES);
+ mems.enableAxes(X_axis);
+ mems.enableAxes(Y_axis);
+ mems.enableAxes(Z_axis);
+ mems.setODR(ACC_ODR_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
+
+ //__enable_irq();
+ INT1.enable_irq();
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bsp/bspAcc.h Thu Sep 20 07:34:35 2018 +0000 @@ -0,0 +1,6 @@ +#ifndef __BSP_ACC_H__ +#define __BSP_ACC_H__ + +void init_acc(); + +#endif//__BSP_ACC_H__ \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/config/proj_config.h Thu Sep 20 07:34:35 2018 +0000 @@ -0,0 +1,23 @@ +#ifndef __PROJ_CONFIG_H__ +#define __PROJ_CONFIG_H__ + + +#define DEBUG (0) +#define PRINT_ON_RTT (0) +#define DEBUG_LED (0) +#define NANO_MODULE (0) +#define NORMAL_AXIS (1) +#define TEST_LEDS_BUZZ (0) + +#define POWER_UP_DELAY_MS (200) +#define MEASURE_INTERVAL_MS (500) +#define ACTIVE_PERIOD_MS (5000) + +#define LONG_SLEEP_S (300) + +#define INT1_THRESHOLD (15) +#define INT1_DUR (5) +#define ACC_ODR_MODE (ODR_25Hz) + + +#endif//__PROJ_CONFIG_H__ \ No newline at end of file
--- a/source/main.cpp Mon Sep 17 12:46:41 2018 +0000
+++ b/source/main.cpp Thu Sep 20 07:34:35 2018 +0000
@@ -17,6 +17,8 @@
Thread updateBuzzLedsT;
Thread servLoopT;
+
+extern DigitalOut redLed;
DigitalOut AccVcc(ACC_POWER_PIN);
InterruptIn INT1(INT_PIN1);
//InterruptIn INT2(INT_PIN2);
@@ -24,31 +26,13 @@
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;
+ //redLed = !redLed;
measureT.signal_set(START_MEAS);
@@ -66,16 +50,14 @@
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);
+ wait_ms(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);
@@ -84,7 +66,7 @@
mems.enableAxes(X_axis);
mems.enableAxes(Y_axis);
mems.enableAxes(Z_axis);
- mems.setODR(ACC_ODR_SLEEP_MODE);
+ mems.setODR(ACC_ODR_MODE);
//mems.setScale(_16g);
mems.setScale(_8g);
mems.int1Setup(0x40); // IntActivity 1 driven to INT1 pad
@@ -99,7 +81,6 @@
updateBuzzLedsT.start(updateBuzzLedsF);
servLoopT.start(servLoopC);
-
while(1){
//disableI2C();
//ble.waitForEvent();
--- a/source/main.h Mon Sep 17 12:46:41 2018 +0000
+++ b/source/main.h Thu Sep 20 07:34:35 2018 +0000
@@ -14,16 +14,10 @@
#include "ble/BLE.h"
#include "GapAdvertisingData.h"
#include "acd52832_bsp.h"
+#include "proj_config.h"
-#define DEBUG (0)
-#define PRINT_ON_RTT (0)
-#define DEBUG_LED (0)
-#define NANO_MODULE (0)
-#define NORMAL_AXIS (1)
//#define LSB_VALUE (192)
-#define BLE_ACTIVE_TIME_S (0.4)
-#define POWER_UP_DELAY_MS (200)
#define STOP_FPU() \
__set_FPSCR(__get_FPSCR() & ~(0x0000009F)); \
@@ -37,13 +31,9 @@
#define printf(...)
#endif
-#define INT1_THRESHOLD (30)
-#define INT1_DUR (12)
-#define ACC_ODR_ACTIVE_MODE (ODR_50Hz)
-#define ACC_ODR_SLEEP_MODE (ODR_25Hz)
#define ACC_INT_SIG (0x00001020) // Acc interrupt signal
-#define DISABLE_BLE_SIG (0x00001030)
+#define DISABLE_BLE_SIG (0x00001040)
extern Thread bleT;
--- a/tasks/tasks.cpp Mon Sep 17 12:46:41 2018 +0000
+++ b/tasks/tasks.cpp Thu Sep 20 07:34:35 2018 +0000
@@ -1,4 +1,5 @@
#include "main.h"
+#include "bsp.h"
#include "bsp_buzz.h"
#include "bsp_led.h"
#include "aconno_ble.h"
@@ -12,6 +13,9 @@
DigitalOut blueLed(BLUE_LED_PIN);
#endif
+extern Lis2dh12 mems;
+extern InterruptIn INT1;
+
Buzz buzzer(NRF_PWM2, BUZZER_PIN);
static advertising_packet advertisementPacket;
@@ -22,6 +26,19 @@
Ticker test_ticker;
#endif
+LowPowerTicker longDelaysT;
+
+
+inline void startLongDelay(uint32_t delay)
+{
+ longDelaysT.attach(longDelaysC, delay);
+}
+
+inline void stopLongDelay()
+{
+ longDelaysT.detach();
+}
+
void tasks_init()
{
@@ -86,14 +103,19 @@
}
#endif
-int untilSleep = ACTIVE_PERIOD / MEASURE_INTERVAL_MS;
void measureF(Lis2dh12 *mems)
{
+ int untilSleep;
+
while(1)
{
Thread::signal_wait(START_MEAS);
Thread::signal_clr(START_MEAS);
+ INT1.disable_irq();
+
+ untilSleep = ACTIVE_PERIOD_MS / MEASURE_INTERVAL_MS;
+
BLE::Instance().startAdvertising();
while (1)
@@ -123,12 +145,12 @@
bleT.signal_set(MEAS_DONE);
wait_ms(MEASURE_INTERVAL_MS);
- //Thread::wait(MEASURE_INTERVAL_MS);
untilSleep--;
if( (untilSleep <= 0) && !bleIsClientConnected() )
{
BLE::Instance().stopAdvertising();
+ startLongDelay(LONG_SLEEP_S);
break;
}
}
@@ -236,4 +258,13 @@
getBLEEventQueue()->dispatch_forever();
Thread::wait(0xFFFFFFFF);
}
+}
+
+void longDelaysC(void)
+{
+ mems.clearIntFlag();
+
+ INT1.enable_irq();
+
+ stopLongDelay();
}
\ No newline at end of file
--- a/tasks/tasks.h Mon Sep 17 12:46:41 2018 +0000 +++ b/tasks/tasks.h Thu Sep 20 07:34:35 2018 +0000 @@ -1,15 +1,11 @@ #ifndef __TASKS_H__ #define __TASKS_H__ +#include "proj_config.h" #include "Lis2dh12.h" -#define TEST_LEDS_BUZZ (0) - -#define MEASURE_INTERVAL_MS (100) -#define ACTIVE_PERIOD (10000) - #define MEAS_DONE (0x00001000) -#define UPDATE_BUZZ_LEDS (0x00001001) +#define UPDATE_BUZZ_LEDS (0x00002000) #define START_MEAS (0x00010000) void tasks_init(); @@ -24,5 +20,6 @@ void updateBuzzLedsF(); void bleF(BLE *ble); void servLoopC(void); +void longDelaysC(void); #endif//__TASKS_H__ \ No newline at end of file

