四虎成人免费视频,国产一级a作爱视频免费观9看,色五月丁香亚洲,亚洲欧美性爱在线视频,1000部黄片免费观看一区,国产亚洲性生活视频播放,三级黄色在线视频网站

現(xiàn)在位置:范文先生網(wǎng)>理工論文>電子通信論文>基于8位微控制器控制硬盤進(jìn)行HDTV碼流讀寫

基于8位微控制器控制硬盤進(jìn)行HDTV碼流讀寫

時(shí)間:2023-02-20 23:14:30 電子通信論文 我要投稿
  • 相關(guān)推薦

基于8位微控制器控制硬盤進(jìn)行HDTV碼流讀寫

摘要:介紹用C8051F015微控制器控制硬盤進(jìn)行HDTV碼流存取的高清碼流回放機(jī)的硬件設(shè)計(jì)和軟件編程。該系統(tǒng)作為解碼器的前端,可以實(shí)現(xiàn)HDTV碼流的適時(shí)回放。

    關(guān)鍵詞:HDTV 碼流 ATA/ATAPI-4標(biāo)準(zhǔn) LBA模式 CPLD

隨著HDTV在全球的興起以及數(shù)字技術(shù)的日趨成熟,音/視頻產(chǎn)品數(shù)字化、高清晰度化已成為未來家電視聽產(chǎn)品的大趨勢。高清晰度電視HDTV(High-Definition Television)采用了國際上流行的MPEG-2標(biāo)準(zhǔn),MPEG-2規(guī)定了數(shù)字圖像的音視頻編解碼算法以及傳送的碼流應(yīng)該符合的語法和語義,而其編解碼算法又參考了聽覺心理模型和視覺心理模型。HDTV的圖像格式為1920×1080I,傳輸碼率高達(dá)20Mbps,同時(shí)采用的視頻壓縮技術(shù)可使HDTV的每一幀包含更多的信息,大大提高圖像的清晰度。HDTV在音頻壓縮方面采用了數(shù)字音頻的編碼和壓縮技術(shù),現(xiàn)有的數(shù)字音頻編碼壓縮方案有MPEG、Dolby AC-3和美國AT&T的MPAC以及歐洲的MIX。它們都能實(shí)現(xiàn)5.1聲道,其聲道數(shù)可以擴(kuò)展到5.1,即三個(gè)前面的聲道(L、C、右聲道R)、兩個(gè)環(huán)繞聲道(左環(huán)繞聲道Ls、右環(huán)繞聲道Rs)和一個(gè)低音效果聲道LFE,使聲音效果可以達(dá)到家庭影院的音響效果。HDTV聲光效果上優(yōu)勢,注定它的發(fā)展有著技術(shù)和市場的雙重必然性。為了配合HDTV及相關(guān)技術(shù)產(chǎn)品的推廣,筆者開發(fā)了一個(gè)既可以作為MPEG解碼器信號(hào)源,又可以作為信道編碼/調(diào)制器信號(hào)源的碼流回放機(jī),應(yīng)用于數(shù)字電視產(chǎn)品的開發(fā)、生產(chǎn)調(diào)試及展示宣傳。

HDTV節(jié)目有傳輸碼率高、節(jié)目信息最大的特點(diǎn)。為了研制出符合大容量高速率要求的碼流回放機(jī),傳統(tǒng)的方法是用操作系統(tǒng)控制硬盤的讀寫操作。這樣做的好處在于:首先,PC機(jī)的主頻很高,用來作為控制碼流的時(shí)鐘信號(hào)在速度上不會(huì)有瓶頸問題;其次,對(duì)硬盤里HDTV節(jié)目的讀取是基于文件系統(tǒng)的,研發(fā)人員不用寫硬盤的驅(qū)動(dòng)程序,軟件的工作量大大減小。但是,就碼流回放機(jī)本身而言,它是一個(gè)單任務(wù)設(shè)備,采用操作系統(tǒng)的方案無疑將造成CPU資源的極大浪費(fèi)。因此,筆者設(shè)想用單片機(jī)或DSP控制硬盤的讀寫操作。只要所選微控制器上速度上滿足高清晰度電視的碼率要求,在技術(shù)上就能夠?qū)崿F(xiàn)預(yù)期的功能。與操作系統(tǒng)方案相比較,用微控制器無疑可以大大降低生產(chǎn)成本,同時(shí)也降低了硬件設(shè)計(jì)的難度。不過,在這種方式下,需要編寫硬盤的底層驅(qū)動(dòng)程序。

