TM1300PCI-XIO口的UART和USB接口设计
在TM1300通过XIO口对USB芯片进行读写的过程中,要特别注意时序问题。虽然TM1300的XIO接口和USB芯片能够实现硬件上的无缝连接,但两者在读写数据的时序上并不匹配。TM1300在发起XIO总线读写操作时,在片选信号有效期间,地址和数据是同时发向USB芯片时;而USB芯片需要先接收一个地址,再对相应地址读写数据,地址与数据是分时的。对于TM1300的读写操作,USB芯片无法将地址和数据区分开来,即两个芯片的读写时序不匹配。本文利用TM1300的PCI_AD0引脚来控制USBN9604的A0,当PCI_AD0为1时,表示写入USBN9604的是地址;当PCI_AD0为0时,表示真正的数据通信。具体的编程语句如下:
void write_usb(BYTE address,BYTE data)
{xioWrite(USB基地址+0x000001,address);
xioWrite(USB基地十+0x000000,data);}
BYTE read_usb(BYTEaddress)
{xio Write(USB基地址+0x000001,address);
return(BYTE)xioRead(USB基地址+0x000000);}
对UART的读写,则不用考虑时序问题,使用如下语句即可。
xioWrite(UART基地址+UART寄存器地址,data);
javascript:window.open(this.src);" style="cursor:pointer;"/>
TM1300除了内部模块中断之外,还提供了5个外部中断输入引脚:PCI-INTA/B/C/D和TR1_USERIRQ,前四个中断引脚推荐为电平触发模式,在不用作中断输入时,可以配置为通用I/O引脚,TRI_USERIRQ适合于电平触发或者边沿触发模式。
在本文的硬件设计中,PCI-INTB在PCI-XIO总线激活时,作为XIO总线的全局使能信号;UART芯片利用TRI_USERIRQ引脚向TM1300发中断请求;PCI-INTD用于UART通信接口板上USB芯片的中断请求;PCI-INTC保留未用,可用作以后的扩展。
由于ST16C550的中断输出引脚和TM1300的TRI-USERIRQ中断输入引脚都工作在正逻辑模式,两者可以直接连接。对于ST16C550这样可以同时发生多个中断条件的外部设备,INT-USERIRQ应该工作在电平触发模式。
1.4 PCI-XIO总线复用
本文设计的硬件系统中,通过PCI-XIO总线连接到TM1300的外部设备有三个:Flash、ST16C550和USB9604。为了这三个设备能够同时正常工作,必须加入地址译码芯片以复用PCI-XIO总线。javascript:window.open(this.src);" style="cursor:pointer;"/>
由于Flash占用4MB的地址空间,可以考虑将16MB的XIO空间划分为4个4MB的地址块,利用XIO地址线的高2位作地址译码。
本文选择的地址译码芯片是常见的三-八译码器,原理图如图7所示。这里将XIO总线的全局使能信号PCI-INTB作为74138的使能信号。XIO逻辑激活期间,XIO地址线AD[23、22]的值决定了三个外部设备中的一个片选信号有效。由图7可见,Flash的基地址为0x000000,USB9604的基地址为0x800000,ST16C550的基地址为0xC00000。
2 总结
本文通过PCI-XIO接口为TM1300硬件平台实现串行接口和USB接口,在硬件上实现了带有串行通信接口和USB接口的TM1300编码板。
接下来的工作是为TM1300实现一个WLAN通信接口,使得以TM1300为硬件平台的编码器可以用于高速无线网络平台。