ADC -> DMA -> Memory | Cypress

ADC -> DMA -> Memory

Summary: 1 Reply, Latest post by anmd on 04 Mar 2010 05:35 AM PST
Verified Answers: 0
Last post
Log in to post new comments.
lhsieh's picture
User
3 posts

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

anmd's picture
Cypress Employee
15 posts

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

Log in to post new comments.