AnsweredAssumed Answered

sc584 eppi

Question asked by Max. on May 24, 2016
Latest reply on Jun 2, 2016 by Max.


Hello,

 

At the moment I am struggeling with configuring the EPPI at the ADSP-SC584 processor to buffer sample values of an ADC (AD9231-40). I'm using the ADZS-SC584-EZLITE demoboard. The hardware reference manual of the SC584 suggests to configure the EPPI into GP FS 1 mode. But as the ADC does not contain a Frame Sync pin, I try to make use of GP FS 0 mode. After configuring and starting both the EPPI and DMA, I receive a Luma FIFO error and the DMA (channel 28) displays a Memory Access error.

 

I can't figure out what the exact reason is of the Luma FIFO error. As it's an overflow error, I thought it might have been the clock frequency of the ADC. I've tried multiple frequencies, ranging from 500kHz to 40MHz which all gave the same error resulsts. The EPPI max. input freq. is 75MHz.

 

Whenever I set the combination of XFRTYPE = 3 (Non-ITU656 Mode (GP Mode)) and FSCFG = 0 (FS 0 mode) at the EPPI_CTL Register, I always get the Luma FIFO error.

 

If I configure the EPPI pins into regulare inputs, I do am able to read the ADC samples. But I want to make use of the EPPI with DMA.

 

Here is my configuration:

#define BUFF_SIZE 128//n samples

unsigned int ADCBuffer[BUFF_SIZE];

int i;

 

int main(void){

     /*setup Power Service to change freq*/

     adi_initComponents();

     /* set power mode to full on */

     adi_pwr_Init(CGU_DEV, CLKIN);

 

     adi_pwr_SetPowerMode(CGU_DEV, ADI_PWR_MODE_FULL_ON);  

 

     adi_pwr_SetFreq(CGU_DEV, CORE_MAX, SYSCLK_MAX);//Core 0, Fs = 450MHz, sysclock = 225MHz  

 

     /* Software Switch Configuration for the EZ-BOARD */  

     ConfigSoftSwitches();//Disable CAN (to use SPI0_SEL3)

 

     mux_eppi();

     eppi_init();

     start_eppi();

     while(1){

     }

}

void eppi_init(void) {

     *pREG_DMA28_CFG = 0x22;

     *pREG_DMA28_ADDRSTART = (void*)ADCBuffer;

     *pREG_DMA28_XCNT = BUFF_SIZE;//n samples

     *pREG_DMA28_XMOD = 4;//for 32bit data transfer

 

     *pREG_EPPI0_CTL = 0x2107340C;

}

void start_eppi(void) {

     printf("Start EPPI\n");

     *pREG_DMA28_CFG |= 0x1;//Start DMA

     *pREG_EPPI0_CTL |= 0x1;//Start EPPI

 

     //if DMA is ready, print out results

     while(*pREG_DMA28_XCNT_CUR != 0);

 

     for(i=0;i<(BUFF_SIZE);i++)

          printf("%d\n", ADCBuffer[i]);

}

Outcomes