基于DSP/BIOS的數(shù)字電視傳輸流網(wǎng)絡采集系統(tǒng)設計
系統(tǒng)軟件設計
系統(tǒng)的軟件設計主要是通過TCP/IP網(wǎng)絡開發(fā)包NDK來實現(xiàn)的。該開發(fā)包支持TCP/IP協(xié)議,并占用較少的系統(tǒng)資源。NDK僅用200kB~250kB的程序空間和95kB的數(shù)據(jù)空間即可支持常規(guī)的TCP/IP服務。所以,NDK很適合目前嵌入式系統(tǒng)的硬件環(huán)境,是實現(xiàn)DSP網(wǎng)絡開發(fā)的重要工具。
系統(tǒng)軟件的框圖如圖4所示。
圖4 軟件系統(tǒng)圖
具體流程:系統(tǒng)配置主要在初始化函數(shù)中完成,此初始化函數(shù)將在.cinit初始化后,并在DSP/BIOS初始化和main函數(shù)之前調(diào)用。系統(tǒng)配置需要開啟INT8中斷,也就是EDMA傳輸中斷,并設置GPIO7引腳為高電平,從而使PLD模塊始終處于初始狀態(tài)。TCP/IP協(xié)議配置在任務線程中完成,主要實現(xiàn)服務器IP地址和網(wǎng)關(guān)的配置。當其完成后,系統(tǒng)就會觸發(fā)一個軟件中斷,在軟件中斷程序中,服務器會產(chǎn)生一個用于偵聽的端口,并開始偵聽網(wǎng)絡上的請求。此時,服務器已經(jīng)處于待命狀態(tài),等待客戶機的傳輸請求。
當客戶機的傳輸請求到來時,系統(tǒng)首先會使GPIO7引腳變?yōu)榈碗娖?,PLD模塊開始發(fā)送數(shù)據(jù)。當其接收到一個完整的傳輸流數(shù)據(jù)包后,就會發(fā)一個中斷給DSP,DSP啟動EDMA,用ping-pong的方式接收數(shù)據(jù)進入特定的存儲器,當接收完一個完整的傳輸流數(shù)據(jù)包后,會產(chǎn)生硬件EDMA中斷,中斷程序主要是設置特定的標志位為1,然后退出硬件中斷,重新回到軟件中斷程序。當軟件中斷程序檢測到特定的標志位為1時,就會開始傳輸在存儲器中的傳輸流數(shù)據(jù)包給客戶機。當一個數(shù)據(jù)包傳輸完畢后,特定的標志會被置0,系統(tǒng)等待下一個數(shù)據(jù)包的到來。
當客戶機要求停止傳輸?shù)恼埱蟮絹頃r,系統(tǒng)會重新使GPIO引腳變?yōu)楦唠娖?,PLD模塊回到初試狀態(tài)。此時,系統(tǒng)也會處于待命狀態(tài),繼續(xù)偵聽網(wǎng)絡。
系統(tǒng)初始化
初始化配置主要包括EMIF總線配置、中斷配置和底層網(wǎng)絡配置3個部分。初始化工作首先在DSP/BIOS的全局參數(shù)配置窗口進行設置,然后調(diào)用初始化函數(shù)進行配置。
在DSP/BIOS的全局配置窗口主要設置了DSP的工作時鐘頻率為600MHz,選擇使用的片級支持庫CSL為DM643的庫,選用小端訪問模式,片內(nèi)256kB的SRAM全部用于Cache,并調(diào)用初始化函數(shù)dm643_init()。
TCP/IP協(xié)議配置
初始化程序dm643_init()完成后,系統(tǒng)將進入各個線程。首先,系統(tǒng)會觸發(fā)任務線程TSK0,在TSK0任務線程中執(zhí)行函數(shù)StackTest(),其首先調(diào)用NC-SystemOpen()函數(shù),完成協(xié)議棧及其所需內(nèi)存的初始化,然后新建一個系統(tǒng)配置句柄hCfg = CfgNew();,并實現(xiàn)服務器IP地址和網(wǎng)關(guān)的配置。在本系統(tǒng)中,IP地址配置為192.168.0.2;子網(wǎng)掩碼為255.255.255.0;網(wǎng)關(guān)地址為192.168.0.1。配置好之后,系統(tǒng)會觸發(fā)一個軟件中斷,并做好偵聽網(wǎng)絡的準備。
網(wǎng)絡偵聽
前面在任務線程中已經(jīng)配置了IP地址和網(wǎng)關(guān),下面就要在軟件中斷中設置端口并進行偵聽。首先,在開始使用報路之前,必須分配一個文件環(huán)境fdOpenSession( TaskSelf() )給這個報路。接著就可以創(chuàng)建一個報路對象stcp = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP),并設置端口sin1.sin_port = htons(1000),在這里設置端口號為1000,當然也可以設置其他的端口號。然后把端口號與報路對象綁定bind( stcp, (PSA) sin1, sizeof(sin1)。最后進入偵聽狀態(tài)listen( stcp, 1)。
數(shù)據(jù)的接收
當客戶端要求傳輸數(shù)據(jù)的信號到來后,系統(tǒng)會使GPIO7引腳變?yōu)榈碗娖?,PLD模塊開始發(fā)送數(shù)據(jù)。DSP通過EDMA方式來接收數(shù)據(jù)。EDMA可以在沒有CPU參與的情況下,由EDMA控制器完成DSP存儲空間內(nèi)的數(shù)據(jù)搬移。系統(tǒng)主要采用EDMA的ping-pong方式來連續(xù)接收數(shù)據(jù)。用ping-pong方式的目的是為了使接收操作和發(fā)送操作分開進行,增強程序的操作性和可讀性。
限于篇幅,網(wǎng)絡發(fā)送部分不再贅述。
結(jié)語
本系統(tǒng)的硬件和軟件功能已經(jīng)實現(xiàn),網(wǎng)絡傳輸?shù)乃俣葹?MBps。按照此速度,假設傳輸流中的空包百分比為40%,可以傳輸5MBps的傳輸流數(shù)據(jù),至少可以傳輸2~3路的TS流節(jié)目。因此,可以證明本系統(tǒng)的設計方法合理、有效。本文引用地址:http://m.butianyuan.cn/article/166711.htm
tcp/ip相關(guān)文章:tcp/ip是什么
評論