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/HALCOGEN:可能的错误:HalCoGen 4.6.1[4.6.0根据"关于"框]在配置非扩展帧时会生成错误收集 CAN 消息标识符的代码

Guru**** 2350610 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/613352/ccs-halcogen-possible-bug-halcogen-4-6-1-4-6-0-according-to-about-box-generates-code-to-collect-can-message-identifier-incorrectly-when-non-extended-frames-are-configured

器件型号:HALCOGEN

工具/软件:Code Composer Studio

对于 RM46、HalCoGen 生成一个名为 getCanID 的函数。  该代码会像扩展 ID 一样收集消息标识符。  当配置为非扩展时、这意味着11位消息标识符值会像29位标识符一样向左移位。

*

/* sourceId:CAN_sourceId_026 */

/* DesignId:CAN_DesignId_020 */

/*要求:HL_SR537 */

uint32 canGetID (canBASE-t *节点、uint32 MessageBox)

uint32 msgBoxID = 0U;

/**-等待 IF2就绪可供使用*/

while ((node->IF2STAT & 0x80U)=0x80U)

}/*等待*/

/**-为配置 IF2

*-消息方向-读取

*-数据读取

*-清除报文对象中的 NewDat 位。

*

NOD->IF2CMD = 0x20U;

/**-将消息框编号复制到 IF2 */

/*SAFETYMCUSW 93 S MR:6.1、6.2、10.1、10.2、10.3、10.4 "LDRA 工具问题"*/

节点->IF2NO =(uint8) MessageBox;

/**-等待数据被复制到 IF2中*/

while ((node->IF2STAT & 0x80U)=0x80U)

}/*等待*/

/*从仲裁寄存器读取消息框 ID。 *

msgBoxID =(节点->IF2ARB & 0x1FFFFFFFU);

返回 msgBoxID;

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

    您好、Neil、

    该函数只需读取 IF2ARB 寄存器的位0 -位28的内容、即 IF2寄存器中的 ID 位置。 如果仅使用标准长度 ID、则第28-18位有效、如果使用扩展长度 ID、则完整的29位有效。 由于该函数旨在用作标准或扩展帧模式中使用的通用函数、因此它返回寄存器的完整 ID 字段。 如果使用标准帧长度、则需要执行移位操作以将位移动到相应的位位置、以获得更易读的值。

    下面是寄存器的定义。

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

    我看到标准帧消息标识符可以位于寄存器的28:18位。

    我建议生成代码的 HalCoGen 函数(canGetID)对返回值执行移位(基于30处的 Xtd 位)。