《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于WinCE6.0的數(shù)字調(diào)頻收音機(jī)設(shè)計原理
基于WinCE6.0的數(shù)字調(diào)頻收音機(jī)設(shè)計原理
單片機(jī)與嵌入式系統(tǒng)
摘要: 本設(shè)計利用數(shù)字收音機(jī)芯片Si4730,,為基于WincE6.0的智能系統(tǒng)集成FM功能提供了一種很好的解決方案,該方案實現(xiàn)了全頻手動與自動搜臺等功能,。
Abstract:
Key words :

本設(shè)計利用數(shù)字收音機(jī)芯片Si4730,為基于WincE6.0的智能系統(tǒng)集成FM功能提供了一種很好的解決方案,,該方案實現(xiàn)了全頻手動與自動搜臺等功能,。

1 基于WinCE6.0的系統(tǒng)設(shè)計流程

如圖1所示,基于WinCE 6.0的系統(tǒng)設(shè)計一般分為3個過程:針對不同的硬件平臺設(shè)計BSP包,,BSP包括Boot-loader,、OAL和驅(qū)動程序;針對系統(tǒng)的需求,,利用Platform Builder for CE 6.0選擇合適的組件,,構(gòu)建操作系統(tǒng)并導(dǎo)出SDK;在SDK的支撐下開發(fā)應(yīng)用程序,。

b.JPG



WinCE 6.0與其早期版本相比,,開發(fā)工具有了較大的變化。Platform Builder已經(jīng)不是一個單獨發(fā)行的工具,,Platform Builder 6.0已經(jīng)成為Visual Studio.Net 2005的一個插件,,所以在visual Studio.Net 2005集成開發(fā)環(huán)境中即可完成WinCE6.0的系統(tǒng)定制、驅(qū)動開發(fā)和應(yīng)用程序開發(fā),。



2 數(shù)字收音機(jī)芯片Si4730

2.1 Si4730簡介

Si4730/31是Silicon Labs公司推出的高集成度AM/FM收音機(jī)芯片,,原理圖如圖2所示。

c.JPG



Si4731具有RDS/RBDS功能和數(shù)字音頻接口,。在不包括天線的情況下,,Si4730/31及其外圍電路只需15 mm2。它的功能十分豐富,,包括自動搜臺,、自動校準(zhǔn)、數(shù)字調(diào)諧,、自適應(yīng)噪聲抑制能力等,這些特性非常適合于便攜式設(shè)備,。由于不需要RDS/RBDS功能,,所以這里選用Si4730這款芯片,。

2.2 Si4730的控制接口

Si4730的外圍電路非常簡單,如圖3所示,。Si4730提供了3種控制方式:2線模式(兼容I2C總線),、SPI模式、3線模式,。芯片通過RST引腳上升沿時GP01與GP02的引腳狀態(tài)來決定采用哪種方式,,當(dāng)GP01與GP02懸空時Si4730為2線模式。SEN引腳接高電平時,,器件地址為0xC6H,;接低電平時,地址為0x22H,。

k.JPG





3 接口電路與驅(qū)動程序的設(shè)計

本設(shè)計的硬件平臺采用S3C2440處理器,,已經(jīng)完成BSP包的開發(fā)以及WinCE 6.0操作系統(tǒng)的移植。

3.1 接口電路的設(shè)計

由于S3C2440具有I2C接口,,所以只需將其與Si4730的I2C接口互相連接,。Si4730的復(fù)位引腳RST與S3C2440的GPB5引腳相連。

3.2 驅(qū)動程序的設(shè)計

驅(qū)動程序由兩部分組成:I2C總線的驅(qū)動和GPIO口的驅(qū)動,。I2C總線的驅(qū)動用于操作系統(tǒng)與Si4730之間的通信,,GPIO口的驅(qū)動用于應(yīng)用程序控制Si4730的復(fù)位。

3.2.1 Si4730的命令

Si4730的命令有兩種:一種是控制命令,,如調(diào)諧到某一頻率,、自動搜索等;一種是屬性命令,,如設(shè)置接收信號的強(qiáng)度門限,、輸出音量的大小等。常用的命令有以下幾種:

①上電(POWER_UP),,命令格式為{0x01,,0xd0,0x05},。

②獲取芯片信息(GET_REV),,命令格式為{0x10}。

