一種智能無(wú)線多媒體數(shù)字播放系統(tǒng)的設(shè)計(jì)方案
3 智能無(wú)線點(diǎn)播的實(shí)現(xiàn)
微處理器S3C2440A和無(wú)線芯片CYWUSB6934之間通過(guò)SPI接口進(jìn)行通信,在Linux系統(tǒng)中兩者之間的通信就必須通過(guò)SPI驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)。而智能點(diǎn)播則是在用戶啟動(dòng)Linux系統(tǒng)中的點(diǎn)播程序時(shí),系統(tǒng)識(shí)別接收到的數(shù)據(jù)后,自動(dòng)調(diào)用音視頻文件進(jìn)行播放。
3.1 SPI驅(qū)動(dòng)
在Linux操作系統(tǒng)中,所有外圍設(shè)備的控制都是通過(guò)驅(qū)動(dòng)程序?qū)崿F(xiàn)的,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)內(nèi)核與機(jī)器硬件之間的接口。
SPI,是英語(yǔ)Serial Peripheral interface的縮寫,顧名思義就是串行外圍設(shè)備接口。是Motorola首先在其MC68HCXX系列處理器上定義的。SPI接口主要應(yīng)用在 EEPROM,F(xiàn)LASH,實(shí)時(shí)時(shí)鐘,AD轉(zhuǎn)換器,還有數(shù)字信號(hào)處理器和數(shù)字信號(hào)解碼器之間。SPI,是一種高速的,全雙工,同步的通信總線,并且在芯片的管腳上只占用四根線,節(jié)約了芯片的管腳,同時(shí)為PCB的布局上節(jié)省空間,提供方便,正是出于這種簡(jiǎn)單易用的特性,現(xiàn)在越來(lái)越多的芯片集成了這種通信協(xié)議。手持智能無(wú)線多媒體終端需要通過(guò)SPI接口控制無(wú)線收發(fā)芯片,這就需使用SPI接口驅(qū)動(dòng)程序來(lái)建立無(wú)線收發(fā)芯片與內(nèi)核之間的通信橋梁。SPI接口以主從方式進(jìn)行工作,其接口包括4種信號(hào):(1)MOSI:主器件數(shù)據(jù)輸出,從器件數(shù)據(jù)輸入;(2)MISO:主器件數(shù)據(jù)輸入,從器件數(shù)據(jù)輸出;(3)SCLK:時(shí)鐘信號(hào),由主器件產(chǎn)生;(4)/SS:從器件使能信號(hào),由主器件控制。
圖2為S3C2440A與CYWUSB6934之間SPI接口的連接圖。圖中nSS控制CYWUSB6934作為從器件,SPIMOSI和SPIMISO是它們之間的數(shù)據(jù)傳輸通道,SPICLK為時(shí)鐘信號(hào)。當(dāng)SPI作為主控制器時(shí),由SPPRE寄存器中相應(yīng)的比特位控制。而當(dāng)SPI為從設(shè)備時(shí),時(shí)鐘信號(hào)則是由其他設(shè)備提供。某些情況下,在將數(shù)據(jù)寫入SPTDAT寄存器之前,nSS應(yīng)該被置為高電平。在本系統(tǒng)中主要用到的S3C2440A內(nèi)部與SPI相關(guān)的寄存器如下:
(1)SPCON寄存器:主要用于設(shè)置時(shí)鐘開(kāi)啟、SPI傳輸格式、SPI傳輸模式。其中傳輸模式有3種,分別是polling模式、DMA模式、中斷模式。
?。?)SPSTA寄存器:SPI接口的狀態(tài)寄存器,用于指示數(shù)據(jù)接收或發(fā)送是否已經(jīng)完成。
?。?)SPPIN寄存器:用于檢測(cè)是否有多個(gè)主機(jī)。
?。?)SPPRE寄存器:用于設(shè)置SPI傳輸時(shí)鐘頻率。其值通過(guò)如下計(jì)算式確定:
Baud rate=PCLK/2/(Prescaler value+1)
其中Prescaler value的初始值為0x00。
?。?)SPTDAT和SPRDAT寄存器:發(fā)射和接收數(shù)據(jù)寄存器。
在Linux系統(tǒng)啟動(dòng)時(shí),要對(duì)以上寄存器進(jìn)行賦值,就必須通過(guò)SPI驅(qū)動(dòng)程序。而驅(qū)動(dòng)程序就是作為系統(tǒng)和外部設(shè)備的一個(gè)橋梁,在這里只有將SPI通道正確打開(kāi),系統(tǒng)才能夠通過(guò)這個(gè)橋梁對(duì)外部無(wú)線芯片的基本工作寄存器進(jìn)行操作,完成數(shù)據(jù)的收發(fā)。
Linux中的I/O子系統(tǒng)向內(nèi)核中的其他部分提供了一個(gè)統(tǒng)一的標(biāo)準(zhǔn)設(shè)備接口,這是通過(guò)include/linux/fs.h中的數(shù)據(jù)結(jié)構(gòu)file_operations完成的[11]。圖3所示為本系統(tǒng)中SPI驅(qū)動(dòng)設(shè)備描述符函數(shù)組成框圖。
評(píng)論