用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心解决方案电子通信

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

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-01-10 23:53:35
数据。如此循环,保证FIFO不空。当FIFO输出第一个数据时,CPLD开始对数据流进行拆分,并按照HDTV码流的格式标准对数据流进行判别(HDTV码流188字节为一个包,每个包头是0x47),即每计数1次,就输出一个比特同步,每计数188次并识别下一个数为0x47,就输出一个包同步。这部分程序流程如图3。
IPjavascript:window.open(this.src);" style="cursor:pointer;"/>
    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;

}

}

//多扇区读子函数:

unsigned char ReadSector(unsigned long point,unsigned char *Buffer){

unsigned int i,k;

WriteBYTE(CMD,6,0xe0); //LBA模式

WriteBYTE(CMD,5,point>>16); //LBA模式下的高16位地址

WriteBYTE(CMD,4,point>>8); //LBA模式下的高8位地址

WriteBYTE(CMD,3,point); //LBA模式下的低8位地址

WriteBYTE(CMD,2,0x80); //一次读写的扇区数

//Issue read sector command...

WriteBYTE(CMD,7,0x20); //0x20多为扇区读命令

Timer 10mSec=10000;

while((ReadBYTE(CMD,7)&0x08)!=0x08 && Timer 10mSec); //等待DRQ=1或者timeout

if(Timer 10mSec= =0)return 0xFF;

//Fetch the sector...

LSBDATA=ALLINPUT;

//Select address and activate CS

SetAddress(CMD,0);

for(k=0;k<0x80;k++)

for(i=0;i<512;i+=2){ //一次读两字节

nDIOR=0; //硬盘的读时钟

WCK=1;

WCK=0;

nDIOR=1;

}

nCS1FX=1; //复位CS

nCS3FX=1;

return ReadBYTE(CMD,1); //返回错误寄存器的信息

}

本文是“第三代码流回放机研制”课题的一个重要组成部分。本方案利用微控制器对硬盘进行基于LBA模式下的读写操作(不用操作系统),硬软件简洁可靠,技术上也解决前期产品的两个难题:

(1)一些旧机器的BIOS不支持INT 13h Extension,无法访问8.4G以上硬盘空间;

(2)WINDOWS操作系统不支持存储1.2G以上码流文件。

将此系统逆向设计,能够研发出适时录制TS流和卫星节目的仪器。



上一页  [1] [2] [3] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:26,203.13000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号