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.

[参考译文] TMS570LC4357-EP:CAN IF3更新使能寄存器(IF3UEy)行为(TMS570LC4357-EP)

Guru**** 2465890 points
Other Parts Discussed in Thread: TMS570LC4357-EP, HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/959348/tms570lc4357-ep-can-if3-update-enable-registers-if3uey-behaviour-tms570lc4357-ep

器件型号:TMS570LC4357-EP
主题中讨论的其他器件: HALCOGEN

尊敬的先生:

我有用于池化和中断模式的 CAN 驱动程序。

我正在尝试为 CAN 实现 DMA 功能、从数据表和 TI 论坛、我现在可以在 IF3接口寄存器(IF3UEy)的帮助下为(TMS570LC4357-EP 板)实现 RX DMA 功能。

但 HALCOGEN 没有生成任何处理 DMA 的 API/函数、甚至没有在驱动程序代码中使用任何 IF3寄存器、而是将 IF1和 IF2用于发送和接收。

当我尝试使用 Rx 消息框编号更新 IF3UEy 寄存器(来自表27-33)时,在更新 IF2消息框后。 驱动器未在池模式和中断模式下接收 CAN 数据、但传输按预期工作。 在  接收时、寄存器 NWDATx 和 IF2DATx 始终为零。

按照以下步骤配置消息框。  (与 Halcogen 代码相同、但第7步除外)。

  1. 已检查 IF2STAT 忙位。
  2. 为 IF2MSK 分配 vale
  3. IF2ARB 分配分拣
  4. 为  IF2MCTL 分配 vale
  5. IF2CMD 分配 vale  =((T_uint8)(M_IFxCMD_WR |M_IFxCMD_MASK | M_IFxCMD_ARB | M_IFxCMD_CONTROL | M_IFxCMD_CLRINTPND);
  6. IF2NO 分配 vale = 0x2UL
  7. 为  IF3UEy[0]分配 vale = 0x2UL.(新添加)

请告诉我为什么 IF3UEy 寄存器会给 RX 造成问题、以便我可以继续 DMA 实施。 如果 有适用于 TMS570LC4357-EP 电路板的 CAN DMA 示例、请分享以供参考。

谢谢、此致

苏布拉马尼亚 a

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

    当您启用 IF3来自动读取 CAN 帧2时、新数据位将通过传输到 IF3寄存器来清零。 因此不会产生中断。 您仅启用了一半 DMA 操作。 您需要设置 CAN 控制寄存器中的 DE3位并启用 DMA。

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

    尊敬的先生:

    由于进行了重放、我在启用 DMA 模式时处理了 DE3、但保留了 IF3UEy 寄存器以更新 Rx 消息框编号、即使在池和中断模式下也是如此、因为我没有跟踪 Rx 消息框编号、 它稍后用于分配给 IF3UEy 寄存器。  

    现在、我仅在 DMA 模式下使用 IF3UEy 寄存器。 我正在 IF3DATA 寄存器中接收数据。 前台没有问题|工作正常。

    我在 DMA 驱动程序中又面临一个问题。 当我设置 DMA 寄存器源地址和目的地址时、寄存器不会更新(保持为零)。

    执行以下步骤(来自 HALCOGEN 的 DMA 驱动程序):

    1. DMASetChannelDisable
    2. DMADisableChannelInterrupt
    3. DMAReqAssignToChannel
    4. DMASetChannelPriority
    5. DMAEnableChannelInterrupt
    6. CANDmaSetRxSourceDestAddr   
        1. 源地址:(T_uint32) pt_CAN1_port_reg->IF3DATx[M_zere])
        2. 目标地址:全局缓冲区。
        3. PORTASGN  配置为 PORTB_READ_PORTA_WRITE;//外设到存储器;*/
    7. DMASetChannelEnable

    请告诉我为什么设置源地址和目标地址时遇到问题。 如果有任何依赖关系需要处理、请分享。

     

    谢谢、致以诚挚的谢意

    苏布拉马尼亚 a

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

    请查看此主题末尾附加的示例:

    https://e2e.ti.com/support/microcontrollers/hercules/f/312/t/287665?CAN-and-DMA-TMS570-3137-HDK#pi320995=2