圖1 C8051F015內(nèi)部結(jié)構(gòu)

1 總體方案

華天HTTS HDTV第III代碼流回放機(jī)可以播放數(shù)字高清晰度電視HDTV碼流。該碼泫回放機(jī)整體設(shè)計(jì)沒有采用在工控機(jī)上研發(fā)PCI卡驅(qū)動(dòng)硬盤的方案,而是遵照AT Attachment with Packet Interface Extension(ATA/ATAPI-4)標(biāo)準(zhǔn),用8位單片機(jī)C8051F015通過PIO方式按照LBA模式直接對(duì)硬盤進(jìn)行物理級(jí)的讀寫操作。硬盤接收微控制器的命令后按照邏輯地址順序輸出HDTV碼流給兩片F(xiàn)IFO,硬盤輸出的16位數(shù)據(jù)通過兩片8位FIFO緩存后輸出給CPLD進(jìn)行拆分以識(shí)別包同步和字節(jié)同步。經(jīng)CPLD解析后的數(shù)據(jù)流再經(jīng)過解碼器解碼及適當(dāng)后處理,送顯示器、揚(yáng)聲器以提供視頻、音頻信號(hào)。既可以作為MPEG解碼器的信號(hào)源,又可以作為信道編碼/調(diào)制器的信號(hào)源。

2 C8051F015內(nèi)部結(jié)構(gòu)

C8051F015的內(nèi)部結(jié)構(gòu)如圖1所示。它使用了CYGNAL的專利——CIP-51微控制器內(nèi)核CIP-51。CIP-51與MCS-51的指令集完全兼容,可以使用標(biāo)準(zhǔn)803x/805x的匯編器和編譯器進(jìn)行軟件開發(fā)。同時(shí),CIP-51采用流水線結(jié)構(gòu),70%的指令執(zhí)行時(shí)間為1或2個(gè)系統(tǒng)時(shí)鐘周期,外部晶振最大可以到25MHz。8位HDTV輸出碼流的標(biāo)準(zhǔn)時(shí)鐘頻率為19MHz和25MHz?紤]到硬盤的輸出是16位,理論上采用這款MCU完全可以達(dá)到速度要求。這里,就系統(tǒng)的初始化問題有幾點(diǎn)說明:(1)內(nèi)外部晶振切換。在外部晶體振蕩器被允許時(shí),系統(tǒng)晶體驅(qū)動(dòng)器的輸出端XTAL2腳會(huì)出現(xiàn)一個(gè)瞬時(shí)脈沖,該脈沖足以在晶體實(shí)際啟動(dòng)前,將OSCXCN寄存器中的XTLVLD位置1。在允許晶體振蕩器和檢查XTLVLD位之間引入1ms的延時(shí),可以防止提前切換到外部晶振。(2)配置交叉開關(guān)。系統(tǒng)內(nèi)部交叉開關(guān)根據(jù)優(yōu)先權(quán)譯碼表將所選擇的內(nèi)部數(shù)字資源分配到I/O引腳,寄存器XBR0、XBR1、XBR2用于選擇內(nèi)部數(shù)字功能或讓I/O引腳默認(rèn)為I/O端口。I/O引腳的輸出驅(qū)動(dòng)器特性用端口配置寄存器PRT0CF、PRT1CF、PRT2CF和PRT3CF定義。每個(gè)端口輸出驅(qū)動(dòng)器都可被配置為漏極開路或推挽方式。將配置寄存器的相應(yīng)位配置為漏極開路,并在外部加1kΩ的上拉電阻,可用3.3V供電的C8051F015去驅(qū)動(dòng)5V供電的硬盤。初始化程序:

void sysclk_init(void)

