📄 打印文章.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0053)http://www.cnzdh.com/Article/Print.asp?ArticleID=3524 -->
<HTML><HEAD><TITLE>打印文章</TITLE>
<META
content=自动化,自动化学习网,自动化论文,plc教程,技术手册,应用案例,单片机教程,视频教程,教程,plc教程,应用案例,汇编程序,工业以太网,现场总线,PLC,可编程序控制器,编程软件,变频器,运动伺服,嵌入式系统,传感器,开关电源,伺服系统,直流调速,步进电机,伺服系统,伺服电机,低压电器,开关电源,资料
name=keywords>
<META content=中国自动化学习网--打造中国自动化学习资料全集,免费提供plc教程,技术手册、单片机、变频器、电源、嵌入式等资料下载
name=Description>
<META
content="自动化,工业以太网,现场总线,PLC,可编程序控制器,运动伺服,PC-BASED,嵌入式系统,传感器,电器元件,开关电源,控制系统,工控机,工业控制,lonworks,控制系统,devicenet,cc-link,ff modbus,plc,运动控制,伺服系统,伺服电机,scada,dcs,ncs,PID控制,hmi,以太网交换机,触摸屏,HMI,直流调速,交流调速,步进电机,伺服系统,伺服电机,GPS/GPRS/CDMA,工控机"
name=Keywords>
<META content=自动化学习网cnzdh.com,提供免费的自动化专业技术资料 name=Description>
<META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK
href="打印文章.files/DefaultSkin.css" type=text/css rel=stylesheet>
<SCRIPT language=JavaScript src="打印文章.files/menu.js"
type=text/JavaScript></SCRIPT>
<SCRIPT language=JavaScript1.2 src="打印文章.files/stm31.js"
type=text/javascript></SCRIPT>
<SCRIPT language=JavaScript type=text/JavaScript>
function resizepic(thispic)
{
if(thispic.width>700) thispic.width=700;
}
//双击鼠标滚动屏幕的代码
var currentpos,timer;
function initialize()
{
timer=setInterval ("scrollwindow ()",30);
}
function sc()
{
clearInterval(timer);
}
function scrollwindow()
{
currentpos=document.body.scrollTop;
window.scroll(0,++currentpos);
if (currentpos !=document.body.scrollTop)
sc();
}
document.onmousedown=sc
document.ondblclick=initialize
</SCRIPT>
<META content="MSHTML 6.00.2900.3199" name=GENERATOR></HEAD>
<BODY onmouseup=document.selection.empty() oncontextmenu="return false"
onselectstart="return false" ondragstart="return false"
onbeforecopy="return false" oncopy=document.selection.empty() leftMargin=0
topMargin=0 onselect=document.selection.empty() marginheight="0"
marginwidth="0">
<TABLE class=center_tdbgall style="WORD-BREAK: break-all" cellSpacing=0
cellPadding=0 width=760 align=center border=0>
<TBODY>
<TR>
<TD class=main_title_760 align=right height=20><A class=class
href="javascript:window.print()"><IMG alt=打印本文
src="打印文章.files/printpage.gif" align=absMiddle
border=0> 打印本文</A> <IMG alt=关闭窗口
src="打印文章.files/pageclose.gif" align=absMiddle border=0> <A
class=class href="javascript:window.close()">关闭窗口</A> </TD></TR>
<TR>
<TD class=main_ArticleTitle
align=middle><B>基于8位微控制器控制硬盘进行HDTV码流读写</B></TD></TR>
<TR>
<TD class=Article_tdbgall
align=middle>作者:佚名 文章来源:不详 点击数
<SCRIPT language=javascript src="打印文章.files/GetHits.htm"></SCRIPT>
更新时间:2007-5-31
13:01:17 文章录入:admin 责任编辑:admin </TD></TR>
<TR>
<TD>
<HR align=center width="100%" color=#8ea7cd noShade SIZE=1>
</TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=10 align=left border=0>
<TBODY>
<TR>
<TD><!--插入广告JS代码--></TD></TR></TBODY></TABLE> <!--DVNEWS_AD_END--><STRONG>摘要:</STRONG>介绍用C8051F015微控制器控制硬盘进行HDTV码流存取的高清码流回放机的硬件设计和软件编程。该系统作为解码器的前端,可以实现HDTV码流的适时回放。
<P class=MsoNormal><SPAN
style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
<B>关键词:</B></SPAN>HDTV 码流 ATA/ATAPI-4标准 LBA模式 CPLD</P>
<P
style="TEXT-INDENT: 30px">随着HDTV在全球的兴起以及数字技术的日趋成熟,音/视频产品数字化、高清晰度化已成为未来家电视听产品的大趋势。高清晰度电视HDTV(High-Definition
Television)采用了国际上流行的MPEG-2标准,MPEG-2规定了数字图像的音视频编解码算法以及传送的码流应该符合的语法和语义,而其编解码算法又参考了听觉心理模型和视觉心理模型。HDTV的图像格式为1920×1080I,传输码率高达20Mbps,同时采用的视频压缩技术可使HDTV的每一帧包含更多的信息,大大提高图像的清晰度。HDTV在音频压缩方面采用了数字音频的编码和压缩技术,现有的数字音频编码压缩方案有MPEG、Dolby
AC-3和美国AT&T的MPAC以及欧洲的MIX。它们都能实现5.1声道,其声道数可以扩展到5.1,即三个前面的声道(L、C、右声道R)、两个环绕声道(左环绕声道Ls、右环绕声道Rs)和一个低音效果声道LFE,使声音效果可以达到家庭影院的音响效果。HDTV声光效果上优势,注定它的发展有着技术和市场的双重必然性。为了配合HDTV及相关技术产品的推广,笔者开发了一个既可以作为MPEG解码器信号源,又可以作为信道编码/调制器信号源的码流回放机,应用于数字电视产品的开发、生产调试及展示宣传。</P>
<P
style="TEXT-INDENT: 30px">HDTV节目有传输码率高、节目信息最大的特点。为了研制出符合大容量高速率要求的码流回放机,传统的方法是用操作系统控制硬盘的读写操作。这样做的好处在于:首先,PC机的主频很高,用来作为控制码流的时钟信号在速度上不会有瓶颈问题;其次,对硬盘里HDTV节目的读取是基于文件系统的,研发人员不用写硬盘的驱动程序,软件的工作量大大减小。但是,就码流回放机本身而言,它是一个单任务设备,采用操作系统的方案无疑将造成CPU资源的极大浪费。因此,笔者设想用单片机或DSP控制硬盘的读写操作。只要所选微控制器上速度上满足高清晰度电视的码率要求,在技术上就能够实现预期的功能。与操作系统方案相比较,用微控制器无疑可以大大降低生产成本,同时也降低了硬件设计的难度。不过,在这种方式下,需要编写硬盘的底层驱动程序。<B><BR><BR><B><FONT
color=#3366ff>图1 C8051F015内部结构</FONT></B><BR><BR>1 总体方案</B></P>
<P style="TEXT-INDENT: 30px">华天HTTS
HDTV第III代码流回放机可以播放数字高清晰度电视HDTV码流。该码泫回放机整体设计没有采用在工控机上研发PCI卡驱动硬盘的方案,而是遵照AT
Attachment with Packet Interface
Extension(ATA/ATAPI-4)标准,用8位单片机C8051F015通过PIO方式按照LBA模式直接对硬盘进行物理级的读写操作。硬盘接收微控制器的命令后按照逻辑地址顺序输出HDTV码流给两片FIFO,硬盘输出的16位数据通过两片8位FIFO缓存后输出给CPLD进行拆分以识别包同步和字节同步。经CPLD解析后的数据流再经过解码器解码及适当后处理,送显示器、扬声器以提供视频、音频信号。既可以作为MPEG解码器的信号源,又可以作为信道编码/调制器的信号源。</P>
<P style="TEXT-INDENT: 0px"><B>2 C8051F015内部结构</B></P>
<P
style="TEXT-INDENT: 30px">C8051F015的内部结构如图1所示。它使用了CYGNAL的专利——CIP-51微控制器内核CIP-51。CIP-51与MCS-51的指令集完全兼容,可以使用标准803x/805x的汇编器和编译器进行软件开发。同时,CIP-51采用流水线结构,70%的指令执行时间为1或2个系统时钟周期,外部晶振最大可以到25MHz。8位HDTV输出码流的标准时钟频率为19MHz和25MHz。考虑到硬盘的输出是16位,理论上采用这款MCU完全可以达到速度要求。这里,就系统的初始化问题有几点说明:(1)内外部晶振切换。在外部晶体振荡器被允许时,系统晶体驱动器的输出端XTAL2脚会出现一个瞬时脉冲,该脉冲足以在晶体实际启动前,将OSCXCN寄存器中的XTLVLD位置1。在允许晶体振荡器和检查XTLVLD位之间引入1ms的延时,可以防止提前切换到外部晶振。(2)配置交叉开关。系统内部交叉开关根据优先权译码表将所选择的内部数字资源分配到I/O引脚,寄存器XBR0、XBR1、XBR2用于选择内部数字功能或让I/O引脚默认为I/O端口。I/O引脚的输出驱动器特性用端口配置寄存器PRT0CF、PRT1CF、PRT2CF和PRT3CF定义。每个端口输出驱动器都可被配置为漏极开路或推挽方式。将配置寄存器的相应位配置为漏极开路,并在外部加1kΩ的上拉电阻,可用3.3V供电的C8051F015去驱动5V供电的硬盘。初始化程序:</P>
<P style="TEXT-INDENT: 30px">void sysclk_init(void)</P>
<P style="TEXT-INDENT: 30px">{WDTCH=0xde; //禁止看门狗定时器</P>
<P style="TEXT-INDENT: 30px">WDTCN=0xad;</P>
<P style="TEXT-INDENT: 30px">//启动外部振荡器</P>
<P style="TEXT-INDENT: 30px">OSCXCN=0x67; //外接24MHz的晶振</P>
<P style="TEXT-INDENT: 30px">//配置外部晶体</P>
<P style="TEXT-INDENT: 30px">while((OSCXCN&XTLVLD_BIT= =0)</P>
<P style="TEXT-INDENT: 30px">{}</P>
<P style="TEXT-INDENT: 30px">OSCICN=0x88; //选择外部振荡器作为系统时钟,禁止内部振荡</P>
<P style="TEXT-INDENT: 30px">}</P>
<P style="TEXT-INDENT: 30px">//配置交叉开关</P>
<P style="TEXT-INDENT: 30px">void xbar_init(void)</P>
<P style="TEXT-INDENT: 30px">{XBR0=0x04; //RX TX连到两个引脚</P>
<P style="TEXT-INDENT: 30px">XBR1=0x04; //INT0连到断口引脚</P>
<P style="TEXT-INDENT: 30px">XBR2=0x40; //使能交叉开关和弱上拉</P>
<P style="TEXT-INDENT: 30px">PRT0CF=0xff; //控制FIFO读写,使能</P>
<P style="TEXT-INDENT: 30px">PRT1CF=0x07; //控制CPLD读写,使能</P>
<P style="TEXT-INDENT: 30px">PRT2CF=0x00; (P0口的所有输出为弱上拉(写硬盘命令字)</P>
<P style="TEXT-INDENT: 30px">PRT3CF=0x00; //控制硬盘读写,使能</P>
<P style="TEXT-INDENT: 30px">}<B><BR><IMG alt=""
src="打印文章.files/200753113117742.gif" align=absMiddle border=0><BR>3
ATA/ATAPI-4标准下的硬盘内部寄存器和PIO读时序关系</B></P>
<P style="TEXT-INDENT: 30px">3.1 硬盘内部寄存器</P>
<P
style="TEXT-INDENT: 30px">目前,大部分计算机配置了两个IDE接口,地址范围分别为:0170~0117,0376~0376(对应PC机的Secondary
IDE Channel)和01F0~01F6,03F6~03F6(对应PC机的Primary IDE
Channel)。地址译码如表1所示。<BR><BR><B>表1 地址译码</B></P>
<TABLE borderColorDark=#ffffff width="100%" borderColorLight=#000000
border=1>
<TBODY>
<TR class=main>
<TD align=middle width="16%">CS1FX</TD>
<TD align=middle width="16%">CS3FX</TD>
<TD align=middle width="17%">DA2</TD>
<TD align=middle width="17%">DA1</TD>
<TD align=middle width="17%">DA0</TD>
<TD align=middle width="17%">Address</TD></TR>
<TR class=main>
<TD align=middle width="16%">1</TD>
<TD align=middle width="16%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">170</TD></TR>
<TR class=main>
<TD align=middle width="16%">1</TD>
<TD align=middle width="16%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">1</TD>
<TD align=middle width="17%">171</TD></TR>
<TR class=main>
<TD align=middle width="16%">1</TD>
<TD align=middle width="16%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">1</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">172</TD></TR>
<TR class=main>
<TD align=middle width="16%">1</TD>
<TD align=middle width="16%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">1</TD>
<TD align=middle width="17%">1</TD>
<TD align=middle width="17%">173</TD></TR>
<TR class=main>
<TD align=middle width="16%">1</TD>
<TD align=middle width="16%">0</TD>
<TD align=middle width="17%">1</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">174</TD></TR>
<TR class=main>
<TD align=middle width="16%">1</TD>
<TD align=middle width="16%">0</TD>
<TD align=middle width="17%">1</TD>
<TD align=middle width="17%">0</TD>
<TD align=middle width="17%">1</TD>
<TD align=middle width="17%">175</TD></TR>
<TR class=main>
<TD align=middle width="16%">1</TD>
<TD align=middle width="16%">0</TD>
<TD align=middle width="17%">1</TD>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -