999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于Nios Ⅱ的音頻播放器設計與驅動開發

2010-04-12 00:00:00馮新宇蔣洪波祁紅巖
現代電子技術 2010年4期

摘 要:采用TOP-DOWN設計方法,在DE2開發平臺上完成音頻播放器設計。設計主要包括Nios Ⅱ軟核處理器、音頻控制器、I2C控制器和IDE接口等IP核構成的Nios Ⅱ系統,在此基礎上完成μClinux操作系統移植以及完成基于HAL層的音頻驅動器的驅動程序開發,最后用C語言在Nios Ⅱ系統上編寫應用程序進行測試。該實現方法即是下一代消費類電子發展的趨勢,也是集成電路發展的一個趨勢。

關鍵詞:SoPC;音頻控制器;HAL;系統移植

中圖分類號:TP311文獻標識碼:A

文章編號:1004-373X(2010)04-097-05

Design and Driver Development of Audio Player Based on Nios Ⅱ

FENG Xinyu,JIANG Hongbo,QI Hongyan

(Heilongjiang Institute of Science and Technology,Harbin,150027,China)

Abstract:Using TOP-DOWN design method to develop audio player in the DE2 platform.The system mainly consists of Nios Ⅱ soft-core processor,audio controller,I2C controller,IDE interface and other IP core.It completes the μClinux operating system transplantation and driver drives of HAL,using C language write test bench for it.The method is trend of the next generation of consumer electronics and IC.

Keywords:SoPC;audio controller;HAL;system transplantation

0 引 言

隨著集成電路的發展,嵌入式系統發生了深刻的變革,各種消費類電子產品、終端設備都采用了嵌入設計技術。SoPC技術[1]作為嵌入式系統的重要分支,最近兩年發展迅猛,使用軟核處理器的概念[2]更加明確,但目前市場上還沒有軟核控制器的產品。隨著軟核處理器的不斷成熟,軟核處理器必將應用在各種設備上,使得終端產品的價格也會因此而降低。在此,采用SoPC技術,設計了由Nios Ⅱ軟核處理器作為中央處理單元、開發音頻控制器及I2C控制器等IP核[3]構成的音頻播放器系統。在此基礎上,完成了μClinux操作系統移植及相應驅動程序開發,用C語言在該系統上編寫應用程序進行測試,實現了一個完整的音頻播放器功能。

1 系統的整體結構

在此使用的硬件開發平臺是DE2開發板,它是Altera公司針對大學教學以及研究機構推出的FPGA開發平臺。DE2平臺上提供的硬件資源有Altera CycloneⅡ系列的EP2C35F672C6;主動串行配置器件EPCS16U30;編程調試和用戶API設計的USB Blaster,支持JTAG模式和AS模式;512 KB SRAM;8 MB SDRAM;4 MB FLASH;SD卡接口;兩個板上時鐘源,50 MHz和27 MHz;24位音頻編解碼器等。音頻播放器的系統硬件框圖如圖1所示。

圖1 系統硬件框圖

在圖1中,處理器的工作由Nios Ⅱ軟核處理器完成;存儲器是存放音頻文件,DE2開發板外接了SD卡擴展口,該設計采用SD卡作為數據的存儲,音頻編解碼處理單元使用的是音頻編解碼芯片WM8731。

實現音頻播放器需要開發二個接口,一個是處理器控制WM8731的控制接口,WM8731有3線和2線兩種控制方式,在此采用的是兩線的I2C控制模式;第二個接口是音頻編解碼控制器接口,也是設計的核心重點,最后把這二個接口包裝成IP。IP與系統之間的互聯使用Avalon總線結構,與系統之間的關系[3]如圖2所示,其他IP由Altera公司免費提供。

圖2 SoPC Builde系統模塊

2 I2C控制模塊與音頻編解碼控制接口設計

2.1 I2C控制模塊接口設計

在I2C控制器中,輸入SCLK是I2C控制器的時鐘輸入,頻率為20 kHz,通過外部晶振分頻可以得到。WM8731總線接口時序如圖3所示。

圖3 WM8731 I2C總線控制時序

