2.4 嵌入式系统的CAN接口电路
图2是嵌入式微处理器S3C44BOX的CAN接口电路图。如图所示,ARM和SJA1000以总线方式连接,由于ARM信号为3.3伏,而CAN总线控制器电平为5伏,所以所有信号之间均需要电平转换,本例中使用了QS34X245作为电平转换芯片。QS34X245为80引脚的双例直插芯片,它既有电平转换功能(5V变到3.3V),又是一个总线开关和隔离器件。QS34X245内提供一组32位高速CMOS兼容的总线开关,当输出使能端OEn(n为1~4)为低电平时,开关通,连能总线A和总线B;当输出使能端OEn为高电平时,则开关断开,总线A和总线B隔离。OE1控制总线A和总线B的低8位(即A7~A0和B7~B0),OE2控制A15~A8和B15~B8,OE3控制A23~A16和B23~B16,OE4控制A31~A24和B31~B24。由于ARM总线非复用,而SJA1000总线复用,所以必须通过逻辑产生地址锁存信号ALE,在本例中该信号由芯片GAL22V10产生。SJA1000的片选、读写信号均采用ARM总线信号,ALE信号由读写信号和地址信号通过GAL产生。在写SJA1000寄存器时,首先往总线的一个地址写数据,作为地址,读写信号无效,ALE变化产生锁存信号;然后写另外一个地址,读写信号有效,作为数据。上述逻辑完全通过GAL产生。此外,CAN总线需要在两线问加一个120欧电阻。
3 系统软件的设计
CAN控制器对于主控制器(CPU)来讲是一个存储器映象的I/O设备,SJA1000的功能配置和行为由主控制器的程序执行,主控制器和SJA1000之间的数据交换经过一组寄存器(控制段)和一个RAM(报文缓存器)完成。RAM部分的寄存器和地址窗口组成了发送缓存器和接收缓存器,其中控制段由CPU在初始化时设置,需要发送的数据由CPU填入发送缓存器中。接收缓存器有两个,对于CPU而言两者地址是相同的,当CPU读取一个缓存器时,另一个可同时在接收数据,两者替工作。SJA1000初始化程序图3所示。