嵌入式語(yǔ)音通信系統(tǒng)中VxWorks BSP的設(shè)計(jì)實(shí)現(xiàn)
romlnit.s模塊包含了VxWorks在ROM中的入口點(diǎn)romlnit(),它是單板上電以后最先執(zhí)行的匯編程序代碼。該函數(shù)功能包括處理器的復(fù)位、內(nèi)存的初始化以及其他的最基本和必要的初始化工作。需要修改的內(nèi)容如下:
內(nèi)部存儲(chǔ)器映射寄存器IMMR。該寄存器用來(lái)標(biāo)識(shí)內(nèi)部地址空間的基址,將該寄存器設(shè)置為“FF000000”。
SIU模式配置寄存器SIUMCR。包括有外部總線仲裁器配置,外部master的支持,DEBUG調(diào)試端口配置,系統(tǒng)接口引腳配置以及奇偶校驗(yàn)支持,將該寄存器設(shè)置為“00E10000”。
BSP中討論SDRAM的初始化過(guò)程,首先對(duì)MAMR寄存器的初始化,再得到UPM的RAM陣列表的地址,然后將RAM陣列表地址中的值寫入MPC860 RAM WORDS ARRAY中,最后初始化OR以及BR寄存器。
2.1.4 ppcs860.h
ppcs860.h是參數(shù)配置頭文件,該文件包含大量宏定義,為使MPC860T正常運(yùn)行且SCC串口工作在QMC協(xié)議透明模式,根據(jù)實(shí)際需要做了如下配置:
(1)修改系統(tǒng)常量對(duì)應(yīng)的宏定義:SCCx參數(shù)在雙端口RAM中存儲(chǔ)的起始地址、緩沖區(qū)描述符(BD)的基地址、緩沖區(qū)和BD的數(shù)目等;
(2)串口和時(shí)隙分配表的初始化,主要包括時(shí)隙分配、引腳分配等,通過(guò)設(shè)置SI RAM參數(shù),規(guī)定了每個(gè)邏輯通道對(duì)應(yīng)的時(shí)隙和數(shù)據(jù)路由,本系統(tǒng)中選擇SCC2和TDMB接口實(shí)現(xiàn)QMC通信,引腳配置如下:
PC6 RSYNC,PA2 RXC,PA10 RXD,PA0 TXC。PA11 TXD
(3)SCC2初始化:設(shè)置SCC2工作在QMC模式;
(4)QMC全局參數(shù)初始化:MCBASE(多通道基地址指針),初始化為SCC2對(duì)應(yīng)外部BD表的基地址,MRBLR(最大接收緩沖區(qū)長(zhǎng)度),接收、發(fā)送時(shí)隙分配表起始地址的指針(Rx S PTR,Tx S PTR),接收、發(fā)送時(shí)隙分配表當(dāng)前時(shí)隙的指針(Rx PTR,TxPTR),中斷循環(huán)表基地址(INTBASE),中斷循環(huán)表下一可用入口的指針(INTPTR)等;
(5)QMC特定通道參數(shù)初始化:TBASE,RBASE(該邏輯通道的緩沖區(qū)描述符的起始地址),TBPTR,RBPTR(當(dāng)前發(fā)送、接收緩沖區(qū)描述符指針),TMR-BLR(最大接收幀長(zhǎng)度)等。
2.1.5 驅(qū)動(dòng)程序
驅(qū)動(dòng)程序直接對(duì)硬件操作,實(shí)現(xiàn)硬件和操作系統(tǒng)、應(yīng)用程序之間的交互。需要自行編寫MPC860 SCC串口驅(qū)動(dòng)程序ppcs860QmcSio.c,通信平臺(tái)中SCC工作在QMC Transparent模式。ppcs860QmcSio.c文件中包含SIO_DRV_FUNCS結(jié)構(gòu)體中定義的5個(gè)函數(shù)和中斷處理函數(shù)ppc860QmcInt()、Qmc邏輯通道復(fù)位函數(shù)ppc860QmcChannelReset()。ppc860SccIoctl()提供了一些設(shè)備控制選項(xiàng),包括停止數(shù)據(jù)傳送、察看當(dāng)前通信狀態(tài)(空閑還是忙)、輪詢或中斷模式選擇等;ppc860sccInt()處理QMC通道的中斷請(qǐng)求,通過(guò)中斷方式實(shí)現(xiàn)數(shù)據(jù)的收發(fā)功能;ppc860SccStartuP()函數(shù)啟動(dòng)一個(gè)發(fā)送周期;ppc860SccCallbackInstall()安裝回調(diào)函數(shù)。中斷處理函數(shù)的功能有:
(1)提供接收、發(fā)送中斷處理函數(shù),調(diào)用回調(diào)函數(shù)完成設(shè)備和較高層協(xié)議之間的數(shù)據(jù)傳送。
(2)處理數(shù)據(jù)接收過(guò)程中出現(xiàn)的接收數(shù)據(jù)過(guò)長(zhǎng),數(shù)據(jù)傳送被迫終止等異常。由于不需要QMC的輪詢模式,因此ppc860SccPollInput()和ppc860SccPollOutput()以NULL函數(shù)的形式實(shí)現(xiàn)。同時(shí)還要編寫sysSccSeri-al.c文件,修改sysLib.c文件和usrConfig.c文件。在sysSccQmc.c中提供SCC設(shè)備描述符的初始化例程、SCC中斷連接例程等;通過(guò)修改sysLib.c和usrCon-fig.c文件以實(shí)現(xiàn)VxWorks對(duì)QMC驅(qū)動(dòng)程序的調(diào)用和QMC驅(qū)動(dòng)程序與TTY系統(tǒng)的掛接。
2.1.6 通道中斷處理過(guò)程
數(shù)據(jù)收發(fā)的核心是中斷處理函數(shù)。QMC中的所有邏輯通道共享SCC2的中斷,SCC2維持有一個(gè)全局中斷表,表中每一項(xiàng)里面都含有邏輯通道號(hào)和中斷源,可以被驅(qū)動(dòng)識(shí)別以處理不同情況下出現(xiàn)的事件。中斷發(fā)生時(shí),驅(qū)動(dòng)從SCCE寄存器里面判斷全局中斷源,如果中斷是由邏輯通道引起,中斷服務(wù)程序便查找全局中斷表以找到該邏輯通道,并從中斷條目里面檢查中斷信息以確定是什么類型,再調(diào)用相應(yīng)的收發(fā)和錯(cuò)誤處理函數(shù)。
2.1.7 數(shù)據(jù)接收和發(fā)送
多通道語(yǔ)音通信系統(tǒng)中MPC860T SCC串口時(shí)分復(fù)用即工作在QMC模式,邏輯通道的通信協(xié)議為Trasparent mode,該協(xié)議僅傳輸二進(jìn)制數(shù)據(jù),不對(duì)數(shù)據(jù)流進(jìn)行位級(jí)操作,不區(qū)分?jǐn)?shù)據(jù)幀中的格式位、起止位和數(shù)據(jù)位等,不對(duì)接收的數(shù)據(jù)做檢錯(cuò)處理,因而具有較高的數(shù)據(jù)傳輸速率。
接收函數(shù)由中斷服務(wù)例程調(diào)用。由于是每接收一幀產(chǎn)生一次中斷,故接收函數(shù)也每次處理一幀的數(shù)據(jù)。數(shù)據(jù)的接收由接收描述符RxBD控制。當(dāng)要接收數(shù)據(jù)時(shí),接收函數(shù)首先需要確定RxBD有效;確定沒(méi)有問(wèn)題后,才將數(shù)據(jù)從接收緩沖區(qū)拷貝到接收Ring buffer,并復(fù)位RxBD;否則在進(jìn)行相應(yīng)錯(cuò)誤處理后復(fù)位RxBD。接收函數(shù)流程如圖3所示。本文引用地址:http://www.ex-cimer.com/article/152331.htm
數(shù)據(jù)發(fā)送不調(diào)用中斷處理函數(shù),發(fā)送函數(shù)檢測(cè)到發(fā)送緩沖區(qū)可用(即TxBD中R位為1)后,調(diào)用回調(diào)函數(shù)將數(shù)據(jù)從發(fā)送Ring buffer拷貝到串口發(fā)送緩沖區(qū)(Txbuffer)。這里為發(fā)送功能開(kāi)辟足夠大的環(huán)形緩沖區(qū)(足以容納應(yīng)用程序每一幀的數(shù)據(jù))。發(fā)送函數(shù)流程如圖4所示。
2.2 BSP調(diào)試方法和遇到的問(wèn)題
2.2.1 調(diào)試方法
開(kāi)發(fā)調(diào)試有兩種方法,一種是使用仿真器通過(guò)BDM(后端調(diào)試模式)一步步地跟蹤調(diào)試,另一種是通過(guò)點(diǎn)燈的方式進(jìn)行所謂的“黑”調(diào)?!昂凇闭{(diào)的方法是通過(guò)“燈”閃、用示波器測(cè)片選等,根據(jù)外部現(xiàn)象和所編的測(cè)試代碼進(jìn)行比較分析來(lái)調(diào)試程序。進(jìn)行“黑”調(diào)的目的是調(diào)通信串口部分代碼,宿主機(jī)可以通過(guò)串口與目標(biāo)機(jī)的通信,然后再調(diào)試其他部分。調(diào)試流程分成兩部分。首先是預(yù)內(nèi)核啟動(dòng)代碼(Pre-Kernel Initializa-tion),待最小內(nèi)核啟動(dòng)正常后再添加I/O系統(tǒng)、文件系統(tǒng)、網(wǎng)絡(luò)系統(tǒng)等組件和調(diào)試應(yīng)用程序。使用仿真器Vi-sion Probe通過(guò)BDM方式調(diào)試BSP并將BootRom映像燒入FLASH。
2.2.2 調(diào)試中遇到的問(wèn)題
(1)系統(tǒng)無(wú)法正常復(fù)位
在調(diào)試過(guò)程中,發(fā)現(xiàn)MPC860T的CLKOUT引腳無(wú)輸出信號(hào),系統(tǒng)上電復(fù)位過(guò)程沒(méi)有完成,系統(tǒng)無(wú)法正常工作。初步判斷是硬件問(wèn)題。用萬(wàn)用表和示波器逐步檢查上電復(fù)位、硬件復(fù)位、軟件復(fù)位、時(shí)鐘輸入和BDM調(diào)試等模塊電路,發(fā)現(xiàn)正常。判斷是BGA焊接出現(xiàn)問(wèn)題,將芯片取下,重新焊接,系統(tǒng)復(fù)位正常,時(shí)鐘信號(hào)輸出穩(wěn)定正常。
(2)網(wǎng)絡(luò)無(wú)法與外界通信
100 Mb/s快速以太網(wǎng)驅(qū)動(dòng)加載中,網(wǎng)絡(luò)層協(xié)議無(wú)法運(yùn)行,目標(biāo)板無(wú)法與外界網(wǎng)絡(luò)建立聯(lián)系。目標(biāo)板網(wǎng)絡(luò)啟動(dòng)時(shí)發(fā)出的MAC地址信息幀外界無(wú)法收到。通過(guò)仿真器發(fā)現(xiàn)程序單步運(yùn)行正常。經(jīng)過(guò)反復(fù)試驗(yàn)和測(cè)試,最終發(fā)現(xiàn)因SDRAM初始化程序沒(méi)有運(yùn)行導(dǎo)致程序運(yùn)行(需要SDRAM支持突發(fā)模式)出錯(cuò)。更改調(diào)試方式,將BootRom開(kāi)始的所有程序燒入FLASH,上電啟動(dòng),網(wǎng)絡(luò)正常,目標(biāo)板與外界建立良好的網(wǎng)絡(luò)通信。
3 結(jié) 語(yǔ)
該系統(tǒng)在實(shí)際測(cè)試中話音質(zhì)量穩(wěn)定,測(cè)試時(shí)聲音清晰,沒(méi)有串?dāng)_和雜音,沒(méi)有較大延遲,說(shuō)明硬件設(shè)計(jì)正確完備,QMC驅(qū)動(dòng)程序和語(yǔ)音編解碼和IP封裝與解封裝應(yīng)用程序性能優(yōu)良。
如果板卡上語(yǔ)音通道更多,則每幀的時(shí)隙增多、長(zhǎng)度增大,因?yàn)镕PGA內(nèi)部電路所提供的的幀同步信號(hào)周期并不改變,所以只是實(shí)際數(shù)據(jù)傳輸速率提高,可以保證各路語(yǔ)音的同步和實(shí)時(shí)性。系統(tǒng)中QMC工作在Transparent Mode限制了它的應(yīng)用范圍,如何改進(jìn)使系統(tǒng)支持多種通信協(xié)議是需要進(jìn)一步研究的問(wèn)題。
數(shù)字通信相關(guān)文章:數(shù)字通信原理
通信相關(guān)文章:通信原理
評(píng)論