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

TX2440裸机程序-AD

发布时间:2020-06-17 发布时间:
|

一、基本概念


ADC:模/数转换器。



一种将模拟信号转换成数字信号的装置;


DAC:数/模转换器。


一种将数字信号转换成模拟信号的装置。


模拟信号转换为数值信号的步骤:


1.取值;


2.量化;


3.编码;


二、硬件电路


S3C2440ADC


S3C2440芯片内部共有8路A/D转换通道AIN0~AIN7,但是转换器只有一个。转换精度为10位,故转换后的值最小时会接近0,最大时会接近1024.

最大的转换率在2.5MHZ转换时钟下能达到500KSPS(每秒采样5000千次)


在常见的设计中,如TX2440开发板,一般AIN4、AIN5、AIN6、AIN7被用作了四线电阻触摸的YM、YP、XM、XP通道;剩余的AIN0~3被引出,其中AIN0、AIN1连接采样电路。

三、程序


ADC驱动流程


1.初始化 2.启动 3.转换结束 4.读取转换值;

寄存器说明

      

读取转换值:

       

源码

//======================================================================

 

//========================================================

// 函数名称: main

// 功能描述: 通过串口,显示AD值

// 维护记录: 2009-08-14 v1.0        

//========================================================

 

#include "2440addr.h"

#include "2440lib.h"

#include "option.h"

#include "uart.h"

#include "ADC.h"

 

void Main()

SetSysFclk(FCLK_400M);  //设置系统时钟 400M     

ChangeClockDivider(2, 1);      //设置分频 1:8:16

CalcBusClk();           //计算总线频

 

Uart_Select(0);

    Uart_Init(0, 115200);

Uart_Printf("n ---ADC测试程序---n"); 

while(1)

{

Test_ADC();

}

 }

//====================================================================

// 文件名  : ADC.c

// 功  能  : ADC测试程序 

//====================================================================

#include "def.h"

#include "2440addr.h"

#include "2440lib.h"

#include "uart.h"

#include "ADC.h"

 

void Test_ADC(void)

{

    U8 ch, mode;

Uart_Printf("Select ADC Chanel: 0 or 1");

ch=Uart_Getch();

Uart_Printf("n%cnn", ch);

if (ch!='0' && ch !='1')

{

Uart_Printf("you select wrong chanel!n");

return;

}

    rADCDLY = 100; //ADC转换延时

//    rADCTSC = 0; //设置ADC为普通模式

    /* 进行ADC模块设置,其中x<

    rADCCON = (0 << 0)     | // ADC转换设置 未设置

              (0 << 1)     |    // 读AD数据触发AD转换 未使用

              (0 << 2)     |    // StandBy模式选择 为普通操作模式

              (ch << 3)    |    // ADC通道选择 ch

              (49 << 6)    | // CLKDIV = Fpclk /49+1/5 ,即转换时钟为1MHz  Fpclk = 10M   ADC转换频率400K

              (1 << 14)   ;    // 使能软件预设值

    

Uart_Printf("Select ADC Mode: 1.Enable  2.Read");

mode=Uart_Getch();

Uart_Printf("n%cnn", mode);

if (mode!='1' && mode !='2')

{

Uart_Printf("you select wrong model!n");

return;

}

switch(mode)

{

case '1':

Uart_Printf("ADC Enable-Convert Moden");

while(Uart_GetKey() != ESC_KEY)

{

AD_ENABLE();

}

break;

case '2':

Uart_Printf("ADC Read-Convert Moden");

while(Uart_GetKey() != ESC_KEY)

{

AD_READ();

}

break;

// default:

// break;

}

}

 

//=======================================================================

//名称:AD_ENABLE()

//功能:采用置位使能方式启动AD转换

//参数: 无

//返回值: 无

//=======================================================================

 

void AD_ENABLE (void) 

 {

    int i,j;

    int val;

  val = 0;

    for(i=0;i<16;i++)

    {

rADCCON |= 0x1;         //使能ADC 转换

       

while(rADCCON&0x1);     //判断是否使能ADC转换

       

while(!rADCCON&0x8000); //判断ADC转换是否结束

       

val += (rADCDAT0 &0x03ff);    //取出ADC转换值

for(j=0;j<500;j++);       

    }

    val = val/16;                   //计算ADC平均转换值

    Delay(500);

    Uart_Printf("ADC val = %dn", val);  //发送到串口显示

 

 }

 

 

//=======================================================================

//名称:AD_READ()

//功能:采用读控制器的方式启动AD转换

//参数: 无

//返回值: 无

//=======================================================================

 void AD_READ (void) 

 {

    int i,j;

    int val,aa;

  val = 0;

  rADCCON |= 0x2;         //ADC转换通过读操作来启动

  aa = rADCDAT0 &0x03ff; //启动ADC转换

 

    for(i=0;i<16;i++)

    {

while(!rADCCON&0x8000); //判断ADC转换是否结束

       

val += (rADCDAT0 &0x03ff);    //取出ADC转换值

for(j=0;j<500;j++);       

    }

    val = val/16;                   //计算ADC平均转换值

    Delay(500);

    Uart_Printf("ADC val = %dn", val);  //发送到串口显示

 

 }


关键字:TX2440  裸机程序  AD 


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

热门文章 更多
51单片机中断源的扩展方法