原创 精简ISA总线扩展应用 -- 成都英创信息技术有限公司

2009-3-30 10:45 2029 0 分类: MCU/ 嵌入式

文章来源:http://www.emtronix.com/case/case2008188.html


  英创公司的嵌入式主板系列产品为了支持客户的各种应用扩展,所有的ARM9系列和X86系统的嵌入式主板均带有精简ISA扩展总线。ISA总线是PC机最经典的扩展总线(在嵌入式领域,通常以PC104总线的形式出现),在工业控制领域有着广泛的应用,以及深厚的应用基础。所谓精简ISA总线就是在保持通用ISA总线时序不变的前提下,仅保留常用的总线信号,以最大限度的减少总线总的信号数量,以适应模块的小型化。英创公司的精简ISA总线包括8位数据总线、5位地址总线(可扩展到13位)、片选控制线、读写控制线以及中断请求线。英创公司所提供的评估开发底板将这些信号线制定了一个接口标准,采用双排20芯 IDC插针,用户可利用精简ISA总线进行系统功能的扩展。


 

        在英创的精简ISA总线中,设置了2条独特的片选控制信号CS0#和CS1#,这样就省去了大量的高位地址总线。CS0#和CS1#为低电平有效的脉冲信号。在x86 CPU的嵌入式产品中,CS0#的片选区域为0x200 – 0x21F,而CS1#的片选区域为0x300 – 0x31F。在ARM9 CPU的产品中,应用程序通过专用的API函数来进行总线读写,读写函数支持选择CS0或CS1片选,而偏移量则直接表示SA0 – SA4的状态。

 

        以下是英创公司所提供的精简ISA扩展总线接口的信号定义:

 


信号名称及简要描述精简ISA信号名称及简要描述

PIN#

PIN#

RESET#,复位输出,低有效
12
SA0,地址总线

SD0,数据总线,LSB
34
SA1,地址总线

SD1,数据总线
56
SA2,地址总线

SD2,数据总线
78
SA3,地址总线

SD3,数据总线
910
SA4,地址总线

SD4,数据总线
1112
WE#,写信号控制线,低有效

SD5,数据总线
1314
RD#,读信号控制线,低有效

SD6,数据总线
1516
CS1#,I/O片选线,低有效

SD7,数据总线,MSB
1718
VCC,电源输出

IRQ,中断请求,上升沿有效
1920
GND,公共地


 

总线时序图,以及和C语言、汇编指令之间的关系

 

        为了便于用户理解精简ISA总线接口如何进行编程,本节以x86指令为例,简单介绍C语言中的指令、用户操作的函数与总线的时序之间的关系。

 

        C语言端口输出函数:

 

        outportb ( 0x30a,  ub1 );

 

        上述C语言函数把字节变量ub1的内容写到总线地址为0x30A的寄存器,该寄存器对应的片选信号为CS1#,5位地址总线SA[4:0]在CS1#片选有效期间为5'b01010。

 

        对应的汇编指令为:

 

        mov  dx ,  30AH

        mov  al ,   byte ptr ub1         ;byte ptr ub1为变量ub1对应的存储器

        out   dx ,  al

       

        对应的总线写时序图为(本文中的总线周期均以ETR232i模块为例):

 

200881151456792.gif

 

IO输出指令产生的总线时序

 

        C语言端口输入函数:

 

        char ub1 = inportb ( 0x30a );

 

        上述C语言函数从总线地址为0x30A的寄存器读取一个字节存放到字节变量ub1中,该寄存器对应的片选信号为CS1#,5位地址总线SA[4:0]在CS1#片选有效期间为5'b01010。

 

        对应的汇编指令为:

 

                mov  dx ,  0x30a

                in    al ,   dx

                mov  byte ptr ub1,  al      ; byte ptr ub1为变量ub1对应的存储器

       

        对应的总线时序关系为:

 

200881151341897.gif

 

IO输入指令产生的总线时序

 

        如果应用程序要读写一个16-bit的数据,即一个字时,在x86系统中,可以使用:

 

        unsigned int ui1 = inport(0x30a);         // 读16位数据

        outport(0x30a, ui1);                             // 写16位数据

 

        这样的C函数来一次性完成操作,在ISA总线上会自动生成两个8位数据的读写周期,分别访问低位字节和高位字节。在AD、DA的访问中经常会碰到这样的情形。

 

        对ARM9系统,应用只能通过两次调用总线读写函数分别处理16位数据的低位字节和高位字节:

 

        unsigned char ub1 =(unsigned char)(ui1 & 0xff);           // 获得低位字节。

        unsigned char ub2 =(unsigned char)((ui1 >> 8)& 0xff);// 获得高位字节。

        ui1 =((unsigned char)ub2 << 8)| ub1;               // 高低位字节合成16位数据

 

        在使用精简ISA总线进行扩展时,为了使总线的信号传输更加可靠,可将总线上的所有信号线加上RC网络以达到最佳的信号传输,同时,在高速的数据总线上,可以使用HCT245作一次驱动或是电平转换。如下图所示:

 

