ADC -> DMA -> Memory

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Anonymous
Not applicable
        Hi,   
   
I use PSOC3 to do ADC->DMA ->Memory to sample my analog input data then post- processing my ADC data.   
ADC( 300K sps, 10 bits) Memory (xdata, ADC_data[300]).   
   
I try to modify some c codes from DMA example projects, but I did not get right sample data from ADC.   
   
Here is my c code:   
   
ADC_DelSig_1_start();   
ADC_DelSig_1_start_convert();   
Isr_start();   
MyChannel=DMA_DmaInitialize(2,1,0,0);   
Td=CyDmaTdAllocate();   
CyDmaTdSetConfiguration(Td,2,Td,TD_INC_DST_ADR|TD_TERMOUT0_EN);   
CyDmaTdSetAddress(td,ADC_DelSig_1_OUTSAMP, (uint16)&ADC_data[0] );   
CyDmaChEnable(MyChannel,Td);   
CyDmaChSetRequest( MyChannel,1);   
   
Anyone knows how to do it?   
   
Thanks,   
Will   
0 Likes
1 Reply
AnuM_41
Employee
Employee
10 replies posted 5 replies posted Welcome!
        Here are some modifications that should be done to make this work .   
   
1) TD_SWAP_EN : Since the buffer - ADC_data(Big Endian) and ADC registers(Little Endian) have different endian-ess , you need to enable swap to store data in the proper format   
   
2)ADC Coherency : By default the ADC coherency key is set to low. But in this case(When you read multi bytes from ADC register using single Td) , the last byte read will be mid byte. Hence you need to set the ADC coherency to mid byte .   
"ADC_DelSig_1_DEC_COHER=ADC_DelSig_1_DEC_SAMP_KEY_MID;"   
   
3)"ADC_DelSig_1_OUTSAMP" is not an address but it is the value of ADC_DelSig_1_DEC__OUTSAMP register.   
There are many such typos in the function used above - the compiler will give you error for other typos and you can correct it yourself.   
   
Regards,   
Anu   
0 Likes