【车载开发系列】RH850中的FIFO寄存器
【车载开发系列】RH850中的FIFO寄存器
一. 什么是RCFDC0CFD
RCFDC0CFD是瑞萨RH850芯片里CAN-FD控制器(第 0 组)的寄存器。
RC可以解读为CAN控制器模块;FD代表支持CAN-FD模式;C0代表了第0组控制器;CFD可以解读为CAN FD核心寄存器空间
接下来的RCFDC0CFDRFPCTR0、RCFDC0CFDRFSTS0、RCFDC0CFDRFID0 都是它下面的接收FIFO相关寄存器。
二. 什么是RCFDC0CFDRFSTS
它的全称是:CAN FD Channel 0 Receive FIFO 0 Status Register
它的功能是:接收FIFO状态寄存器
它的作用是:查询FIFO里 有没有新报文、是否已满、是否溢出
1)Bit 0 (RFSTS)
它的意思是Receive FIFO Status,代表有没有接收到新的报文。
bit0=1 代表FIFO中有新报文可以读(MESSAGE AVAILABLE)
bit0=0 代表FIFO为空
// 清 FIFO 状态标志(只写 1 清 0),读完必须写 1 清标志
RCFDC0CFDRFSTS0 |= 0x01UL;
2)Bit 1(RFFUL)
FIFO 满的标志位
3)Bit 3(RFOMF)
FIFO 溢出(数据丢失)的标志位
三. 什么是RCFDC0CFDRFPCTR0
它的全称是:CAN FD Channel 0 Receive FIFO 0 Pointer Control Register
它的功能是:接收FIFO控制寄存器
它的作用是:读完报文后,告诉硬件:数据已取走,可以释放缓冲区
读完数据后,写 1 到 Bit 0 (RFPCTR),如果不操作这个寄存器,FIFO 会卡死、再也收不到数据。
| 位编号 | 位名称 | 读写 | 功能说明(超级重要) |
|---|---|---|---|
| Bit0 | RFPCTR | 只写 | 写1:自动更新读指针(指向下一帧报文) |
| Bit1~31 | 保留 | 只读 | 必须写 0,不能修改 |
四. 什么是RCFDC0CFDRFID0
它的全称是:CAN FD Channel 0 Receive FIFO 0 ID Register
它的功能是:接收FIFO 0数据区首地址(映射到报文结构体)
它的作用是:这不是简单寄存器,是一段CAN RAM的映射首地址,每个 FIFO 占 0x80 字节,存放完整 CAN 帧
ID(29bit)+ IDE + RTR + DLC + 8 Byte Data + 时间戳等
五. 什么是INTCANGRECC0
它就是CAN全局接收FIFO收到消息然后触发的中断号。它是由硬件触发的中断,进入中断之后会调用中断响应函数 void INTCANGRECC0(void)。它只有在接收到报文的时候才可能会被触发。
INT CAN G REC C 0
中断 CAN 全局 接收完成 通道 0号
// 中断服务函数(门铃响了以后,CPU 跑这里执行)
void INTCANGRECC0(void)
{
读FIFO
查ID
处理数据
}
六. 总结
RCFDC0CFDRFSTS0:看状态(有没有新数据)
RCFDC0CFDRFID0:取数据(首地址)
RCFDC0CFDRFPCTR0:读完释放(告诉硬件可以覆盖)
INTCANGRECC0是中断响应函数,只有在接收到报文的时候才能发生。
FIFO 寄存器就是CAN硬件自带的收件队列,它满足了CAN硬件自带的收件队列,用CANoe发过来的报文,
先进FIFO队列,然后触发INTCANGRECC0,最后读数据。
634



被折叠的 条评论
为什么被折叠?



