DERPS
Dependencies: BMP280 BNO055_fusion PowerControl mbed
Fork of STRAIGHT_DRIVE_NO_SEP by
SAFETY.cpp@40:9a97c4403c0a, 2016-05-03 (annotated)
- Committer:
- 12104404
- Date:
- Tue May 03 19:17:04 2016 +0000
- Revision:
- 40:9a97c4403c0a
- Parent:
- 23:455f7da3dd7a
WORKING;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
12104404 | 23:455f7da3dd7a | 1 | #include "SAFETY.h" |
12104404 | 23:455f7da3dd7a | 2 | |
12104404 | 23:455f7da3dd7a | 3 | #define USR_POWERDOWN (0x104) |
12104404 | 6:0602a9e8118b | 4 | |
12104404 | 6:0602a9e8118b | 5 | // "kick" or "feed" the dog - reset the watchdog timer |
12104404 | 6:0602a9e8118b | 6 | // by writing this required bit pattern |
12104404 | 23:455f7da3dd7a | 7 | void SAFETY::kick(void) |
12104404 | 6:0602a9e8118b | 8 | { |
12104404 | 6:0602a9e8118b | 9 | LPC_WDT->WDFEED = 0xAA; |
12104404 | 6:0602a9e8118b | 10 | LPC_WDT->WDFEED = 0x55; |
12104404 | 6:0602a9e8118b | 11 | } |
12104404 | 6:0602a9e8118b | 12 | |
12104404 | 23:455f7da3dd7a | 13 | void SAFETY::kick(float s) |
12104404 | 6:0602a9e8118b | 14 | { |
12104404 | 6:0602a9e8118b | 15 | LPC_WDT->WDCLKSEL = 0x1; // Set CLK src to PCLK |
12104404 | 6:0602a9e8118b | 16 | uint32_t clk = SystemCoreClock / 16; // WD has a fixed /4 prescaler, PCLK default is /4 |
12104404 | 6:0602a9e8118b | 17 | LPC_WDT->WDTC = s * (float)clk; |
12104404 | 6:0602a9e8118b | 18 | LPC_WDT->WDMOD = 0x3; // Enabled and Reset |
12104404 | 6:0602a9e8118b | 19 | kick(); |
12104404 | 23:455f7da3dd7a | 20 | } |
12104404 | 23:455f7da3dd7a | 21 | |
12104404 | 23:455f7da3dd7a | 22 | int SAFETY::semihost_powerdown() |
12104404 | 23:455f7da3dd7a | 23 | { |
12104404 | 23:455f7da3dd7a | 24 | uint32_t arg; |
12104404 | 23:455f7da3dd7a | 25 | return __semihost(USR_POWERDOWN, &arg); |
12104404 | 23:455f7da3dd7a | 26 | } |
12104404 | 23:455f7da3dd7a | 27 | |
12104404 | 23:455f7da3dd7a | 28 | void SAFETY::init(uint32_t brownOutRoutine) |
12104404 | 23:455f7da3dd7a | 29 | { |
12104404 | 23:455f7da3dd7a | 30 | //Power Down Ethernet |
12104404 | 23:455f7da3dd7a | 31 | PHY_PowerDown(); |
12104404 | 23:455f7da3dd7a | 32 | //Power Down USB Chip |
12104404 | 23:455f7da3dd7a | 33 | semihost_powerdown(); |
12104404 | 23:455f7da3dd7a | 34 | //Setup Brown Out Interrupt |
12104404 | 23:455f7da3dd7a | 35 | NVIC_SetVector(BOD_IRQn, brownOutRoutine); |
12104404 | 23:455f7da3dd7a | 36 | //Enable Brown Out Interrupt |
12104404 | 23:455f7da3dd7a | 37 | NVIC_EnableIRQ(BOD_IRQn); |
12104404 | 6:0602a9e8118b | 38 | } |