③調(diào)諧到某一頻率(FM_TUNE_FREQ),,命令格式為{0x20,,0x00,ARG2,,ARG3,,0x00}。其中ARG2與ARG3是頻率的十六進(jìn)制數(shù),例如102.3 MHz,,則ARG2為0x27,,ARG3為0xF6。

④自動搜索(FM_SEEK_START),,命令格式為{0x21,,0x0c)。



3.2.2 I2C總線驅(qū)動的實現(xiàn)

這里采用流接口驅(qū)動程序的設(shè)計方法開發(fā)I2C總線驅(qū)動,。I2C總線驅(qū)動提供給操作系統(tǒng)的流接口為I2C_Init(),、I2C Open()、I2C Close(),、I2C Write(),、I2C Read()、I2C_IOControl()等,,應(yīng)用程序通過調(diào)用CreateFile(),、WirteFile()和DeviceloControl()等接口函數(shù)來訪問設(shè)備。在已編譯完成的WinCE6.0鏡像工程中添加I2C總線驅(qū)動的流程如圖4所示,。

 

l.JPG



①添加子工程,。在鏡像工程的Solution Explorer窗口中,右鍵選擇Add New Subproject,,新建子工程,。

②編寫I2C總線驅(qū)動程序。在Source files下新建I2c.c的源文件,,并在該文件中編寫驅(qū)動代碼,,驅(qū)動程序的主要內(nèi)容就是實現(xiàn)流接口函數(shù)。讀I2C總線的實現(xiàn)函數(shù)為BooL_WRITE_IIC(UINT32 slvAddr,,UINT8 n,,UINT8*data)。寫I2C總線的實現(xiàn)函數(shù)為BooL READ_IIC(UINT32 slvA-ddr,,UINT32 addr,,UINT8 n,UINT8*data),。I2C_IOControl()的作用是傳遞I/O控制命令給設(shè)備,,在該函數(shù)里實現(xiàn)了對Si4730的控制。部分代碼如下:

m.JPG

d.JPG

③注冊表中注冊設(shè)備驅(qū)動程序,。打開platform.reg文件,,在其中添加注冊信息如下:

e.JPG

④將驅(qū)動程序打包進(jìn)鏡像中。打開platform.bib配置文件,,添加如下代碼:

 I2c.dll$(_FLATRELEASEDIR)\I2c.dll NK SHK

⑤創(chuàng)建驅(qū)動程序的def文件,。工程需要def文件導(dǎo)出相應(yīng)的函數(shù),,文件的部分內(nèi)容為:

f.JPG

3.2.3 GPIO驅(qū)動的實現(xiàn)

Si4730工作時需要一個復(fù)位信號,這里使用S3C2440的GPB5口來進(jìn)行控制,。在驅(qū)動中設(shè)置寄存器GPXCON為輸出功能,,設(shè)置寄存器GPXDAT的值為0或1來控制輸出口為低電平或高電平。相關(guān)代碼如下:

g.JPG

h.JPG

4 應(yīng)用程序設(shè)計

4.1 功能實現(xiàn)

應(yīng)用程序的作用是調(diào)用驅(qū)動程序的流接口函數(shù)控制Si4730,,從而實現(xiàn)FM的功能。在應(yīng)用層中需要用到的API是CreateFile(),、Devicelo Control(),、ReadFile()、WriteFile(),,函數(shù)的參數(shù)說明可以參考Visual Studio 2005的幫助文件,。

程序中首先使用CreateFile()打開設(shè)備句柄:

I2Cdriver=CreateFile(L“I2C:”,GENERIC_READ|GENERIC_WRITE,,0,,NULL,OPEN_EXISTING,,0,,NULL);

然后就可使用DeviceIocontrol(),、ReadFile(),、Write File()等API函數(shù)對設(shè)備進(jìn)行控制,如調(diào)諧的實現(xiàn):

DeviceloControl(I2Cdriver,,IOCTL_FM_TUNE,,NULL,0,,NULL,,0,NULL,,NULL),;

4.2 界面設(shè)計

良好的界面是應(yīng)用程序重要的部分,如圖5所示,,界面中應(yīng)該有如下幾個部分:播放,、頻率向上調(diào)諧、頻率向下調(diào)諧,、音量控制等,。

a.JPG

 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。