Adc.c
上传用户:jankzhpno
上传日期:2022-08-03
资源大小:4763k
文件大小:2k
源码类别:

Windows CE

开发平台:

Visual C++

  1. //====================================================================
  2. // File Name : Adc.c
  3. // Function  : S3C2410 ADC Test 
  4. // Program   : Kang, Weon Tark 
  5. // Date      : May 22, 2002
  6. // Version   : 0.0
  7. // History
  8. //   0.0 : Programming start (March 29,2002) -> KWT
  9. //         ADC Test                          -> May 15, 2002 SOP
  10. //====================================================================
  11. #include "def.h"
  12. #include "option.h"
  13. #include "2440addr.h"
  14. #include "2440lib.h"
  15. #include "2440slib.h" 
  16. #define REQCNT 100              //May 08, 2002 SOP
  17. #define ADC_FREQ 2500000
  18. //#define ADC_FREQ   1250000
  19. //#define LOOP 1
  20. #define LOOP 10000
  21. volatile U32 preScaler;
  22. //==================================================================================
  23. int ReadAdc(int ch)
  24. {
  25.     int i;
  26.     static int prevCh=-1;
  27.     rADCCON = (1<<14)|(preScaler<<6)|(ch<<3); //setup channel
  28.     if(prevCh!=ch)
  29.     {
  30. rADCCON = (1<<14)|(preScaler<<6)|(ch<<3);   //setup channel
  31. for(i=0;i<LOOP;i++); //delay to set up the next channel
  32. prevCh=ch;
  33.     }
  34.     rADCCON|=0x1;   //start ADC
  35.     while(rADCCON & 0x1); //check if Enable_start is low
  36.     while(!(rADCCON & 0x8000)); //check if EC(End of Conversion) flag is high
  37.     return ( (int)rADCDAT0 & 0x3ff );
  38. }
  39. //==================================================================================
  40. void Test_Adc(void) 
  41. {
  42.     int a0=0, a1; //Initialize variables
  43.     U32 rADCCON_save = rADCCON;
  44.     
  45.     Uart_Printf( "ADC INPUT Test, press ESC key to exit !n" ) ;
  46.     preScaler = ADC_FREQ;
  47.     Uart_Printf("ADC conv. freq. = %dHzn",preScaler);
  48.     preScaler = 50000000/ADC_FREQ -1;               //PCLK:50.7MHz
  49.     
  50.     Uart_Printf("PCLK/ADC_FREQ - 1 = %dn",preScaler);
  51.     
  52.     while( Uart_GetKey() != ESC_KEY )
  53.     {
  54.     a0=ReadAdc(0); //对应开发板上W1可调电阻
  55.     a1=ReadAdc(1); //对应开发板上W2可调电阻
  56.     Uart_Printf( "AIN0: %04d, AIN1: %04dn", a0, a1 );
  57. Delay( 500 ) ;
  58.     }
  59.     
  60.     //rADCCON=(0<<14)|(19<<6)|(7<<3)|(1<<2);  //stand by mode to reduce power consumption
  61.     rADCCON = rADCCON_save;
  62.     Uart_Printf("nrADCCON = 0x%xn", rADCCON);
  63. }