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.

[参考译文] TMS570LS0432:CAN 通信持续数据发送问题

Guru**** 2468610 points
Other Parts Discussed in Thread: HALCOGEN

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/672038/tms570ls0432-can-communication-continuous-data-sending-problem

器件型号:TMS570LS0432
主题中讨论的其他器件:HALCOGEN

您好!

我们使用的是 TMS570LS470微控制器。因为 我们正在尝试与其他开发板进行 CAN 通信。

我们面临的问题是

当 我们尝试 从 调试器更改值时、在默认情况下成功传输已初始化的第一个字节 CAN 数据后、无法传输数据、而是无法传输 CAN.c 文件中的 CANTransmit 函数 、始终以黄色突出显示的函数为单位

如何复位 TXRQx 寄存器值以实现数据的连续传输。

uint32 canTransmit (canBASE-t *节点、uint32 MessageBox、const uint8 *数据)

   uint32 i;
   uint32成功 = 0U;
   uint32 regIndex =(MessageBox - 1U)>> 5U;
   uint32 bitIndex = 1U <<(MessageBox - 1U)和0x1FU);

/*用户代码开始(7)*/
/*用户代码结束*/


   /**-检查待处理消息:
   *    -待处理消息、返回0
   *    -无待处理消息、开始新传输
   *
   if ((node->TXRQx[regIndex]& bitIndex)!= 0U)
   {
       成功= 0U;
   }

   其他
   {
   /**-等待 IF1准备就绪可供使用*/
   /*SAFETYMCUSW 28 D MR:NA "找到可能无限的循环-执行序列的硬件状态检查"*/
   while ((node->IF1STAT & 0x80U)=0x80U)
   {
   }/*等待*/

   /**-为配置 IF1
   *    -消息方向-写入
   *    -数据更新
   *    -开始传输
   *    
   NOD->IF1CMD = 0x87U;
   
   /**-将 TX 数据复制到 IF1中*/
   对于(I = 0U;I < 8U;I++)
   {
#if ((__little_endian__= 1)||(__little_ENDIAN__= 1)
       /*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
       NODE->IF1DATx[i]=*数据;
       /*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
       /*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
      Data++;
其他
       /*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
       NODE->IF1DATx[s_canByteOrder[i]=*数据;
       /*SAFETYMCUSW 45 D MR:21.1 "仅此驱动程序允许有效的非 NULL 输入参数"*/
       /*SAFETYMCUSW 567 S MR:17.1,17.4 "需要指针增量"*/
      Data++;
#endif
   }

   /**-将 TX 数据复制到消息框中*/
   /*SAFETYMCUSW 93 S MR:6.1、6.2、10.1、10.2、10.3、10.4 "LDRA 工具问题"*/
   NOode->IF1NO =(uint8) MessageBox;

   成功= 1U;
   }
   /**  @请注意,必须先调用函数 canInit,然后才能使用此函数。\n
   *          用户负责初始化消息框。
   *

/*用户代码开始(8)*/
/*用户代码结束*/

   返回成功;

/********* 主函数******** /

易失 性 uint8 CAN_DATA[1]={0x02};

void main()

caninit();

for (;;)

 canTransmit (canREG1、canMESSAGE_BOX1、&CAN_DATA[0]);

/******** 主代码结束 /

下面是 caninit 函数设置的快照

提前感谢..

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

     Sameer、您好!

    请确保已启用消息1以进行传输。

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

    yaa 我已启用此消息框。 即使在通信中、如果 loop.please 为我建议任何校正、或者提供任何 CAN 初始化函数选择过程或示例代码、我也会从第二个字节接收到第一个字节之后的正确字节。

    下面是 msg 选择框。

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

    由于您的 CAN 通信中的数据长度为1字节、请将 DLC 更改为1 (HalCoGen MSG BOX1)。 txreqst 位不能手动复位。