主题中讨论的其他部件:C2000WARE
在第2074页的《技术参考手册》中,有以下注意事项:
CAN模块使用特殊的寻址方案来支持字节访问。 这与USB模块上使用的地址相同。
为便于使用,建议只对CAN寄存器进行32位访问。 但是,在较高的优化级别,编译器可能会将32位访问拆分为两个连续的16位访问,这将破坏寄存器值。 正在开发一个编译器修复程序。 同时,可以使用16位访问作为变通办法。 较低的16位应写入寄存器的地址,而较高的16位应写入寄存器的地址加2。
然后在第2097页上有以下注意事项:
只允许32位访问CAN寄存器,因为16位访问可能无法按预期工作。
此外,在CAN控制套件中,我找到了带有以下标题的文件CAN.c:
//文件: ccan.c
//
//标题: F2807x CAN初始化和支持功能。
//
//注:CAN总线桥接器使用不同的编址方案来实现
// 允许字节访问。 因此,可以执行32位读/写操作
// 在较高的优化水平下异常。 CAN驱动器功能正常
// 已调整为显式使用两个16位读/写访问
// 完整的32位寄存器,其中HWREGH (BASE + OFFSET)表示
// 下部16位和HWREGH (BASE + OFFSET +2)代表上部
// 16位。
但是,在文件CAN.c中,我发现许多行中可以使用32位访问权限读取CAN寄存器。
所以我有点困惑。
如何访问CAN寄存器?
我是否应该在书写和阅读中都只使用16位访问?
我是否应该在写入时使用16位访问和在读取时使用32位访问?
如果我使用16位访问,并且中断位于同一寄存器的较低16位访问和较高16位访问之间,那么数据传输是否会损坏?
我是否应该禁用中断,以便16位下访问和16位上访问严格地按顺序进行?