cc2541加AD采样后死机,jtag在线仿真时又不死机?
大家好
我的问题是:
没有加ad部分时,长期通讯是好的。但是当我把采样的任务打开后,通讯一段时间后必定死机
死机后测量晶振,是正常的32M,说明不是在休眠模式下。
CPU:CC2541
我用的是1.4.0的协议栈
是和Android手机的app通讯
采样的代码:
----初始化----
APCFG |= 0x03;//P0.0,P0.1
ADCCON1 = (ADCCON1 & ~(0x03<<4)) | (0x03<<4);//ADCCON1.ST = 1
----采样任务----
//ch=0和1,一秒读取一次
const uint8 c_ch_ADCCONMASK[4]={0x00,0x01,0x02,0x06};
void ReadChx(uint8 ch)
{
int16 timeout = 200;
int16 adc_result,temperature;
ADCCON3 = (0x02<<6) | (0x03<<4) | (c_ch_ADCCONMASK[ch]);
ADCCON1 |= 0x40;
while(( !(ADCCON1 & 0x80))&&(timeout--));
if( timeout > 0 )
{
adc_result = (ADCL >> 4);
adc_result |= (ADCH << 4);
temperature = R25_ChangeOM2Temprature(ChangeADCLH2OM(adc_result));//查表法,把码值转成电阻,再转成温度
Set_val(ch,temperature);//设置全局变量
}
}
还有一个奇怪的现象
当我用jtag在线仿真运行时,死机现象又消除了!
我查了电压,肯定电池供电时,电压是稳定的。
请专家帮忙回答一下:
1、我的ad初始化和读取有没有问题?
2、电池运行和jtag在线运行对CPU来讲有多少差别?为什么一个死机一个不死机?
搞定了,加
osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
osal_pwrmgr_device( PWRMGR_BATTERY );
就不死机了。
现在的问题是:
采样我通过示波器量,才340us,这都有死机风险?
那么自己的任务应该多少合适呢?
我界面刷新的任务1.5ms,有没有问题
请专家解答一下
Hi Lin,
这个表现为死机的应该是芯片进入了PM2/PM3模式,此时CPU已经不工作了。
osal_pwrmgr_device( PWRMGR_ALWAYS_ON );
osal_pwrmgr_device( PWRMGR_BATTERY );
其实就是关掉POWER_SAVING功能,让芯片不进入低功耗模式。是不影响Active的。