微处理器和CAN控制器的接口方法 本发明涉及芯片接口技术领域,具体地涉及微处理器和CAN控制器的接口方法。
CAN网(CONTROLLER AREA NETWORK)是一种新型的串行现场总线,这种总线的配置灵活,支持多个主站,各主站根据优先权访问总线,有无破坏性的基于优先权的总线仲裁方案,传输速度最快能达1MBIT/S,容错性能好,抗干扰能力强,很适合于工业控制领域,是一种很有前途的现场总线。SJA1000是PHILIP公司生产的CAN控制器,该控制器支持CAN2.0B协议、有很强的报文过滤功能、控制灵活方便,是扩展CAN网络时很好的选择。
7700系列微处理器(CPU)是日本三菱公司生产的16位高性能单片机,这个系列的CPU内含有丰富的资源,有定时器/计数器,A/D转换器,含有片内RAM和EPROM(FLASH),I/O口线多,处理速度快,选用24MHZ晶振时,最短指令执行时间是166ns。在工业控制领域的用途很广。
因此,设计这两种芯片之间的简单有效的接口有很现实的意义。
SJA1000与CPU的接口信号主要有:时分复用的地址/数据线共8条,地址锁存信号线,读写控制线,片选信号线。7700系列CPU(以M37733为例)有24条地址线,其中最高8位的地址线可以时分复用为数据线。正因为M37733是高8位地址线时分复用,所以和SJA1000以总线相连时,很难构成正确地片选信号,所以通常认为它们不能以总线相连。
最常见的连接方式是用CPU的I/O口,这种方式实际上是用I/O口模拟总线,工作原理如下:当CPU从SJA1000的某个存储器读数时,先产生片选信号,选通SJA1000,CPU把P7口置为输出方式,输出存储器的地址,产生一个地址锁存信号到SJA1000的ALE,然后改P7口为输入方式,产生一个有效的读信号,这时P7口就是所需要的数值。往SJA1000中写数的过程也大致相同,从以上可以看出,一次简单的读写操作处理起来很复杂。实际上,这也很费时间,据实验测量,写一个字节的时间大约是16us,这样写一帧报文的时间为0.17ms。如果把CAN的通讯速率设成1MBIT/S,一帧报文在网上的传输时间大约是0.11ms。
由此可以看到,传统的接口方式存在如下的缺点:1.写一帧报文的时间比传一帧报文的时间还要长,以致CPU和CAN控制器之间的接口已经成为通讯的瓶颈,严重的降低了通讯的速度。2.CPU要花大量的时间来处理通讯,这样在一些要求实时性要求高的场合这种应用方式受到了很大的限制。3.这种接口方式占用了CPU芯片大量的I/O口,不利于系统的进一步扩展。
本发明的目的是提供一种微处理器和CAN控制器之间简单可靠的接口方法,使这两种芯片都能发挥各自的优势,使CPU尽可能少处理通讯的工作,使CAN传输速度快的优势能尽可能充分的发挥。
本发明的技术方案是这样实现的,通过对SJA1000的深入研究,发现SJA1000存储器的地址范围是00-7FH,并且最高位地址线无效,也就是说对SJA1000来说,00H和80H表示同一个存储器的地址,依次类推,n和n+80H表示同一个存储器的地址。依这个思路,我们可以借助P2.7(时分复用的地址、数据线的最高位)来寻址SJA1000,即把P2.7设置成片选信号,P2.0-P2.6设置成地址信号用以寻址SJA1000的片内存储器。所以SJA1000的00号存储器的绝对地址是80××××H(×表示可以是任何数值),SJA1000的01号存储器的绝对地址是81××××H,SJA1000的最后一个存储器的地址是OFF××××H。
一种微处理器M37733芯片和一片CAN控制器SJA1000连接方法是:用微处理器M37733芯片的P2.7(时分复用的地址、数据线的最高位)作为SJA1000的片选信号,把CPU地P2.0-P2.7依次接到SJA1000的D0-D7,同时依次连好读信号R,写信号W,地址锁存信号ALE;P2.7经过一个非门与SJA1000的CS连接,SJA1000的00号存储器的绝对地址是80××××H(×表示可以是任何数值),SJA1000的10H号存储单元的地址是90××××H;从SJA1000的00号存储器读数时,用一条指令LDA A,80××××H就可以了;当往SJA1000的10H号存储器写数时,用指令STA A,90××××H。
7700系列CPU在用于存储器扩展方式时,最大的寻址范围是OFFFFFFH,所以上述的地址仍然在CPU可寻址的范围内。
用这种方法,可以稍加改动就用在用一个CPU带多个CAN网的场合,在使用时,把P2.7和P0或P1口的部分地址线经逻辑组合形成片选信号即可。
本发明接口方法的优点是接口简单,编程简单方便,使CPU从繁重的干预通讯的任务中解脱出来,能充分发挥CAN传输速度快的优点,节省了大量的I/O口,容易扩展到用一个CPU芯片控制多个CAN控制器的场合。
下面结合附图对本发明的具体实施方式作进一步详细的描述。
图1是现有技术的接口方法的示意图;
图2是本发明的接口方法的示意图;
图3是本发明的另一个实施例的接口方法的示意图。
图1是现有技术的接口方法的示意图。最常见的连接方式是用CPU的I/O口。这种方式实际上是用I/O口模拟总线,工作原理如下:当CPU从SJA1000的某个存储器读数时,先产生片选信号,选通SJA1000,CPU把P7口置为输出方式,输出存储器的地址,产生一个地址锁存信号到SJA1000的ALE,然后改P7口为输入方式,产生一个有效的读信号,这时P7口就是所需要的数值。往SJA1000中写数的过程也大致相同,从以上可以看出,一次简单的读写操作处理起来很复杂。实际上,这也很费时间,据实验测量,写一个字节的时间大约是16us,这样写一帧报文的时间为0.17ms。如果把CAN的通讯速率设成1MBIT/S,一帧报文在网上的传输时间大约是0.11ms。
图2是本发明的接口方法的示意图;7700系列CPU和CAN控制器SJA1000的接口实例列举如下,CPU以M37733为例。M37733芯片和一片SJA1000连接方法是:用P2.7(时分复用的地址、数据线的最高位)作为SJA1000的片选信号,把CPU地P2.0-P2.7依次接到SJA1000的D0-D7,同时依次连好读信号R,写信号W,地址锁存信号ALE;SJA1000的00号存储器的绝对地址是80××××H(×表示可以是任何数值),SJA1000的10H号存储单元的地址是90××××H;从SJA1000的00号存储器读数时,用一条指令LDA A,80××××H就可以了;当往SJA1000的10H号存储器写数时,用指令STA A,90××××H。
图3是本发明的另一个实施例的接口方法的示意图。当需要用一个CPU芯片控制两个CAN控制器时,在图2的基础上稍加修改即可,如附图3所示,第一片SJA1000的片选信号由CPU得地址线P2.7和P1.7共同产生。所以第一片SJA1000的00号存储器的地址是808×××H,01号存储器的地址是818×××H;第二片SJA1000的片选信号由CPU得地址线P2.7和P1.6共同产生,所以第二片SJA1000的00号存储器的地址是804×××H,01号存储器的地址是814×××H,其它存储器的地址可依次类推。以这种连接方式,CPU对SJA1000内存储器的读写操作用一条指令就可以实现。
当需要用用一个CPU芯片控制多个CAN控制器时,接口和寻址方法基本相同。