chenjiawei7 发表于 2014-2-7 16:19:44

请教XS128MAL的CAN接收问题(已解决)

本帖最后由 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;
      }
    }   

FSL_TICS_ZJJ 发表于 2014-2-7 17:22:21

你好,请问你用的PE里面是否带有CAN 模块的典型应用,你可以通过选中CAN模块,右击help查看。如果有,建议你先按照典型应用程序配置与调试。
一般情况下,CW是不会对部分模块进行限制的,如果有license,应该是都可以使用的。
页: [1]
查看完整版本: 请教XS128MAL的CAN接收问题(已解决)