1. 程式人生 > >米聯客——DMA 閉環測試 學習心得

米聯客——DMA 閉環測試 學習心得

剛學了米聯客的DMA閉環測試這一章,這裡記錄一下sdk的理解

/*………………主函式………………*/
int main(void)
{

	init_intr_sys();
	axi_dma_test();

}

主函式很簡單就兩個子函式

首先來看一下 init_intr_sys();

int init_intr_sys(void)
{
	DMA_Intr_Init(&AxiDma,0);//initial interrupt system
	Init_Intr_System(&Intc); // initial DMA interrupt system
	Setup_Intr_Exception(&Intc);
	DMA_Setup_Intr_System(&Intc,&AxiDma,TX_INTR_ID,RX_INTR_ID);//setup dma interrpt system
	DMA_Intr_Enable(&Intc,&AxiDma);
}

這個函式很簡單,就是做一些初始化的工作。

前兩個函式,分別初始化DMA和系統中斷。這兩個函式結構都很相似這裡就不再解釋。(不過在這裡有一個疑問,就是前兩個函式都是有返回值的,return XST_SUCCESS;return XST_FAILURE;那麼它是怎麼判斷的?如果返回失敗串列埠會打印出來但是程式還是會向下執行?)

第三個是註冊中斷異常處理程式

第四個是建立DMA中斷系統  在這裡判斷了是否TX RX在工作會返回一個flag即在測試函式中的Txdone 和Rxdone

第五個使能DMA中斷  裡面只有四個函式兩個斷開中斷、兩個使能中斷(rx tx)

接下來就是主函式中的第二個子函式DMA的測試函式

先貼一個關於DDR3的部落格,講的很詳細https://blog.csdn.net/hanxuexiaoma/article/details/78979212

首先,測試函式初始化引數有  TX RX 標記位

 然後進入一個大的for迴圈這個迴圈控制的是測試次數,並且每次初值加一。

   以第一次迴圈為例,初值位0x0c。函式先將資料包即0x0c--0x862以for迴圈的形式存入傳送快取區。之後用Xil_DCacheFlushRange 將資料刷進DDR中。先啟動一次讀XAxiDma_SimpleTransfer,在啟動一次寫XAxiDma_SimpleTransfer。在這裡將會進入中斷並將TX RX標誌位置1,等待收發完成。完成後計數器加一,並將標誌位置0。最後檢查資料是否一致。