基于8位微控制器控制硬盤進行HDTV碼流讀寫_第1頁
基于8位微控制器控制硬盤進行HDTV碼流讀寫_第2頁
基于8位微控制器控制硬盤進行HDTV碼流讀寫_第3頁
基于8位微控制器控制硬盤進行HDTV碼流讀寫_第4頁
基于8位微控制器控制硬盤進行HDTV碼流讀寫_第5頁
已閱讀5頁,還剩3頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、基于8位微控制器控制硬盤進行HDTV碼流讀寫    摘要:介紹用C8051F015微控制器控制硬盤進行HDTV碼流存取的高清碼流回放機的硬件設計和軟件編程。該系統作為解碼器的前端,可以實現HDTV碼流的適時回放。 關鍵詞:HDTV 碼流 ATA/ATAPI-4標準 LBA模式 CPLD隨著HDTV在全球的興起以及數字技術的日趨成熟,音/視頻產品數字化、高清晰度化已成為未來家電視聽產品的大趨勢。高清晰度電視HDTV(High-Definition Television)采用了國際上流行的MPEG-2標準,MPEG-2規定了數字圖像的音視頻編解碼算法以及傳送

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,使聲音效果可以達到家庭影院的音響效果。HD

3、TV聲光效果上優勢,注定它的發展有著技術和市場的雙重必然性。為了配合HDTV及相關技術產品的推廣,筆者開發了一個既可以作為MPEG解碼器信號源,又可以作為信道編碼/調制器信號源的碼流回放機,應用于數字電視產品的開發、生產調試及展示宣傳。HDTV節目有傳輸碼率高、節目信息最大的特點。為了研制出符合大容量高速率要求的碼流回放機,傳統的方法是用操作系統控制硬盤的讀寫操作。這樣做的好處在于:首先,PC機的主頻很高,用來作為控制碼流的時鐘信號在速度上不會有瓶頸問題;其次,對硬盤里HDTV節目的讀取是基于文件系統的,研發人員不用寫硬盤的驅動程序,軟件的工作量大大減小。但是,就碼流回放機本身而言,它是一個單

4、任務設備,采用操作系統的方案無疑將造成CPU資源的極大浪費。因此,筆者設想用單片機或DSP控制硬盤的讀寫操作。只要所選微控制器上速度上滿足高清晰度電視的碼率要求,在技術上就能夠實現預期的功能。與操作系統方案相比較,用微控制器無疑可以大大降低生產成本,同時也降低了硬件設計的難度。不過,在這種方式下,需要編寫硬盤的底層驅動程序。圖1 C8051F015內部結構1 總體方案華天HTTS HDTV第III代碼流回放機可以播放數字高清晰度電視HDTV碼流。該碼泫回放機整體設計沒有采用在工控機上研發PCI卡驅動硬盤的方案,而是遵照AT Attachment with Packet Interface Ex

5、tension(ATA/ATAPI-4)標準,用8位單片機C8051F015通過PIO方式按照LBA模式直接對硬盤進行物理級的讀寫操作。硬盤接收微控制器的命令后按照邏輯地址順序輸出HDTV碼流給兩片FIFO,硬盤輸出的16位數據通過兩片8位FIFO緩存后輸出給CPLD進行拆分以識別包同步和字節同步。經CPLD解析后的數據流再經過解碼器解碼及適當后處理,送顯示器、揚聲器以提供視頻、音頻信號。既可以作為MPEG解碼器的信號源,又可以作為信道編碼/調制器的信號源。2 C8051F015內部結構C8051F015的內部結構如圖1所示。它使用了CYGNAL的專利CIP-51微控制器內核CIP-51。CI

6、P-51與MCS-51的指令集完全兼容,可以使用標準803x/805x的匯編器和編譯器進行軟件開發。同時,CIP-51采用流水線結構,70%的指令執行時間為1或2個系統時鐘周期,外部晶振最大可以到25MHz。8位HDTV輸出碼流的標準時鐘頻率為19MHz和25MHz。考慮到硬盤的輸出是16位,理論上采用這款MCU完全可以達到速度要求。這里,就系統的初始化問題有幾點說明:(1)內外部晶振切換。在外部晶體振蕩器被允許時,系統晶體驅動器的輸出端XTAL2腳會出現一個瞬時脈沖,該脈沖足以在晶體實際啟動前,將OSCXCN寄存器中的XTLVLD位置1。在允許晶體振蕩器和檢查XTLVLD位之間引入1ms的延