{WDTCH=0xde; //禁止看門狗定時(shí)器

WDTCN=0xad;

//啟動(dòng)外部振蕩器

OSCXCN=0x67; //外接24MHz的晶振

//配置外部晶體

while((OSCXCN&XTLVLD_BIT= =0)

{}

OSCICN=0x88; //選擇外部振蕩器作為系統(tǒng)時(shí)鐘,禁止內(nèi)部振蕩

}

//配置交叉開關(guān)

void xbar_init(void)

{XBR0=0x04; //RX TX連到兩個(gè)引腳

XBR1=0x04; //INT0連到斷口引腳

XBR2=0x40; //使能交叉開關(guān)和弱上拉

PRT0CF=0xff; //控制FIFO讀寫,使能

PRT1CF=0x07; //控制CPLD讀寫,使能

PRT2CF=0x00; (P0口的所有輸出為弱上拉(寫硬盤命令字)

PRT3CF=0x00; //控制硬盤讀寫,使能

}
(范文先生網(wǎng)www.htc668.com收集整理)
3 ATA/ATAPI-4標(biāo)準(zhǔn)下的硬盤內(nèi)部寄存器和PIO讀時(shí)序關(guān)系

3.1 硬盤內(nèi)部寄存器

目前,大部分計(jì)算機(jī)配置了兩個(gè)IDE接口,地址范圍分別為:0170~0117,0376~0376(對(duì)應(yīng)PC機(jī)的Secondary IDE Channel)和01F0~01F6,03F6~03F6(對(duì)應(yīng)PC機(jī)的Primary IDE Channel)。地址譯碼如表1所示。

表1 地址譯碼

CS1FX CS3FX DA2 DA1 DA0 Address 1 0 0 0 0 170 1 0 0 0 1 171 1 0 0 1 0 172 1 0 0 1 1 173 1 0 1 0 0 174 1 0 1 0 1 175 1 0 1 1 0 176 1 0 1 1 1 177 0 1 1 1 0 376 0 1 1 1 1 377 0 1 * * * 未用

·數(shù)據(jù)寄存器(170R/W):這是一個(gè)16位PIO數(shù)據(jù)寄存器,用于對(duì)扇區(qū)的讀、寫和格式化操作。MCU通過該寄存器向硬盤控制寄存器寫入或從硬盤控制器讀出扇區(qū)緩沖區(qū)的數(shù)據(jù)。

·錯(cuò)誤寄存器(171R):該寄存器是一個(gè)8位的寄存器,它反映控制寄存器在診斷方式或操作方式下的錯(cuò)誤原因。

·扇區(qū)數(shù)寄存器(172R/W):它記錄讀、寫命令的扇區(qū)數(shù)。當(dāng)多扇區(qū)傳輸時(shí),每完成一個(gè)扇區(qū)操作,該寄存器自動(dòng)減1,直至為0。如果初值為0,則表示256;如果有錯(cuò)誤生,該寄存器包含已經(jīng)操作成功的扇區(qū)數(shù)。

·扇區(qū)號(hào)寄存器(173R/W):它記錄讀、寫和校驗(yàn)命令指令起始扇區(qū)號(hào)。本文用LBA模式。該寄存器記錄邏輯扇區(qū)的0字節(jié)。

·柱面號(hào)寄存器(174 175 R/W):它記錄讀、寫、校驗(yàn)、尋址和格式化命令指定的柱面號(hào),在LBA尋址方式下,這2個(gè)寄存器包含起始扇區(qū)的1和2字節(jié)。

·驅(qū)動(dòng)器/磁頭寄存器(176R/W):它記錄讀、寫、校驗(yàn)、尋道和格式化命令指定的驅(qū)動(dòng)器號(hào)、磁頭號(hào)和尋址方式。在ATA/ATAPI-4中其定義如表2所示。

表2 驅(qū)動(dòng)器/磁頭寄存器在ATA/ATAPI-4中的定義

D7 D6 D5 D4 D3 D2 D1 D0 1 L 1 DEV HS3 HS2 HS1 HS0

HS0~HS3(磁頭選擇):在LBA方式中,是邏輯扇區(qū)的高4位。

DEV驅(qū)動(dòng)器選擇:0選擇主驅(qū)動(dòng)器,1選擇從驅(qū)動(dòng)器。

L(LBA方式):L=1,置驅(qū)動(dòng)器為LBA模式;L=0,置驅(qū)動(dòng)器為CHS模式。

·狀態(tài)寄存器(177 R);反映了硬盤執(zhí)行命令后的狀態(tài)。讀該寄存器清除中斷請(qǐng)求信號(hào),為避免清除中斷,可以讀輔助狀態(tài)寄存器376h。這兩個(gè)寄存器的內(nèi)容完全一樣。在ATA/ATAPI-4中其定義如表3所示。

BSY:驅(qū)動(dòng)器忙。

DRDY:驅(qū)動(dòng)器準(zhǔn)備好。

DRQ:請(qǐng)求服務(wù),驅(qū)動(dòng)器請(qǐng)求通過寄存器與處理器交換一個(gè)字節(jié)數(shù)據(jù)。

ERR:命令執(zhí)行錯(cuò)誤。

3.2 硬盤PIO方式下特定區(qū)域多扇區(qū)讀的操作

如果想從硬盤的特定扇區(qū)讀出碼流信息,首先主機(jī)(C8051F015)要對(duì)驅(qū)動(dòng)器/磁頭寄存器、柱面號(hào)寄存器、扇區(qū)號(hào)寄存器、扇區(qū)數(shù)寄存器設(shè)置參數(shù)。完畢后要等待至少400ns才能去讀狀態(tài)寄存器的參數(shù)判斷以上設(shè)置是否有效。硬盤接收命令后置BSY=1,并開始執(zhí)行命令。硬盤如果準(zhǔn)備好傳送數(shù)據(jù)包,就置DRQ=1,同時(shí)清零BSY。當(dāng)機(jī)循環(huán)讀狀態(tài)寄存器或輔助狀態(tài)寄存器判斷BSY=0&DRQ=1,一旦硬盤狀態(tài)符合要求,主機(jī)寫參數(shù)0x80(128扇區(qū))到數(shù)據(jù)寄存器(0x170),并寫0x20(PIO讀)到命令寄存器(0x177),表示要求讀出硬盤相應(yīng)地址里的數(shù)據(jù)塊。硬盤判斷數(shù)據(jù)寄存器被置數(shù)后立即置BSY=1&DRQ=0。主機(jī)讀到置位信息后給硬盤讀時(shí)鐘,硬盤輸出數(shù)據(jù)直到數(shù)據(jù)包傳完為止。

表3 狀態(tài)寄存器在ATA/ATAPI-4中的定義

D7 D6 D5 D4 D3 D2 D1 D0 BSY DRDY # # DRQ obsolete obsolete ERR

4 系統(tǒng)設(shè)計(jì)方案

4.1 系統(tǒng)硬件構(gòu)成

基于8位微控制器的系統(tǒng)設(shè)計(jì)方案如圖2所示。主系統(tǒng)中以C8051F015為控制核心,C8051F015產(chǎn)生硬盤和FIFO的讀寫時(shí)序(為了避免硬盤寄存器參數(shù)也被寫入FIFO,在硬件上要把二者的讀寫時(shí)鐘分開。);硬盤輸出的16位數(shù)據(jù)分離低8位分別送入兩片64KB的FIFO緩存。數(shù)據(jù)經(jīng)緩存后持續(xù)地輸出到CPLD,CPLD對(duì)16位數(shù)據(jù)流進(jìn)行拆分,同時(shí)識(shí)別包同步和字節(jié)同步。這樣,原始的一路HDTV碼流就被分成3路輸送給解碼器解碼。主系統(tǒng)通過串行總線與前面板相連,采用通用單片機(jī)AT89C51為前面板的控制核心。AT89C51接收來自鍵盤的命令并在LCD上以文字和圖形的方式展現(xiàn)在用戶面前,同時(shí)通過串口通信,啟動(dòng)主控制器執(zhí)行命令。

4.2 系統(tǒng)軟件設(shè)計(jì)

4.2.1 存碼流部分

本系統(tǒng)沒有引入操作系統(tǒng)和文件格式,所以碼流文件存入硬盤時(shí)就不能按文件格式,而只能按二進(jìn)制流的方式從PC機(jī)的碼流文件中讀出數(shù)據(jù),再按同樣的方式寫入裸盤。為了解決碼流的總是,試圖調(diào)用BIOS中斷,讓BIOS的硬盤服務(wù)流程負(fù)責(zé)把INT13的讀寫請(qǐng)求轉(zhuǎn)化為ATA界面對(duì)硬盤的請(qǐng)求,并執(zhí)行數(shù)據(jù)I/O傳輸?shù)奈锢韯?dòng)作。但由于BIOS本身寄存器的限制,用它去訪問硬盤有8.4G容限的問題。如果想突破這個(gè)限制而用擴(kuò)展的INT13,將是一個(gè)比較復(fù)雜的過程?梢岳肞C機(jī)上的Secondary IDE Channel(0x170~0x177)作為硬盤寄存器的端口地址。在這個(gè)硬件平臺(tái)下,可以直接將fread()函數(shù)讀出的碼流按塊寫入目標(biāo)硬盤,甚至不要求大多地考慮時(shí)序問題。

