This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我有CPU2在1MHz高精度时钟上处理Cana IO。 我正在处理一个2016 Mac工作簿,该工作簿在Parallels之上托管Windows 10安装。
要测试通信, 我使用的是PCASN-USB Pro和PCAN-Viewer。 我让PCAN查看器每隔1毫秒发送一条消息。 我注册了16个CAN对象(8 Rx,8 TX)。 其中我只使用了2。 PC到C2000的消息ID为0x200.0002万。 响应消息ID为0x100万。
下面是我想知道的问题:我 找到偶尔错过的消息(按10^5的顺序为2-6)。 我觉得奇怪的是,当我将CAN消息接收置于ISR上,接收状态中断并累积它们时,我会得到每个入站消息的状态中断,但是,我不会得到接收数据的消息对象的中断。 我认为排除测试作为错误源是合理的,因为接收状态中断始终与测试硬件/软件发送的消息数一致。 在什么情况下可以获得状态中断,但不能获得消息中断?
我尝试了几种方法来进一步确定问题的特点:
—在每次发生接收状态中断时,向CAN核心查询所有接收到的消息。
—禁用接收中断,并查询主循环中的CAN核心。
—将传输速率更改为2毫秒。
发送10^6条消息@ 2毫秒后,我没有显示丢失消息。 所以问题似乎与时间有关。 理论上,我应该能够每秒发送8K消息。 因此,总线应仅在25 % 的时间内处于繁忙状态。
我希望更好地了解这种情况如何发生,以及如何防止这种情况发生。 也许更精通此目标的CAN IO的人可以提出此问题的考虑因素。
非常感谢!
斯蒂芬
好的,如果数据不在消息对象中,那么更改中断行就不重要了。 为了便于将来参考,还需要在CAN_IP_MUX21寄存器中设置相关位,并确保在CAN_GLB_INT_EN中设置了启用位。
错误的稀少性和对传输速率的依赖性使我怀疑总线布线或位正时配置有问题。 如果消息ID字段中出现位翻转,模块仍将接收消息,但由于ID不匹配,该消息不会存储在邮箱中。
由于您是从PCAN发送数据,我们可能会假设传输比特率正确。 如果您张贴振荡器频率,PLL配置和可位定时寄存器值,我可以检查它们。 另外,确保线路的两端均使用120欧姆电阻器端接。 根据其手册,PCAN没有内置。 也可以尝试使用不同的电缆。
亚当
感谢您对CAN_IP_MUX21的提示。
我在PCAN端制造了一个带有120欧姆电阻器的新双绞线。 我验证了两端的120欧姆电阻。 不幸的是,结果是一致的。
CAN时钟设置为以1MHz运行。 系统时钟设置为以200MHz运行。
时钟是否实际以1MHz运行,这在我的脑海中仍然是一个问题。 我们以前遇到过时钟问题。 由于TMS320F2.8377万D的CAN时钟存在已知问题,EE决定使用外部时钟。 这似乎解决了问题。 我无法想象这是如何实现的。 但我会问是否相关。
ClkCfgRegs (CPU1):
CPU2的ClkCfgRegs全部为0。
CanaRegs (CPU2):
[更正]
抱歉,我说话不正确。 您可以选择位时钟;它使用SYSCLK,它已经从外部振荡器获得。
我们有一个应用手册和电子表格计算器,用于CAN定时位设置和振荡器容差。 这可能有帮助:
www.ti.com/.../sprac35.pdf
www.ti.com/.../getliterature.tsp