zoukankan      html  css  js  c++  java
  • S3C2440 ADC详解

    S3C2440拥有八通道的十位ADC, 最大转换率为2.5MHz A/D转换器时钟下的500KSPS。A/D转换器支持片上采样-保持功能和掉电模式的操作。

      八个通道中有四个通道适用于电阻屏的触摸屏触摸检测,另外四个是模拟输入,分别是A[0:3],


    ADC的使用极其简单,选择时钟à选择通道à启动转换à转换完成

    主要用到如下几个寄存器


    负责选择时钟通道以及启动ADC


    这里读取ADC的值


    注意这一位,这说明转换完成读取的时候还可以触发转换,也就是相当于连续转换


    Adc.c

    #include "adc.h"
    
    
    //=====================================================================
    //名称:ADCSelect(int ch, U32 preScaler)
    //功能:选择转换通道,转换器预分频值设置
    //参数: ch :转换通道  preScaler:预分频值
    //返回值:无
    //=======================================================================
    
    void ADCSelect(int ch, u8 preScaler)
    {
    	rADCCON=(1<<14)|(preScaler<<6)|(ch<<3);	//选择通道,选择分频数 启动转换
    }
    
    //=======================================================================
    //名称:ADEnable()
    //功能:采用置位使能方式启动AD转换,16次采样取平均值
    //参数: 无
    //返回值: 转换后的值
    //=======================================================================
    u16 ADEnable(void)
    {
    	int i;
    	int val=0;
    	
    	for(i=0;i<16;i++)
    	{
    		rADCCON |=0x1;	//使能ADC转换
    		
    		while(rADCCON & 0x1); //判断使能ADC转换后被清零
    		
    		while(!(rADCCON &0x8000)); //等待转换结束
    		
    		val +=(rADCDAT0 & 0x3ff);	//读取ADC转换的值
    		
    	}
    	val = val>>4;	//计算ADC转换值
    	
    	return val;
    }
    
    //=======================================================================
    //名称:ADRead()
    //功能:采用读控制器的方式启动AD转换
    //参数: 无
    //返回值:转换后的值
    //=======================================================================
    u16 ADRead(void)
    {
    	int i;
    	int val=0;
    	
    	rADCCON |=0x2;	//ADC转换通过读操作来启动
    	
    	for(i=0;i<16;i++)
    	{
    		rADCCON |=0x1;	//使能ADC转换
    		
    		while(rADCCON & 0x1); //判断使能ADC转换后被清零
    		
    		while(!(rADCCON &0x8000)); //等待转换结束
    		
    		val +=(rADCDAT0 & 0x3ff);	//读取ADC转换的值
    		
    	}
    	val = val>>4;	//计算ADC转换值
    	
    	return val;
    }
    


    Adc.h

    #ifndef __ADC_H
    #define __ADC_H
    #include "2440addr.h"
    #include "def.h"
    
    void ADCSelect(int ch, u8 preScaler);
    
    u16 ADEnable(void);
    
    u16 ADRead(void);
    
    
    
    
    
    
    #endif
    
    


  • 相关阅读:
    @atcoder
    @loj
    @AGC037
    @uoj
    @uoj
    @loj
    @loj
    @loj
    @loj
    @loj
  • 原文地址:https://www.cnblogs.com/dengxiaojun/p/4279410.html
Copyright © 2011-2022 走看看