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.

[参考译文] TM4C123AE6PM:TM4C123AE6PM

Guru**** 2466550 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1468964/tm4c123ae6pm-tm4c123ae6pm

器件型号:TM4C123AE6PM

工具与软件:

我们可以为 CAN0 BASE 和 CAN1 BASE 设置多少个硬件滤波器?

使用 void CANMessageSet (uint32_t ui32Base、uint32_t ui32ObjID、tCANMsgObject * psMsgObject、tMsgObjType eMsgType)

如手册中所述、该参数表示

 ui32Base 是 CAN 控制器的基地址。

ui32ObjID 是要配置的对象编号(1-32)。

psMsgObject 是指向包含消息对象设置的结构的指针。

eMsgType 指示该对象的消息类型

因此、总共可以设置32个硬件滤波器以进行接收。

问题:

1) 1)我可以只将此 API 与 CAN0BASE 一起使用来设置所有32个过滤器吗?  

 CANMessageSet (CAN0_BASE、(uint32_t) can_obj_id、&can_obj_rx Raw_Recieve、MSG_obj_type_rx);
 
2) 2)我们是否必须为每个基座使用16 - 16个滤波器? CAN0_BASE 为16、CAN1_BASE 为16。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [quote userid="640703" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1468964/tm4c123ae6pm-tm4c123ae6pm 这样、总共可以设置32个硬件过滤器用于接收。

    您好!

     我想您可能对消息对象的定义与接受过滤器存在误解。 每个 CAN 模块都具有多达32个报文对象。 我们不调用滤波器。 至于接收、可使用接受屏蔽来配置每个消息对象、以接收最大长度的消息 ID。 例如、用户可以通过将可接受的过滤器配置为0来将消息对象1配置为接收任何消息 ID。 在另一个示例中、用户可以将报文对象1配置为仅接收等于0x12的报文 ID、将报文对象2配置为仅接收等于0x34的 ID、将报文对象3配置为接收等于0x56的 ID。  

    17.3.6接受已接收的消息对象
    当仲裁域和控制域(CANIFnARB2、RMTEN 和中的 ID 位和 XTD 位)大于
    CANIFnMCTL 寄存器的 DLC[3:0]位)将被完全移入输入报文
    CAN 控制器具有消息处理功能、因此控制器开始扫描消息
    RAM 是否匹配有效消息对象。 扫描消息 RAM 以查找匹配的消息
    对象时、控制器使用通过中的屏蔽位编程的接受过滤
    并通过 CANIFnMCTL 寄存器的 UMASK 位启用 CANIFnMSKn 寄存器。 每个有效值

    将从对象1开始的消息对象与传入消息进行比较以找到匹配项
    报文 RAM 中有报文对象。 如果出现匹配、扫描将停止、并显示消息
    处理程序的执行取决于接收到的是数据帧还是远程帧。

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

    你好查尔斯感谢回复,

    使用硬件滤波器时、我的意思与您所说的相同

    将消息目标1配置为仅接收等于0x12的消息 ID、将消息目标2配置为仅接收 ID 等于0x34、将消息目标3配置为接收 ID 等于0x56。  依此类推直至32。

    这样、我们最多可以配置32个对象。

    我的问题是在 SDK 级别、因为我们有两个 CAN 接口 CAN0 Base 和 CAN1 Base

    这里我想知道是否有与每个接口相关的16-16消息对象的分离?

    基本上我是尝试用 CAN0 Base 配置20个报文对象、其中只有16个有效(CAN0 ISR 接收功能在那里)。

    所以、 要配置其他4个对象、我是否需要使用 CAN1 Base?

    和您所说的一样

    扫描消息 RAM 以查找匹配的消息
    对象时、控制器使用通过中的屏蔽位编程的接受过滤
    并通过 CANIFnMCTL 寄存器的 UMASK 位启用 CANIFnMSKn 寄存器。  

     每个接口分别具有 CANIFnMSKn 寄存器和 CANIFnMCTL 寄存器。

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在这里、我想知道与每个接口关联的16-16个消息对象是否分开?

    拆分意味着什么? 每个 CAN 模块有32个消息对象。

    [报价 userid="640703" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1468964/tm4c123ae6pm-tm4c123ae6pm/5639375 #5639375"]

    基本上我是尝试用 CAN0 Base 配置20个报文对象、其中只有16个有效(CAN0 ISR 接收功能在那里)。

    所以、 要配置其他4个对象、我是否需要使用 CAN1 Base?

    [报价]

    您应该能够在 CAN0中使用所有32个报文对象。  

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

    谢谢查尔斯我刚刚有我的物体 ID 的困惑。

    感谢您的帮助