查看: 2444|回复: 1

[MQX] MQX FLEXCAN 的函数FLEXCAN_Rx_message参数设定不妥

[复制链接]

该用户从未签到

17

主题

66

帖子

0

中级会员

Rank: 3Rank: 3

积分
280
最后登录
2016-7-30
发表于 2015-10-21 22:11:02 | 显示全部楼层 |阅读模式
本帖最后由 xixixihaha 于 2015-10-21 22:31 编辑

在研究用FLEXCAN的同一个MB接收Standard和Extended帧,
目前在解决了之前帖子提到的FLEXCAN_Read 和 FLEXCAN_Write 的bug后,发现FLEXCAN_Rx_message函数的参数设置不妥。
对于某一个接收到的MB,其ID Format是由其实际的帧类型决定的,而不应该由入口参数来决定。
我在实现同一个MB接收Standard和Extended帧时发现,当如果用FLEXCAN_STANDARD 来作为入口,则接收到的EXTENDED消息返回ID不正确,而当用FLEXCAN_EXTENDED 来作为入口,则接收到的STANDARD消息返回ID不正确。但这个Format信息其实是由MessageBuffer中的IDE位来决定的。
所以format应该设置为[out]类型,
函数应该声明为
uint32_t FLEXCAN_Rx_message(
uint8_t dev_num,
uint32_t mailbox_number,
uint32_t *identifier,
uint32_t *format,
uint32_t *data_len_code,
void *data,
uint32_t int_enabled)

代码应该修改为 在如下注释语句后加入format赋值,并将format判断修改为 *format
   /* store data len */
   *format = can_reg_ptr->MB[mailbox_number].CS & CAN_CS_IDE_MASK?FLEXCAN_EXTENDED:FLEXCAN_STANDARD;
   dlen = can_reg_ptr->MB[mailbox_number].CS & CAN_CS_DLC_MASK;
   DLC = dlen >> CAN_CS_DLC_SHIFT;

   /* Reassemble the message ID */
   switch (*format)

这样函数就可以返回MB中接收的帧的正确类型,且返回正确的ID了


我知道答案 目前已有1人回答
回复

使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2015-10-22 08:52:51 | 显示全部楼层
    支持一下
    该会员没有填写今日想说内容.
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-7-22 10:21 , Processed in 0.080900 second(s), 22 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

    快速回复 返回顶部 返回列表