【经验】RH850 RS-CANFD CAN中断设置
创始人
2025-01-09 04:34:37
0

RS-CANFD模块有发送、接收和错误等几类中断。

本文从中断源分析、中断注册到模块中断使能设置进行全方位说明,并附有代码实现。

希望能帮助开发小伙伴完成RS-CANFD模块的中断设置。

PS:因为实际开发和调试过程中是RS-CANFD Channel 2所以部分截图为通道2的信息。

注意:CAN(FD)接收采用Receive FIFO形式,未采用Receive Buffer形式。


目录

中断源和中断向量号

中断注册

中断设置寄存器

中断使能代码

中断禁能代码

清楚中断标志位代码

RS-CANFD Global和Channel中断触发逻辑图

RS-CAN TX和RX Buffer中断设置

RS-CAN BusOff中断设置​​​​​​​


中断源和中断向量号

【重要*】整理出Channel 2中断信息如下:

中断源中断源描述中断向量号
1INTRCAN2TRXCAN2发送中断219
2INTRCANGRECC0CAN接收FIFO中断23
3INTRCAN2ERRCAN2错误中断217

中断注册

分析完上述中断源后,需要在boot.asm文件中进行中断注册。

使用中断向量号完成中断服务函数ISR执行代码的添加:

接下来,在c文件中添加ISR:

#define NUMINTRSCAN2TRX    219 #define NUMINTRSCAN2ERR    217 #define NUMINTRSCANRECC    23

中断设置寄存器

主要使用到的中断有发送中断RCAN2TRX、接收中断RCANGRECC0和错误中断RCAN2ERR。涉及中断控制寄存器ICXXX(XXX=RCAN2TRX/GRECC0/RCAN2ERR)。

ICXXX寄存器基地址信息:

/* Interrupt Control registers*/ #define ICRCAN2_ERR                     (*((uint32 volatile * )0xFFFFB1B2UL)) #define ICRCAN2_REC                     (*((uint32 volatile * )0xFFFFB1B4UL)) #define ICRCAN2_TRX                     (*((uint32 volatile * )0xFFFFB1B6UL)) #define ICRCAN2_GRECC0                  (*((uint32 volatile * )0xFFFEEA2EUL))

ICXXX寄存器定义:

 最重要的设置位是中断使/禁能和中断标志位:

(1)中断使/禁能位:

 Bit7 MKxxx:置位时禁能中断,清零时使能中断。

中断使能代码

/* ICXXX, MSK bit, 0:Enable interrupt; 1:Disable interrupt */ #define CAN_INT_MASK                    ((uint16)0x0080U)  ICRCAN2_ERR &= ~CAN_INT_MASK;  ICRCAN2_TRX &= ~CAN_INT_MASK;  ICRCAN2_GRECC0 &= ~CAN_INT_MASK;

中断禁能代码

/* ICXXX, MSK bit, 0:Enable interrupt; 1:Disable interrupt */ #define CAN_INT_MASK                    ((uint16)0x0080U)  ICRCAN2_ERR |= CAN_INT_MASK;  ICRCAN2_TRX |= CAN_INT_MASK;  ICRCAN2_GRECC0 |= CAN_INT_MASK;

(2)中断标志位:

Bit12 RFxxx:软件清零,清除中断标志位。

清楚中断标志位代码

/* ICXXX, RF bit, request flag */ #define CAN_INT_RF                      ((uint16)0x1000U)   /* clear Busoff Interrupt flag */ ICRCAN2_ERR &= ~CAN_INT_RF;  /* clear Tx Interrupt flag */ ICRCAN2_TRX &= ~CAN_INT_RF;  /* clear Rx Interrupt flag */ ICRCAN2_GRECC0 &= ~CAN_INT_RF;

此外,也需要注意Bit15 CTxxx:

 对于RS-CANFD而言,三类中断均为沿检测,CTxxx=0。

RS-CANFD Global和Channel中断触发逻辑图

RS-CAN TX和RX Buffer中断设置

除了上述ICXXX寄存器的设置外,RS-CANFD模块内部还有Buffer为单位的中断使/禁能设置寄存器。

 主要涉及到的寄存器:

1、发送Buffer发送完成中断:

 Bit TMIEp:置位使能,清零禁能。

2、接收FIFO Buffer完成中断:

 Bit RFIE: 置位使能,清零禁能。

RS-CAN BusOff中断设置

Bus off entry interrupt enable

 

Bit BOEIE:置位使能,清零禁能。

相关内容

热门资讯

透视游戏!pokemmo脚本辅... 透视游戏!pokemmo脚本辅助(透视)小唐家乐园辅助器下载链接(原来真的有辅助下载)-哔哩哔哩1、...
透视了解!丽水都莱辅助(辅助)... 透视了解!丽水都莱辅助(辅助)空谷幽兰确实存在有辅助平台(哔哩哔哩)1、不需要AI权限,帮助你快速的...
据了解!hhpkoer辅助器(... 据了解!hhpkoer辅助器(透视)微乐小程序自建房辅助(本来存在有辅助教程)-哔哩哔哩1、在hhp...
近期!wpk俱乐部辅助器(透视... 近期!wpk俱乐部辅助器(透视)中至九江麻将辅助器(总是有辅助辅助器)-哔哩哔哩1、中至九江麻将辅助...
有挂了解!潮汕暗宝透视插件(辅... 有挂了解!潮汕暗宝透视插件(辅助)熟人炸金花好像存在有辅助插件(哔哩哔哩)所有人都在同一条线上,像星...
透视辅助!hhpoker真的假... 透视辅助!hhpoker真的假的(透视)微乐小程序辅助收费(真是有辅助工具)-哔哩哔哩1、下载好hh...
透视玄学!we-poker软件... 透视玄学!we-poker软件(透视)欢乐达人葫芦鱼辅助器(真是是有辅助修改器)-哔哩哔哩1、进入到...
解谜了解!微乐智能辅助软件是真... 解谜了解!微乐智能辅助软件是真的吗(辅助)天天监利麻将真是真的是有辅助脚本(哔哩哔哩)1、微乐智能辅...
第三方技巧!pokemmo脚本... 第三方技巧!pokemmo脚本手机版(透视)手机微乐小程序自建房透视免费(都是有辅助器)-哔哩哔哩第...
为了进一步!wepoker有辅... 为了进一步!wepoker有辅助插件吗(透视)约逗东乡辅助器(真是真的有辅助软件)-哔哩哔哩1、约逗...