CAN报文接收机制解析-CAN控制器内部原理
需积分: 45 195 浏览量
更新于2024-08-10
收藏 9.91MB PDF 举报
"这篇文档是关于PIC18F46K80系列微控制器中CAN(Controller Area Network)模块的内部工作原理,特别是报文接收机制的详细解释,源自《windows internals part 2(6th)》的一个章节,讨论了报文接收流程、接收优先级以及相关寄存器的使用。"
在描述中,提到了报文接收的细节,主要包括以下知识点:
1. **报文接收流程**:MCU使用两个接收缓冲区,其中一个(MAB,Message Active Buffer)用于接收下一个报文。当报文进入接收缓冲区时,对应的RXFUL标志位会被置1,固件需要在处理完报文后清零该位以允许接收新报文。如果允许接收中断,模块会在接收到有效报文时产生中断。
2. **过滤器匹配**:用户固件可以通过RXBnCON或BnCON寄存器的过滤器命中位确定接收报文是由哪个过滤器触发的。在不同模式下,FILHIT位有不同的使用方法。同时,通过读取相关寄存器,可以判断报文是否是RTR帧,以及是标准标识符还是扩展标识符报文。
3. **数据读取**:根据DLC(Data Length Code)非零值,固件需要读取RXBnDm或BnDm寄存器以获取数据字节。如果接收的是RTR帧并且当前缓冲区未配置为自动RTR处理,固件需手动响应。
4. **接收模式设置**:RXM位用于设置接收模式,可以定义四种不同的接收策略。在模式0下,RXM<1:0>位控制接收标准或扩展报文。在模式1和2下,结合EXID屏蔽器和过滤器位,也能实现相同的功能。模式0的01或10设置只接收标准或扩展报文,而11设置(在模式1和2中)接收所有报文,包括错误帧,这在调试中可能有用但不适用于实际系统。
5. **接收优先级**:在模式0下,RXB0是高优先级缓冲区,有更严格的匹配条件;RXB1是低优先级,有更多过滤器。在模式1和2下,16个接收过滤器可动态分配到任一缓冲区,编号低的缓冲区优先级高。如果报文匹配多个接收条件,将进入编号较低的缓冲区。
6. **接收过滤器与发送缓冲区**:在模式1和2下,如果接收过滤器与配置为发送缓冲区的缓冲区相关联,匹配的报文会被丢弃。固件需要确保接收过滤器不与发送缓冲区关联。
7. **报文接收后的处理**:接收后,MAB的内容会被移到接收缓冲区,覆盖所有寄存器内容,因此固件必须假设接收到报文时缓冲区已改变。
该文档适用于需要深入了解PIC18F46K80微控制器的CAN模块以及报文处理机制的工程师,特别是那些在嵌入式系统设计中使用CAN通信的开发者。
2021-09-29 上传
2018-04-27 上传
2019-03-11 上传
2017-09-29 上传
2017-10-30 上传
2017-09-30 上传
2012-12-25 上传
2012-10-10 上传
点击了解资源详情
MichaelTu
- 粉丝: 25
- 资源: 4034
最新资源
- 构建基于Django和Stripe的SaaS应用教程
- Symfony2框架打造的RESTful问答系统icare-server
- 蓝桥杯Python试题解析与答案题库
- Go语言实现NWA到WAV文件格式转换工具
- 基于Django的医患管理系统应用
- Jenkins工作流插件开发指南:支持Workflow Python模块
- Java红酒网站项目源码解析与系统开源介绍
- Underworld Exporter资产定义文件详解
- Java版Crash Bandicoot资源库:逆向工程与源码分享
- Spring Boot Starter 自动IP计数功能实现指南
- 我的世界牛顿物理学模组深入解析
- STM32单片机工程创建详解与模板应用
- GDG堪萨斯城代码实验室:离子与火力基地示例应用
- Android Capstone项目:实现Potlatch服务器与OAuth2.0认证
- Cbit类:简化计算封装与异步任务处理
- Java8兼容的FullContact API Java客户端库介绍