主题中讨论的其他器件: HALCOGEN
尊敬的先生:
我正在使用 TMS570LC4357-EP 板、在该板中、我尝试针对以下限制配置 CAN。
- 仅接受给定 ID 的消息框。
- 对于 TXand RX、单个框中的 id 范围接受消息框。
我已经尝试使用下面显示的代码作为我的示例、该代码是从 halcogen 生成的:
1.仅接受消息框2中的 ID 0x7UL:
/*重置超时值。 *
while ((canREG1->IF2STAT & 0x80U)=0x80U)
{
}/*等待*/
canREG1->IF2MSK
= 0xC0000000U/* MXtd、MDir *
|(T_UINT32)((T_UINT32)((T_UINT32) 0x1FFFFFFFUL&(T_UINT32) 0x1FFFFFFFU)<<(T_UINT32) 0x0UL);/* extendard mask*/
canREG1->IF2ARB
=(T_UINT32) 0x80000000U/* MsgVal */
|(T_UINT32) 0x0000U /*XTD*/
|(T_UINT32) 0x00000000U /*目录作为 Rx*/
|(T_UINT32)((T_UINT32)((T_UINT32) 0x7UL &(T_UINT32) 0x1FFFFFFFU)<<(T_UINT32) 0x0UL);/* extendard 标识符*/
canREG1->IF2MCTL
= 0x00001000UL /*使用接受屏蔽*/
|(T_UINT32) 0x00000400U /* RxIE*/
|(T_UINT32) 8U;/*DLC*/
CANREG1->IF2CMD =(T_UINT8) 0xF8U;
canREG1->IF2NO = 2U;
问题/意见:
- 即使接收来自 ID 0x3x 或0x2x 的消息、甚至是0x7x 的消息、也会触发中断。 我不确定为什么会触发0x3x 和0x2x 的中断,请告诉我为什么会触发中断。
- 即使我禁止使用 "IF2MCTL"寄存器中的接受屏蔽、行为也是一样的。
2.要在 ID 0x10UL 至0x17UL 范围内从消息框2接受:
/*重置超时值。 *
while ((canREG1->IF2STAT & 0x80U)=0x80U)
{
}/*等待*/
canREG1->IF2MSK
= 0xC0000000U/* MXtd、MDir *
|(T_uint32)((T_uint32)((T_uint32) 0x1FFFFFF8UL&(T_uint32) 0x1FFFFFFFUL)<<(T_uint32) 0x0UL);/* extendard mask*/
canREG1->IF2ARB
=(T_UINT32) 0x80000000U/* MsgVal */
|(T_UINT32) 0x0000U /*XTD*/
|(T_UINT32) 0x00000000U /*目录作为 Rx*/
|(T_UINT32)((T_UINT32)((T_UINT32) 0x17UL &(T_UINT32) 0x1FFFFFFFU)<<(T_UINT32) 0x0UL);/* extendard 标识符*/
canREG1->IF2MCTL
= 0x00001000UL /*使用接受屏蔽*/
|(T_UINT32) 0x00000400U /* RxIE*/
|(T_UINT32) 8U;/*DLC*/
CANREG1->IF2CMD =(T_UINT8) 0xF8U;
canREG1->IF2NO = 2U;
问题/意见:
- 为接收 ID 0x3x 或0x2x 发出的消息、甚至为0x7x 触发中断。 我不确定为什么仅针对0x17x 触发消息回调、 而仅针对其他 ID 接收到 Rxok。 请告诉我原因。
- ID 范围的接收配置如上述代码 snappet 中所示、但不确定如何为给定 ID (ID 范围)进行传输。
- 如果消息框配置为 DLC: 8、(8字节)且数据传输仅为5字节、谁可以在传输期间将 DLC 更改为5字节?、我在控制之后更改了 DLC 寄存器(IF2CMD =((T_UINT8)(M_IFxCMD_DATAB | M_IFxCMD_DATAA | M_IFxCMD_DATAA | M_IFxCMD_TXW8)、但已在 CANQRxCMD_RQW8中接收到数据分析器、但已在 CANxCMD_RQWQRxCMD_8中接收数据。