当前位置:首页 > 单片机 > 单片机
[导读]“START位”位于AD模块控制寄存器bit24~bit26。位符号值描述复位值7:0SEL选择哪个引脚用作采集和转换,当bit0=1,用AD0;当bit1=1,…,当bit7=1,用AD7在软件控制模式,当(BURST=0),只允许选择一个引脚,也就是说,

“START位”位于AD模块控制寄存器bit24~bit26。

位符号值描述复位值7:0SEL
选择哪个引脚用作采集和转换,当bit0=1,用AD0;当bit1=1,…,当bit7=1,用AD7在软件控制模式,当(BURST=0),只允许选择一个引脚,也就是说,这7位当中,只允许有1个位是1


在硬件扫描模式,当(BURST=1),可以允许1个,也可以允许多个甚至允许8个引脚都开启。如果所有位都是0,将自动使得SEL=0X01,即选择AD0

0x0015:8CLKDIV
APB时钟(PCLK)除以(CLKDIV+1)就是AD模块的时钟,这个值必须≤4.5MHz。016BURST
触发模式位(注意:当BURST=1的时候,AD0INTEN寄存器中的ADGINTEN位必须为0)00软件控制模式:需要11个时钟转换1硬件扫描模式:AD转换将会按照CLKS位设置的速度重复转换,扫描所有SEL设置成1的位。首先扫描SEL中最小的设置成1的位,然后扫描再大一些的设置成1的位。在转换过程中,把此位写0,可以停止转换。(注意:如果BRUST=1,START位必须为000,否则将不会开启转换。)19:17CLKS
时钟精度选择位,精度越高,转换时间越长0000x011 clocks / 10 bits0x110 clocks / 9 bits0x29 clocks / 8 bits0x38 clocks / 7 bits0x47 clocks / 6 bits0x56 clocks / 5 bits0x65 clocks / 4 bits0x74 clocks / 3 bits23:20–
保留位,禁止给这些位写1Na26:24START
当BURST=0,这些位控制软件控制转换方式00x0没有开始0x1开始转换0x2当PIO0_2/SSEL/CT16B0_CAP0引脚上产生bit27位设置的边沿信号,开始转换0x3当PIO1_5/DIR/CT32B0_CAP0引脚上产生bit27位设置的边沿信号,开始转换

0x4当CT32B0_MAT0产生bit27位设置的边沿信号,开始转换
0x5当CT32B0_MAT1产生bit27位设置的边沿信号,开始转换0x6当CT16B0_MAT0产生bit27位设置的边沿信号,开始转换0x7当CT16B0_MAT1产生bit27位设置的边沿信号,开始转换27EDGE
只有在START位为010~111时,这个位有效00在CAP/MAT引脚上产生上升沿触发转换1在CAP/MAT引脚上产生下降沿触发转换31:28–
保留位,不允许写1到这些位Na

在CR寄存器中,由SEL位选择输入通道,由CLKDIV决定AD时钟,由BURST位控制转换触发模式,CLKS位决定转换精度,START位和EDGE位决定了软件触发模式下的转换模式。

新建一个工程,结构如下图所示:

在adc.h中,加入以下代码:

#ifndef __NXP_ADC_H

#define __NXP_ADC_H

#define Vref 3300

extern void ADC_Init(uint8_t Channel);

extern uint32_t ADC_Read(uint8_t Channel);

#endif

在adc.c文件中,加入以下代码:

#include “lpc11xx.h”

#include “adc.h”

void ADC_Init(uint8_t Channel)

