address SysTick erratum, which can hard-fault the chip
This commit is contained in:
parent
93d7f38d67
commit
d10fa223b2
@ -22,6 +22,8 @@
|
|||||||
* SOFTWARE.
|
* SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "hpl_systick_config.h"
|
||||||
|
|
||||||
#include "watch_extint.h"
|
#include "watch_extint.h"
|
||||||
|
|
||||||
// this warning only appears when you `make BOARD=OSO-SWAT-A1-02`. it's annoying,
|
// this warning only appears when you `make BOARD=OSO-SWAT-A1-02`. it's annoying,
|
||||||
@ -158,14 +160,19 @@ void watch_enter_sleep_mode(void) {
|
|||||||
// disable brownout detector interrupt, which could inadvertently wake us up.
|
// disable brownout detector interrupt, which could inadvertently wake us up.
|
||||||
SUPC->INTENCLR.bit.BOD33DET = 1;
|
SUPC->INTENCLR.bit.BOD33DET = 1;
|
||||||
|
|
||||||
|
// work around a silicon erratum by disabling the SysTick interrupt, which is
|
||||||
|
// enabled as part of driver init, before going to sleep.
|
||||||
|
SysTick->CTRL = SysTick->CTRL & ~(CONF_SYSTICK_TICKINT << SysTick_CTRL_TICKINT_Pos);
|
||||||
|
|
||||||
// disable all pins
|
// disable all pins
|
||||||
_watch_disable_all_pins_except_rtc();
|
_watch_disable_all_pins_except_rtc();
|
||||||
|
|
||||||
// enter standby (4); we basically hang out here until an interrupt wakes us.
|
// enter standby (4); we basically hang out here until an interrupt wakes us.
|
||||||
sleep(4);
|
sleep(4);
|
||||||
|
|
||||||
// and we awake! re-enable the brownout detector
|
// and we awake! re-enable the brownout detector and SysTick interrupt
|
||||||
SUPC->INTENSET.bit.BOD33DET = 1;
|
SUPC->INTENSET.bit.BOD33DET = 1;
|
||||||
|
SysTick->CTRL = SysTick->CTRL | (CONF_SYSTICK_TICKINT << SysTick_CTRL_TICKINT_Pos);
|
||||||
|
|
||||||
// call app_setup so the app can re-enable everything we disabled.
|
// call app_setup so the app can re-enable everything we disabled.
|
||||||
app_setup();
|
app_setup();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user