打印
[Atmel]

跑一下SAM4N例程(十一):WDT中断

[复制链接]
847|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
打开WDT例程很方使,可以在有开发板和无开发板的情况下都可以打开。

以下是打开后的截图:



这个例程是这样,先配置好串口和看门狗定时及LED管脚定义。

/**
*  \brief Handler for System Tick interrupt.
*/
void SysTick_Handler(void)
{
        /* Set systick event flag (g_b_systick_event) and add 1 to systick. */
        g_b_systick_event = true;
        g_ul_ms_ticks++;
}

/**
*  \brief Handler for watchdog interrupt.
*/
void WDT_Handler(void)
{
        puts("Enter watchdog interrupt.\r");

        /* Clear status bit to acknowledge interrupt by dummy read. */
        wdt_get_status(WDT);
        /* Restart the WDT counter. */
        wdt_restart(WDT);
        puts("The watchdog timer was restarted.\r");
}

/**
*  \brief Handler for Button 1 rising edge interrupt.
*/
static void button_handler(uint32_t id, uint32_t mask)
{
        /* Set button event flag (g_b_button_event). */
        if ((PUSHBUTTON_ID == id) && (PUSHBUTTON_MASK == mask)) {
                g_b_button_event = true;
        }
}

/**
*  \brief Configure the Console UART.
*/
static void configure_console(void)
{
        const usart_serial_options_t uart_serial_options = {
                .baudrate = CONF_UART_BAUDRATE,
#ifdef CONF_UART_CHAR_LENGTH
                .charlength = CONF_UART_CHAR_LENGTH,
#endif
                .paritytype = CONF_UART_PARITY,
#ifdef CONF_UART_STOP_BITS
                .stopbits = CONF_UART_STOP_BITS,
#endif
        };

        /* Configure console UART. */
        sysclk_enable_peripheral_clock(CONSOLE_UART_ID);
        stdio_serial_init(CONF_UART, &uart_serial_options);
}

/**
*  \brief Configure the Pushbutton.
*/
static void configure_button(void)
{
        /* Enable the peripheral clock for the push button on board. */
        pmc_enable_periph_clk(PUSHBUTTON_ID);

        /* Configure PIOs as input pins. */
        pio_configure(PUSHBUTTON_PIO, PUSHBUTTON_TYPE, PUSHBUTTON_MASK,
                        PUSHBUTTON_ATTR);

        /* Adjust PIO debounce filter parameters. */
        pio_set_debounce_filter(PUSHBUTTON_PIO, PUSHBUTTON_MASK,
                        PUSHBUTTON_FILTER_GLITCH_VAULE);

        /* Initialize PIO interrupt handler, interrupt on rising edge. */
        pio_handler_set(PUSHBUTTON_PIO, PUSHBUTTON_ID, PUSHBUTTON_MASK,
                        PUSHBUTTON_ATTR, button_handler);
}

/**
*  \brief Configure LED.
*/
static void configure_led(void)
{
        /* Configure PIOs for LED. */
        pio_configure(LED_PIO, LED_TYPE, LED_MASK, LED_ATTR);
}



然后正常喂狗
 /* Restart watchdog at the given period. */
                        if ((g_ul_ms_ticks % WDT_RESTART_PERIOD) == 0) {
                                wdt_restart(WDT);
                        }




当有用户按键时,这时就破坏了喂狗,这时转向看门狗的中断程序。

/* Simulate deadlock when button is pressed. */
                if (g_b_button_event == true) {
                        puts("Program enters infinite loop for triggering watchdog interrupt.\r");
                        while (1) {
                        }
                }
最后进入看门狗中断程序:

 */
void WDT_Handler(void)
{
        puts("Enter watchdog interrupt.\r");

        /* Clear status bit to acknowledge interrupt by dummy read. */
        wdt_get_status(WDT);
        /* Restart the WDT counter. */
        wdt_restart(WDT);
        puts("The watchdog timer was restarted.\r");
}


相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2398

主题

6948

帖子

66

粉丝