Skip to content

Commit 04053f9

Browse files
committed
pbio/drv/reset/reset_ev3: Implement reset via watchdog timer
1 parent 49f716f commit 04053f9

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

lib/pbio/drv/reset/reset_ev3.c

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@
1010
#include <pbdrv/reset.h>
1111
#include <pbdrv/gpio.h>
1212

13+
#include <tiam1808/hw/hw_types.h>
14+
#include <tiam1808/hw/soc_AM1808.h>
15+
#include <tiam1808/timer.h>
16+
1317
#include "../drv/gpio/gpio_ev3.h"
1418

1519
#include <tiam1808/hw/hw_syscfg0_AM1808.h>
1620

21+
#define BOOTLOADER_UPDATE_MODE_ADDR 0xFFFF1FFC
22+
#define BOOTLOADER_UPDATE_MODE_VALUE 0x5555AAAA
23+
1724
static const pbdrv_gpio_t poweroff_pin = PBDRV_GPIO_EV3_PIN(13, 19, 16, 6, 11);
1825

1926
void pbdrv_reset_init(void) {
@@ -23,17 +30,31 @@ void pbdrv_reset_init(void) {
2330
void pbdrv_reset(pbdrv_reset_action_t action) {
2431
for (;;) {
2532
switch (action) {
26-
case PBDRV_RESET_ACTION_RESET_IN_UPDATE_MODE:
27-
// TODO
33+
case PBDRV_RESET_ACTION_POWER_OFF:
34+
pbdrv_reset_power_off();
2835
break;
29-
// TODO: implement case PBDRV_RESET_ACTION_RESET
36+
case PBDRV_RESET_ACTION_RESET_IN_UPDATE_MODE:
37+
*(volatile uint32_t *)BOOTLOADER_UPDATE_MODE_ADDR = BOOTLOADER_UPDATE_MODE_VALUE;
38+
// Fall through
3039
default:
40+
// PBDRV_RESET_ACTION_RESET
41+
42+
// Configure watchdog timer
43+
TimerDisable(SOC_TMR_1_REGS, TMR_TIMER_BOTH);
44+
TimerConfigure(SOC_TMR_1_REGS, TMR_CFG_64BIT_WATCHDOG);
45+
TimerPeriodSet(SOC_TMR_1_REGS, TMR_TIMER12, 0);
46+
TimerPeriodSet(SOC_TMR_1_REGS, TMR_TIMER34, 0);
47+
TimerWatchdogActivate(SOC_TMR_1_REGS);
48+
49+
// Poke the watchdog timer with a bad value to immediately trigger it
50+
HWREG(SOC_TMR_1_REGS + TMR_WDTCR) = 0;
3151
break;
3252
}
3353
}
3454
}
3555

3656
pbdrv_reset_reason_t pbdrv_reset_get_reason(void) {
57+
// There is no easy way to determine the reset reason on this platform
3758
return PBDRV_RESET_REASON_NONE;
3859
}
3960

0 commit comments

Comments
 (0)