TI中文支持网
TI专业的中文技术问题搜集分享网站

cc2530 zstack home 1.2.2a 低功耗模式PM2串口无法正常工作

if (events & ZCL_DEVICE_OPEN_DOOR_EVENT) {
osal_pwrmgr_task_state(zclOnOffLight_TaskID, PWRMGR_HOLD);
osal_pwrmgr_device(PWRMGR_ALWAYS_ON);
uint8 writedatalen = 0;
PERCFG = 0x00;
P0SEL |= BV(3); //TX
P0DIR |= BV(3);
P0INP &= ~BV(3);
P2INP &= ~BV(3);

// HalUARTResume();

// HalUARTResume();
DelayMS2(20);//20ms
U0UCR |= BV(7);
// MicroWait(10000);
writedatalen = HalUARTWrite(0,u8_zbOpenDoorBuf,6);
// DelayMS2(100);
// MicroWait(60000);
if ( writedatalen == 6 )
{
// HalUARTSuspend();
opendoorlockcount = 0;
// osal_pwrmgr_device(PWRMGR_ALWAYS_ON);
// osal_pwrmgr_device(PWRMGR_BATTERY);
osal_start_timerEx(zclOnOffLight_TaskID,
ZCL_DEVICE_WEEK_UP_IO_EVENT,
10000);
osal_pwrmgr_task_state(zclOnOffLight_TaskID, PWRMGR_CONSERVE);
osal_pwrmgr_device(PWRMGR_BATTERY);
}

}

本意唤醒CPU后,HOLD住电源,让串口发送数据,但发送数据不完整

Viki Shi:

低功耗下32M晶振关闭,确实会影响串口功能;“本意唤醒CPU后,HOLD住电源,让串口发送数据,但发送数据不完整”是指唤醒后串口还不正常吗?建议唤醒后等待一段时间再发送

Sleeping Forest:

回复 Viki Shi:

已经加了延时的,这是我后面注释掉的,20ms串口还醒不来?

斌斌有礼:

我不知道我们是否是一样的情况,如果你这个事件ZCL_DEVICE_OPEN_DOOR_EVENT是在中断函数里osal_start_timerEx的 那么就会因为休眠对程序有影响。解决方法就是在中断函数里采用osal_set_event这个函数开始一个事件,在这个事件里在开始这个事件

Sleeping Forest:

回复 斌斌有礼:

不是,这个是在接收命令的时候调用的事件,中断没关系,中断和OSAL_START_TIMEREX都可以让CPU醒来,操作就在事件里hold住电源就好。中断里用EX会有影响?

斌斌有礼:

回复 Sleeping Forest:

如果是从PM3模式唤醒的,在中断函数里使用OSAL_START_TIMEREX会有影响

user4381970:

pm2就是不能用串口的,跟事件没有关系,需要外部中断唤醒pm2之后串口数据才能完整。只有使用单独的io设置外部中断唤醒,也可以吧rx引脚设置成外部中断唤醒,这样串口通信的前几个字节是用来唤醒的,后面数据是完整的

赞(0)
未经允许不得转载:TI中文支持网 » cc2530 zstack home 1.2.2a 低功耗模式PM2串口无法正常工作
分享到: 更多 (0)