Arm学习笔记--ADC编程

发布者:SereneDreams最新更新时间:2016-07-19 来源: eefocus关键字:Arm  ADC编程 手机看文章 扫描二维码
随时随地手机看文章
 A/D转换器的功能是将模拟输入信号采样得到可以提供计算机进行处理的数字信号。开发板的A/D输入模块电路图如下 
Arm学习笔记--ADC编程 - 沧海一粟 - 沧海一粟的博客
这是一个测量电压值的电路。
 Arm学习笔记--ADC编程 - 沧海一粟 - 沧海一粟的博客
 
LPC1788的ADC是一个12位的逐次逼近型模数转换器,有8个复用的输入管脚,它的时钟使用PCLK分频得到。 从这段描述中我们可以分析出一下的内容:
1、编程的时候需要首先打开这个功能,所以需要配置寄存器PCONP
2、既然ADC有8个引脚,所以就有一个选择的寄存器,这个就是控制寄存器,因为时钟需要切换,控制寄存器也包含这个功能
3、ADC需要有数据寄存器来保存读取到的数据,那么每个输入管脚就对应一个寄存器用来存储对应引脚的数据,这就是数据寄存器
4、ADC当前状态的检测需要一个状态寄存器
5、从ADC的块图上我们可以看出有中断接口,所以肯定有一个中断使能寄存器表明是那个引脚引起的中断
6、从块图上看到有一个触发源,这里也是一个寄存器控制
从块图和ADC的原理上我们基本上能理出这些内容,下面我们就来看一个ADC的例程,从例程中分析LPC1788 ADC的编程思路。
 
这是关于LPC1788的ADC寄存器定义,跟我们的分析差不多

typedef struct
{
__IO uint32_t CR; /*!< Offset: 0x000 A/D Control Register (R/W) */
__IO uint32_t GDR; /*!< Offset: 0x004 A/D Global Data Register (R/W) */
uint32_t RESERVED0;
__IO uint32_t INTEN; /*!< Offset: 0x00C A/D Interrupt Enable Register (R/W) */
__IO uint32_t DR[8]; /*!< Offset: 0x010-0x02C A/D Channel 0..7 Data Register (R/W) */
__I uint32_t STAT; /*!< Offset: 0x030 A/D Status Register (R/ ) */
__IO uint32_t ADTRM;
} LPC_ADC_TypeDef;

ADC的初始化代码,主要设置了时钟频率,满足ADC操作的需求

void ADC_Init(LPC_ADC_TypeDef *ADCx, uint32_t rate)
{
uint32_t temp, tmp;

// Turn on power and clock
CLKPWR_ConfigPPWR(CLKPWR_PCONP_PCADC, ENABLE); //开启ADC功能

ADCx->CR = 0; //控制寄存器初始化

//Enable PDN bit
tmp = ADC_CR_PDN;

// Set clock frequency
temp = CLKPWR_GetCLK(CLKPWR_CLKTYPE_PER); //设置时钟频率

/* The APB clock (PCLK_ADC0) is divided by (CLKDIV+1) to produce the clock for
* A/D converter, which should be less than or equal to 12.4MHz.
* A fully conversion requires 31 of these clocks.
* ADC clock = PCLK_ADC0 / (CLKDIV + 1);
* ADC rate = ADC clock / 31;
*/
temp = (temp /(rate * 31)) - 1;
tmp |= ADC_CR_CLKDIV(temp);

ADCx->CR = tmp; //配置了时钟频率
}

中断配置

/*********************************************************************//**
* @brief ADC interrupt configuration
* @param[in] ADCx pointer to LPC_ADC_TypeDef, should be: LPC_ADC
* @param[in] IntType: type of interrupt, should be:
* - ADC_ADINTEN0: Interrupt channel 0
* - ADC_ADINTEN1: Interrupt channel 1
* ...
* - ADC_ADINTEN7: Interrupt channel 7
* - ADC_ADGINTEN: Individual channel/global flag done generate an interrupt
* @param[in] NewState:
* - SET : enable ADC interrupt
* - RESET: disable ADC interrupt
* @return None
**********************************************************************/
void ADC_IntConfig (LPC_ADC_TypeDef *ADCx, ADC_TYPE_INT_OPT IntType, FunctionalState NewState)
{
ADCx->INTEN &= ~ADC_INTEN_CH(IntType);
if (NewState){
ADCx->INTEN |= ADC_INTEN_CH(IntType);
}
}

