打印
[CC3200]

CC3200 看门狗应用

[复制链接]
694|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
概述
当超时值到达时, 看门狗定时器产生一个中断或复位。看门狗定时器用于当操作系统由
于软件错误或在预期的时间内外部设备回应失败时的重新控制。  

使用特权

评论回复
评论
dirtwillfly 2019-8-3 20:47 回复TA
感谢分享 

相关帖子

沙发
gaoke231|  楼主 | 2019-7-31 18:31 | 只看该作者
看门狗定时器有以下特点:
(1) 带有一个可编程加载寄存器的 32 位计数器;
(2) 可编程中断可以产生中断屏蔽逻辑;
(3) 调试期间,当微控制器维护 CPU 停止时, User-enabled 停滞。

使用特权

评论回复
板凳
gaoke231|  楼主 | 2019-7-31 18:31 | 只看该作者
应用说明
这个应用程序展示了看狗定时器(WDT)DriverLib 的 API 的使用, 是为了展示当系统失
败时看门狗定时器的复位功能, 在这里, 10 个计数值后没有清除看门狗中断,本质上是模
拟系统故障的状况。 看门狗定时器到期时, 清除中断, LED 灯作出相应闪烁指示,十次之后,
中断没有被清除, LED 灯常亮一段时间,表明系统复位。系统复位又会导致应用程序的执行。

使用特权

评论回复
地板
gaoke231|  楼主 | 2019-7-31 18:32 | 只看该作者
原理图如下

使用特权

评论回复
5
gaoke231|  楼主 | 2019-7-31 18:33 | 只看该作者
volatile tBoolean g_bFeedWatchdog = true;
volatile unsigned long g_ulWatchdogCycles;

#if defined(ccs)
extern void (* const g_pfnVectors[])(void);
#endif
#if defined(ewarm)
extern uVectorEntry __vector_table;
#endif

使用特权

评论回复
6
gaoke231|  楼主 | 2019-7-31 18:33 | 只看该作者
void WatchdogIntHandler(void)
{
    //
    // If we have been told to stop feeding the watchdog, return immediately
    // without clearing the interrupt.  This will cause the system to reset
    // next time the watchdog interrupt fires.
    //
    if(!g_bFeedWatchdog)
    {
        return;
    }
    //
    // After 10 interrupts, switch On LED6 to indicate system reset
    // and don't clear watchdog interrupt which causes system reset
    //
    if(g_ulWatchdogCycles >= 10)
    {
        GPIO_IF_LedOn(MCU_RED_LED_GPIO);
        MAP_UtilsDelay(800000);
        return;
    }
    //
    // Clear the watchdog interrupt.
    //
    MAP_WatchdogIntClear(WDT_BASE);
    GPIO_IF_LedOn(MCU_RED_LED_GPIO);
    MAP_UtilsDelay(800000);
    GPIO_IF_LedOff(MCU_RED_LED_GPIO);
    //
    // Increment our interrupt counter.
    //
    g_ulWatchdogCycles++;

}

使用特权

评论回复
7
gaoke231|  楼主 | 2019-7-31 18:33 | 只看该作者
static void
BoardInit(void)
{
/* In case of TI-RTOS vector table is initialize by OS itself */
#ifndef USE_TIRTOS
  //
  // Set vector table base
  //
#if defined(ccs)
    MAP_IntVTableBaseSet((unsigned long)&g_pfnVectors[0]);
#endif
#if defined(ewarm)
    MAP_IntVTableBaseSet((unsigned long)&__vector_table);
#endif
#endif
    //
    // Enable Processor
    //
    MAP_IntMasterEnable();
    MAP_IntEnable(FAULT_SYSTICK);

    PRCMCC3200MCUInit();
}

使用特权

评论回复
8
gaoke231|  楼主 | 2019-7-31 18:34 | 只看该作者
void main(void)
{
    tBoolean bRetcode;
    //
    // Initialize the board
    //
    BoardInit();
    //
    // Pinmuxing for LEDs
    //
    PinMuxConfig();
    //
    // configure RED LED
    //
    GPIO_IF_LedConfigure(LED1);

    GPIO_IF_LedOff(MCU_RED_LED_GPIO);

    //
    // Set up the watchdog interrupt handler.
    //
    WDT_IF_Init(WatchdogIntHandler, MILLISECONDS_TO_TICKS(WD_PERIOD_MS));
   
    bRetcode = MAP_WatchdogRunning(WDT_BASE);
    if(!bRetcode)
    {
       WDT_IF_DeInit();
    }

    //
    // Loop forever while the LED winks as watchdog interrupts are handled.
    //
    while(FOREVER)
    {

    }
}

使用特权

评论回复
9
gaoke231|  楼主 | 2019-7-31 18:34 | 只看该作者
#include "pinmux.h"
#include "hw_types.h"
#include "hw_memmap.h"
#include "hw_gpio.h"
#include "pin.h"
#include "gpio.h"
#include "prcm.h"

//*****************************************************************************
void PinMuxConfig(void)
{
        //
    // Enable Peripheral Clocks
    //
        PRCMPeripheralClkEnable(PRCM_GPIOA3, PRCM_RUN_MODE_CLK);

        //
    // Configure PIN_53 for GPIO Output
    //
        PinTypeGPIO(PIN_53, PIN_MODE_0, false);
        GPIODirModeSet(GPIOA3_BASE, 0x40, GPIO_DIR_MODE_OUT);
}

使用特权

评论回复
10
xinxianshi| | 2019-7-31 22:23 | 只看该作者
分享这么多,疯了。

使用特权

评论回复
11
parameters| | 2019-8-6 14:43 | 只看该作者
感谢楼主分享!了解学习一下

使用特权

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

本版积分规则

54

主题

1310

帖子

5

粉丝