打印

lpc1343之一:ADC详解

[复制链接]
3892|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
6019实验室|  楼主 | 2010-6-29 12:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式


LPC1343内置一个10位逐次逼近AD转换器(ADC);

8个模拟输入通道;

测量范围:0-VDD;

10位进度的AD转换时间大于等于2.44uS;

1个或多个输入的突发转换模式。

可选择由输入跳变或定时器匹配信号触发转换。

每个A/D通道的独立结果寄存器减少了中断开销。


为了精确测量被测引脚的电压值,必须先通过各IOCON寄存器为该引脚选择ADC功能。

用作ADC输入的引脚,不能选择为数字功能。当引脚选择为数字功能后内部电路会把ADC硬件从相关引脚





上断开。

LPC1343的ADC.rar

19.1 KB

相关帖子

沙发
6019实验室|  楼主 | 2010-6-29 12:27 | 只看该作者
ADC引脚功能的IOCON寄存器配置:

PIN32:TDI/PIO0_11/AD0/CT32B0_MAT3,IOCON_R_PIO0_11 register (IOCON_R_PIO0_11, address 0x4004 4074),BIT2:0=010 引脚设置为AD0,BIT7=0为模拟输入

PIN33:TMS/PIO1_0/AD1/CT32B1_CAP0,IOCON_R_PIO1_0 register (IOCON_R_PIO1_0, address 0x4004 4078),BIT2:0=010 引脚设置为AD1,BIT7=0为模拟输入

PIN34:TDO/PIO1_1/AD2/CT32B1_MAT0,IOCON_R_PIO1_1 register (IOCON_R_PIO1_1, address 0x4004 407C),BIT2:0=010 引脚设置为AD2,BIT7=0为模拟输入

PIN35:/TRST/PIO1_2/AD3/CT32B1_MAT1,IOCON_R_PIO1_2 register (IOCON_R_PIO1_2, address 0x4004 4080),BIT2:0=010 引脚设置为AD3,BIT7=0为模拟输入

PIN39:WDIO/PIO1_3/AD4/CT32B1_MAT2,IOCON_SWDIO_PIO1_3 register (IOCON_SWDIO_PIO1_3, address 0x4004 4090),BIT2:0=010 引脚设置为AD4,BIT7=0为模拟输入

PIN40:PIO1_4/AD5/CT32B1_MAT3/WAKEUP,IOCON_PIO1_4 register (IOCON_PIO1_4, address 0x4004 4094),BIT2:0=001 引脚设置为AD5,BIT7=0为模拟输入

PIN30:PIO1_10/AD6/CT16B1_MAT1,IOCON_PIO1_10 register (IOCON_PIO1_10, address 0x4004 406C),BIT2:0=001 引脚设置为AD6,BIT7=0为模拟输入

PIN42:PIO1_11/AD7,IOCON_PIO1_11 register (IOCON_PIO1_11, address 0x4004 4098),BIT2:0=001 引脚设置为AD6,BIT7=0为模拟输入

使用特权

评论回复
板凳
6019实验室|  楼主 | 2010-6-29 12:28 | 只看该作者
ADC基础时钟由外围时钟PCLK决定,ADC内置的可编程分频器提供4.5MHz(最大)时钟,用于逐次逼近过程。一次精确的转换需要11个时钟周期。



ADC外围时钟由系统时钟提供,该时钟可以通过SYSAHBCLKCTRL的BIT13禁用以减少电力消耗:外设时钟由系统AHB时钟控制寄存器(SYSAHBCLKCTRL, address 0x4004 8080),BIT13=1打开ADC时钟(复位后为关闭)



ADC在运行期间可以通过PDRUNCFG寄存器断电:当掉电配置寄存器(PDRUNCFG, address 0x4004 8238)BIT4=1则ADC掉电(复位后为掉电)







硬件触发AD转换:如果AD0CR的BURST位为0并且START为010-111,那么当所选引脚电平发生变化或者计时器得到匹配信号时,开始ADC转换。

当ADSTAT的ADINT位为1时,中断控制器产生一个中断请求。任何一个打开了中断功能(通过ADINTEN寄存器)的ADC通道对应DONE位为1时,ADINT位就为1。软件可以配置中断控制器的使能位。发生中断的AD通道的结果寄存器必须被读,以清除相应的DONE标志。

使用特权

评论回复
地板
6019实验室|  楼主 | 2010-6-29 12:28 | 只看该作者
ADC转换步骤:



1、   设置对应引脚的I/O配置寄存器,将该PIN为And通道以及模拟输入;



2、   设置掉电配置寄存器(PDRUNCFG, address 0x4004 8238)BIT4=0为ADC供电;



3、   (SYSAHBCLKCTRL, address 0x4004 8080),BIT13=1打开到ADC的AHB时钟;



4、   设置AD0CR选择And通道、ADC时钟频率、转换模式、精确度和耗费时钟数(仅BURST)、启动方式和触发边沿。



5、   AD0INTEN选择产生中断的通道;需要注意:BIT8为1时如果全局DONE标志为1就会产生中断。



6、   启动转换:BURST=0时AD0CR:START不为000则开始转换;



BURST=1时AD0CR:START=000转换反复进行;



7、   完成转换是对应DONE=1,如果该通道允许中断则产生中断请求。你可以在中断程序里处理是否过载、读取结果、关闭ADC。



也可以采用轮巡方式等待ADC结束读ADC结果。

使用特权

评论回复
5
6019实验室|  楼主 | 2010-6-29 12:29 | 只看该作者
一个查询AD转换的例子
/*
===============================================================================
Name        : main.c
Author      : zhdphao
Version     :
Copyright   : (C) Copyright v1.0
Description : main definition
===============================================================================
*/



#ifdef __USE_CMSIS
#include "LPC13xx.h"
#endif



int32_t adc_value;



// TODO: insert other include files here



// TODO: insert other definitions and declarations here



int main(void) {
   // TODO: insert code here



    // Enter an infinite loop, just incrementing a counter
    //volatile static int i = 0 ;
    LPC_SYSCON->SYSMEMREMAP =   0x03;
    LPC_SYSCON->SYSOSCCTRL =    0x00;
    LPC_SYSCON->CLKOUTDIV =     0X78;
    LPC_SYSCON->SYSAHBCLKCTRL = 0x20DF;
    LPC_IOCON -> PIO1_4 =0x41;    //AD5通道,



    LPC_ADC->INTEN=0x00;    //无ADC中断



    LPC_ADC->CR=0x1000B20;    //马上开始转换,PCLK/12,AD5



    while(LPC_ADC->STAT!=0X20)   //查询等待ADC完成
    {
   }



    adc_value=LPC_ADC->DR5;   //读AD5数据
    return 0 ;
}







//

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

121

主题

470

帖子

0

粉丝