4.2.2 讀碼流部分

這部分軟件是在上述硬件系統(tǒng)平臺(tái)上直接編程。系統(tǒng)在啟動(dòng)硬盤前要等待串行中斷,接收由前面板發(fā)出的命令,再根據(jù)接收的數(shù)據(jù)信息具體決定應(yīng)該播放哪幾個(gè)節(jié)目;隨后對(duì)硬盤、FIFO進(jìn)行初始化,啟動(dòng)CPLD,F(xiàn)IFO輸出數(shù)據(jù)時(shí)鐘信號(hào),并讓硬盤按命令輸出數(shù)據(jù)流。數(shù)據(jù)在總線穩(wěn)定的時(shí)間內(nèi)給FIFO寫時(shí)鐘,以采集正確的碼流信息(這里強(qiáng)調(diào)時(shí)序)。FIFO有“半滿”(HF)標(biāo)志,用HF去觸發(fā)中斷,有中斷請(qǐng)求,就讓硬盤輸出64KB的數(shù)據(jù)。如此循環(huán),保證FIFO不空。當(dāng)FIFO輸出第一個(gè)數(shù)據(jù)時(shí),CPLD開始對(duì)數(shù)據(jù)流進(jìn)行拆分,并按照HDTV碼流的格式標(biāo)準(zhǔn)對(duì)數(shù)據(jù)流進(jìn)行判別(HDTV碼流188字節(jié)為一個(gè)包,每個(gè)包頭是0x47),即每計(jì)數(shù)1次,就輸出一個(gè)比特同步,每計(jì)數(shù)188次并識(shí)別下一個(gè)數(shù)為0x47,就輸出一個(gè)包同步。這部分程序流程如圖3。
IP
    4.2.3 應(yīng)用程序

