main.c

来自「看门狗例子程序 ARM 1138 开发板例子」· C语言 代码 · 共 66 行

C
66
字号
#include  "systemInit.h"
#include  "watchdog.h"


//  定义LED
#define  LED_PERIPH             SYSCTL_PERIPH_GPIOG
#define  LED_PORT               GPIO_PORTG_BASE
#define  LED_PIN                GPIO_PIN_2


//  LED初始化
void ledInit(void)
{
    SysCtlPeriEnable(LED_PERIPH);                           //  使能LED所在的GPIO端口
    GPIOPinTypeOut(LED_PORT, LED_PIN);                      //  设置LED所在管脚为输出
    GPIOPinWrite(LED_PORT, LED_PIN, 0xFF);                  //  熄灭LED
}


//  看门狗初始化
void wdogInit(void)
{
    unsigned long ulValue = 350 * (TheSysClock / 3000);     //  准备定时350ms

    SysCtlPeriEnable(SYSCTL_PERIPH_WDOG);                   //  使能看门狗模块
    WatchdogResetEnable(WATCHDOG_BASE);                     //  使能看门狗复位功能
    WatchdogStallEnable(WATCHDOG_BASE);                     //  使能调试器暂停看门狗计数
    WatchdogReloadSet(WATCHDOG_BASE, ulValue);              //  设置看门狗装载值
    WatchdogEnable(WATCHDOG_BASE);                          //  使能看门狗
    WatchdogLock(WATCHDOG_BASE);                            //  锁定看门狗
}


//  喂狗操作
void wdogFeed(void)
{
    WatchdogIntClear(WATCHDOG_BASE);                        //  清除中断状态,即喂狗操作

    GPIOPinWrite(LED_PORT, LED_PIN, 0x00);                  //  点亮LED
    SysCtlDelay(10 * (TheSysClock / 3000));                 //  延时约10ms
    GPIOPinWrite(LED_PORT, LED_PIN, 0xFF);                  //  熄灭LED
}


//  主函数(程序入口)
int main(void)
{
    jtagWait();                                             //  防止JTAG失效,重要!
    clockInit();                                            //  时钟初始化:晶振,6MHz
    ledInit();                                              //  LED初始化

    GPIOPinWrite(LED_PORT, LED_PIN, 0x00);                  //  点亮LED,表明已复位
    SysCtlDelay(1000 * (TheSysClock / 3000));
    GPIOPinWrite(LED_PORT, LED_PIN, 0xFF);                  //  熄灭LED
    SysCtlDelay(1000 * (TheSysClock / 3000));

    wdogInit();                                             //  看门狗初始化

    for (;;)
    {
        wdogFeed();                                         //  喂狗,每喂一次LED闪一下
        SysCtlDelay(150 * (TheSysClock / 3000));            //  延时过长会导致看门狗复位
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?