ADSP-BF706 DMA 数据存取程序 CCES 代码示例
#include\x20<stdio.h> #include\x20<stdlib.h> #include\x20<sys/platform.h> #include\x20<sys/adi_core.h> #include\x20<sys/adi_dma.h>
//\x20DMA\x20channel\x20identifiers #define\x20DMA_CHANNEL_RX\x200 #define\x20DMA_CHANNEL_TX\x201
//\x20Buffer\x20size #define\x20BUFFER_SIZE\x201024
//\x20Source\x20and\x20destination\x20buffers char\x20sourceBuffer[BUFFER_SIZE]; char\x20destinationBuffer[BUFFER_SIZE];
int\x20main(void) { \x20//\x20Initialize\x20source\x20buffer\x20with\x20data \x20for\x20(int\x20i\x20=\x200;\x20i\x20<\x20BUFFER_SIZE;\x20i++)\x20{ \x20\x20sourceBuffer[i]\x20=\x20i\x20%\x20256; \x20}
\x20//\x20Initialize\x20DMA\x20driver \x20if\x20(adi_dma_Init(NULL)\x20!=\x20ADI_DMA_SUCCESS)\x20{ \x20\x20printf("Failed\x20to\x20initialize\x20DMA\x20driver\n"); \x20\x20return\x20-1; \x20}
\x20//\x20Open\x20DMA\x20channels \x20ADI_DMA_HANDLE\x20dmaRxHandle,\x20dmaTxHandle; \x20if\x20(adi_dma_Open(DMA_CHANNEL_RX,\x20&dmaRxHandle)\x20!=\x20ADI_DMA_SUCCESS\x20|| \x20\x20adi_dma_Open(DMA_CHANNEL_TX,\x20&dmaTxHandle)\x20!=\x20ADI_DMA_SUCCESS)\x20{ \x20\x20printf("Failed\x20to\x20open\x20DMA\x20channels\n"); \x20\x20return\x20-1; \x20}
\x20//\x20Set\x20up\x20DMA\x20transfers \x20if\x20(adi_dma_ConfigRx(dmaRxHandle,\x20(void*)sourceBuffer,\x20BUFFER_SIZE,\x20ADI_DMA_INCR_NONE)\x20!=\x20ADI_DMA_SUCCESS\x20|| \x20\x20adi_dma_ConfigTx(dmaTxHandle,\x20(void*)destinationBuffer,\x20BUFFER_SIZE,\x20ADI_DMA_INCR_NONE)\x20!=\x20ADI_DMA_SUCCESS)\x20{ \x20\x20printf("Failed\x20to\x20configure\x20DMA\x20transfers\n"); \x20\x20return\x20-1; \x20}
\x20//\x20Start\x20DMA\x20transfers \x20if\x20(adi_dma_StartRx(dmaRxHandle)\x20!=\x20ADI_DMA_SUCCESS\x20|| \x20\x20adi_dma_StartTx(dmaTxHandle)\x20!=\x20ADI_DMA_SUCCESS)\x20{ \x20\x20printf("Failed\x20to\x20start\x20DMA\x20transfers\n"); \x20\x20return\x20-1; \x20}
\x20//\x20Wait\x20for\x20DMA\x20transfers\x20to\x20complete \x20while\x20(adi_dma_GetTransferStatus(dmaRxHandle)\x20!=\x20ADI_DMA_TRANSFER_COMPLETE\x20|| \x20\x20\x20\x20adi_dma_GetTransferStatus(dmaTxHandle)\x20!=\x20ADI_DMA_TRANSFER_COMPLETE)\x20{ \x20\x20continue; \x20}
\x20//\x20Close\x20DMA\x20channels \x20if\x20(adi_dma_Close(dmaRxHandle)\x20!=\x20ADI_DMA_SUCCESS\x20|| \x20\x20adi_dma_Close(dmaTxHandle)\x20!=\x20ADI_DMA_SUCCESS)\x20{ \x20\x20printf("Failed\x20to\x20close\x20DMA\x20channels\n"); \x20\x20return\x20-1; \x20}
\x20//\x20Print\x20destination\x20buffer \x20for\x20(int\x20i\x20=\x200;\x20i\x20<\x20BUFFER_SIZE;\x20i++)\x20{ \x20\x20printf("%d\x20",\x20destinationBuffer[i]); \x20} \x20printf("\n");
\x20//\x20Uninitialize\x20DMA\x20driver \x20if\x20(adi_dma_UnInit()\x20!=\x20ADI_DMA_SUCCESS)\x20{ \x20\x20printf("Failed\x20to\x20uninitialize\x20DMA\x20driver\n"); \x20\x20return\x20-1; \x20}
\x20return\x200; }
原文地址: https://www.cveoy.top/t/topic/pR4k 著作权归作者所有。请勿转载和采集!