|
本帖最后由 FSL_TICS_ZP 于 2014-3-4 13:11 编辑
我正在编写一个检测仪表,传感器探头发出的是CAN消息,软件环境是CW+PE。之前做过的测试程序还挺正常,当我正式编写程序的时候遇到了问题:我想实时检测CAN接收标志位,目的是间接监测我的传感器硬件是否正常连线。我每次读完CAN0RFLG_RXF(定时中断0.25s执行一次)以后都主动重新给它置位,可是我发现无论是否插入传感探头,都会进入读标错误累加,不走正常分支。
另,我怀疑该错误的出现存在三种可能性:1、我曾经使用PE自动初始化CAN模块,但一直报错;后联系了freescale的SAE,给我一个license,但还是存在错误。于是CAN部分我自己配置了寄存器,现在我依然怀疑是软件权限的问题(codewarrior锁了CAN部分)。
2、每次清标志位前必须读出数据帧,只读标志位是无效操作?我正在确认该种情况。
3、我的程序思路本身存在问题。
期待高手解答我的困惑,共同交流!
如下是我的相关程序段:
while(CAN_Wait_Flag) //检测循环,正常情况下探头每1s上传一次数据
{
if(CAN_check_flag) //定期执行CAN信号检测,CAN_check_flag来自定时中断
{
if(CAN0RFLG_RXF)
{
CAN_error=0; //收到信号即时清零
}
else
{
CAN_error++;
}
CAN_check_flag=0;
CAN0RFLG_RXF=1; //清标志位
}
if(CAN_error>8) //连续丢失8次信号判断为CAN信号丢失,程序从头开始执行
{
Display(tab8);//
Cpu_Delay100US(30000);//
CAN_Wait_Flag=0; //退出检测循环
CAN_Receive_Error=1; //略过报文解析环节
}
if(timer>24) //正常等待期间,0.25s累加一次,程序正常向下执行
{
Display(tab9);//
Cpu_Delay100US(30000);//
timer=0;
CAN_error=0;
CAN_Wait_Flag=0;
}
} |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|