请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:CC2630 Thread 中讨论的其他器件: Z-stack
工具/软件:TI-RTOS
您好!
我在 CC2630器件上运行的 TI-RTOS 之上安装了 Z-Stack 1.2.2a。 在 BIOS_start()之后;我执行以下代码段。 此时不执行 ZigBee 任务、仅执行以下 tirtos 函数。
/*获取重置的原因*/ uint32_t rsrc = SysCtrlResetSourceGet (); if (rsrc = RSTSRC_WAKEUP_FITH_SHUTDOWN){ board_led_control (board_led_type_LEDDGREEN、board_led_state_BLINK); ZStack_sysResetReq_t pReq; pReq.type = ZStack_ResetTypes_device; pREQ.newNWKSTATE = false; Zstackapi_sysResetReq (zswEntity、&pReq); } 否则{ PIN_setConfig (keyPinHandleSOS、PINCC26XX_BM_WAKEUP、Board_key_select | PINCC26XX_WAKEUP_NEGEDGE); POWER_SHUTDOWN (NULL); }
上电后、器件将正确进入 ELSE 路径并进入关断状态。 按下按钮后、LED 闪烁并复位、很明显再次(无限)进入 IF 路径。
我假设 sysReset 会发出软复位、如下 API 函数所示:
静态 bool processSysResetReq (iCall_EntityID srcEntityID、void *pMsg)
{zstackmsg_sysResetReq_t
*pReq =(zstackmsg_sysResetReq_t *)pMsg;
if (pReq ->pReq)
{
if (pREQ->pREQ->newNWKState)
{
zgWriteStartupOptions (ZG_STARTUP_SET、
ZCD_STARTOPT_DEFAULT_NETWORK_STATE | ZCD_STARTOPT_DEFAULT_CONFIG_STATE);
}
-->SystemResetSoft();
pReq->HDR.status = ZStack_ZStatusValues_ZSuccessess;
}
否则
{
pREQ->HDR.STATUS = ZStack_ZStatusValues_ZInvalidParameter;
}
返回(真);
}
以下 SystemResetSoft()最终会导致以下宏:
*(((uint32 *) 0x40082270)= 1;
基于这一点,我假设下次使用 SysCtrlResetSourceGet ()时,调用 reset 会返回 anthing,但 RSTSRC_WAKEUP_FLOW_FLOUT_SHUTDOWN 会输入 else 路径并再次进入 SHUTDOWN。
在我复位器件以清除复位源之前、我是否需要清除任何寄存器?
此致、
Stephanie