背景:

  最近一直在使用C8051F340 + SJA1000来实现CAN通信,就SJA1000部分做个记录。

正文:

  整个系统结构拓扑图如下:

   

  两路CAN,C8051F340作为CPU,处理CAN与USB数据。

  转入正题,关于SJA1000的中断。

  SJA1000的/INT脚与单片机的外部中断输入脚相连,平时/INT保持高电平,当SJA1000内部有中断时,/INT脚及变为低电平(单片机外部输入中断引脚设置为低电平有效边沿触发),等待单片机进行处理。

  SJA1000中断部分应该关注两个寄存器“IR”(Interrupt Register),“IER”(Interrupt Enable Register)。顾名思义,“IER”为使能相应中断,“IR”为指示中断状态,应当注意的是:当单片机读取了SJA1000的“IR”寄存器后,/INT脚重新变为高电平,“IR”寄存器所有位复位为0!

  还有一个值得注意的是:为了保险起见,应该要将“IER”清零,然后根据需要配置相应位。

  为此,我也郁闷了许久,过程如下:为了测试,于是将2路CAN相互接通,当通过SJA1000_1发送数据时,按照逻辑来说,SJA1000_1发送数据,SJA1000_2过滤接收该条数据并产生接收完成中断,可是这个SJA1000_1竟然与SJA1000_2同时产生中断!而我中断使能使用的是“或”的方式配置了“总线错误中断”、“数据溢出中断”“错误报警中断”、“接收中断”,SJA1000_1不应该会在这个时候产生中断!SJA1000_1难道会过滤接收自己发的数据?这是首先被怀疑的,查了资料后发现,处于发送状态的节点是不会接收数据的。排除!折腾了许久才发现SJA1000_1发送完毕产生了发送完成中断,因此可以确认“发送使能中断”不清零的话,是有可能被打开的(SJA1000的官档并未说明每一位的默认值),其它“使能中断”亦如此,

记录地点:深圳WZ

记录时间:2016年3月16日

  

最新文章

  1. 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100
  2. 在SQL Server里禁用聚集索引——真的好么?
  3. jquery属性选择器(同时匹配多个条件)
  4. Common Issues Which Cause Roles to Recycle
  5. Spring - 配置Bean - 自动装配 关系 作用域 引用外部属性文件
  6. stringgrid事件大全
  7. Redis错误配置详解
  8. .htaccess中301强制跳转到带www前缀或不带www的域名
  9. [转]C#如何在ListView失去焦点的情况下仍然保持Item高亮
  10. vmware虚拟机下ubuntu 13.04使用zeranoe脚本交叉编译ffmpeg
  11. oracle遍历游标
  12. 实现Android语音识别服务接口 RecognitionService的方法
  13. 解决Andriod使用HttpURLConnection 失败问题
  14. 开源协议瞎扯淡,什么是 MIT 协议?[转]
  15. Spring Security(三十五):Part III. Testing
  16. springdata jpa 原始sql的使用
  17. css实现文本两端对齐
  18. KVM安装启动虚拟机
  19. python3+selenium框架设计09-生成测试报告
  20. springmvc拦截器的简单了解

热门文章

  1. vi命令大全
  2. windows下安装使用Composer记录
  3. Java线程池的那些事
  4. BZOJ2186: [Sdoi2008]沙拉公主的困惑
  5. POJ3208:Apocalypse Someday
  6. spring--学习之IOC DI
  7. php 数据访问(以mysql数据库为例)
  8. html img src base64
  9. ubuntu下vim输入中文和中文显示
  10. 虚拟机NUMA和内存KSM