基于8位微控制器控制硬盘进行HDTV码流读写

[09-12 17:48:36]   来源:http://www.88dzw.com  单片机学习   阅读:8928

文章摘要:4 系统设计方案4.1 系统硬件构成基于8位微控制器的系统设计方案如图2所示。主系统中以C8051F015为控制核心,C8051F015产生硬盘和FIFO的读写时序(为了避免硬盘寄存器参数也被写入FIFO,在硬件上要把二者的读写时钟分开。);硬盘输出的16位数据分离低8位分别送入两片64KB的FIFO缓存。数据经缓存后持续地输出到CPLD,CPLD对16位数据流进行拆分,同时识别包同步和字节同步。这样,原始的一路HDTV码流就被分成3路输送给解码器解码。主系统通过串行总线与前面板相连,采用通用单片机AT89C51为前面板的控制核心。AT89C51接收来自键盘的命令并在LCD上以文字和图形的方式

基于8位微控制器控制硬盘进行HDTV码流读写,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com

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 存码流部分

本系统没有引入操作系统和文件格式,所以码流文件存入硬盘时就不能按文件格式,而只能按二进制流的方式从PC机的码流文件中读出数据,再按同样的方式写入裸盘。为了解决码流的总是,试图调用BIOS中断,让BIOS的硬盘服务流程负责把INT13的读写请求转化为ATA界面对硬盘的请求,并执行数据I/O传输的物理动作。但由于BIOS本身寄存器的限制,用它去访问硬盘有8.4G容限的问题。如果想突破这个限制而用扩展的INT13,将是一个比较复杂的过程。可以利用PC机上的Secondary IDE Channel(0x170~0x177)作为硬盘寄存器的端口地址。在这个硬件平台下,可以直接将fread()函数读出的码流按块写入目标硬盘,甚至不要求大多地考虑时序问题。

4.2.2 读码流部分

这部分软件是在上述硬件系统平台上直接编程。系统在启动硬盘前要等待串行中断,接收由前面板发出的命令,再根据接收的数据信息具体决定应该播放哪几个节目;随后对硬盘、FIFO进行初始化,启动CPLD,FIFO输出数据时钟信号,并让硬盘按命令输出数据流。数据在总线稳定的时间内给FIFO写时钟,以采集正确的码流信息(这里强调时序)。FIFO有“半满”(HF)标志,用HF去触发中断,有中断请求,就让硬盘输出64KB的数据。如此循环,保证FIFO不空。当FIFO输出第一个数据时,CPLD开始对数据流进行拆分,并按照HDTV码流的格式标准对数据流进行判别(HDTV码流188字节为一个包,每个包头是0x47),即每计数1次,就输出一个比特同步,每计数188次并识别下一个数为0x47,就输出一个包同步。这部分程序流程如图3。
IP
4.2.3 应用程序

系统设置硬盘寄存器参数时,首先调用SetMode()函数设定硬盘的IDLE状态和自掉电功能,可以保证硬盘在不工作的情况下,磁头会复位到“登陆区”;然后调用SetAdress()函数选择对应的寄存器;接下来可以调用ReadSector()函数进行多扇区读操作。以下是寄存器选择子函数和多扇区读子函数。

//寄存器选择子函数;

void SetAddress(unsigned char cs,unsigned char adr){

DA0=((adr & 0x01)= =0x01;

DA1=((adr & 0x02) = =0x02);

DA2=((adr & 0x04) = =0x04);

if(cs= =CTRL) {

nCS1FX=1;

nCS3FX=0;

}else {

nCS1FX=0;

nCS3FX=1;

}

}

//多扇区读子函数:

上一页  [1] [2] [3] [4] [5]  下一页


Tag:单片机学习单片机开发,单片机原理,单片机教程单片机学习

《基于8位微控制器控制硬盘进行HDTV码流读写》相关文章

分类导航
最新更新
热门排行