Exynos4412裸机开发 —— A/D转换器

一、Exynos4412 A/D转换器概述

1、简述

        10位或12位CMOS再循环式模拟数字转换器,它具有10通道输入,并可将模拟量转换至10位或12位二进制数。5Mhz A/D 转换时钟时,最大1Msps的转换速度。A/D转换具备片上采样保持功能,同时也支持待机工作模式。


2、特性

ADC接口包括如下特性。

1)10bit/12bit输出位可选。

2)微分误差  1.0LSB。

3)积分误差  2.0LSB。

4)最大转换速率5Msps.

5) 功耗少,电压输入1.8V。

6)电压输入范围 0~1.8V。

7)支持偏上样本保持功能。

8)通用转换模式。


3、模块图

4412A/D转换器的控制器接口框图如下:



二、Exynos4412 A/D 控制器寄存器

1、A/D控制寄存器ADCCON



2、A/D转换数据寄存器ADCDAT0

Exynos4412裸机开发 —— A/D转换器_第1张图片


3、A/D转换的转换时间计算

例如: PCLK为100MHz,PRESCALER = 65 ;所有10位转换时间为

100MHz/(99+1) = 1MHz

转化时间为1/(1MHz/5 cycles) = 5us。

完成一次A/D转换需要5个时钟周期。A/D转换器的最大工作时钟为5MHz,所以最大采样率可以达到1Mit/s.


三、A/D转换器实例

1、电路连接如下:

利用一个电位计输出电压到4412的AIN3管脚。输入的电压范围为0~1.8V。

Exynos4412裸机开发 —— A/D转换器_第2张图片


2、程序编写

1、相关寄存器定义

/***********************  ADC ******************************************/

#define  	ADC_CFG		__REG(0x10010118)


#define		ADCCON		__REG(0x126C0000)
#define		ADCDLY		__REG(0x126C0008)
#define		ADCDAT		__REG(0x126C000C)
#define		CLRINTADC	__REG(0x126C0018)
#define		ADCMUX		__REG(0x126C001C)


2、具体代码如下:

注:这里使用读-启动模式

#include "exynos_4412.h"
#include "pwm.h"
#include "uart.h"

unsigned char table[10] = {'0','1','2','3','4','5','6','7','8','9'};
void mydelay_ms(int time)
{
	int i, j;
	while(time--)
	{
		for (i = 0; i < 5; i++)
			for (j = 0; j < 514; j++);
	}
}

adc_init(int temp)
{
	ADCCON = (1 << 16 | 1 << 14 | 99 <<6 | 1 << 1);
	ADCMUX = 3;
	temp = ADCDAT & 0xfff;
}

/*
 *  裸机代码,不同于LINUX 应用层, 一定加循环控制
 */
int main (void)
{
	unsigned char bit4,bit3,bit2,bit1;
	uart_init();
	unsigned int temp = 0;
	adc_init(temp);
	puts("开始转换\n");
	while(1)
	{
		while(!(ADCCON & 0x8000));
		temp = ADCDAT & 0xfff;
		printf("U = %d\n",temp);
		temp = 1.8 * 1000 * temp/0xfff;
		bit4 = temp /1000;
		putc(table[bit4]);
		bit3 = (temp % 1000)/100;
		putc(table[bit3]);
		bit2 = ((temp % 1000)%100)/10;
		putc(table[bit2]);
		bit1 = ((temp % 1000)%100)%10;
		putc(table[bit1]);
		puts("mV");
		putc('\n');
		mydelay_ms(1000);
	}
   return 0;
}



你可能感兴趣的:(ARM,ADC,exynos4412,裸机开发)