Dear TIer
在使用TCAN4550 过程中发现 当报文速率较快 大概两帧间隔在300uS 发送一段时间发现 CAN收到一帧报文后 通过读取TCAN4550 发现是之前发报文,大概之前4帧或5帧, 程序是在 TCAN455x Driver Library Demo_1.2_manifest 这个Demo 基础上修改的, 想咨询一下可能是哪里的问题。
Amy Luo:
您好,
您的意思是CAN收不到前3帧或4帧报文,还是说CAN接收的报文会滞后4帧或5帧呢
user1143055:
回复 Amy Luo:
Dear Amy 通讯过程中速率慢的话都正常,但速率快了后边的报文会滞后,也不定时4帧,5帧 也可能3 帧,demo 程序接收报文是放在while(1)循环中,我放在了一个TIrtos 中的任务中,中断触发执行,但觉得应该不是这里的问题。
user1143055:
回复 user1143055:
Dear Amy 在线Debug 发现使用调试工具发送报文 比如快速发送报文 10000条,进入中断的次数可能是9999次,那么报文就会滞后一帧,这是否是nINT 脚并非是一帧报文产生一次中断,可能 会有丢失,
Amy Luo:
回复 user1143055:
你说的速率是指can帧数据速率,还是spi时钟频率?你是指的哪种情况呢
不管怎样,感觉像是spi限制,并且由于将报文从spi转换为can的额外时间,当您的can报文更短时,这种延迟将更加明显。
user1143055:
回复 Amy Luo:
CAN 速率是500KSPI 频率是10M ,理论上SPI 这个10M速率应该是足够了吧, 如果不清除中断标志位,那么是无法再次进入中断的吧,但报文会持续接收,只是不进入中断?
Amy Luo:
回复 user1143055:
目前您的问题是nINT产生中断次数小于发送报文数吗,还是进入中断次数小于发送报文数?
我知道有的控制器是自动清除中断标志位的,关于中断标志位的问题,请查看所用控制器的工作原理。
user1143055:
回复 Amy Luo:
我是这样测试的, 进入一次中断就在一个全局变量+1实测调试工具发出的报文间隔小的时候 发送报文数量会大于该全局变量
中断标志位不是单片机的中断标识,是 TCAN4x5x_MCAN_ClearInterrupts(&mcan_ir);// Clear any of the interrupt bits that are set. 类似这样的TCAN4550 内部的中断标识
Amy Luo:
回复 user1143055:
Nint可用于指示报文已被发送和接收,但必须在寄存器空间中启用中断,并且它们必须是总线上另一个发送ACK位的CAN节点,以便TCAN4550-Q1知道报文已被正确接收。
“发送报文数量会大于该全局变量”具体是在什么情况下呢