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.

[参考译文] CCS:tms5704357 canfd 测试 Rx 问题

Guru**** 2220740 points
Other Parts Discussed in Thread: TCAN4550-Q1
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/763727/ccs-tms5704357-canfd-test-rx-question

主题中讨论的其他器件:TCAN4550-Q1

工具/软件:Code Composer Studio

你好。 我现在正在处理一个项目。
我目前正在研究一个使用 TMS570LC4X 测试 TCAN4550-Q1的项目。
两个板中的一个是 TX、另一个是 RX。 其中一个是 TX 代码、另一个是 RX。

但这里有一个问题、我将与您联系。
我将讨论这一点。

在 Rx 接收信号在 TX 持续传输时、TX 停止信号、Rx 接收信号并将其传输到 SPI、确认其进入相应的 Rx 缓冲区。 否、信号不会立即进入。 我必须执行多次。 当接收来自 TX 信号的 Rx 信号时、有必要通过确认接收到 Rx 来发送已识别的信号。

我在基于 Rx 发送信号时所做的事情。
请查看一次。

我想知道我是否需要采取其他操作来获取 Rx 信号。
我想知道信号是如何恒定的。
我将把内容和图片放在一起。

请告诉我很多。

寄存器 地址 操作 注释
器件
中断
0x0820 主机 IRQ 0x80000082 设置 M_CAN_INT 位、因此 MCAN 具有中断
红外 0x1050 主机 IRQ 0x00000010 RX FIFO 1中的新消息、需要读取 RX FIFO 1状态才能获取更多信息
红外 0x1050 写入 0x00000010 通过将该位写回 IR 寄存器来清除中断
RXF0S 0x10A4 主机 IRQ 0x00040301 在索引3处的 FIFO 中有1条未读消息
- 0X81C8 - - 根据表7中的设置、索引3的起始地址为:HEX (72 * 3)+0x80F0 = 0x81C8
RX FIFO 0[3] 0x81C8 主机 IRQ 0x52345678 标头字#1、XTD 被置位并且 ID[28:0]= 0x12345678
RX FIFO 0[3] 0x81CC 主机 IRQ 0x01B70000 标头字#2、在启用 CAN FD 和 BRS 的情况下发送7字节数据
RX FIFO 0[3] 0x81D0 主机 IRQ 0x44332211 数据的前4个字节、0x11是第一个接收到的字节
RX FIFO 0[3] 0X81D4 主机 IRQ 0x00776655 数据的最后3个字节、0x77是最后接收到的字节
RXF0A 0X10B8. 写入 0x00000003 读取 FIFO 索引的索引以确认它具有该索引
已阅读并清除它以供使用

*读写 SPI  

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

    使用一个 SPI 连接 TX 板以将 CAN-FD 数据传输到 RX 板、使用另一个 SPI 从 RX 板上的 TCAN4x FIFO 检索 CAN-FD 数据。 您可以成功传输 CAN-FD 数据、但无法接收数据。 我的理解是否正确?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 QJ Wang

    每个器件使用相同的 SPI、

    不同电路板上有一个 TX 板和一个 RX 板。

    我想通过 CANFD 到 RX 缓冲器将 TX 信号发送到该电路板。

    我想知道我的解释是否可以理解。

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

    如果中断被启用、当接收到新消息时、您将获得中断、然后从 RX FIFO 或 RX 缓冲区读取消息。

    以下是启用中断的顺序:
    //设置我们要为 MCAN 启用的中断
    TCAN45x0_CAN_Interrupt_Enable_Register TCAN_CAN_IE ={0};//请记住初始化为0,否则您将得到随机垃圾!
    TCAN_CAN_IE.RF0NE = 1; // RX FIFO 0新消息使能
    TCAN_CAN_IE.RF1NE = 1; // RX FIFO 1新消息使能
    MCAN_SetInterruptEnableRegister (&TCAN_CAN_IE); //启用相应的寄存器

    TCAN45x0_CAN_Interrupt_Line_Select_Register TCAN_CAN_ILS ={0};//中断线路选择(地址= 1058)
    TCAN_CAN_ILS.RF0NL = 1; //Rx FIFO 0新消息中断使用 EINT1
    TCAN_CAN_ILS.RF1NL = 1; //Rx FIFO 1新消息中断使用 EINT1
    MCAN_SetInterruptLineSelectRegister (&TCAN_CAN_ILS);

    TCAN45x0_CAN_Interrupt_Line_Enable_Register TCAN_CAN_Ile ={0};//中断线路使能(地址= 105C)
    TCAN_CAN_Ile.EINT0 = 0; //禁用中断行 m_CAN_int0
    TCAN_CAN_Ile.EINT1 = 1; //中断行 m_CAN_INT1被启用
    MCAN_SetInterruptLineEnableRegister (&TCAN_CAN_Ile);

    要在中断后接收数据:
    TCAN45x0_CAN_Interrupt_Register MCAN_IR ={0};//设置一个新的 MCAN IR 对象以方便进行中断检查
    MCAN_ReadInterruptRegister (&MCAN_IR); //读取中断寄存器

    if (MCAN_IR.RF0N){ //如果 RX FIFO 中有一条新消息0
    TCAN45x0_RX_HEADER MsgHeader ={0};//初始化为0、否则您将得到垃圾
    AHB_WRITE_B_FL_32 (M_CAN_IR、MCAN_IR_RF0N);//清除中断位以释放 INT 引脚。
    numBytes = MCAN_ReadNextFIFO (RXFIFO0、&MsgHeader、dataPayload);//这将读取 RX FIFO 0中的下一个元素