1 PC104简介
PC/104总线是一种专门为嵌入式控制而定义的工业控制总线。采用PC/104 结构的系统一般具有如下特点:
(1)小尺寸结构:标准模块的机械尺寸是3.6X3.8英寸,即96X90mm;
(2)堆栈式连接:去掉总线背板和插板滑道,总线以“针”和“孔”形式层叠
连接,即PC/104总线模块之间总线的连接是通过上层的针和下层的孔相互连接, 这种层叠式封装有极好的抗震性。
(3)轻松总线驱动:减少元件数量和电源消耗,4mA总线驱动即可使模块。
2 PC104端口线
PC/104总线信号定义和功能与它们在ISA总线相应部分是完全相同的。104根线分为5类:地址线、数据线、控制线、时钟线、电源线。现简要介绍如下
1)地址线
SA0~SA19和LA17~LA23:SA0~SA19是可锁存的地址信号,LA17~LA23是非锁存信号,由于没有锁存延迟,因而给外设插板提供了一条快捷途径。SA0~SA19加上LA17~LA23可实现16MB空间寻址(其中SA17~SA19和LA17~LA19是重复的)
2)数据线
数据线SD0~SD15,其中SD0~SD7位为低8位数据,SD8~SD15为高8位数据。 3)控制线 ANE:地址允许信号,输出线,高电平有效。ANE=1,表明处于DMA控制周期:ANE=0,表示非DMA周期。此信号用来在DMA期间禁止I/O端口的地址译码。
BALE:允许地址锁存,输出线,这信号由总线控制器8288提供,作为CPU地址的有效标志,当BALE为高电平时,将SA0~SA19接到系统总线,其下降沿用来锁存SA0~SA19。
IOR:I/O读命令,输出线,低电平有效,用来把选中的I/O设备的数据读到数据总线上。在CPU启动的周期,通过地址线选择I/O:在DMA周期,I/O设备由DACK选择。
IOW:I/O写命令,输出线,低电平有效,用来把数据总线上的数据写入被选中的I/O端口。
SMEMR和SMEMW:存储器读/写命令,低电平有效,用于对SA0~SA19这20位地址寻址的1MB
内存的读/写操作。
MEMW和MEMR:存储器读/写命令,低电平有效,用于对24位地址线全部存储空间读/写操作。MEMCS16和I /OCS16:它们是存储器16位片选信号和I/O 16位片选信号,分别指明当前数据传送是16位存储器周期和16位I/O周期。
SBHE:总线高字节允许信号,该信号有效时,表示数据总线上传送的是高位字节数据。 IRQ0~IRQ15:用于作为来自外部设备的中断请求输入线,分别连在主MCU上。这些中断请求线都是边沿(上跳边)触发,三态门驱动器驱动。优先级排队是IRQ0最高,依次为IRQ1,IRQ8~IRQ15,然后是IRQ3~IRQ7。
DRQ0~DRQ3和DRQ4~DRQ7:来自外部设备的DMA请求输入线,高电平有效,分别连在主片DMA控制器输入端。DRQ0优先级最高,DRQ7最低,
DACK0~DACK3和DACK4~DACK7:DMA回答信号,低电平有效。有效时,表示DMA请求被接受,DMA控制器占用总线,进入DMA周期。
T/C:DMA终末/记数结束,输出线。该信号是一个正脉冲,表明DMA传送的数据已达到其程序预置的字节数,用来结束一次DMA数据块传送。
MASTER:输出信号,低电平有效。它由要求占用总线的有主控能力的外设卡驱动,
并与DRQ一起使用。外设的DRQ得到确认(DACK有效)后,才使MASTER有效,从此该设备保持对总线的控制直到MASTER无效。
RESET DRV:系统复位信号,输出线,高电平有效。此信号在系统电源接通时为高电平,当所有电平都达到规定以后变低,即上电复位时有效。用它来复位和初始化接口和I/O设备。
IOCHCHK:I/O通道检查,输出线,低电平有效。当它变为低电平时,表明接口插件的I/O通道出现了错误,它将产生一次不可屏蔽中断。
I/O CHDRY:I/O通道就绪,输入线,高电平表示“就绪”。该信号线可供低速I/O设备或存储器请求延长总线周期之用。当低速设备在被选中,且收到读或写命令时将此线电平拉低,表示未就绪,以便在总线周期中加入等待状态TW,但最多不能超过10个时钟周期。
REFRESH:刷新信号,为了防止在内存刷新周期内产生不必要的中断,ISA提供该刷新信号,防止中断发生。
(KEY2):钥匙位。
ENDXFR:零等待状态信号,输入线。该信号为高电平时,无需插入等待周期。 4)时钟线
SYSCLK:系统时钟。 OSC:主振信号输出。
5)除了以上信号外,还有电源正负12V、正负5V、地线GND
3 PC104的实现
在电路设计上,CPLD采用了XILINX的XC95144XL。ARM总线,以及读写信号等需要使用的控制信号连接到CPLD上。在对CPLD的部分IO引出,通过BUFFER后,连接到PC/104的总线接的逻辑功能在于将ARM处理器发出的本地异步内存访问转换到向总线操作。(ARM和CPLD的标准输入输出为LVTTL电平,输入电平则可电平,因此虽然CPLD可以直接与TTL电平的PC104总线相连,但有些电气特性、信号完整性方面的问题导致系统的可靠性下降,BUFFER来进行两个电平间的转换,确保系统的稳定性和可靠性。)
图1,MCU与PC104接口原理图
4 PC/104时序
PC/104总线的I/O读写时序如图2和图3所示;MEM空间的访问和I/O空间基本类似,只是把信号由IOW、IOR换成了MEMW、MEMR。
图2 PC104总线读IO时序
图3 PC104总线写IO时序
设计PC/104总线的访问时序,主要是完成对一下总线信号的时序 DATA[15..0]---PC/104数据总线; ADDR[23..0]---PC/104地址总线;
IOW---PC/104端口写控制,低电平有效,表示对I/O空间写操作; IOR---PC/104端口读控制,低电平有效,表示对I/O空间读操作; MEMW---PC/104端口写控制,低电平有效,表示对Mem空间写操 MEMR---PC/104端口读控制,低电平有效,表示对Mem空间读操作 SYSCLK---PC/104总线时钟;
ALE---地址锁存信号,在此不用作地址锁存,而是用作总线周期的它的下降沿表示总线周期开始;
IOCHRDY---I/O设备就绪信号,当将该电平为低(无效状态)时,表要延长总线周期,信号由三态门或集电极开路门驱动;
IRQ---中断请求信号,当处理器收到中断请求后,完成相应操作。
由于PC/104总线速度比较慢,处理器的总线速度要明显高于PC/104。为了保证通信的正确性,需要降低ARM处理器的总线速度。因此,在进行PC/104总线访问时,采用变延迟IO(Variable Latency IO)的访问模式,总线速度受nWAIT信号控制。其读时序如图4所示,
写时序和读时序基本类似。
图4 MCU变时序IO读
根据MCU总线的访问时序,实际需要操作控制的信号并不多。: DATA[15..0]---ARM数据总线; ADDR[23..0]---ARM地址总线;
nGCS---访问有效,低电平有效,表示对某一对应空间的访问操作; nOE---读控制信号,低电平有效,表示对外设读操作; nWE---写控制信号,低电平有效,表示对外设写操作; 在PC/104总线控制器的设计上,只要完成MCU访问时序和PC/104访问时序之间的相互转换。
5 PC104控制器
PC/104总控制器的工作流程图如图5所示。控制器通过一个循环等待ARM处理器开始操作命令,当收到命令判断是读还是写命令。如果是写命令就产生PC/104写时序,将处理器数据放到PC/104总线上,如果是读命令就产生PC/104读时序,将PC/104总线上的数据输出到ARM处理器。
在产生PC/104读写时序过程中,CPLD通过处理器的NWAIT信号使处理器等待,处理完成释放NWAIT信号。
设计通过状态机来实现,使用系统时钟(25MHz)的4分频6.26MHz为主时钟,状态机复位信号选用系统复位信号或者NGCS1信号,状态机触发信号选用NGCS1信号。当NGCS1信号从高到底变化时,表明处理器正发起一个NGCS1内存操作,在状态内通过A24地址线区分是MEM操作还是IO操作,在必要的步骤中还需要插入额外的等待周期,最后根据IOCHRDY信号判断PC/104操作是否完成。在数据流结构中,MCU总线和PC/104总线通过MCU给出的读写信号进行方向输出,在不操作时将总线输出到Z状态,即高阻态。
图5 PC104总线控制器工作流程