基于8位微控制器控制硬盘进行HDTV码流读写
·扇区号寄存器(173R/W):它记录读、写和校验命令指令起始扇区号。本文用LBA模式。该寄存器记录逻辑扇区的0字节。
·柱面号寄存器(174 175 R/W):它记录读、写、校验、寻址和格式化命令指定的柱面号,在LBA寻址方式下,这2个寄存器包含起始扇区的1和2字节。
·驱动器/磁头寄存器(176R/W):它记录读、写、校验、寻道和格式化命令指定的驱动器号、磁头号和寻址方式。在ATA/ATAPI-4中其定义如表2所示。
表2 驱动器/磁头寄存器在ATA/ATAPI-4中的定义
HS0~HS3(磁头选择):在LBA方式中,是逻辑扇区的高4位。
DEV驱动器选择:0选择主驱动器,1选择从驱动器。
L(LBA方式):L=1,置驱动器为LBA模式;L=0,置驱动器为CHS模式。
·状态寄存器(177 R);反映了硬盘执行命令后的状态。读该寄存器清除中断请求信号,为避免清除中断,可以读辅助状态寄存器376h。这两个寄存器的内容完全一样。在ATA/ATAPI-4中其定义如表3所示。
BSY:驱动器忙。
DRDY:驱动器准备好。
DRQ:请求服务,驱动器请求通过寄存器与处理器交换一个字节数据。
ERR:命令执行错误。
3.2 硬盘PIO方式下特定区域多扇区读的操作
如果想从硬盘的特定扇区读出码流信息,首先主机(C8051F015)要对驱动器/磁头寄存器、柱面号寄存器、扇区号寄存器、扇区数寄存器设置参数。完毕后要等待至少400ns才能去读状态寄存器的参数判断以上设置是否有效。硬盘接收命令后置BSY=1,并开始执行命令。硬盘如果准备好传送数据包,就置DRQ=1,同时清零BSY。当机循环读状态寄存器或辅助状态寄存器判断BSY=0&DRQ=1,一旦硬盘状态符合要求,主机写参数0x80(128扇区)到数据寄存器(0x170),并写0x20(PIO读)到命令寄存器(0x177),表示要求读出硬盘相应地址里的数据块。硬盘判断数据寄存器被置数后立即置BSY=1&DRQ=0。主机读到置位信息后给硬盘读时钟,硬盘输出数据直到数据包传完为止。
表3 状态寄存器在ATA/ATAPI-4中的定义
4 系统设计方案
4.1 系统硬件构成
基于8位微控制器的系统设计方案如图2所示。主系统中以C8051F015为控制核心,C8051F015产生硬盘和FIFO的读写时序(为了避免硬盘寄存器参数也被写入FIFO,在硬件上要把二者的读写时钟分开。);硬盘输出的16位数据分离低8位分别送入两片64KB的FIFO缓存。数据经缓存后持续地输出到CPLD,CPLD对16位数据流进行拆分,同时识别包同步和字节同步。这样,原始的一路HDTV码流就被分成3路输送给解码器解码。主系统通过串行总线与前面板相连,采用通用单片机AT89C51为前面板的控制核心。AT89C51接收来自键盘的命令并在LCD上以文字和图形的方式展现在用户面前,同时通过串口通信,启动主控制器执行命令。
4.2 系统软件设计
4.2.1 存码流部分
本系统没有引入操作系统和文件格式,所以码流文件存入硬盘时就不能按文件格式,
《基于8位微控制器控制硬盘进行HDTV码流读写(第3页)》