打印

28335的can问题

[复制链接]
1335|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
thf2008|  楼主 | 2009-10-30 14:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
CAN, eCAN, TE, TI, AD
瑞泰ICETEK-28335-A的can例程里面
  ECanaShadow和   ECanaRegs是相同结构的
ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;
    ECanaShadow.CANTIOC.bit.TXFUNC = 1;
    ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all;
这段句子的意思不清楚,
eCAN control registers require 32-bit access.
    // If you want to write to a single bit, the compiler may break this
    // access into a 16-bit access.  One solution, that is presented here,
    // is to use a shadow register to force the 32-bit access.
     
    // Read the entire register into a shadow register.  This access
    // will be 32-bits.  Change the desired bit and copy the value back
    // to the eCAN register with a 32-bit write.
   
    // Configure the eCAN RX and TX pins for eCAN transmissions
这段注解比较难理解,大家有做过这个的没?2812这个模块应该和28335差不多,哪位高手能解答下啊~

相关帖子

沙发
linhai2009| | 2009-10-30 14:58 | 只看该作者
这个是32位操作所导致的
eCAN寄存器需要同时改变32位,才能正确设置。所以需要定义一个ECanaShadow。
ECanaShadow.CANTIOC.all = ECanaRegs.CANTIOC.all;这一句是获取当前的CANTIOC
    ECanaShadow.CANTIOC.bit.TXFUNC = 1;这一句是改变TXFUNC位
    ECanaRegs.CANTIOC.all = ECanaShadow.CANTIOC.all;这一句是将改变后的寄存器值(包含未改变的,总共是32位),同时回写。

假如直接这样写ECanaRegs.CANTIOC.bit.TXFUNC = 1,是不允许的。

使用特权

评论回复
板凳
thf2008|  楼主 | 2009-11-1 09:46 | 只看该作者
谢谢啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

221

主题

2024

帖子

2

粉丝