📄 main.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -