ECAN模块学习

## 前提说明:

  本实验基于28335进行

## 难点1:ECAN模块数据发送

  简述:CAN通过邮箱进行数据发送,一次可以发送8个字节的数据。

      在DSP28335的ECAN模块中将这8个字节数据分为DL(低4字节) 和 DH(高4字节)

      可以在程序中对其进行先后赋值,如:

ECanbMboxes.MBOX0.MDL.all = 0x0000001;//
ECanbMboxes.MBOX0.MDH.all = 0x0000002;//

那么此时数据如下图所示(这里的高4字节和低四字节是反的,这个仍然需要进一步研究):     

从图中可以看出当DBO = 0时,8个字节正常赋值。                                              

                                                                                       

第二种情况,当DBO = 1时,如下图所以:

                                                                                         

总结:DBO = 0,假设此时MDL = 0x00000001,那么发送的时候MDL就是0x00000001;

     当DBO = 1,那么发送的时候MDL就是0x10000000;

          

 ## 难点2:ECAN模块ID设置

  简述:CAN通讯中有好几种类型的帧数据,这里只说一种--------》数据帧

    数据帧根据ID长度不同又分为

      1. 标准帧

        - ID长度为11位

      2. 扩展帧

         - ID长度位28位

    说明:扩展帧如果要在程序中使用的话需要将MSGID的IDE位置为1,才能起效,否则扩展帧无效,请参考图:

                                                          

 

                                                                     

## ECAN 模块学习总结:

### ECAN发送数据程序配置步骤:

  1. 配置GPIO

    2. 配置邮箱

        2.1 邮箱ID配置

        2.2 邮箱类型配置(是作为发送邮箱还是接收邮箱)

        2.3 邮箱使能

        2.4 邮箱单次发送的数据量DLC(如:8个字节)

        2.5 邮箱是否为远程帧设置

        2.6 邮箱数据填充

          如果该邮箱为发送邮箱的话,需要提前准备数据(MDL,MDH)

          补充这里的MDL,MDH设置之后,发送出去的数据用USB-CAN适配器检测到的数据是MDL,和MDH相反的,这个

          仍然没有找出原因,需要注意一下。

       2.7 邮箱中断掩码设置

        

   3. 波特率设置

            需要按照一定的顺序开启和关闭CCR和CCE,如下图所示:

                                     

    4. ECAN模式配置

      如:自测模式,正常模式

    5. 开始发送数据  

      5.1 邮箱发送使能

        ECanbRegs.CANTRS.bit.TRS0 = 1;//邮箱0发送使能

      5.2 等待发送完成标志位被置1

        while(ECanbRegs.CANTA.all != 0x00000001 ) {}  // Wait for all TAn bits to be set..
     5.3 清除标志位
        ECanbRegs.CANTA.all = 0x00000001;//0x0000FFFF;   // Clear all TAn    清除所有TA

    

    

  

Fist day
原文地址:https://www.cnblogs.com/NULL-ROOT/p/11727103.html