找回密码
 立即注册
楼主: 乘风飞扬

CAN-FD,2组, 有 DMA支持;STC32G144K246 的 2组 独立 CAN-FD 功能测试通过

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-30 15:25:13
已绑定手机

0

主题

17

回帖

126

积分

注册会员

积分
126
发表于 2025-10-23 14:30:41 | 显示全部楼层
ACFADR,只读?
截图202510231429329927.jpg

点评

笔误,后续修改。  发表于 2025-10-23 16:25
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:543
  • 最近打卡:2025-10-30 09:13:58
已绑定手机

48

主题

2299

回帖

8104

积分

论坛元老

积分
8104
发表于 2025-10-23 16:15:17 | 显示全部楼层
zgu*** 发表于 2025-10-23 14:23
请问,设置过滤16个ID,能快速知道当前收到的ID是通过1~16路的哪一路过滤的吗?读哪个寄存器?不用和16个ID ...

我不太理解你的需求,过滤器的作用是接收自己需要的ID报文。
有必要知道当前接收的报文是从哪个过滤器进来的吗?
而且每一路过滤器允许接收什么ID是用户自己设置的。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-30 15:25:13
已绑定手机

0

主题

17

回帖

126

积分

注册会员

积分
126
发表于 2025-10-23 16:27:50 | 显示全部楼层
假设我需要接收16个ID报文,也分别设置好了过滤器,ID是一个接一个的收,我想知道当前我收到的ID是16个ID中的哪一个?如当前收到的是第7个ID的报文,我从哪个寄存器读到ID号7?而不是和16个ID一一比较,得出是ID7
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:543
  • 最近打卡:2025-10-30 09:13:58
已绑定手机

48

主题

2299

回帖

8104

积分

论坛元老

积分
8104
发表于 2025-10-23 17:18:05 | 显示全部楼层
zgu*** 发表于 2025-10-23 16:27
假设我需要接收16个ID报文,也分别设置好了过滤器,ID是一个接一个的收,我想知道当前我收到的ID是16个ID中 ...

接收到报文时可以读取报文ID,数据长度,数据内容等信息:
  1.         READ_CAN_ID(pstcRx[u8RxFrameCnt].u32ID);
  2.         READ_CAN_CTRL(pstcRx[u8RxFrameCnt].RxCtrl.u16Ctrl);
  3.         u8DataSize = au8DLC2Size[pstcRx[u8RxFrameCnt].RxCtrl.rx_ctrl.FDF][pstcRx[u8RxFrameCnt].RxCtrl.rx_ctrl.DLC];
  4.         if(CANx == CAN1)
  5.         {
  6.             printf("CAN1 Read%d: ID=0x%08lx, DLC=%d, ",u8RxFrameCnt+1,pstcRx[u8RxFrameCnt].u32ID,pstcRx[u8RxFrameCnt].RxCtrl.rx_ctrl.DLC);
  7.         }
  8.         else
  9.         {
  10.             printf("CAN2 Read%d: ID=0x%08lx, DLC=%d, ",u8RxFrameCnt+1,pstcRx[u8RxFrameCnt].u32ID,pstcRx[u8RxFrameCnt].RxCtrl.rx_ctrl.DLC);
  11.         }
复制代码

如果非要了解这个报文是从哪个过滤器进来的话,就只能根据读取的ID进行判断了。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-30 15:25:13
已绑定手机

0

主题

17

回帖

126

积分

注册会员

积分
126
发表于 2025-10-23 17:23:34 | 显示全部楼层
写ACFADR是指向ACF号写,要是读ACFADR,是指向当前ACF号就完美了
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-30 15:25:13
已绑定手机

0

主题

17

回帖

126

积分

注册会员

积分
126
发表于 2025-10-23 17:31:08 | 显示全部楼层
如果开启DMA,16个ID报文,在存储器里是怎么排列的?
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:543
  • 最近打卡:2025-10-30 09:13:58
已绑定手机

48

主题

2299

回帖

8104

积分

论坛元老

积分
8104
发表于 2025-10-23 18:17:56 | 显示全部楼层
zgu*** 发表于 2025-10-23 17:31
如果开启DMA,16个ID报文,在存储器里是怎么排列的?

如果CAN DMA数据宽度设置8位模式,就顺序排列。
如果CAN DMA数据宽度设置32位模式,地址就需要32位对齐。
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-30 15:25:13
已绑定手机

0

主题

17

回帖

126

积分

注册会员

积分
126
发表于 前天 16:49 | 显示全部楼层
#define     DMA_CAN1_CR             (*(unsigned char volatile far *)0x7ef533)





        DMA_CAN1R_CR = 0xc1;    //bit7 1:使能 CAN1R_DMA, bit6 1:开始 CAN1R_DMA, bit0 1:清除 FIFO

    DMA_CAN1_CR = 0x11;

    DMA_CAN1_ITVL = 0x0f;   //设置传输间隔时间(低8位)
        DMA_CAN1_ITVH = 0x00;   //设置传输间隔时间(高8位)


DMA_CAN1_CR 这个寄存器好像没有说明?
截图202510291647102778.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:543
  • 最近打卡:2025-10-30 09:13:58
已绑定手机

48

主题

2299

回帖

8104

积分

论坛元老

积分
8104
发表于 前天 17:19 | 显示全部楼层
zgu*** 发表于 2025-10-29 16:49
#define     DMA_CAN1_CR             (*(unsigned char volatile far *)0x7ef533)

DMA_CAN1_CR 也就是规格书上写的 CAN1_AUX_CR
bit0: DMA RX Enable
bit4: DMA TX Enable
回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:11
  • 最近打卡:2025-10-30 15:25:13
已绑定手机

0

主题

17

回帖

126

积分

注册会员

积分
126
发表于 前天 17:27 | 显示全部楼层
STC32G144K246指令集和STC32G12K128指令集一样吗?

点评

一样  发表于 前天 17:37
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-31 03:25 , Processed in 0.141877 second(s), 101 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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