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:IF2CMD/IF1CMD 的分配值来自哪里

Guru**** 2478765 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/940416/tms570lc4357-where-does-the-assigned-value-of-if2cmd-if1cmd-came-from

器件型号:TMS570LC4357

您好!

我有两个问题:


第一个:我尝试使用不同的 DLC 发送 CAN 消息。 我实现了2个函数来读取和更新 DLC。

但我不知道我必须使用哪一个 CMD。 有人能告诉我、IF2CMD/IF1CMD-value 是如何构建的。

第二个问题:可以使用"Halgogen safeTI Halcogen-CSP"或我的两个工具进行 Unittest

已实现的功能

void CAN_UpdateDLC (canBASE-t * P_Node、UINT32 P_MessageBox、UINT8 P_Length){


while (((P_Node->IF1STAT & 0x80U)=0x80U);
P_Node->IF1MCTL &=0xFFFFFFF0;//清除消息框的实际配置长度
P_Node->IF1MCTL |=(uint32) P_Length;

P_Node->IF1CMD =(uint8) 0xF8U;
P_Node->IF1NO =(uint8) P_MessageBox;
/**-等待数据被复制到 IF1中*/
while (((P_Node->IF1STAT & 0x80U)=0x80U);

}

UINT8 CAN_GetDLC (canBASE-t * P_Node、UINT32 P_MessageBox){
uint8大小;
while ((P_Node->IF2STAT & 0x80U)=0x80U)
{
}
P_Node->IF2CMD = 0x20U;

/**-将数据复制到 IF2中*/

P_Node->IF2NO =(uint8) P_MessageBox;

/**-等待数据被复制到 IF2中*/
while ((P_Node->IF2STAT & 0x80U)=0x80U)
{
} /*等待*/

大小= P_Node->IF2MCTL & 0xFU;
返回大小
;} 

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

    您好!

    要仅更新 DLC、CMD=0x90正常:WR_RD 位=1是要将数据从 IFx 传输到消息 RAM、Control=1是仅传输控制位。  

    要获得 DLC、CMD=0x10正常:WR_RD=0是从消息 RAM 读取数据到 IFx、而控制位=1是读取控制位

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

    感谢您的回答、

    这是否意味着、分配 给 IFxCMD 的值被写入位16至23上?  

    如果是、用户手册中在哪里进行了说明?

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

    是的、你是对的。 它是位23~位16的字段。 请参阅 IF1/IF2命令寄存器字段说明: