现在CC2541 BLE_Bridge这个项目做得差不多了,但是还有一些问题:
在设置蓝牙名重启时,调用HAL_SYSTEM_RESET(),会因为看门狗而不能重启,进入死机状态。
#define WD_EN BV(3)
#define WD_MODE BV(2)
#define WD_INT_1900_USEC (BV(0) | BV(1))
#define WD_RESET1 (0xA0 | WD_EN | WD_INT_1900_USEC)
#define WD_RESET2 (0x50 | WD_EN | WD_INT_1900_USEC)
#define WD_KICK() st( halIntState_t _s; HAL_ENTER_CRITICAL_SECTION(_s); WDCTL = (0xA0 | WDCTL & 0x0F); WDCTL = (0x50 | WDCTL & 0x0F); HAL_EXIT_CRITICAL_SECTION(_s);)
#define WD_INIT_1000MS() st( WDCTL = 0x00; WDCTL |= 0x08; ) //间隔时间为1000MS的看门狗启动
/* disable interrupts, set watchdog timer, wait for reset */
#define HAL_SYSTEM_RESET() st( HAL_DISABLE_INTERRUPTS(); WDCTL = WD_RESET1; WDCTL = WD_RESET2; for(;;); )
在代码中,初始化看门狗用WD_INIT_1000MS()这个函数,在void osal_start_system( void )函数中,调用WD_KICK()来喂狗,但在执行HAL_SYSTEM_RESET()时会死机,麻烦分析一下问题何在?