LPC2131基于CPLD的CAN接口设计
发布时间:2008/8/16 0:00:00 访问次数:547
引 言
philips公司的lpc213l是基于arm7tdmi-s的高性能32位risc微控制器。
它具有arm处理器的所有优点——低功耗、高性能和较为丰富的片上资源,但lpc2131内部没有集成can控制器,而无法利用can总线来进行通信。为了使得lpc2131能够利用can总线进行通信,可以通过外部扩展来实现其功能。目前,比较普通的方法是在lpc2131的外部采用can控制器设计can总线接口。lpc2131与can控制器的接口电路如图1所示。
这种方法中,lpc2131是通过gpio口与can控制器sja1000相连实现数据交互的。lpc2131通过寄存器ioset/ioclr来设定i/o口的高/低状态,虽然可以同时置位/拉低选定的引脚,但不能同时将某些口线拉高而将某些口线拉低。假定p0[15:8]初始状态为0xa5,若将p0[15:8]同时变为0x5a,则必须通过io0set和io0clr两次进行。程序实现如下:
pinsel0=0x00000000;
io0dir=0x0000ff00;
io0set=0x5a00;
io0clr=0xa500;
p0[15:8]上会出现0xff的中间状态。在高速通信系统中,这些中间状态可能会造成损失。虽然可以通过io0pin进行操作来消除这样的中间状态,但是philips公司不推荐这种做法,非必要时尽量不要使用。
can驱动器接口芯片与lpc2131的串口接口电平上是相互匹配的,因此理论上可以将二者直接连接,采用串行通信方式实现。采用can总线通信,在长距离通信时,can总线两端要加终端电阻。其作用是避免数据传输又反射回来,产生反射波而使数据遭到破坏;同时,能提高总线传输的抗干扰能力。理论上,在每个接收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。通常判断原则是根据数据速率和电缆长度进行匹配的,但这在实际中难以掌握,一般都是依据经验进行设计。
可编程逻辑器件(pld)是20世纪70年代在asic设计的基础上发展起来的一种新型逻辑器件。20世纪80年代末,美国altera和xilinx公司分别推出大规模和超大规模的复杂可编程逻辑器件(cpld)及现场可编程逻辑门阵列器件(fpga)。自从进入20世纪90年代以来,可编程逻辑器件得到了飞速发展,向高度集成、高速度和低价位方向不断迈进;其应用领域不断扩大,可用于状态机、同步、译码、解码、计数、总线接口和串并转换等很多方面。使用cpld可以提高系统集成度,降低噪声,增强系统可靠性并降低成本。
cpld技术的出现,为我们提供了一种有效的解决办法:在can驱动器接口与lpc2131之间接一块cpld,对cpld进行功能编程,使其负责串行总线的数据传输和防止can发送反射。
选择altera公司max3000a系列的型号为epm3128atc100-7(简称“epm3128”)的cpld芯片。此芯片兼容3.3 v和5 v的i/o 口。这样,lpc2131、epm3128和tja1040在i/o电平上是相互匹配的。
1 epm3128接口定义
epm3128设置成双向串行总线通道。其中,2个i/o口被定义为canrxd(in)、cantxd(out),分别连接can收发器tja1040的rxd和txd端,构成can总线上接收数据和发送数据通道;另外2个i/o口被定义为armrxd(in)、armtxd(out),分别连接lpc2131的rxd1和txd1端,构成处理器的串口接收数据和发送数据通道。整个数据的传输过程中,并不改变串行数据的协议和格式,接口电路全为ttl电平,期问不需要进行任何的处理。通信数据的校验、报错均交给通信两端的处理器完成。lpc2131、epm3128和tja1040的接口框图如图2所示。
2 epm3128功能实现
采用功能块编程实现epm3128的数据传输和屏蔽can发送反射的内部逻辑。图中txarm2、rxcan2定义为输入变量,分别对应外部的armtxd、canrxd引脚;txcan2、rxarm2定义为输出变量,分别对应外部的cantxd、armrxd引脚。总线空闲时,总线上的状态一直保持为“1”,即txarm2、rxcan2、txcan2、rxarm2的值全部为“1”。当输入总线收到一个状态“0”信号时,表示总线开始传输数据。如果lpc2131要发送数据,则lpc2131先向armtxd端口发送一个“0”起始信号,占据总线并在下一个时钟开始发送数据帧;如果tja1040从现场接收到新数据,则tja1040先向canrxd端口发送一个“0”起始信号,占据总线并在下一个时钟开始发送数据帧。以此,完成正常通信过程中数据位从串口到串口的传输。
程序屏蔽can发送反射,就是屏蔽can总线接收到的从输出总线上反射的“0”信号,因为接口从高阻态被唤醒是靠一个“0”的起始信号。如果lpc2131正在发送数据,此时输人端口armtxd通过变量txarm2传送一位为“0”的信号到变量txcan2,并从输出口cantxd送出。受总线辐射影响canrxd输入口会从can总线接收到一个“0”信号,并将“0”信号传送给变量rxcan2,此时rxcan2收到的这个“0”信号是错误信号。经逻辑判断,程序将变量rxarm2维持为1,端口armrxd仍保持高阻态“1”。反射的“0”信号虽然被接收到,但在cpld内部被屏蔽处理掉。如果没有屏蔽处理,那么这个错误的“
引 言
philips公司的lpc213l是基于arm7tdmi-s的高性能32位risc微控制器。
它具有arm处理器的所有优点——低功耗、高性能和较为丰富的片上资源,但lpc2131内部没有集成can控制器,而无法利用can总线来进行通信。为了使得lpc2131能够利用can总线进行通信,可以通过外部扩展来实现其功能。目前,比较普通的方法是在lpc2131的外部采用can控制器设计can总线接口。lpc2131与can控制器的接口电路如图1所示。
这种方法中,lpc2131是通过gpio口与can控制器sja1000相连实现数据交互的。lpc2131通过寄存器ioset/ioclr来设定i/o口的高/低状态,虽然可以同时置位/拉低选定的引脚,但不能同时将某些口线拉高而将某些口线拉低。假定p0[15:8]初始状态为0xa5,若将p0[15:8]同时变为0x5a,则必须通过io0set和io0clr两次进行。程序实现如下:
pinsel0=0x00000000;
io0dir=0x0000ff00;
io0set=0x5a00;
io0clr=0xa500;
p0[15:8]上会出现0xff的中间状态。在高速通信系统中,这些中间状态可能会造成损失。虽然可以通过io0pin进行操作来消除这样的中间状态,但是philips公司不推荐这种做法,非必要时尽量不要使用。
can驱动器接口芯片与lpc2131的串口接口电平上是相互匹配的,因此理论上可以将二者直接连接,采用串行通信方式实现。采用can总线通信,在长距离通信时,can总线两端要加终端电阻。其作用是避免数据传输又反射回来,产生反射波而使数据遭到破坏;同时,能提高总线传输的抗干扰能力。理论上,在每个接收数据信号的中点进行采样时,只要反射信号在开始采样时衰减到足够低就可以不考虑匹配。通常判断原则是根据数据速率和电缆长度进行匹配的,但这在实际中难以掌握,一般都是依据经验进行设计。
可编程逻辑器件(pld)是20世纪70年代在asic设计的基础上发展起来的一种新型逻辑器件。20世纪80年代末,美国altera和xilinx公司分别推出大规模和超大规模的复杂可编程逻辑器件(cpld)及现场可编程逻辑门阵列器件(fpga)。自从进入20世纪90年代以来,可编程逻辑器件得到了飞速发展,向高度集成、高速度和低价位方向不断迈进;其应用领域不断扩大,可用于状态机、同步、译码、解码、计数、总线接口和串并转换等很多方面。使用cpld可以提高系统集成度,降低噪声,增强系统可靠性并降低成本。
cpld技术的出现,为我们提供了一种有效的解决办法:在can驱动器接口与lpc2131之间接一块cpld,对cpld进行功能编程,使其负责串行总线的数据传输和防止can发送反射。
选择altera公司max3000a系列的型号为epm3128atc100-7(简称“epm3128”)的cpld芯片。此芯片兼容3.3 v和5 v的i/o 口。这样,lpc2131、epm3128和tja1040在i/o电平上是相互匹配的。
1 epm3128接口定义
epm3128设置成双向串行总线通道。其中,2个i/o口被定义为canrxd(in)、cantxd(out),分别连接can收发器tja1040的rxd和txd端,构成can总线上接收数据和发送数据通道;另外2个i/o口被定义为armrxd(in)、armtxd(out),分别连接lpc2131的rxd1和txd1端,构成处理器的串口接收数据和发送数据通道。整个数据的传输过程中,并不改变串行数据的协议和格式,接口电路全为ttl电平,期问不需要进行任何的处理。通信数据的校验、报错均交给通信两端的处理器完成。lpc2131、epm3128和tja1040的接口框图如图2所示。
2 epm3128功能实现
采用功能块编程实现epm3128的数据传输和屏蔽can发送反射的内部逻辑。图中txarm2、rxcan2定义为输入变量,分别对应外部的armtxd、canrxd引脚;txcan2、rxarm2定义为输出变量,分别对应外部的cantxd、armrxd引脚。总线空闲时,总线上的状态一直保持为“1”,即txarm2、rxcan2、txcan2、rxarm2的值全部为“1”。当输入总线收到一个状态“0”信号时,表示总线开始传输数据。如果lpc2131要发送数据,则lpc2131先向armtxd端口发送一个“0”起始信号,占据总线并在下一个时钟开始发送数据帧;如果tja1040从现场接收到新数据,则tja1040先向canrxd端口发送一个“0”起始信号,占据总线并在下一个时钟开始发送数据帧。以此,完成正常通信过程中数据位从串口到串口的传输。
程序屏蔽can发送反射,就是屏蔽can总线接收到的从输出总线上反射的“0”信号,因为接口从高阻态被唤醒是靠一个“0”的起始信号。如果lpc2131正在发送数据,此时输人端口armtxd通过变量txarm2传送一位为“0”的信号到变量txcan2,并从输出口cantxd送出。受总线辐射影响canrxd输入口会从can总线接收到一个“0”信号,并将“0”信号传送给变量rxcan2,此时rxcan2收到的这个“0”信号是错误信号。经逻辑判断,程序将变量rxarm2维持为1,端口armrxd仍保持高阻态“1”。反射的“0”信号虽然被接收到,但在cpld内部被屏蔽处理掉。如果没有屏蔽处理,那么这个错误的“
上一篇:设计合理的高速总线测试方法
上一篇:嵌入式DDR总线的布线分析与设计