查看: 3887|回复: 3

[讨论] LPC1778能否设置两路相同的过滤ID(对应两路can)

[复制链接]

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
发表于 2020-4-10 14:59:34 | 显示全部楼层 |阅读模式
一个关于CAN设置硬件过滤ID的问题,目前CAN1、CAN2都设置相同的组扩展过滤,会出现收不到数据的情况。
组扩展标识符表设置如下。
/* The table of ranges of Extended Identifiers must contain an even number of entries */
CAN_EXT_ID_RANGE_ENTRY_T EffGrpSection[] =
{
    {{0, 0x100}, {0, 0x120}},
    {{0, 0x00F00400}, {0, 0x1CF004FF}},
    {{1, 0x100}, {1, 0x120}},
    {{1, 0x00F00400}, {1, 0x1CF004FF}}
};只设置一路CAN过滤ID的话,没有问题
看数据手册里面没有找到相关的说明,测试如果两路CAN设置不同的过滤ID是能正常接收数据帧,请问我设置LPC1778两路CAN组扩展标识符相同怎么设置,我查看库函数貌似不支持这样的设置。
回复

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-4-10 15:34:25 | 显示全部楼层
我查看手册说明标识符列表是必须要按升序排列的,但是我是设置两路CAN不知道是不是一样的要求。
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24890
最后登录
2025-7-21
发表于 2020-4-13 14:17:28 | 显示全部楼层
~物语 发表于 2020-4-10 15:34
我查看手册说明标识符列表是必须要按升序排列的,但是我是设置两路CAN不知道是不是一样的要求。 ...

楼主你好!
你两路配置一样过滤ID, 然后两个CAN都收不到数据对吗?
有没有debugger看看,状态标志那边到底什么情况。
回复 支持 反对

使用道具 举报

该用户从未签到

5

主题

15

帖子

0

中级会员

Rank: 3Rank: 3

积分
221
最后登录
2021-6-26
 楼主| 发表于 2020-4-14 10:44:58 | 显示全部楼层
本帖最后由 ~物语 于 2020-4-14 10:46 编辑
小恩GG 发表于 2020-4-13 14:17
楼主你好!
你两路配置一样过滤ID, 然后两个CAN都收不到数据对吗?
有没有debugger看看,状态标志那边到 ...

发送正常,进不了接收中断,只设置一路时正常。另外我将SDK里面的ID升序保护去掉了,不然LUT表写不进去。
附:
写入LUT:

CAN_EXT_ID_RANGE_ENTRY_T EffGrpSection[] = {
{{CAN_CTRL_NO, ((1 << 11) | 0x300)}, {CAN_CTRL_NO, ((1 << 11) | 0x400)}},
{{CAN_CTRL_NO, ((1 << 11) | 0x500)}, {CAN_CTRL_NO, ((1 << 11) | 0x600)}},
{{CAN_CTRL_NO, ((1 << 11) | 0x700)}, {CAN_CTRL_NO, ((1 << 11) | 0x780)}},

{{1, ((1 << 11) | 0x300)}, {1, ((1 << 11) | 0x400)}},
{{1, ((1 << 11) | 0x500)}, {1, ((1 << 11) | 0x600)}},
{{1, ((1 << 11) | 0x700)}, {1, ((1 << 11) | 0x780)}},
};

C:\Users\Administrator\Desktop\微信图片_20200414104340.png
微信图片_20200414104340.png
SDK程序:
STATIC Status setupEXTSection(uint32_t *pCANAFRamAddr, CAN_EXT_ID_ENTRY_T *pExtCANSec, uint16_t EntryNum)
{
uint16_t i;
uint32_t CurID = 0;
uint32_t Entry;
uint16_t EntryCnt = 0;

/* Setup FullCAN section */
for (i = 0; i < EntryNum; i++) {
if (CurID > pExtCANSec.ID_29) {   //Ascending protection,实际程序中去掉了这部分,不然写不进相同ID
return ERROR;
}
CurID = pExtCANSec.ID_29;
Entry = createExtIDEntry(&pExtCANSec);
pCANAFRamAddr[EntryCnt] = Entry;
EntryCnt++;
}
return SUCCESS;

}
/* Setup Group Extended ID section */
STATIC Status setupEXTRangeSection(uint32_t *pCANAFRamAddr,
CAN_EXT_ID_RANGE_ENTRY_T *pExtRangeCANSec,
uint16_t EntryNum)
{
return setupEXTSection(pCANAFRamAddr, (CAN_EXT_ID_ENTRY_T *) pExtRangeCANSec, EntryNum * 2);
}

回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2025-7-21 17:09 , Processed in 0.092132 second(s), 23 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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