新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式語音通信系統中VxWorks BSP的設計實現

        嵌入式語音通信系統中VxWorks BSP的設計實現

        作者: 時間:2009-09-29 來源:網絡 收藏
        2.1.3 romInit文件修改
        romlnit.s模塊包含了在ROM中的入口點romlnit(),它是單板上電以后最先執行的匯編程序代碼。該函數功能包括處理器的復位、內存的初始化以及其他的最基本和必要的初始化工作。需要修改的內容如下:
        內部存儲器映射寄存器IMMR。該寄存器用來標識內部地址空間的基址,將該寄存器設置為“FF000000”。
        SIU模式配置寄存器SIUMCR。包括有外部總線仲裁器配置,外部master的支持,DEBUG調試端口配置,接口引腳配置以及奇偶校驗支持,將該寄存器設置為“00E10000”。
        中討論SDRAM的初始化過程,首先對MAMR寄存器的初始化,再得到UPM的RAM陣列表的地址,然后將RAM陣列表地址中的值寫入MPC860 RAM WORDS ARRAY中,最后初始化OR以及BR寄存器。
        2.1.4 ppcs860.h
        ppcs860.h是參數配置頭文件,該文件包含大量宏定義,為使MPC860T正常運行且SCC串口工作在QMC協議透明模式,根據實際需要做了如下配置:
        (1)修改常量對應的宏定義:SCCx參數在雙端口RAM中存儲的起始地址、緩沖區描述符(BD)的基地址、緩沖區和BD的數目等;
        (2)串口和時隙分配表的初始化,主要包括時隙分配、引腳分配等,通過設置SI RAM參數,規定了每個邏輯通道對應的時隙和數據路由,本中選擇SCC2和TDMB接口QMC,引腳配置如下:
        PC6 RSYNC,PA2 RXC,PA10 RXD,PA0 TXC。PA11 TXD
        (3)SCC2初始化:設置SCC2工作在QMC模式;
        (4)QMC全局參數初始化:MCBASE(多通道基地址指針),初始化為SCC2對應外部BD表的基地址,MRBLR(最大接收緩沖區長度),接收、發送時隙分配表起始地址的指針(Rx S PTR,Tx S PTR),接收、發送時隙分配表當前時隙的指針(Rx PTR,TxPTR),中斷循環表基地址(INTBASE),中斷循環表下一可用入口的指針(INTPTR)等;
        (5)QMC特定通道參數初始化:TBASE,RBASE(該邏輯通道的緩沖區描述符的起始地址),TBPTR,RBPTR(當前發送、接收緩沖區描述符指針),TMR-BLR(最大接收幀長度)等。
        2.1.5 驅動程序
        驅動程序直接對硬件操作,硬件和操作系統、應用程序之間的交互。需要自行編寫MPC860 SCC串口驅動程序ppcs860QmcSio.c,平臺中SCC工作在QMC Transparent模式。ppcs860QmcSio.c文件中包含SIO_DRV_FUNCS結構體中定義的5個函數和中斷處理函數ppc860QmcInt()、Qmc邏輯通道復位函數ppc860QmcChannelReset()。ppc860SccIoctl()提供了一些設備控制選項,包括停止數據傳送、察看當前狀態(空閑還是忙)、輪詢或中斷模式選擇等;ppc860sccInt()處理QMC通道的中斷請求,通過中斷方式數據的收發功能;ppc860SccStartuP()函數啟動一個發送周期;ppc860SccCallbackInstall()安裝回調函數。中斷處理函數的功能有:
        (1)提供接收、發送中斷處理函數,調用回調函數完成設備和較高層協議之間的數據傳送。
        (2)處理數據接收過程中出現的接收數據過長,數據傳送被迫終止等異常。由于不需要QMC的輪詢模式,因此ppc860SccPollInput()和ppc860SccPollOutput()以NULL函數的形式實現。同時還要編寫sysSccSeri-al.c文件,修改sysLib.c文件和usrConfig.c文件。在sysSccQmc.c中提供SCC設備描述符的初始化例程、SCC中斷連接例程等;通過修改sysLib.c和usrCon-fig.c文件以實現對QMC驅動程序的調用和QMC驅動程序與TTY系統的掛接。
        2.1.6 通道中斷處理過程
        數據收發的核心是中斷處理函數。QMC中的所有邏輯通道共享SCC2的中斷,SCC2維持有一個全局中斷表,表中每一項里面都含有邏輯通道號和中斷源,可以被驅動識別以處理不同情況下出現的事件。中斷發生時,驅動從SCCE寄存器里面判斷全局中斷源,如果中斷是由邏輯通道引起,中斷服務程序便查找全局中斷表以找到該邏輯通道,并從中斷條目里面檢查中斷信息以確定是什么類型,再調用相應的收發和錯誤處理函數。
        2.1.7 數據接收和發送
        多通道通信系統中MPC860T SCC串口時分復用即工作在QMC模式,邏輯通道的通信協議為Trasparent mode,該協議僅傳輸二進制數據,不對數據流進行位級操作,不區分數據幀中的格式位、起止位和數據位等,不對接收的數據做檢錯處理,因而具有較高的數據傳輸速率。
        接收函數由中斷服務例程調用。由于是每接收一幀產生一次中斷,故接收函數也每次處理一幀的數據。數據的接收由接收描述符RxBD控制。當要接收數據時,接收函數首先需要確定RxBD有效;確定沒有問題后,才將數據從接收緩沖區拷貝到接收Ring buffer,并復位RxBD;否則在進行相應錯誤處理后復位RxBD。接收函數流程如圖3所示。

        本文引用地址:http://www.104case.com/article/152331.htm

        數據發送不調用中斷處理函數,發送函數檢測到發送緩沖區可用(即TxBD中R位為1)后,調用回調函數將數據從發送Ring buffer拷貝到串口發送緩沖區(Txbuffer)。這里為發送功能開辟足夠大的環形緩沖區(足以容納應用程序每一幀的數據)。發送函數流程如圖4所示。
        2.2 調試方法和遇到的問題
        2.2.1 調試方法

        開發調試有兩種方法,一種是使用仿真器通過BDM(后端調試模式)一步步地跟蹤調試,另一種是通過點燈的方式進行所謂的“黑”調?!昂凇闭{的方法是通過“燈”閃、用示波器測片選等,根據外部現象和所編的測試代碼進行比較分析來調試程序。進行“黑”調的目的是調通信串口部分代碼,宿主機可以通過串口與目標機的通信,然后再調試其他部分。調試流程分成兩部分。首先是預內核啟動代碼(Pre-Kernel Initializa-tion),待最小內核啟動正常后再添加I/O系統、文件系統、網絡系統等組件和調試應用程序。使用仿真器Vi-sion Probe通過BDM方式調試并將BootRom映像燒入FLASH。
        2.2.2 調試中遇到的問題
        (1)系統無法正常復位
        在調試過程中,發現MPC860T的CLKOUT引腳無輸出信號,系統上電復位過程沒有完成,系統無法正常工作。初步判斷是硬件問題。用萬用表和示波器逐步檢查上電復位、硬件復位、軟件復位、時鐘輸入和BDM調試等模塊電路,發現正常。判斷是BGA焊接出現問題,將芯片取下,重新焊接,系統復位正常,時鐘信號輸出穩定正常。
        (2)網絡無法與外界通信
        100 Mb/s快速以太網驅動加載中,網絡層協議無法運行,目標板無法與外界網絡建立聯系。目標板網絡啟動時發出的MAC地址信息幀外界無法收到。通過仿真器發現程序單步運行正常。經過反復試驗和測試,最終發現因SDRAM初始化程序沒有運行導致程序運行(需要SDRAM支持突發模式)出錯。更改調試方式,將BootRom開始的所有程序燒入FLASH,上電啟動,網絡正常,目標板與外界建立良好的網絡通信。

        3 結 語
        該系統在實際測試中話音質量穩定,測試時聲音清晰,沒有串擾和雜音,沒有較大延遲,說明硬件正確完備,QMC驅動程序和編解碼和IP封裝與解封裝應用程序性能優良。
        如果板卡上通道更多,則每幀的時隙增多、長度增大,因為FPGA內部電路所提供的的幀同步信號周期并不改變,所以只是實際數據傳輸速率提高,可以保證各路語音的同步和實時性。系統中QMC工作在Transparent Mode限制了它的應用范圍,如何改進使系統支持多種通信協議是需要進一步研究的問題。

        linux操作系統文章專題:linux操作系統詳解(linux不再難懂)

        數字通信相關文章:數字通信原理


        通信相關文章:通信原理



        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 台湾省| 永城市| 额尔古纳市| 密云县| 洛阳市| 玉树县| 独山县| 临西县| 双峰县| 恩施市| 琼海市| 清远市| 灵川县| 宜阳县| 潜山县| 内乡县| 清流县| 西平县| 鄢陵县| 新泰市| 嘉善县| 改则县| 奉节县| 冀州市| 城口县| 平陆县| 洛宁县| 斗六市| 涟源市| 交口县| 项城市| 巴里| 丰县| 贵港市| 谢通门县| 邳州市| 新宁县| 凤凰县| 玉溪市| 宜川县| 柳州市|