DM642無線圖像傳輸的TS流傳輸新技術
2 TS流傳輸實現
2.1 McBSP實現
McBSP由數據通道和控制通道組成,可以與外部設備連接,進行數據通信。數據的接收與發送分別工作于不同的引腳上,因此數據通信是全雙工的。其他的4個引腳用于傳輸控制信號(時鐘和同步信號)。
這里采用EDMA進行McBSP與存儲器緩沖區之間的數據搬運。EDMA控制器讀取從外部設備接收到并保存在DRR(數據接收寄存器)的數據,或者將需要向外部設備發送的數據寫入DXR(數據發送寄存器)。被寫入DXR的數據經過XSR被移出到DX腳上。同理,接收的數據先被移入RSR,然后被拷貝到RBR,最后再被拷貝到DRR,這時就允許被EDMA訪問了。McBSP中內部數據的移出和外部數據的移入可以同時發生,即可以進行全雙工的數據通信。
以EDMA接收數據的配置為例,配置參數RAM。EDMA通道接收數據源地址為McBSP0的DRR寄存器,地址計數模式為不變模式。設置EDMA通道接收數據目的地址為DSP片內存儲區PingBuffer首地址,確保第一次傳輸數據是到PingBuffer,地址計數模式同樣為遞增模式。配置源地址計數索引值,由于源地址為McBSP0的DRR寄存器,固定不變;配置目的地址計數索引值,由于接收數據為32位,所以srcBidx=srcCidx=4,這是因為DSP內的最小計數單元為1個字節,8bits;配置剩余的參數RAM傳輸參數,包括設置ACNT=4,BCNT=2 048,CCNT=1,采用一維傳輸A-SYN C。
接下來是ping-pong傳輸的程序實現。替ping-pong各自分配1個通道,于是一共有3個通道,對應3個參數RAM。ping通道的參數RAM與主通道的參數RAM完全一致,pong通道的參數RAM與主通道相比,只需將pong通道接收數據目的地址改為PongBuffer首地址。隨后調用EDMA_link三次,分別將主通道和ping通道連接,ping通道和pong通道相互連接。EDMA中斷設置與GPIO輸出任務一樣。
2.2 GPIO實現
TS流輸出任務采用1D到1D的傳輸模式。SUM=01,DUM=00,即源地址是188字節的Buffer,目的地址是GPIO[8:15]對應的寄存器,GP4的外部觸發EDMA傳輸,傳輸188字節產生1次EDMA中斷。隊列優先級設置為緊急,來保證時序。以EXTINT5為EDMA觸發事件:
pong的參數RAM設置類似,只要將源地址改為pong,并將重載的參數RAM地址改為edmacfg_pong即可。
DM642中,EDMA的64個通道只產生一種中斷。當一個通道傳輸完成后,IPR(Interrupt Pending Register)寄存器里的相應位會被置1,EDMA中斷處理器通過查詢IPR寄存器,確定是哪個通道完成了傳輸,并調用相應的中斷服務程序,即tccCb(回調函數,即通道傳輸完成后所調用的中斷服務程序)。tccCb=edma_isr,該函數的作用是當一個接收Buffer被填滿時,在通道傳輸完成后發送一個旗語信號給信號處理程序,通知其對收到的數據進行處理。參數RAMOPT中TCINTEN位置1,以使能EDMA中斷。隨后,利用DSP/BIOS將EDMA中斷源和DSP的可屏蔽中斷5連接起來。編寫相應通道的EDMA中斷程序,傳輸完一個TS包后,檢查是否1幀圖像的TS流傳完,用以生成數據有效信號(Dvalid),通知接收方哪些是有用數據。由于選用了DM642的可屏蔽中斷5,還需使能IER寄存器里的對應位。
TS流輸入則只需要將SUM=00,DUM=01,目的地址和源地址交換,再將EDMA中斷程序中目的地址變更到188字節后的地址。采用GP4作EDMA同步事件(即SPI時鐘),GPIO[8:15]作數據輸入,GP7作同步,采用GP6作外部中斷,用作數據有效線。在外部中斷中重載,在傳輸完成中斷中改變目的地址。如此則可順利接收到TS流。
pid控制相關文章:pid控制原理
評論