Anonymous
Not applicable
Feb 15, 2010
05:41 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Feb 15, 2010
05:41 PM
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
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
Labels
- Labels:
-
PSoC 5LP
1 Reply
Mar 04, 2010
05:35 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Mar 04, 2010
05:35 AM
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
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