diff --git a/atusb/fw/board.c b/atusb/fw/board.c index bf96ea4..82c8a04 100644 --- a/atusb/fw/board.c +++ b/atusb/fw/board.c @@ -61,6 +61,12 @@ void reset_rf(void) } +void reset_cpu(void) +{ + WDTCSR = 1 << WDE; +} + + uint8_t read_irq(void) { return PIN(IRQ_RF); @@ -90,6 +96,13 @@ void panic(void) void board_init(void) { + /* Disable the watchdog timer */ + + MCUSR = 0; /* Remove override */ + WDTCSR |= 1 << WDCE; /* Enable change */ + WDTCSR = 1 << WDCE; /* Disable watchdog while still enabling + change */ + /* We start with a 1 MHz/8 clock. Disable the prescaler. */ CLKPR = 1 << CLKPCE; diff --git a/atusb/fw/board.h b/atusb/fw/board.h index 988e94c..50852bc 100644 --- a/atusb/fw/board.h +++ b/atusb/fw/board.h @@ -63,6 +63,7 @@ void reset_rf(void); +void reset_cpu(void); uint8_t read_irq(void); void led(int on); diff --git a/atusb/fw/ep0.c b/atusb/fw/ep0.c index 78695c9..e456be5 100644 --- a/atusb/fw/ep0.c +++ b/atusb/fw/ep0.c @@ -82,12 +82,10 @@ static int my_setup(const struct setup_request *setup) usb_send(&eps[0], buf+i, size, NULL, NULL); return 1; -#ifdef NOTYET case ATUSB_TO_DEV(ATUSB_RESET): debug("ATUSB_RESET\n"); - RSTSRC = SWRSF; + reset_cpu(); while (1); -#endif case ATUSB_TO_DEV(ATUSB_RF_RESET): debug("ATUSB_RF_RESET\n");