设置通道

void ADC_ChannelCmd (LPC_ADC_TypeDef *ADCx, uint8_t Channel, FunctionalState NewState)
{
if (NewState == ENABLE) {
ADCx->CR |= ADC_CR_CH_SEL(Channel);
} else {
ADCx->CR &= ~ADC_CR_CH_SEL(Channel);
}
}

中断处理

void ADC_IRQHandler(void)
{
adc_value = 0;

if (ADC_ChannelGetStatus(LPC_ADC, TENGHUA_ADC_PREPARED_CHANNEL, ADC_DATA_DONE))
{
adc_value = ADC_ChannelGetData(LPC_ADC, TENGHUA_ADC_PREPARED_CHANNEL);
NVIC_DisableIRQ(ADC_IRQn);
}
}


其实ADC是很简单和基础的,主要还是掌握好寄存器的使用。

关键字:Arm  ADC编程 引用地址:Arm学习笔记--ADC编程

上一篇:arm学习笔记--程序中变量引起的思考
下一篇:ARM学习笔记--RTC编程(二)

推荐阅读最新更新时间:2024-03-16 15:00

玩转ARM 的基本功
我是稀里糊涂的走上了嵌入式开发的道路,回想起来,多亏了身边的几位朋友,是在与他们的闲侃中慢慢的走上了这条道路:从最早的电路设计,PCB打板,电路调试,模拟仿真,单片机开发到后来的ARM开发,回想起来,心里也是诚惶诚恐,如履薄冰。 我开始做电子是用的AVR单片机,从I/O、按键…到内存、外设玩了一通。工作之后,才开始玩ARM。在项目中逐渐对ARM开发有了一些感悟。 学习ARM有两个目的,看你是那种:1、长见识,顺便玩玩;2、工作需要,从事ARM开发。这就要分开对待了。 如果是长见识,随便玩玩,为日后的工作做准备,那么就应该挑选市场上很成熟的ARM7、ARM9等资料比较多,玩的人比较多,出现问题容易解决;如果是工作需要,就
[单片机]
玩转<font color='red'>ARM</font> 的基本功
ARM Linux上使用OpenGL
这两天在ARM上跑了一个OpenGL,应该说是OpenGL|ES的软件包,虽然我觉得可能最后我不会使用这个软件包,但是还是记录下来以备忘记。 先全局介绍下,首先,什么是OpenGL和OpenGL|ES。OpenGL是一套绘图函数的标准,OpenGL|ES是OpenGL中针对嵌入式系统的一套函数子集。OpenGL|ES的官方是http://www.khronos.org/opengles/, 上面有更多的信息。需要注意的是,OpenGL仅仅是标准,而如果你要使用OpenGL,则需要找到可以实现这些OpenGL标准函数的程序库或源代码。 目前,在ARM这种一般没有图形加速器的平台上,OpenGL|ES的实现都是靠软件的。主要的Ope
[单片机]
三星推出45纳米级ARM芯片 支持高级操作系统
6月30日消息,三星日前推出了基于ARM的应用处理器,主要针对移动设备,该设备包括内置图形加速硬件,可专门应用于运行Windows CE和Linux等系统的卫星导航套件设备。 据国外媒体报道,三星计划在今年第三季度开始出货,其中S5P6440是公司首次生产的ARM11应用处理器,采取低能耗的45纳米级制造工艺。 三星透露,基于ARM1176的新型芯片有667MHz和533MHz两种,但二者都拥有符合OpenVG图形编程标准的二维加速硬件。此外,该芯片具有高性能低能耗的特点,是符合成本效益优化的消费电子产品硬件。 此外,该芯片还拥有集成内存控制器,从而能够支持移动DDR和DDR2低成本内存组合,而且还具
[嵌入式]
基于ARM11的无线视频
1 引言 随着无线网络的普及,ARM 处理器运算的能力不断地增强以及计算机处理图像的技术不断地提高,基于ARM 的视频监控正越来越广泛的应用于学校,社区,酒店,网吧,医疗等各种各样地领域。传统的视频监控系统布线复杂,设备庞大,智能化低,以及软硬件资源得不到充分的发挥。而ARM 嵌入式系统的小型化、占用空间小、成本低廉、结构紧凑、支持无线网络等特点,使得利用S3C6410 的ARM11+linux系统构成各种各样的无线网络数字监控系统具有广泛的应用价值。 2 系统整体设计 2.1 硬件总体设计 本系统采用韩国三星公司ARM11 内核的S3C6410 作为微处理器,该款处理器体积小,尺寸仅相当于一个48mm*67mm 方块的大
[单片机]
基于<font color='red'>ARM</font>11的无线视频
英迪芯微发布世界最小尺寸基于ARM核的汽车氛围灯控制芯片iND83212
车规混合信号芯片厂商英迪芯微近日宣布推出面向照明和微马达驱动的全新系统集成芯片-iND83212 该产品是英迪芯微的Realplum家族的最新产品,兼具LIN通讯,算法处理,电源管理和高压IO驱动,非常适合车内照明控制以及微马达控制的应用。 iND83212性能一览 集成ARM M0核 提供64K Flash以及16K SRAM 第三代LIN收发器及控制器 60mA的高压恒流源 支持16位 PWM调光,PN电压检测,温度传感器,12位SAR ADC 提供4路GPIO,可通过GPIO实现外部LED的分时电路控制,以及马达继电器的驱动电路控制 更小尺寸·更高性能
[汽车电子]
英迪芯微发布世界最小尺寸基于<font color='red'>ARM</font>核的汽车氛围灯控制芯片iND83212
ARM7和ARM-Cortex的区别,ARM为什么会有两种启动方式?
ARM为什么会有两种启动方式?ARM7和ARM-Cortex区别在哪?快速中断和中断是怎么回事? ARM的两种启动方式 (NAND FLASH. NOR FLASH)为什么会有两种启动方式? 这主要是由两种FLASH 的不同特点决定的。 NAND FLASH 容量大,存储的单位比特数据的成本要低很多,但是要按照特定的时序对NAND FLASH 进行读写,因此CPU 无法对NAND FLASH 的数据进行直接寻址,CPU 对NAND FLASH 中数据的读写是通过专门的 nand flash控制器进行的,因此 NAND FLASH 更适合于存储数据。 NOR FLASH 容量小,速度快,对NOR FLASH 进行读写时,
[单片机]
<font color='red'>ARM</font>7和<font color='red'>ARM</font>-Cortex的区别,<font color='red'>ARM</font>为什么会有两种启动方式?
基于ARM处理器的便携式心电血压检测仪
    近年来,心脏病和高血压的患病率逐年增高,动态心电图和血压监测为心血管疾病的预测、诊断和评估提供了极有价值的信息。随着嵌入式系统在医用仪表中的广泛应用,本文介绍了一种以Samsung公司的S3C44B0X为核心的集血压和心电检测功能于一体的便携式家庭健康监护系统,该系统充分利用ARM的片内资源,实现了人体心电、血压信号的采集、显示、打印和传输。仪器硬件主要由S3C44B0X主控芯片、心电放大电路、血压检测模块、存储系统及外围接口电路组成,系统结构框图如图1所示。S3C44B0X内置的A/D转换器用于采集心电信号和血压信号,LCD用于显示数据,微型打印机用于输出心电图波形,用户可通过外接PS2键盘控制系统的工作状态,包括选择检
