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.

[参考译文] TM4C123GH6PM:CAN 中断处理程序中的 CANIntStatus() API

Guru**** 2455560 points
Other Parts Discussed in Thread: TM4C123GH6PM

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/641195/tm4c123gh6pm-canintstatus-api-in-can-interrupt-handler

器件型号:TM4C123GH6PM

大家好、

 我遇到 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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引用 USER="Suman Soora"]在这里,由于仲裁,所有消息对象都相互依赖

    至少不是一般情况。 他们为什么应该这样做?

    Robert

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Suman:

    您提到了"3. 如果我在案例2中也放置了断点、则所有5个案例都正确执行。 因此、我可以监控5条消息。"

    执行此操作时、您是否首先针对情况2单击断点、然后在恢复其他断点时单击了断点? 如果这是您所做的唯一更改、则可能会出现计时问题、因为您遇到案例2、系统已获得更多时间、然后其他消息也会出现。

    案例陈述中的代码也在做什么? 如果看不到完整的 ISR、就很难判断到底发生了什么。

    您可以使用"插入代码、附加文件等..."发布代码 选项、然后在编辑器框中找到如下所示的徽标:</>。 这将使您能够将代码发布到语法突出显示器中、使其更易于阅读。