系統(tǒng)設(shè)置硬盤寄存器參數(shù)時(shí),首先調(diào)用SetMode()函數(shù)設(shè)定硬盤的IDLE狀態(tài)和自掉電功能,可以保證硬盤在不工作的情況下,磁頭會(huì)復(fù)位到“登陸區(qū)”;然后調(diào)用SetAdress()函數(shù)選擇對(duì)應(yīng)的寄存器;接下來可以調(diào)用ReadSector()函數(shù)進(jìn)行多扇區(qū)讀操作。以下是寄存器選擇子函數(shù)和多扇區(qū)讀子函數(shù)。

//寄存器選擇子函數(shù);

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;

}

}

//多扇區(qū)讀子函數(shù):

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); //一次讀寫的扇區(qū)數(shù)

//Issue read sector command...

WriteBYTE(CMD,7,0x20); //0x20多為扇區(qū)讀命令

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){ //一次讀兩字節(jié)

nDIOR=0; //硬盤的讀時(shí)鐘

WCK=1;

WCK=0;

nDIOR=1;

}

nCS1FX=1; //復(fù)位CS

nCS3FX=1;

return ReadBYTE(CMD,1); //返回錯(cuò)誤寄存器的信息

}

本文是“第三代碼流回放機(jī)研制”課題的一個(gè)重要組成部分。本方案利用微控制器對(duì)硬盤進(jìn)行基于LBA模式下的讀寫操作(不用操作系統(tǒng)),硬軟件簡潔可靠,技術(shù)上也解決前期產(chǎn)品的兩個(gè)難題:

(1)一些舊機(jī)器的BIOS不支持INT 13h Extension,無法訪問8.4G以上硬盤空間;

(2)WINDOWS操作系統(tǒng)不支持存儲(chǔ)1.2G以上碼流文件。

將此系統(tǒng)逆向設(shè)計(jì),能夠研發(fā)出適時(shí)錄制TS流和衛(wèi)星節(jié)目的儀器。


【基于8位微控制器控制硬盤進(jìn)行HDTV碼流讀寫】相關(guān)文章:

基于RISC技術(shù)的8位微控制器設(shè)計(jì)08-06

基于MC9S12微控制器的發(fā)動(dòng)機(jī)高能直接點(diǎn)火控制08-06

基于32位微控制器MC68HC376的開發(fā)設(shè)計(jì)和應(yīng)用08-06

微控制器撥號(hào)上網(wǎng)的實(shí)現(xiàn)08-06

微控制器的GPRS無線上網(wǎng)08-06

MPC555微控制器與汽車電子08-06

改善8051系統(tǒng)用電效率的微控制器08-06

基于發(fā)射分集的空時(shí)碼及其應(yīng)用08-06

在讀寫訓(xùn)練中進(jìn)行創(chuàng)造思維訓(xùn)練08-17