aressos 你的看法有个人獨到之處, 冇錯CAN总线是用硬件的方式实现了一些煩復软件的处理, 节省了CPU开销罢了,但實際上它也有工作是软件不能做到的,例如再同步處理 (hard re-synchronization), 总线仲裁(bus arbitration) 等.
asker_dfr 你的问题是比較花時處理, 原因是你不明白CAN是什麽,首先你要先了解CAN的格式和協議後,才能明白那些記存器的應用o
在S12DP256的記存器
x=0,1,2,3,4
y=0,1,2,3,4,5,6,7
z=0...0xc
CANxIDARy = Acceptance Register
CANxIDMRy = Mask Register
CANxTFLG = 讀取CANtx 可用緩沖區 (3个其中一个)
CANxTBSEL = 選用CANtx 可用緩沖區
CANxBTR0= Bus Timing (RJW + CAN clock)
CANxBTR1= Bus Timing (Prog+PS1+PS2)
CANxCTL0= CAN module 控制記存器
CANxCTL1= CAN module 控制記存器
CANxTXFGz= 緩沖區
而你的code 不知道在何處抄出來o
1. Filter 的工用就不見,因為所有CANxIDMRy都是$ff.
2. CANxIDAC=0x20 // Eight 8 bit Acceptance Filters
3. Message ID
CANxIDAR0=01;
CANxIDAR1=00;
CANxIDAR2=04;
CANxIDAR3=08;
看來應是CAN2.0A吧?都應是CAN2.0A 因為Filter 都是8位.但不知道為什麽作者又把CANxIDAR2和CANxIDAR3也有data.真是莫明奇妙! 可否解答?
4. CAN receiver 中斷什麽也沒有,最少也該有中斷設置,如果沒有中斷設置,程式永遠循环在CAN中斷.
[建议]
1. 先看CAN 規格.
2. 了解後再看S12DP256規格
3. 然後才看這段程式
4. 问题可迎刃而解
[em27] |