WM8731控制接口采用兩線接口模式,起始條件是SDIN為下降沿而SCLK為上升沿的時刻。接下來的7位是設備地址,確定使用哪一個設備(這里使用就是WM8731),之后一位為確定數據的傳輸方向,0說明為寫狀態。設備在第9個時鐘周期通過SDIN,它為低電平態,用于確定寄存器地址和讀/寫控制,應答數據傳輸(ACK,一共需要3個應答信號)。B[15:8]包括了要控制的寄存器地址,B[7:0]包含的是數據信息。結束條件是傳輸數據后SDIN和SCLK均為高電平。

由時序圖和WM8731芯片的具體控制過程得知,I2C控制器每次傳輸24 b數據,前8 b是從設備地址,接下來的8 b是從設備寄存器地址,最后8 b是數據,但是WM8731的寄存器地址是7 b,數據是9 b。所以實際傳輸時,從設備寄存器地址的最后一位為數據的最高位,即第9 b。

I2C控制器使用33個I2C時鐘周期,完成1次傳輸24 b數據,第一個時鐘周期用于初始化控制器,第2,3個周期用于啟動傳輸,第4~30個周期用于傳輸數據。其中,包括3個ACK信號,最后3個時鐘周期用以停止傳輸。控制器中使用了一個6 b計數器對傳輸周期計數。在開始傳輸之前和結束傳輸之后,總線的時鐘信號應該保持高電平,并且起始條件和結束條件由I2C的兩個信號共同配合完成。

I2C傳輸一次數據的控制流程如圖4所示。結合WM8731 I2C總線控制時序圖,SD0為控制器發送的串行數據,END為傳輸結束標志。當復位信號為有效電平時,發送計數器置為6′b111111,因為當計數器值為32時,I2C控制總線停止傳輸數據;當復位電平無效時,計數器賦值為0,等待數據傳輸開始標志。當傳輸標志有效時,計數器開始計數,完成I2C控制器數據傳輸的控制功能,計數同時對計數器的值進行判斷。當計數器值為0(第1個時鐘周期)時,對控制器進行初始化;當計數器為值1和2時,啟動傳輸,依次類推,與控制時序完全對應。

圖4 音頻控制器程序流程圖

2.2 I2C配置模塊

I2C配置模塊是通過例化I2C控制模塊完成對WM8731內部11個寄存器包括工作模式、采樣率、音量等參數的設定。WM8731的寄存器以及參數值設置如表1所示。

表1 WM8731的寄存器參數設置

寄存器地址設置參數值寄存器地址設置參數值

00H1AH0AH06H

02H1AH0CH00H

04H7BH0EH01H

06H7BH10H02H

08HF8H12H01H

配置數據指通過查表的方式對數據進行配置。從表中可以看出,數據為16 b,包括寄存器地址和寄存器數據。

最后,把用Verilog代碼編寫的I2C控制器模塊程序,利用SoPC Builder工具進行包裝,用IP的形式連接到系統的Avalon總線上。I2C控制功能所需的Avalon總線信號類型、傳輸方向及接口名稱如表2所示。

2.3 音頻編解碼控制接口設計

音頻控制模塊主要是完成對音頻編解碼芯片WM8731的接口控制。在接口的拓撲結構中,從端口需要接收或者發送音頻數據,因而需要加一個音頻控制器,負責數據的傳輸。Nios Ⅱ把音頻控制器中的數據送給WM8731的數據接收引腳DACDAT,可以完成音頻的播放。同理,錄音過程也需要在WM8731中完成ADC轉換后,通過音頻控制器送給Nios Ⅱ處理。這里主要是一個音頻控制器和Avalon總線之間的相互通信,圖5為接口拓撲結構。

表2 I2C信號和Avalon接口信號類型

信號名稱方向位寬/b描述

Avalon接口信號

iCLKinput1時鐘

iRST_Ninput1復位信號

I2C_SCLKinput1總線時鐘信號

I2C_SDATbidir1數據信號

圖5 接口拓撲結構

Nios Ⅱ處理器與WM8731之間的數據交換要求音頻控制器功能包括FIFO單元、數據并入串出轉換模塊、位時鐘發生器模塊、數據鎖存模塊等,音頻控制器結構模塊如圖6所示。

圖6 音頻控制器結構模塊圖

通過外部晶振分頻為音頻控制器提供一個WM8731所需的18 MHz工作頻率,這個頻率從引腳oAUD_XCK(WM8731主時鐘)輸出,數字音頻位時鐘(oAUD_BCK),left/right 采樣時鐘(oAUD_LRCK)都是從18 MHz經過分頻處理得到。其中,oAUD_BCK信號頻率為3 MHz;oAUD_LRCK信號頻率為96 kHz,FIFO接收的數據經過鎖存器控制后送到并入串出模塊,這時信號可以直接給音頻編解碼芯片來使用。音頻控制器端口信號如表3所示。

