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.

[参考译文] PROCESSOR-SDK-DRA7X:即使 CANRx 线路被馈送适当的 CAN 数据(通过示波器进行验证)、DCAN 中断也不会被触发

Guru**** 2555870 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/601367/processor-sdk-dra7x-dcan-interrupt-is-not-triggered-eventhough-the-canrx-line-is-fed-with-proper-can-data-verified-via-oscilloscope

器件型号:PROCESSOR-SDK-DRA7X
Thread 中讨论的其他器件:SYSBIOS

大家好、团队、

此支持涉及与 TI-J6 M4内核进行 CAN 通信的信息娱乐项目。  

目前、在我们的项目中、CAN 消息通过 J6 M4内核的 CAN Rx 线路显示。 但是、J6 M4内核无法接收这些消息、这意味着 CAN 控制器不会触发中断。  

我们看到 J6-M4内核 正在应答 (请参阅图像以了解 J6 Tx 线路被应答的更多详细信息)。消息、但遗憾的是 CAN 单元不会触发中断。  

尽管 J6已确认该消息、但它并未传递到上层、您能否在此处帮助我们解决可能的问题。

谢谢!

Prashanth。

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

    首先、我想说的是、您是否已将 DCAN IRQ 路由到相应的 M4内核?
    TRM 部分18.4.6.4 IRQ_crossbar 模块功能说明中介绍了中断交叉开关模块。

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

    感谢您的回复、我已经验证了中断交叉开关模块参考中的中断路由、看起来不错。

    您能不能建议一些其他选项。

    谢谢!

    Prashanth
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您说过"中断"。 我想确保您已经考虑了两个中断(DCAN 有2个主 IRQ 和1个 ECC IRQ)。
    此外、您是否仔细检查 M4中断控制器是否配置正确?
    最后、您能否转储 DCAN 寄存器并将其发布在此处? DCAN 有许多位描述其状态。

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

    地狱般的斯坦

    感谢您的回复,我已经验证了中断控制器中的配置,我们正在使用 DCAN1并且启用了中断。

    请查找随邮件附上的 DCAN 寄存器的核心转储。

    寄存器 名称 访问 地址
    DCAN CTL RW 0x4AE3C000 0x0200140A
    DCAN ES R 0x4AE3C004 0x00000010
    DCAN ERRC R 0x4AE3C008 0x00000000
    DCAN BTR RW 0x4AE3C00C 0x00001643
    DCAN_INT R 0x4AE3C010 0x0000003F
    DCAN 测试 RW 0x4AE3C014 0x00000010
    DCAN PERR R 0x4AE3C01C 0x00000204
    DCAN ABOTR RW 0x4AE3C080 0x00000000
    DCAN TXRQ_X R 0x4AE3C084 0x00000000
    DCAN TXRQ12 R 0x4AE3C088 0x00000000
    DCAN TXRQ34 R 0x4AE3C08C 0x00000000
    DCAN TXRQ56 R 0x4AE3C090 0x00000000
    DCAN TXRQ78 R 0x4AE3C094 0x00000000
    DCAN NWDAT_X R 0x4AE3C098 0x00000080
    DCAN NWDAT12 R 0x4AE3C09C 0x00000000
    DCAN NWDAT34 R 0x4AE3C0A0 0xC0000000
    DCAN NWDAT56 R 0x4AE3C0A4 0x00000000
    DCAN NWDAT78 R 0x4AE3C0A8 0x00000000
    DCAN INTPND_X R 0x4AE3C0AC 0x00000080
    DCAN INTPND12 R 0x4AE3C0B0 0x00000000
    DCAN INTPND34 R 0x4AE3C0B4 0xC0000000
    DCAN INTPND56 R 0x4AE3C0B8 0x00000000
    DCAN INTPND78 R   0x4AE3C0BC 0x00000000
    DCAN MSGVAL_X R   0x4AE3C0C0 0x000000FF
    DCAN MSGVAL12 R   0x4AE3C0C4 0xFFFFFFFF
    DCAN MSGVAL34 R   0x4AE3C0C8 0xFFFFFFFF
    DCAN MSGVAL56 R   0x4AE3C0CC 0x00000000
    DCAN MSGVAL78 R   0x4AE3C0D0 0x00000000
    DCAN INTMUX12 RW 0x4AE3C0D8 0x00000000
    DCAN INTMUX34 RW 0x4AE3C0DC 0x00000000
    DCAN INTMUX56 RW 0x4AE3C0E0 0x00000000
    DCAN INTMUX78 RW 0x4AE3C0E4 0x00000000
    DCAN IF1CMD RW 0x4AE3C100 0x00F30040
    DCAN IF1MSK RW 0x4AE3C104 0xFeff0800
    DCAN IF1ARB RW 0x4AE3C108 0xda000000
    DCAN IF1MCTL RW 0x4AE3C10C 0x00001480
    DCAN IF1DATA RW 0x4AE3C110 0x00000000
    DCAN IF1DATB RW 0x4AE3C114 0x00000000
    DCAN IF2CMD RW 0x4AE3C120 0x00730040
    DCAN IF2MSK RW 0x4AE3C124 0xFeff0800
    DCAN IF2ARB RW 0x4AE3C128 0x00000000
    DCAN IF2MCTL RW 0x4AE3C12C 0x00000080
    DCAN IF2DATA RW 0x4AE3C130 0x00000000
    DCAN IF2DATB RW 0x4AE3C134 0x00000000
    DCAN IF3OBS RW 0x4AE3C140 0x00000000
    DCAN IF3MSK RW 0x4AE3C144 0xFFFFFFFF
    DCAN IF3ARB R   0x4AE3C148 0x00000000
    DCAN IF3MCTL R   0x4AE3C14C 0x00000000
    DCAN IF3DATA R   0x4AE3C150 0x00000000
    DCAN IF3DATB R   0x4AE3C154 0x00000000
    DCAN IF3UPD12 RW 0x4AE3C160 0x00000000
    DCAN IF3UPD34 RW 0x4AE3C164 0x00000000
    DCAN IF3UPD56 RW 0x4AE3C168 0x00000000
    DCAN IF3UPD78 RW 0x4AE3C16C 0x00000000
    DCAN TIOC RW 0x4AE3C1E0 0x0004000f
    DCAN RIOC RW 0x4AE3C1E4 0x00040009

    请分享您的想法。

    谢谢!

    Prashanth

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

    很遗憾、我只能看到您已经知道的内容- DCAN 看起来配置良好、接收消息、但主机无法读取消息。
    我不知道。 与 A15内核配合使用是否正常?

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

    我没有尝试过 A15内核的选项、恐怕检查它是否在 A15内核上工作可能是一个艰难的选择、因为它可能会导致软件方面的大量更改。

    除了上述寄存器之外、我还尝试使用这两个值修改以下寄存器。

    你能不能建议这家酒店。

    寄存器:CTRL_CORE_PAD_DCAN1_RX (0x4A00 37D4)

    值1:0x01060000
    值2:0x00060000

    两者似乎都不起作用。

    我还可以检查其他内容吗、例如检查在缓冲区中接收到的 CAN 消息的消息 ID 是什么、还是什么? 或者尝试轮询模式、在该模式下、我们会定期检查消息是否已接收或接收到其他消息。

    提前感谢!

    此致、

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

    Prashanth、您好!

    我只是问您是否已经检查了 A15驱动程序。 我并不是说要迁移到 A15内核。 任何方式。

    引脚配置寄存器应该已经可以了、记住您可以从 CAN 总线接收消息。

    我已经深入研究了规范、发现存在额外级别的中断使能。

    CAN 消息驻留在 RAM 中所谓的"消息对象"中。 CAN 总线为多播、每个节点将接收总线上的每条消息、但应用程序可以决定哪些消息(通过其"消息标识符")是相关的。 所有其他的都将被忽略。

    您可能已经知道了所有这些内容、很抱歉、如果是的话。

    我的理解 是、至少应该为以下对象配置一个消息对象:

    -验收过滤、

    - Rx/Tx 中断使能!

    - 消息对象使能。

    否则、任何报文对象都不会产生中断。

    我想您可以通过启用 SIE 中断(它现在已被禁用)来快速调试它。 这将导致每次唤醒、发送、接收或错误触发中断。

    稍后、您必须设置消息对象并再次禁用 SIE。

    让我知道是否在启用 SIE 的情况下发生了什么。

    此致、

    STAN

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

    您好 Stan、

    感谢您的回复。

    我尝试将 DCDAN_CTL 寄存器中的 SIE 位设置为1。

    目前、我在 DCAN_INT 寄存器中看到的值为0x8000、根据 DRA7xx 手册、DCAN_ES 值不是0x07。

    此外、在手册中、我还找到了以下文本

    "INT0ID 字段中的值0x8000表示中断挂起、因为 CAN 内核具有中断

    更新(不一定更改)错误和状态寄存器(DCAN-ES)。 该中断具有
    最高优先级。"

    我看到的 DCDAN_ES 值为0x10、这意味着成功接收到一条消息。

    该值0x8000是否意味着出于某种原因未触发中断?

    请提供建议。

    谢谢!  

    Prashanth。

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

    否、0x8000应该只是意味着不是一个消息对象触发了一个中断、但是 DCAN-ES 寄存器已经改变。 现在必须触发中断、因为您已经在 SIE 中启用了它。
    中断处理程序必须知道0x8000、轮询 DCAN-ES 位更改并执行所需的操作。
    也就是说、当前 DCAN 应该在每个 Rx (和其他事件)上生成中断。 但 SW 驱动程序可能不知道0x8000 (ES)中断。
    您可以修改驱动程序以向您显示0x8000中断触发器、也可以根据需要设置消息对象(正常工作流程)。

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

    您好 Prashanth、


    您能告诉我们如何为您的测试配置 NVIC (M4/IPU)吗?

    谢谢、Stefan

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

    Prashanth、您好!

    查看您提供的寄存器转储、这些寄存器值是在收到消息后得到的、对吗? 您正在使用哪个 DCAN 中断(DCAN IRQ_INT0/DCAN IRQ_INT1)? 您应该相应地配置 IRQ 交叉开关。 如前 所述、您必须启用/设置 DCAN CTL.SIE 位。 此外、查看'CAN_INTPND_X'和'CAN_INTPND34'寄存器内容、邮箱编号63和64的中断正暂挂。 另外、在'CAN_NWDAT34'寄存器中设置相应的位、这意味着消息处理器或软件已将新数据写入这些消息目标的数据部分。 此回送应用程序(因为 DCAN 测试 LBACK 位已设置)吗? 如果是这样、您将使用其中一个邮箱(来自63/64)作为 Tx 邮箱、而将另一个邮箱用作 Rx 邮箱。 请确认。

    您能否提供邮箱配置(特别是对于63和64号邮箱)?

    BR、

    Vivek Dhande。

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

    我们使用 DCAN INT0,相应的 IRQ 交叉开关 IRQ_crossbar_222在 CTRL_CORE_IPU1_IRQ_59_60寄存器(物理地址:0x4A0028U)中配置值为0x00DF00DE。

    您是否需要更多详细信息、请告诉我?

    谢谢!

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

    Prashanth、

    请检查下面 Vivek 的查询。 非常重要!

    "您能否提供邮箱配置(特别是对于邮箱编号63和64)?" 邮箱= TRM 中的消息对象

    Vivek、

    我注意到回送位已设置、但其他一些位配置导致回送被忽略。 因此它们不在回送中。

    我想他们使用另一个 J6板作为工作台(在最初的帖子中的某处有说明)。

    此致、

    STAN

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

    感谢您的回复。

    转储值是在接收到消息后。

    我们正在使用 DCAN IRQ_into,并在 CTRL_CORE_IPU1_IRQ_59_60寄存器(物理地址:0x4A0028U)中相应地配置相应的 IRQ 交叉开关222,其值为0x00DF00DE。

    由于 DCAN CTL 的值为0x0200140A,因此测试不在回路模式中,这意味着 DCAN CTL.TEST 位为0,这是正常操作,我知道这将禁用。

    关于63和64的配置邮箱、您是否希望我从控制器转储中提供以下配置详细信息?

    消息 RAM 基地址(0x4AE3 D000)+(消息目标编号(在我的案例中为63和64))×0x20

    请告诉我这是否符合预期

    提前感谢!

    此致、

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

    您好、Vivek、

    当 DCAN CTL.SIE 位设置为1时、DCAN INT 设置为值0x8000、现在 DCAN INTPND_X 和 DCAN INTPND34都为零。

    有关更多详细信息、请查找随附的寄存器转储。

    谢谢!

    此致、

    Prashanth.e2e.ti.com/.../DcanDump.xlsx

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、
    是的、这是一个整体。 请注意、最后一个报文对象64位于偏移量0x0处、否则公式正确。
    另请注意、有两种访问 RAM 的方法。
    一种是使用调试器(TRM 调试/挂起模式)
    -第二个是进入测试模式并使用 omapconf 或 devmem2读取 RAM (TRM RDA 模式)。 当 DCAN 模块处于测试模式时(DCAN _CTL[7]测试= 1)、可通过设置 DCAN 测试[9] RDA 位进入此模式

    此致、
    STAN
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、
    您能再试一次吗? 请禁用 SIE、但也禁用 IE0。
    运行测试并读回 DCAN IF1CMDRW0x4AE3C100
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 Stan、

    我现在已禁用 SIE、同时 IE0当前 DCAN CTL 值为0x02001408、DCAN IF1CMD 设置为0x00f30040

    谢谢!

    Prashanth。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好、
    我不确定您是否已经检查过这个。

    我无法访问驱动程序代码、但我希望驱动程序中应该有一个适应文件、您可以在其中使用正确的中断编号注册 ISR。

    Hwi_handle Hwi_create (int intNum、Hwi_FuncPtr hwiFxn、const Hwi_Params *参数、Error_Block * EB);
    //分配和初始化新的实例对象并返回其句柄

    您能否检查 HWI 是否已按照交叉开关和 ISR 中设置的正确中断编号进行注册?

    此致、
    RK
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、
    您是否事先复位了电路板? 即
    1.复位
    2.禁用引导后的中断
    3.发送一些 CAN 数据包
    4.转储 IF1CMD 寄存器

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

    我已修改驱动程序以禁用 DCAN CTL 寄存器中的中断和 SIE 位、并在执行硬复位后将代码刷写到 MIB3无线电。

    然后将 CAN 消息馈送到对讲机并读取 IF1CMD 寄存器的值、我想这与您建议的步骤相同。

    谢谢!

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

    我们以59的中断编号调用 Interrupt_Configure API (interrupts_SysBIOS.c 文件)、并完成与 DCAN 相关的 IRQ_crossbar 的相应映射。 IRQ_crossbar_222在 CTRL_CORE_IPU1_IRQ_59_60寄存器(物理地址:0x4A0028U)中配置、值为0x00DF00DE。

    从 interrupt_configure API 中、您提到的 API 会使用中断号和 intterupt 的配置处理程序调用 Hwi_create、如下所示。
    Hwi_create (id、config->handler、params、&EB);

    谢谢!

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

    Prashanth、您好!

    当然。 我之所以要求您这么做、是因为我认为 DCAN 驱动器实际上接收到了中断。

    我这么认为是因为我认为软件已经通过 IF1读取了消息对象64。 该数字保留在 DCAN IF1CMD [MESSAGE_NUMBER]寄存器中、同时其复位值为1。

    但是、您已经在禁用中断的情况下进行了测试、并读取了相同的数字(64)。 因此、现在我完全不知道谁访问了消息对象64、即使这个值意味着软件已经访问了它。

    很抱歉、除了检查是否实现了勘误表 i893 DCAN 初始化序列之外、我没有其他想法。

    此致、

    STAN

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

    在这里、您仅向 DCAN 发送消息、但未接收。 对吧?
    您将向 DCAN 发送什么消息? 出现在总线上提供的快照中。 我是指 ID、控制位和数据等消息详细信息。
    另外、请提供邮箱配置、尤其是用于接收过滤的 Rx 邮箱。

    BR、
    Vivek Dhande
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、您好!
    对此进行了任何更新? 如果此问题仍然存在且正在处理中、请提供请求者 Vivek 提供的信息。

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

    大家好、团队、

    很抱歉、我的回复延迟了一段时间。

    问题在于配置中使用的寄存器地址之一不正确、现在产生了中断、但唯一的问题是我只能接收几秒钟的消息 (大约4秒)、 之后不会接收报文、也不会产生中断。

    这里可能会有什么问题?  

    非常感谢!

    此致、

    Prashanth。

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

    Prashanth、您好!

    您能否提供有关哪些寄存器配置了错误地址的详细信息? 这将使可能面临类似问题的其他人受益?

    在消息接收时、可能是中断未命中、以下建议基于中断处理中的常规软件竞争。  

    检查您是如何在 ISR 中处理中断的、您是否立即屏蔽/禁用中断?

    检查任何待处理请求的状态。 SW 何时再次启用中断/清除暂挂中断?

    我们在其他驱动程序中看到了这样的缺失、在这些驱动程序中、ISR 读取状态寄存器并处理所有挂起的请求、但如果中断发生在 ISR 返回控制时、则可能会发生 misng 中断、并且在挂起之前不会生成新事件 一个被清除。

    此致、
    RK