[单片机]
日本软银正试图出售ARM部分或全部股份,最终结局还未可知
近日有消息称,软银及愿景基金与英伟达进行了接触。知情人士称,英伟达就收购ARM的潜在交易和软银公司有初步接洽。早期在图形图像芯片领域占据竞争优势地位的英伟达,近几年正加速向人工智能、自动驾驶等领域进军,并取得了一席之地。如果能够收购ARM,无疑将极大增强英伟达在芯片领域的竞争实力。 随着人工智能等新一代信息技术的发展,芯片的重要性又登上了一个新的台阶。近两年来,全球各国对于芯片产业的关注度日趋提升,围绕芯片制造展开的竞争越发激烈。近期,在芯片领域有一则大新闻一直牵动大家的心,那就是日本软银正试图出售ARM部分或全部股份。 ARM是世界知名的芯片设计公司。2016年,作为当时英国上市科技公司之首的ARM被日本软银以约320亿美元的“
[机器人]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
502 Bad Gateway

502 Bad Gateway


openresty
设计资源 培训 开发板 精华推荐

502 Bad Gateway

502 Bad Gateway


openresty
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
502 Bad Gateway

502 Bad Gateway


openresty
随便看看
    502 Bad Gateway

    502 Bad Gateway


    openresty
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
502 Bad Gateway

502 Bad Gateway


openresty