7、時,可以防止提前切換到外部晶振。(2)配置交叉開關。系統內部交叉開關根據優先權譯碼表將所選擇的內部數字資源分配到I/O引腳,寄存器XBR0、XBR1、XBR2用于選擇內部數字功能或讓I/O引腳默認為I/O端口。I/O引腳的輸出驅動器特性用端口配置寄存器PRT0CF、PRT1CF、PRT2CF和PRT3CF定義。每個端口輸出驅動器都可被配置為漏極開路或推挽方式。將配置寄存器的相應位配置為漏極開路,并在外部加1k的上拉電阻,可用3.3V供電的C8051F015去驅動5V供電的硬盤。初始化程序:void sysclk_init(void)WDTCH=0xde; /禁止看門狗定時器WDTCN=0xad

8、;/啟動外部振蕩器OSCXCN=0x67; /外接24MHz的晶振/配置外部晶體while(OSCXCN&XTLVLD_BIT= =0)OSCICN=0x88; /選擇外部振蕩器作為系統時鐘,禁止內部振蕩/配置交叉開關void xbar_init(void)XBR0=0x04; /RX TX連到兩個引腳XBR1=0x04; /INT0連到斷口引腳XBR2=0x40; /使能交叉開關和弱上拉PRT0CF=0xff; /控制FIFO讀寫,使能PRT1CF=0x07; /控制CPLD讀寫,使能PRT2CF=0x00; (P0口的所有輸出為弱上拉(寫硬盤命令字)PRT3CF=0x00; /控制

9、硬盤讀寫,使能3 ATA/ATAPI-4標準下的硬盤內部寄存器和PIO讀時序關系3.1 硬盤內部寄存器目前,大    部分計算機配置了兩個IDE接口,地址范圍分別為:01700117,03760376(對應PC機的Secondary IDE Channel)和01F001F6,03F603F6(對應PC機的Primary IDE Channel)。地址譯碼如表1所示。表1 地址譯碼·數據寄存器(170R/W):這是一個16位PIO數據寄存器,用于對扇區的讀、寫和格式化操作。MCU通過該寄存器向硬盤控制寄存器寫入或從硬盤控制器讀出扇區緩沖區的數據

10、。·錯誤寄存器(171R):該寄存器是一個8位的寄存器,它反映控制寄存器在診斷方式或操作方式下的錯誤原因。·扇區數寄存器(172R/W):它記錄讀、寫命令的扇區數。當多扇區傳輸時,每完成一個扇區操作,該寄存器自動減1,直至為0。如果初值為0,則表示256;如果有錯誤生,該寄存器包含已經操作成功的扇區數。·扇區號寄存器(173R/W):它記錄讀、寫和校驗命令指令起始扇區號。本文用LBA模式。該寄存器記錄邏輯扇區的0字節。·柱面號寄存器(174 175 R/W):它記錄讀、寫、校驗、尋址和格式化命令指定的柱面號,在LBA尋址方式下,這2個寄存器包含起始扇區的

11、1和2字節。·驅動器/磁頭寄存器(176R/W):它記錄讀、寫、校驗、尋道和格式化命令指定的驅動器號、磁頭號和尋址方式。在ATA/ATAPI-4中其定義如表2所示。表2 驅動器/磁頭寄存器在ATA/ATAPI-4中的定義D7D6D5D4D3D2D1D01L1DEVHS3HS2HS1HS0HS0HS3(磁頭選擇):在LBA方式中,是邏輯扇區的高4位。DEV驅動器選擇:0選擇主驅動器,1選擇從驅動器。L(LBA方式):L=1,置驅動器為LBA模式;L=0,置驅動器為CHS模式。·狀態寄存器(177 R);反映了硬盤執行命令后的狀態。讀該寄存器清除中斷請求信號,為避免清除中斷,可

12、以讀輔助狀態寄存器376h。這兩個寄存器的內容完全一樣。在ATA/ATAPI-4中其定義如表3所示。BSY:驅動器忙。DRDY:驅動器準備好。DRQ:請求服務,驅動器請求通過寄存器與處理器交換一個字節數據。ERR:命令執行錯誤。3.2 硬盤PIO方式下特定區域多扇區讀的操作如果想從硬盤的特定扇區讀出碼流信息,首先主機(C8051F015)要對驅動器/磁頭寄存器、柱面號寄存器、扇區號寄存器、扇區數寄存器設置參數。完畢后要等待至少400ns才能去讀狀態寄存器的參數判斷以上設置是否有效。硬盤接收命令后置BSY=1,并開始執行命令。硬盤如果準備好傳送數據包,就置DRQ=1,同時清零BSY。當機循環讀狀

13、態寄存器或輔助狀態寄存器判斷BSY=0&DRQ=1,一旦硬盤狀態符合要求,主機寫參數0x80(128扇區)到數據寄存器(0x170),并寫0x20(PIO讀)到命令寄存器(0x177),表示要求讀出硬盤相應地址里的數據塊。硬盤判斷數據寄存器被置數后立即置BSY=1&DRQ=0。主機讀到置位信息后給硬盤讀時鐘,硬盤輸出數據直到數據包傳完為止。表3 狀態寄存器在ATA/ATAPI-4中的定義D7D6D5D4D3D2D1D0BSYDRDY#DRQobsoleteobsoleteERR4 系統設計方案4.1 系統硬件構成基于8位微控制器的系統設計方案如圖2所示。主系統中以C8051F0

14、15為控制核心,C8051F015產生硬盤和FIFO的讀寫時序(為了避免硬盤寄存器參數也被寫入FIFO,在硬件上要把二者的讀寫時鐘分開。);硬盤輸出的16位數據分離低8位分別送入兩片64KB的FIFO緩存。數據經緩存后持續地輸出到CPLD,CPLD對16位數據流進行拆分,同時識別包同步和字節同步。這樣,原始的一路HDTV碼流就被分成3路輸送給解碼器解碼。主系統通過串行總線與前面板相連,采用通用單片機AT89C51為前面板的控制核心。AT89C51接收來自鍵盤的命令并在LCD上以文字和圖形的方式展現在用戶面前,同時通過串口通信,啟動主控制器執行命令。4.2 系統軟件設計4.2.1 存碼流部分本系

15、統沒有引入操作系統和文件格式,所以碼流文件存入硬盤時就不能按文件格式,而只能按二進制流的方式從PC機的碼流文件中讀出數據,再按同樣的方式寫入裸盤。為了解決碼流的總是,試圖調用BIOS中斷,讓BIOS的硬盤服務流程負責把INT13的讀寫請求轉化為ATA界面對硬盤的請求,并執行數據I/O傳輸的物理動作。但由于BIOS本身寄存器的限制,用它去訪問硬盤有8.4G容限的問題。如果想突破這個限制而用擴展的INT13,將是一個比較復雜的過程。可以利用PC機上的Secondary IDE Channel(0x1700x177)作為硬盤寄存器的端口地址。在這個硬件平臺下,可以直接將fread()函數讀出的碼流按

16、塊寫入目標硬盤,甚至不要求大多地考慮時序問題。4.2.2 讀碼流部分這部分軟件是在上述硬件系統平臺上直接編程。系統在啟動硬盤前要等待串行中斷,接收由    前面板發出的命令,再根據接收的數據信息具體決定應該播放哪幾個節目;隨后對硬盤、FIFO進行初始化,啟動CPLD,FIFO輸出數據時鐘信號,并讓硬盤按命令輸出數據流。數據在總線穩定的時間內給FIFO寫時鐘,以采集正確的碼流信息(這里強調時序)。FIFO有“半滿”(HF)標志,用HF去觸發中斷,有中斷請求,就讓硬盤輸出64KB的數據。如此循環,保證FIFO不空。當FIFO輸出第一個數據時,CPLD開始對數

17、據流進行拆分,并按照HDTV碼流的格式標準對數據流進行判別(HDTV碼流188字節為一個包,每個包頭是0x47),即每計數1次,就輸出一個比特同步,每計數188次并識別下一個數為0x47,就輸出一個包同步。這部分程序流程如圖3。IP    4.2.3 應用程序系統設置硬盤寄存器參數時,首先調用SetMode()函數設定硬盤的IDLE狀態和自掉電功能,可以保證硬盤在不工作的情況下,磁頭會復位到“登陸區”;然后調用SetAdress()函數選擇對應的寄存器;接下來可以調用ReadSector()函數進行多扇區讀操作。以下是寄存器選擇子函數和多扇區讀子函數。/

18、寄存器選擇子函數;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); /一次讀寫的扇區數

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論