给予F240的IDE接口仿真器的设计
扫描二维码
随时随地手机看文章
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
关键词:仿真器 监控程序 硬件调试 IDE接口
EQUATIONS
!HRST = !POR # !HRST; // RC上电复位 和 F240设置复位都产生 IDE复位
!CS1FX =!IS &!A3; //A3=0:产生第一组寄存器片选 /CS1FX
!CS3FX =!IS &A3; //A3 =1:产生第二组寄存器片选 /CS3FX
!IOR = !IS & !RD; // 专门产生寄存器读信号
[Q1,Q0].CLK = CPUCLK;
[Q1,Q0].OE = !OE;
[Q1,Q0].AR = !.POR; //复位
//F240 系统控制状态机.
//其时钟 ,每一拍50ns
//程序存储器 读写周 期 <= ,无需等待
//IDE接口寄存器读写周期>= 70ns,等 待2拍足矣.
State_Diagram [Q1,Q0];
State S0: // 空闲状态.
READY = H; // 支持 CY7C199访问.
if (!IS) then // 要访问IDE接口寄存器.
S1 {READY240 = L;}
State S1: // 开始等待
READY240 = L;
goto S2;
State S2:
READY240 = L;
goto S3;
State S3: // 时间到.
READY240 = H;
goto S0; // F240对READY信号只采样一次.
END
仿真硬件的核心只有一片F240和一片而已。
仿真器监控软件设计
软件设计包括驻留在F240的监控程序和PC宿主机的监控程序。两者之间通过串口配合工作。这当然降低了IDE接口的数据吞吐率,但在逻辑仿真调试时不是主要焦点。为简约起见,避免复杂的词法分析,主从之间采用单字符监控命令。其串口监控命令通讯帧定义如下:
其校验和为前n-1个字节代数和的补码,即
= -∑Bi (i=0,1.. n-1)
下面介绍几个主要命令和程序实现方法
1 .I 命令: 读IDE寄存器
当监控程序识别出I命令后,根据参数提供的寄存器索引,映射为对应的I/O地址。F240的输入/输出命令和x86系列不同,它在指令中必须直接给出地址。
LACC Reg
BZ IsDatReg // 0号索引,即读数据寄存器
SUB #1
BZ IsError // 1号索引,即读错误类型寄存器
BZ IsAltReg // 8号索引,即读后备状态寄存器
SUB #1
BZ IsDrvAddrReg // 9号索引,即读驱动器地址寄存器
IsDatReg
IN ,DatReg // 读数据寄存器
RET
IsAltReg:
IN ,DevAddrReg // 读驱动器地址寄存器
RET
当I命令执行完毕,应该将寄存器读入值回送PC主机。2 .O命令: 写IDE寄存器
寄存器输出命令参数需要提供寄存器索引,和映射为对应的I/O地址。3 .H 命令: 硬件复位IDE设备
硬件复位时应将F240的IOPC7管脚设置为低电平10ms以上。如下
LDP #00E1h ;DP = 00E1H: 7080H-70FFH 的页址
LACL #8000H ;D15 = 1: IOPC7: 做输出.
;D7= 0:设置IOPC7= 0
PCDATDIR ;写PC端口,设置/HRST信号为低电平
Delay10ms ;保持复位信号10ms 的低电平
LACL #8080H ;D15= 1: IOPC7: 做输出.
;D7 = 1:设置IOPC7 = 1
PCDATDIR ;恢复 /HRST信号为高电平
类似地,监测DMA请求HDRQ状态时可以设置端口为输入属性,然后读入IOPB0。监测中断请求HIRQ时,可以直接读XINT1状态,即读 7070H处的XINT1CR寄存器。
4 .S 命令: 软件复位IDE设备
软件复位时可以向IDE接口的DevCtrlReg(设备控制寄存器)写入适当值实现,如下
LDP #0; //指向.bss变量区
SPLK #000EH,; //D2 = SW Rst = 1:软件强制复位
//D1=/IEn=1:禁止IDE发中断
OUT Value, DevCtrlReg; //复位 IDE设备
Delay10ms; //保持复位状态10ms
SPLK #000AH,Value; //D2= SW Rs= 0 : 结束复位状态
OUT Value, DevCtrlReg
Delay10ms
SPLK #000EH,Value; //D6=LBA=1:采用逻辑块寻址模式.
OUT Value,DrvHeadReg; //设置驱动器寄存器
5 .C 命令: 读取IDE设备ID号和相关配置
IDE设备内的相关配置对其它操作影响较大,主机应该掌握这些参数。诸如柱面数、磁头数、每个磁道的扇区数,以及最大扇区号等。
CALL WaitRDY; //读状态寄存器,等待D6 = 1,亦即IDE 设备完成上次命令
//准备好再接收新的命令
SPLK #000EH, Value
OUT Value, DrvHeadReg; //选择主从驱动器
SPLK #00ECH,Value
OUT Value, CmdReg; //发命令,读取配置参数
CALL WaitDRQ; //读状态寄存器,等待D6 = 1并且D3=1
//亦即RDY并发出DRQ请求,
//表明已将所读配置参数放入数据寄存 器缓冲
MAR *, AR1; //AR1: 当前辅助寄存器.
LAR AR1,#BufSADDR; //AR1 扇区缓冲区开始地址
RPT #0FFh ; //循环次数= FFH + 1 = 256
IN *+, DatReg; //读入配置数据.
读出配置参数后,再把它送给PC机的监控程序,从中再细分出具体参数。读一个扇区或写一个扇区的命令和这个命令相似。只是在发命令前应该设置柱面扇区等寄存器,定位到具体的扇区。
6.PC宿主机监控程序功能
PC宿主机监控程序主要通过串口监控仿真器。在底层通讯中,应该为每一个监控命令建立对应函数。在应用层,可以将几个简单命令有机组合,完成复杂功能,减小仿真器驻留监控难度。例如,在读取配置参数命令中,分解缓冲数据。在读写扇区命令中,将LBA逻辑扇区地址分解成驱动器号、扇区号、柱面号等。
重要的是为用户提供一个Windows环境下特别容易操作的接口界面,贴近硬件调试,产生所需信号波形,用捕获分析。
结束语
随着航空电子新系统研制的智能化和接口标准化,硬件调试对仿真设备和环境要求也越来越高。鉴于成本和上市时间的限制,采用嵌入式CPU自己研制一些简单实用的仿真设备是解决矛盾的一条重要的途径。本文所介绍的IDE接口仿真器在多个型号的 研制中发挥了重要作用。