1 Reply Latest reply on Apr 7, 2010 4:59 PM by anu.md

    ADC -> DMA -> Memory

    lung-hwa.hsieh
              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   
        • 1. Re: ADC -> DMA -> Memory
          anu.md
                  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