最后還是利用SoPC Builder將編寫好的音頻控制器中Verilog代碼封裝成IP,在使用時調用即可。

表3 音頻接口信號和Avalon接口信號類型

信號名稱方向位寬/b

Avalon接口信號

iRST_ninput1

iDATA[15:0]input16

iWR_CLKinput1

iCLK_18_4input1

iWRinput1

輸出信號

oAUD_DATAoutput1

oDATAoutput16

oAUD_BCKoutput1

oAUD_XCKoutput1

oAUD_LRCKoutput1

3 操作系統移植

操作系統移植的實驗環境為PC上采用虛擬機的方法來訪問Linux系統,Linux操作系統使用的是Red Hat Enterprise 4 AS。在這個環境下進行系統移植[4,5],需要下載一些Nios Ⅱ開發工具,如下:

(1) nios2gcc.tar.bz2:nios2gcc交叉編譯工具;

(2) μClinux-dist-20070130-nios2-02.diff.gz μClinux源代碼包;

(3) μClinux-dist-20070130-nios2-02.diff.gz μClinux補丁。

系統移植主要設計問題有bootloader配置、內核配置和文件系統的配置。

μClinux系統的日益完善,現行大部分操作系統移植屬于板級移植,即所用的處理器已經被μClinux支持,板級移植需要修改或添加linux/arch/Nios2 nommu/scripts目錄中的文件,該目錄中主要是與具體硬件平臺相關的配置,可以利用Nios Ⅱ自帶的SoPC Builder軟件生成具體平臺對應的配置文件[6,7]。但具體的細節略有不同。這里重點要修改兩個文件:altera.c和dm9000x.c。altera.c文件主要是文件本身默認的存儲單元,其大小與實際的開發板略有出入,把默認的的寄存器大小改為與開發板一致即可。第二個要修改的文件dm9000x.c,將其中的na_dm9000全部改為na_DM9000A,保存后退出。內核的配置與一般μClinux內核配置過程基本相同,配置好后,保存,重新編譯。最后可在make生成所需要的內核,把編譯好的內核文件通過jtag下載到系統中,得到如圖7所示的啟動界面,它表明系統啟動成功,可以對其進行一般Linux的系統操作。

4 音頻驅動程序的編寫

設備驅動程序可以使用模塊的方式動態地加載到內核中去。它們之間的關系如圖8所示。

設備注冊:設備注冊使用函數register_chrdev,調用后函數就可以向系統申請主設備號,如果register_chrdev操作成功,設備名就會出現在/proc/devices文件里。設備注冊需要的頭文件為fs.h,具體的各個形式參數意義與注冊函數的形參相同[8],若函數返回值為0,說明關閉設備成功,否則返回-1。

圖7 系統啟動界面

圖8 設備驅動程序流程圖

I/O設備的讀/寫:在PIO設備寄存器范圍內使用結構體變量訪問使用和分配PIO設備,可以提高驅動程序的開發效率。-linux-2.6.x/include/asm-nios2nommu/pio_struct.h中定義了np_pio結構體,如下:

typedef volatile struct

{

int np_piodata;

int np_piodirection;

int np_piointerruptmask;

int np_pioedgecapture;

}np_pio;

I/O內存分配和映射:在使用之前,必須首先分配I/O內存區域[9,10](memory region)的接口。該設計的設備驅動程序申請內存區域可以被定義為:

