zoukankan      html  css  js  c++  java
  • CAN总线 SJA1000中断

    背景:

      最近一直在使用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日

      

  • 相关阅读:
    30-语言入门-30-分数加减法
    29-语言入门-29-两点距离
    bootstrapcss3触屏滑块轮播图
    input输入样式,动画
    HTML5夜空烟花绽放动画效果
    精美留言、评论框,带微博表情
    Sublime Text 3汉化中文版
    直播英国脱欧各国反应?谁将是最大赢家?
    品牌关键字的重要性?是什么呢
    网站收录之网络推广
  • 原文地址:https://www.cnblogs.com/ChYQ/p/5284409.html
Copyright © 2011-2022 走看看