×
单片机 > 单片机程序设计 > 详情

S3C2440 AD转换器

发布时间:2020-08-27 发布时间:
|
       10 位CMOS ADC(模/数转换器)是一个8 通道模拟输入的再循环类型设备。其转换模拟输入信号为10 位二

进制数字编码,最大转换率为2.5MHz A/D转换器时钟下的 500 KSPS。A/D 转换器支持片上采样-保持功能和掉电
模式的操作。

 

触摸屏在下一篇文章,ADC转换比较简单,这里贴出一个代码

[cpp] view plain copy
 
  1. #include "2440addr.h"  
  2. #include "2440lib.h"  
  3. #include "def.h"  
  4.   
  5. //=====================================================================  
  6. //名称:ADC_Select(int ch, U32 preScaler)  
  7. //功能:选择转换通道,转换器预分频值设置  
  8. //参数: ch :转换通道  preScaler:预分频值  
  9. //返回值:无  
  10. //=======================================================================  
  11.   
  12. void ADC_Select(int ch, U32 preScaler)  
  13. {  
  14.     rADCCON=(1<<14)|(preScaler<<6)|(ch<<3);     
  15. }  
  16. //=======================================================================  
  17. //名称:AD_ENABLE()  
  18. //功能:采用置位使能方式启动AD转换  
  19. //参数: 无  
  20. //返回值: 转换后的值  
  21. //=======================================================================  
  22. int AD_ENABLE(void)  
  23. {  
  24.     int i;  
  25.     int val=0;  
  26.       
  27.     for(i=0;i<16;i++)  
  28.     {  
  29.         rADCCON |=0x1;  //使能ADC转换  
  30.           
  31.         while(rADCCON & 0x1); //判断使能ADC转换后被清零  
  32.           
  33.         while(!(rADCCON &0x8000)); //等待转换结束  
  34.           
  35.         val +=(rADCDAT0 & 0x3ff);   //读取ADC转换的值  
  36.           
  37.     }  
  38.     val = val/16;   //计算ADC转换值  
  39.       
  40.     return val;  
  41. }  
  42.   
  43. //=======================================================================  
  44. //名称:AD_READ()  
  45. //功能:采用读控制器的方式启动AD转换  
  46. //参数: 无  
  47. //返回值:转换后的值  
  48. //=======================================================================  
  49. int AD_READ(void)  
  50. {  
  51.     int i;  
  52.     int temp,val=0;  
  53.       
  54.     rADCCON |=0x2;  //ADC转换通过读操作来启动  
  55.     temp= rADCDAT0 & 0x3ff; //启动ADC  
  56.       
  57.     for(i=0;i<16;i++)  
  58.     {  
  59.         rADCCON |=0x1;  //使能ADC转换  
  60.           
  61.         while(rADCCON & 0x1); //判断使能ADC转换后被清零  
  62.           
  63.         while(!(rADCCON &0x8000)); //等待转换结束  
  64.           
  65.         val +=(rADCDAT0 & 0x3ff);   //读取ADC转换的值  
  66.           
  67.     }  
  68.     val = val>>4; //计算ADC转换值  
  69.       
  70.     return val;  
  71. }  
  72.       
  73.   
  74. void Main(void)  
  75. {  
  76.     int temp_val;  
  77.     U8 mode;  
  78.     SelectFclk(2);  //设置系统时钟 400M       
  79.     ChangeClockDivider(2, 1);      //设置分频 1:4:8  
  80.     CalcBusClk();           //计算总线频率  
  81.       
  82.     rGPHCON &=~((3<<4)|(3<<6));     
  83.     rGPHCON |=(2<<4)|(2<<6);    //GPH2--TXD[0];GPH3--RXD[0]     
  84.         
  85.     rGPHUP=0x00;        //使能上拉功能  
  86.           
  87.     Uart_Init(0,115200);  
  88.     Uart_Select(0);  
  89.       
  90.     while(1)  
  91.     {  
  92.         ADC_Select(2, 49);  
  93.         Uart_Printf("Select ADC Mode: 1.Enable  2.Read\n");  
  94.         mode=Uart_Getch();  
  95.         Uart_Printf("\n%c\n\n", mode);  
  96.       
  97.         if (mode!='1' && mode !='2')  
  98.         {  
  99.             Uart_Printf("you select wrong model!\n");  
  100.             return;  
  101.         }  
  102.       
  103.         switch(mode)  
  104.         {  
  105.             case '1':  
  106.                 Uart_Printf("ADC Enable-Convert Mode\n");  
  107.                 temp_val=AD_ENABLE();  
  108.                 break;  
  109.             case '2':  
  110.                 Uart_Printf("ADC Read-Convert Mode\n");  
  111.                 temp_val=AD_READ();  
  112.                 break;  
  113.         }  
  114.         Uart_Printf("ADC val = %d\n", temp_val);  //发送到串口显示  
  115.     }  
  116. }  
  117.               


 

关键字:S3C2440  AD转换器 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Keil(MDK-ARM)系列教程(七)_菜单