request_mem_region((unsigned long)WM8731_BASE,sizeof(np_pio),\"de2_wm8731\");

該函數從WM8731_BASE開始分配sizeof(np_pio)長的內存區域。如果成功,返回非NULL指針;否則返回NULL值。

設備操作:假定設備文件代表物理設備,這些物理設備一些用作輸入,一些用作輸出。因此,在內核中驅動程序對于輸出設備可以通過打開設備文件對它寫操作,就像寫一個文件,也可以通過打開設備完成如讀設備等操作,最后關閉文件,這些操作在file_operation結構體[5]中定義。

5 測 試

對驅動程序的驗證主要是通過幾個應用程序實現的。在μClinux里,驅動程序的編寫是在IDE里完成的,編譯通過后,與μClinux一起下載到開發板上進行測試。當驅動程序加載到系統后,首先查看設備是否被加載上,利用命令查看設備號,確認設備是否被掛載上,在提示符后面,所用命令為:

mount –n –t proc proc /proc

cat /proc/devices

顯示信息為:

Character devices:

1 men

2 pty

243 de2_wm8731

可以看出設備de2_wm8731已經被加載,其設備號為243。

5.1 在IDE中編寫應用程序

編寫應用程序的方法與普通C編程相同,主要是把音樂數據送到音頻控制器音頻數據接口,這里播放的是WAV格式的音頻文件。由于受到存儲空間的限制,首先要將WAV文件轉換成十進制文件(二,八進制亦可),選取其中的很小一段,以數組的形式放到應用程序里,這些數組中存放的就是音頻測試數據。

5.2 把WAV文件轉換成十進制數據的方法

當音頻控制器不在μClinux操作系統下播放音頻數據時,而是通過存儲媒質(如SD卡)播放的,則可以把從buffer里讀出的數據以十進制的方式打印出來,主要程序代碼為:

while(1)

{ SD_read_lba(Buffer,j,1);

printf(\"{\");

while(i<512)

{ if(!IORD(WM8731_BASE,0))

{ Tmp1=(Buffer[i+1]<<8)|Buffer[i];

printf(\",%d\",Buffer[i]);

IOWR(WM8731_BASE,0,Tmp1);

i+=1;

}

}

printf(\"},\");

這樣就把音頻數據以下列十進制形式打印出來:

37,255,52,255,38,0,84,255,94,0,119,255,148,0,157,255,202,0,196,255,255,0,238,255[HJ1〗

5.3 應用程序編譯

編譯應用程序需要編寫一小段makefile文件。這里把其他應用程序的makefile拷貝過來進行修改使用,該驗證把系統中自帶的samples/hello/Makefile拷貝到應用程序testaudio工程中,然后修改Makefile。

Hello程序的Makefile文件主要程序段為:

DEBUG = 1

PROJ_NAME = hello

INSTALL_DIR =

PROGS :=$(PROJ_NAME).exe

CFLAGS +=

#

# You should not need to modify anything beyond this point

#

TOPDIR = ..

include $(TOPDIR)/Rules.mak

修改的方法為:

將Debug = 1 改為 Debug = 0

將PROJ_NAME =hello 改為 PROJ_NAME = testaudio

將TOPDIR = ..改為 TOPDIR = .

在include $(TOPDIR)/Rules.mak 前面加上 include $(TOPDIR)/Settings.mak

完成修改后,在工程中單擊右鍵,選擇Create Make Target,這時生成testaudio.exe文件,將其拷貝到文件系統里的bin文件夾下,再對文件系統進行編譯,此后文件系統的/bin中就含有testaudio.exe程序。這時在μClinux下運行該應用程序即可。

其他驅動程序,如顯示、按鍵和LED采用類似的方法編寫測試程序,再向相應的數據緩沖區內寫數據,這些數據都可以在相應終端看到,且可以實現相應的功能,驅動成功。

6 結 語

這里主要是將嵌入式眾多技術中發展比較快的FPGA,SoPC、嵌入式操作系統等有機結合起來,利用DE2開發平臺,主要完成以下幾方面工作:

(1) 對DE2開發平臺功能模塊進行劃分,掌握其開發平臺特性、使用方法,及SoPC系統設計過程、Avalon總線規范和使用方法;

(2) 掌握音頻編解碼芯片的工作原理, 完成其接口設計, 主要包括控制接口和音頻數字接口兩部分,并結合第三方IP,完成基于Nios Ⅱ音頻系統的FPGA的設計;

(3) 研究嵌入式操作系統相關知識,完成μClinux系統中基于Nios Ⅱ硬件平臺的移植工作;

(4) 研究嵌入式驅動程序的基本方法,完成音頻驅動程序的設計和調試。實現音頻驅動程序的功能,可以正常播放音頻文件。

參考文獻

[1]李蘭英.Nios Ⅱ嵌入式軟核SoPC設計原理及應用[M].北京:北京航空航天大學出版社,2006.

[2]Deng Qingxu,Xu Hai.An Embedded SoPC System using Automation Design[A].International Conference on Parallel Processing[C].IEEE Computer Society,2005:232-239.

[3]張春生.面向SoPC的IP核設計與IP復用技術研究[D].長沙:國防科技大學,2006.

[4]ChinChen Chang,YungChen Chou.High Payload Data Embedding with Hybrid Strategy[J].Intelligent Information Hiding and Multimedia Signal Processing,2007,1:505-508.

[5]Chen M C,Fang Y J,Zhang D H.Development of an Embedded Industrial Vision System[A].2006 1st IEEE Conference,Industrial Electronics and Applications[C].Singapore,2006:1-4.

[6]Yingshieh Kung,Guashieh Shu.Development of a FPGA-based Motion Control IC for Robot Arm[A].IEEE International Conference on Industrial Technology[C].IEEE Computer Society,2005:1 397-1 402.

[7]Onatban Corbet,Alessandro Rubini,Greg Kroab Hartman.Linux Device Driver[M].3版.魏永明,譯.北京:中國電力出版社,2006.

[8]蔡偉綱.Nios Ⅱ軟件架構解析[M].西安:西安電子科技大學出版社,2007.

[9]Tam Nguyen,Zaliznyak.Architecture and Methodology of a SoPC with 3.25Gbps CDR Based SERDES and 1Gbps Dynamic Phase Alignment[A].Custom Integrated Circuits Confe-rence[C].IEEE Computer Society,2003:659-662.

[10]Kuan Jen Lin,Chuang Hsiang Huang.Design and Implementation of a Schedulable DMAC on an AMBA-Based SoPC Platform[A].IEEE Asia Pacific on Conference Circuits and Systems[C].IEEE Computer Society,2005:279-282.

主站蜘蛛池模板: 成人日韩视频| A级全黄试看30分钟小视频| 亚洲成人福利网站| 91系列在线观看| 久久黄色小视频| 日韩视频福利| 国产欧美中文字幕| 国产欧美日韩综合在线第一| 99久久人妻精品免费二区| 美女视频黄频a免费高清不卡| 一区二区影院| 久久综合伊人77777| 免费在线a视频| 亚洲成人一区二区| 全午夜免费一级毛片| 欧美a级完整在线观看| 国产精品久久久久久久久久98| 久久成人免费| 国产97色在线| 国产综合无码一区二区色蜜蜜| 亚洲水蜜桃久久综合网站| 欧美不卡视频一区发布| 欧美成a人片在线观看| 67194成是人免费无码| 亚洲天堂成人| 久久伊伊香蕉综合精品| 欧美日韩中文字幕在线| 中文字幕无线码一区| 久久狠狠色噜噜狠狠狠狠97视色| 久草美女视频| 久久香蕉国产线看精品| 尤物在线观看乱码| 91精品aⅴ无码中文字字幕蜜桃 | 操国产美女| 手机在线免费不卡一区二| 亚洲国产精品无码AV| 欧美中文一区| 亚洲成a人片77777在线播放| 一本无码在线观看| 久久精品国产亚洲麻豆| 91精品久久久无码中文字幕vr| 欧美日韩一区二区在线免费观看| 亚洲精品成人片在线观看| 国产精品成人AⅤ在线一二三四| 亚洲国产成熟视频在线多多| 国产系列在线| 麻豆AV网站免费进入| 女人天堂av免费| 少妇高潮惨叫久久久久久| 亚洲美女视频一区| 久久久久久尹人网香蕉| 一级一毛片a级毛片| AV片亚洲国产男人的天堂| 四虎成人免费毛片| 亚洲精品天堂在线观看| 欧美精品影院| 欧美一级夜夜爽| 麻豆精品在线视频| 91成人精品视频| 人人澡人人爽欧美一区| 天天摸天天操免费播放小视频| 99在线观看国产| 欧美视频二区| 亚洲无码视频喷水| 中文一区二区视频| 国产在线视频自拍| 国产欧美视频在线| 成人国产精品网站在线看| 乱系列中文字幕在线视频| 呦系列视频一区二区三区| 9cao视频精品| 亚洲区视频在线观看| 精品無碼一區在線觀看 | 97精品久久久大香线焦| 日韩人妻无码制服丝袜视频| 日韩无码视频专区| 精品一区二区久久久久网站| 国产在线小视频| 久久精品欧美一区二区| 亚洲人成高清| 亚洲精品国产综合99久久夜夜嗨| 日本免费高清一区|