主题中讨论的其他器件:CC1310
#define TIMEOUT_MS 1000
#define SLEEP_US 500000
/*
*=========== WatchdogCallback =========
*/
void watchdogCallback (uintptr_t watchdogHandle)
{
/*
*如果调用看门狗不可屏蔽的中断(NMI),
*循环,直到设备复位。 一些器件将调用
*在看门狗过期时进行此回调,而其他人将
*重置。 请参阅特定于器件的看门狗驱动程序文档
*您的设备。
*
*/
GPIO_WRITE (Board_GPIO_LED1、BOARD_GPIO_LED_ON);
// while (1){}
}
/*
*=========== gpioButtonIsr =========
*/
void gpioButtonIsr (uint_least8_t index)
{
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
/*
*模拟应用程序被卡在 ISR 中。 此 ISR 可用于
*被看门狗不可屏蔽中断(NMI)抢占。
*/
while (1){}
}
/*
*=========== 主线程====
*/
void *mainThread (void *arg0)
{
Watchdog_Handle WatchdogHandle;
Watchdog_Params 参数;
uint32_t reloadValue;
/*调用驱动程序初始化函数*/
GPIO_init ();
watchdog_init();
/*配置 LED 和按钮引脚*/
GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig (Board_GPIO_LED1、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW);
GPIO_setConfig (Board_GPIO_BUTTON0、GPIO_CFG_IN_pu | GPIO_CFG_IN_INT_FALLING);
GPIO_setCallback (Board_GPIO_BUTTON0、gpioButtonIsr);
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_OFF);
GPIO_WRITE (Board_GPIO_LED1、Board_GPIO_LED_OFF);
usleep (sleep_US);
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
GPIO_WRITE (Board_GPIO_LED1、BOARD_GPIO_LED_ON);
usleep (sleep_US);
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_OFF);
GPIO_WRITE (Board_GPIO_LED1、Board_GPIO_LED_OFF);
usleep (sleep_US);
/*打开看门狗驱动程序实例*/
Watchdog_Params_(参数(&P);
params.callbackFxn =(Watchdog_Callback)看门狗回调;
params.debugStallMode = Watchdog_debug_staller_on;
params.resetMode = Watchdog_reset_on;
WatchdogHandle = Watchdog_open (Board_WATCHDOG0、¶ms);
if (watchdogHandle == NULL){
/*打开看门狗时出错*/
while (1){}
}
/*
*看门狗重新加载值在
* Watchdog_open()调用。 重载值也可以使用 HyperKnob
*运行时动态设置。
*
*将 TIMEOUT_MS 转换为看门狗时钟节拍。
*此 API 并非适用于所有设备。
*请参阅特定于设备的看门狗驱动程序文档
*您的设备。
*/
reloadValue = Watchdog_convertMsToTicks (watchdogHandle、timeout_MS);
/*
*值为零(0)表示转换后的值超过了32位
*或 API 不适用于此特定设备。
*/
if (reloadValue !=0){
WATCHDOG_setReload (watchdogHandle、reloadValue);
}
/*打开 Board_GPIO_LED0并启用 Board_GPIO_BUTTON0中断*/
GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON);
GPIO_enableInt (Board_GPIO_BUTTON0);
while (1){
/*
*禁用电源策略将阻止设备进入
低功耗状态。 当 CPU 处于活动状态或处于活动状态时、
*空闲。
*/
power_disablePolicy();
/*在清除看门狗之前休眠 SLEEP_US */
usleep (sleep_US);
WATCHDOG_CLEAR (watchdogHandle);
GPIO_toggle (Board_GPIO_LED0);
/*
*启用电源策略将允许设备进入低电平
* CPU 空闲时的电源状态。 如何使用看门狗外设
*在低功耗状态下的行为是特定于设备的。
*/
power_enablePolicy();
/*在清除看门狗之前休眠 SLEEP_US */
usleep (sleep_US);
WATCHDOG_CLEAR (watchdogHandle);
GPIO_toggle (Board_GPIO_LED0);
}
}