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.

[参考译文] TMS320F28075:CAN IF3寄存器行为

Guru**** 2539500 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/610386/tms320f28075-can-if3-registers-behaviour

器件型号:TMS320F28075

您好!
我对 CAN B 模块的 IF3寄存器进行了一些测试、我对此有一些疑问。

我将报文对象2配置为接收邮箱、并在 IF3UPD 寄存器中启用了 IF3自动更新。
此外、我启用了连接到 INT0线路上邮箱2的接收中断。

1) CAN_INT 寄存器= 0
当一条消息已经被存储在接收邮箱2中时、中断例程被调用、但是寄存器具有以下值:
CAN_ES = 0x00000010 -> RxOk:预期值
CAN_INT = 0         ->无中断挂起:不是预期的!
CAN_IPEN_X = 0      ->无中断挂起:不是预期的!
CAN_IPEN_21 = 0     ->无中断挂起:不是预期的!

因此、在中断例程内、我无法识别中断原因。
我假设 CAN_INT、CAN_IPEN_X 和 h CAN_IPEN_21具有0值、因为自动数据从邮箱2传输到 IF3寄存器复位位位 IntPnd (另请参阅 e2e.ti.com/.../2140585)

是否有任何方法可以知道中断的原因?


2) 2) IF3传输完成
当接收中断例程被发出时、从邮箱到 IF3寄存器的自动数据传输是否已经完成?
如果没有、我如何知道何时完成了转让?


3) IF3重复读数
考虑以下情况:
1:消息1已存储在接收邮箱2中;
2、报文1自动传递给 IF3寄存器;
3.中断例程被发出并开始被处理(IF3寄存器直到现在还未被读取、所以 IF3Upd 位= 1);
在 IF3寄存器被读取之前、消息2已经被存储在接收邮箱2中、所以消息2不会被传输到 IF3寄存器;
5.在中断例程期间,IF3寄存器被读取,因此 IF3Uptd 位变为0;
6、现在消息2从邮箱2传输到 IF3寄存器、所以 IF3Uptd 位再次变为1;
7.由于 IF3Upd 位= 1、因此 IF3寄存器被读取、因此 IF3Upd 位变为(并保持) 0;
8.中断例程结束。

在步骤7中、测试 IF3Uptd 位以检查是否有另一条消息要读取。 然而、IF3寄存器组没有像 IF1/2寄存器那样的忙位、所以我不知道从邮箱到 IF3寄存器的传输是否正在进行中。

在我的测试过程中、我注意到了这些致命问题:
-如果我读取 IF3寄存器并且在我测试 IF3Upd 位之后不久,我将发现它等于0,即使邮箱中有另外一条消息,因为传输正在进行中;
-如果我读取 IF3寄存器、并且在我测试 IF3Upd 位3-4次(经验)后不久、如果邮箱中有另外一条消息、我将发现它等于1、因为在重复测试期间、到 IF3寄存器的传输已经完成。

哪个是测试 IF3Upd 位的正确顺序?
读取 IF3寄存器后、应该对其进行多少次测试?
或者更好的是、在读取 IF3寄存器后、在测试 IF3Upd 位之前、我应该等待多长时间?

谢谢你。

此致、

演示

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Demis,我正在研究这篇文章..
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1.我正在研究这个问题。 根据您的另一篇文章、您似乎已经验证 IntPnd 会与 NewDat 一起自动清除
     
    对 我来说、当传输到 IF3寄存器的数据已经完成时、中断发生是合乎逻辑的、因为 ISR 会希望 IF3寄存器中的数据可用。
     
    在 规格中 CANIF1CMD/CANIF2CMD 寄存器的说明中、我看到"4至14个时钟周期"。  IF3也应该相同。 当前 TRM 没有4至14个时钟信息。 下一个版本将具有它。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Haresh

    [引用 user="Haresesh J"]
    1.我正在研究这个问题。 根据您的另一篇文章、您似乎已经验证 IntPnd 会与 NewDat 一起自动清除
    [/报价]
    是的、IntPnd 与 NewDat 一同被清除。

    [引用 user="Haresesh J"]  
    对 我来说、当传输到 IF3寄存器的数据已经完成时、中断发生是合乎逻辑的、因为 ISR 会希望 IF3寄存器中的数据可用。
    [/报价]
    我同意您的观点、但遗憾的是 CPU 行为的某些方面有时令人惊讶。 因此、由于 TRM 没有明确地说、为了避免误解、我想确保在数据传输到 IF3寄存器完成后发出中断。
    [引用 user="Haresesh J"]  
    在 规格中 CANIF1CMD/CANIF2CMD 寄存器的说明中、我看到"4至14个时钟周期"。  IF3也应该相同。 当前 TRM 没有4至14个时钟信息。 下一个版本将具有它。
    [/报价]
    好的、谢谢。
    此致、
    演示