{

if(Channel>7) return;

LPC_SYSCON->PDRUNCFG &= ~(0x1<<4); // ADC模块上电

LPC_SYSCON->SYSAHBCLKCTRL |= (1<<13); // 使能ADC时钟

LPC_SYSCON->SYSAHBCLKCTRL |= (1<<16); // 使能IOCON时钟

switch(Channel)

{

case 0: // 通道0配置 set channel 0

LPC_IOCON->R_PIO0_11 &= ~0x07; //

LPC_IOCON->R_PIO0_11 |= 0x02; // 把P0.11引脚设置为AD0功能

LPC_IOCON->R_PIO0_11 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->R_PIO0_11 &= ~(1<<7) ; // 模拟输入模式

break;

case 1: // 通道1配置 set channel 1

LPC_IOCON->R_PIO1_0 &= ~0x07; //

LPC_IOCON->R_PIO1_0 |= 0x02; // 把P1.0引脚设置为AD1功能

LPC_IOCON->R_PIO1_0 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->R_PIO1_0 &= ~(1<<7) ; // 模拟输入模式

break;

case 2: // 通道2配置 set channel 2

LPC_IOCON->R_PIO1_1 &= ~0x07; //

LPC_IOCON->R_PIO1_1 |= 0x02; // 把P1.1引脚设置为AD2功能

LPC_IOCON->R_PIO1_1 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->R_PIO1_1 &= ~(1<<7) ; // 模拟输入模式

break;

case 3: // 通道3配置 set channel 3

LPC_IOCON->R_PIO1_2 &= ~0x07; //

LPC_IOCON->R_PIO1_2 |= 0x02; // 把P1.2引脚设置为AD3功能

LPC_IOCON->R_PIO1_2 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->R_PIO1_2 &= ~(1<<7) ; // 模拟输入模式

break;

case 4: // 通道4配置 set channel 4

LPC_IOCON->SWDIO_PIO1_3 &= ~0x07; //

LPC_IOCON->SWDIO_PIO1_3 |= 0x02; // 把P1.3引脚设置为AD4功能

LPC_IOCON->SWDIO_PIO1_3 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->SWDIO_PIO1_3 &= ~(1<<7) ; // 模拟输入模式

break;

case 5: // 通道5配置 set channel 5

LPC_IOCON->PIO1_4 &= ~0x07; //

LPC_IOCON->PIO1_4 |= 0x01; // 把P1.4引脚设置为AD5功能

LPC_IOCON->PIO1_4 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->PIO1_4 &= ~(1<<7) ; // 模拟输入模式

break;

case 6: // 通道6配置 set channel 6

LPC_IOCON->PIO1_10 &= ~0x07; //

LPC_IOCON->PIO1_10 |= 0x01; // 把P1.10引脚设置为AD6功能

LPC_IOCON->PIO1_10 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->PIO1_10 &= ~(1<<7) ; // 模拟输入模式

break;

case 7: // 通道7配置 set channel 7

LPC_IOCON->PIO1_11 &= ~0x07; //

LPC_IOCON->PIO1_11 |= 0x01; // 把P1.11引脚设置为AD7功能

LPC_IOCON->PIO1_11 &= ~(3<<3) ; // 去掉上拉和下拉电阻

LPC_IOCON->PIO1_11 &= ~(1<<7) ; // 模拟输入模式

break;

default:break;

}

LPC_SYSCON->SYSAHBCLKCTRL &= ~(1<<16); // 关闭IOCON时钟

LPC_ADC->CR = (1<

(24<<8); /* bit15:bit8 把采样时钟频率设置为2MHz 50/(24+1)*/

}

uint32_t ADC_Read(uint8_t Channel)

{

uint32_t adc_value=0;

LPC_ADC->CR |= (1<<24); // 启动转换

while((LPC_ADC->DR[Channel]&0x80000000)==0);

adc_value = (LPC_ADC->DR[Channel]>>6)&0x3FF;

adc_value = (adc_value*Vref)/1024; // 转换为真正的电压值

retur

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

点击“东芝半导体”,马上加入我们哦!对配备以太网与CAN控制器的物联网设备进行优化东芝电子元件及存储装置株式会社(“东芝”)今日宣布,已开始量产M4N组的20款新微控制器。M4N组是TXZ™族高级产品的新成员,采用40n...

关键字: Cortex 东芝 微控制器

全球疫情持续,2021 COMPUTEX Taipei台北国际电脑展受到最新新冠疫情影响,取消线下展览改为在线,Intel、AMD、NVIDIA三家公布出席之后,ARM确定参与举办新品发布会。

关键字: ARM Cortex GPU

系统设计师通常侧重于为应用选择最合适的数据转换器,在向数据转换器提供输入的时钟发生器件的选择上往往少有考虑。然而,如果不慎重考虑时钟发生器、相位噪声和抖动性能,数据转换器、动态范围和线性度性能可能受到严重的影响。

关键字: 时钟发生器 adc

专注于引入新品并提供海量库存的电子元器件分销商贸泽电子 (Mouser Electronics) 即日起开始备货TI TLV915x运算放大器和ADS7128 12位模数转换器 (ADC)。

关键字: 贸泽 adc 模数转换器

自然界产生的信号,都是模拟信号,比如我们说话的声音,看到的景色,感受到的温度、湿度、压力、流速、光、电、风及个人的呼吸、血压、体温、心跳、体重、血糖,体脂等等。这些模拟信号都得最终放在电脑,手机等数字领域进行处理,存储或...

关键字: adc 模拟信号

为增进大家对ADC的认识和了解,本文将基于两方面对ADC予以介绍:1.什么是并行ADC,并行ADC的基本原理是什么?2.流水线ADC与其它ADC有何区别。

关键字: adc 指数 流水线adc

ADC是电子电路中常用器件,大家对于ADC也较为熟悉。为增进大家对ADC的了解,本文将对高速ADC以及流水线ADC结构予以介绍。

关键字: adc 指数 流水线adc

ADC也即数模转换器,在现实中,ADC具备重要作用。对于ADC,电子相关专业的朋友想必相当熟悉。为增进大家对ADC的认识,本文将对管道ADC以及其原理予以介绍。

关键字: adc 指数 管道adc

设计人员有各种模数转换器(ADC)可以选择,数字数据输出类型是选择过程中需要考虑的一项重要参数。

关键字: 高速转换器 数字数据 adc

ADC包括三个基本功能:抽样、量化和编码。如何实现这三个功能,就决定了ADC的形式和性能。

关键字: 模数转换 adc
关闭
关闭