Version 1.3
Page 27 of 36
SMT332/372 User Manual
Comport transfer example using DMA
This examples shows how to transfer data over a comport between 2 TIMs using
DMA.
#define FRAME_SIZE
0x0400
//0x0400=1024=1KWord <=> 4KByte
#define N_FRAME
0x0400
#define TRANSFER_SIZE
(N_FRAME*FRAME_SIZE)
//Words
/***** DSP1: RECEIVE - DMA SETTINGS *****/
*EMIF_CE1_CTRL = 0x8238c823;
*SMT331INTCTRL = 0x0000;
//Slow mode - Comport1 RX data to INT6
*DMA_PRI_CTRL0 = 0x010180c0;
*DMA_SEC_CTRL0 = 0x0000a000;
*DMA_SRC_ADDR0 = (unsigned int)SMT331COMMPORT1;
*DMA_DST_ADDR0 = (unsigned int)SDRAM0;
*DMA_XFR_CNTR0 = (N_FRAME<<16)+FRAME_SIZE;
*DMA_GL_CNT_RLD = FRAME_SIZE;
*DMA_GL_INDEX = 0x00040004;
*TIMER0_PERIOD=0xffffffff;
*DMA_SEC_CTRL0 = 0x00001000; //Set RSYNC STAT, then...
while (!(*SMT331STATUS&(1<<4))) {} //Wait for a data to be RX on
Comport1
*TIMER0_CTRL=0x000002c0;
//Start Timer
*DMA_PRI_CTRL0 = 0x010180c1; //Start DMA0
while((*DMA_PRI_CTRL0&0xc)!=0);
//Wait for DMA to finish
*TIMER0_CTRL = 0x00000200;
//Hold Timer
Clock_Tick = *TIMER0_COUNTER;
Dma_Time = (float)(Clock_Tick)/(200e6/4);
Dma_Rate = TRANSFER_SIZE*4/Dma_Time;
printf("\nDMA Data Rate: %.6e Bytes/s\n\n",Dma_Rate);
/***** CHECK DATA *****/
for (data=0;data<TRANSFER_SIZE;data++)