200881151540753.gif

 

数据总线与HCT245的连接

 

 

200881151634642.gif

 

控制信号线与地址线的连接,其中地址线只连接要使用的如图中则只使用了SA0与SA4

 

 

 

扩展应用

 

1、用精简ISA进行数据I/O扩展

 

        用户如果使用的I/O较多,英创提供的嵌入式主板上的数据I/O又不够使用要求,则用户可以使用精简ISA总线来进行扩展。仅使用3片简单的74逻辑器件,就可方便扩展出8路输入8路输出。英创公司的ETA716扩展模块就是按照这种方式来实现的。

 

点击看大图

 

用74逻辑器件扩展8路输入8路输出

 

        接口译码电路用一片74HCT139做完成。

 

        当应用程序执行读操作时:

 

        unsigned char ub1 = inportb ( 0x300 );  // 把外部状态读取并存放到ub1中

 

        74HCT245被译码信号RD300H#选通,外部的输入状态INPUT0 – INPUT7将呈现在数据总线SD0 – SD7上,CPU将在RD300H#的上升沿时刻把总线上的数据锁存到ub1。

 

        类似的,当应用程序执行写操作时:

 

        outportb ( 0x300 , ub1 );                      // 把1字节数据输出送到0x300端口

 

        CPU把ub1的数据送到ISA数据总线上,译码信号WE300H#变低有效,并在其上升沿时刻把总线上的数据锁存到74HCT273的8个寄存器中,74HCT273的8个寄存器的输出OUTPUT0 – OUTPUT7将保持不变,直至有新数据写入。当系统复位或上电启动时,低有效的复位信号RESET#将保证把74HCT273的输出清零。

 

2、用精简ISA总线进行A/D采集扩展(应用模块:ETA197

 

        用户还可以通过精简ISA总线来扩展具有通用并行接口的A/D转换器,以实现简单的数据采集。以下是通过ISA总线连接MAX197的信号接法,由于MAX197只有12位数据宽度,这里使用SA0地址线来作为高、低字节数据的选择,正好形成了两个连续的地址,方便了inport()函数的操作,则在编写代码的过程中应注意使用inport()函数或使用inportb()函数分两次来读取数据。

 

点击看大图

 

精简ISA总线与MAX197的接口信号

 

        对MAX197进行AD转换的基本步骤为:

 

        1. 写控制字节,启动AD转换:outportb(0x300, CtrlByte);

        2. 延时15us;

        3. 读取转换数据:unsigned int ui1 = inport(0x300);

 

3、用精简ISA总线进行串口扩展(应用模块:ETA502

 

        同样的,用户也可以使用精简ISA总线来扩展串口,如使用16C550芯片等。一片16C550需要占用8个I/O端口地址,所以,要使用到三条地址线,且这三条地址线最好是连续的地址线,以方便应用程序的开发与控制。 要注意的是,16C550的复位是高电平复位,而精简ISA总线上的复位信号是低信号复位有效,所以在使用时,要将ISA总线上的复位信号进行反向,再连接到16C550的复位上。如果要控制MODEM,则需要将16C550输出的信号经过RS232电平信号转换芯片的转换,再接一个DB9的接头,则构成了一个标准的RS232通讯接口。

 

点击看大图

 

精简ISA总线与16C550的信号连接

 

 

200881152255300.gif

 

复位信号的反向处理

 

 

点击看大图

 

16C550接口的TTL电平信号转换成RS232电平信号

 

 

        除了以上的应用以外,用户还可以利用英创的精简ISA总线,方便地完成其它多种功能模块的扩展,如10M/100M以太网口、CAN总线接口、USB主控模块、24位通用数字IO等等,英创公司也相应地提供了应用模块ETA719、ETA718、ETA701、ETA608 ETA724等供客户参考。

 

成都英创信息技术有限公司
地址:成都市高新区高朋大道5号博士创业园
邮编:610041
客服电话:86-28-86180660 85140028 85145208
传真:86-28-85141028
公司网址:http://www.emtronix.com
技术支持邮箱:support@emtronix.com

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
0
关闭 站长推荐上一条 /3 下一条