英创公司的嵌入式网络模块系列产品均具有精简ISA扩展总线,通常包括若干地址总线、8位数据总线、读写控制线、片选控制线以及中断请求线。英创公司所提供的评估开发底板将这些信号线制定了一个接口标准,采用双排20芯IDC插针,交错排列,用户可用该扩展总线进行硬件扩展。片选线CS1出厂默认选择地址段为300H—37FH,例如,当(A6A5A4A3A2A1A0)=(0000101’b),CS1加5条地址线的译码输出端口地址为305H,以下是扩展总线接口的定义:
1、总线时序图,以及和C语言、汇编指令之间的关系
为了便于用户理解精简ISA总线接口如何进行编程,本文简单介绍C语言中的指令、用户操作的函数与总线的时序之间的关系。各个不同模块的CS1#片选地址范围不同,详见相关技术手册,下面以ETR232i的使用为例进行讲解,在此CS1#对应的片选地址范围为300h——37Fh,其中A0——A6的译码为0ah。
C语言端口输出函数:
outportb ( 0x30a, ub1 ); //把ub1字节送到0x30a寄存器
对应的汇编指令为:
mov dx , 0x30a
mov al , byte ptr ub1;byte ptr ub1为变量ub1对应的存储器
out dx , al
对应的总线写时序图为(本文中的总线周期均以ETR232i模块为例):
C语言端口输入函数:
char ub1 = inportb ( 0x30a ); //把0x30a地址寄存器的内容读入变量ub1
对应的汇编指令为:
mov dx , 0x30a
in al , dx
mov byte ptr ub1, al ; byte ptr ub1为变量ub1对应的存储器[page]
对应的总线时序关系为:
2、用74’s逻辑器件扩展8路输入8路输出
电路如下图所示,用一片74HCT139做译码,则在读300H端口(由于只有A0地址线参与译码,所以302H,304H等地址同样也选通该片74HCT245)的时候,74HCT245将外部输入的状态送到数据总线,此值存储在300H地址中,300H.D0为INPUT0,以此类推,300H.D7为INPUT7。输入操作的C语言语句为:
Data = inportb ( 0x300 ); //把外部状态存储在0x300端口
同理,在写300H端口的时候,74HCT273将数据总线上的数据锁存,只有当下一次再有数据输出的时候此锁存值才会改变。300H.D0为OUTPUT0,以此类推,300H.D7为OUTPUT7。当系统复位或上电启动时,74HCT273的输出清零。输出操作的C语言语句为:
outportb ( 0x300, data ); //把输出字节送到0x300端口
为了电平兼容起见,建议在选用上述器件的时候选择HCT系列。
3、用精简ISA总线进行串口扩展
在需要使用中断控制的场合,利用扩展中的IRQ中断请求信号线,可以实现。以扩展一片16C550为实例进行说明,电路图如下所示。
上一篇:ASI现场总线在残极洗涤堆垛机组的应用
下一篇:LonWorks技术在污水处理系统中的应用
推荐阅读最新更新时间:2024-05-02 22:10