大家好、
我遇到 CANIntStatus() API 问题。
我在 CAN 应用程序代码中使用 CANIntStatus() API。 它将返回值 CAN_INT_INTID_STATUS (即状态中断0x8000)、并返回导致中断的消息对象的编号。 在本例中,我使用 CANStatusGet () API 读取状态寄存器。 此 API 将返回错误中断的信息。 我实现了15个消息对象。 但 TM4C123GH6PM 微控制器可以支持32个报文对象。
对于即时、
示例代码:
在 CAN 中断处理程序中、
STATUS = CANIntStatus (CAN_BASE、CAN_INT_STS_CAUST); //这将返回报文对象总数和中断原因。
if ( status =CAN_INT_INTID_STATUS )
{
ulStatus = CANStatusGet (CAN1_base、CAN_STS_CONTROL);
CANIntClear (CAN_BASE、CAN_INT_INTID_STATUS); //清除状态中断寄存器。
}
其他
{
交换机(状态)
{
情况1:消息对象1;中断;
情况2:消息对象2;中断;
案例3:消息对象3;中断;
一
一
一
情况15;消息对象15;中断;
}
}
在这里、由于仲裁、所有消息对象相互依赖。 如果我错了、请纠正我的问题。
我正在将5条消息馈送到 CAN 收发器(部件号:SN65HVD1040D )。 我希望前5个案例将会执行。
以下是测试时的观察结果:
CANIntStatus()始终返回1和2。 并仅收到2条消息。
2.如果我在案例3、案例4和案例5中放置断点、光标不会达到任何断点。
如果我在案例2中也放置了断点、则所有5个案例都正确执行。 因此、我可以监控5条消息。
但在第2种情况下删除断点后、光标在其他情况下(第3、4和5种情况)不会达到其余断点。
这里,我的问题是,根据 我们要传送到 CAN 收发器的报文数量(例如10), CAN 中断状态寄存器将返回该特定值(即10),并且将执行该特定报文对象。
为什么 CANIntStatus() API 不返回正确的值???
如果有任何语法错误、请原谅我。
非常感谢。
此致
Suman