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



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。



2、程序编写

1、相关寄存器定义

[cpp]  view plain  copy
  1. /***********************  ADC ******************************************/  
  2.   
  3. #define     ADC_CFG     __REG(0x10010118)  
  4.   
  5.   
  6. #define     ADCCON      __REG(0x126C0000)  
  7. #define     ADCDLY      __REG(0x126C0008)  
  8. #define     ADCDAT      __REG(0x126C000C)  
  9. #define     CLRINTADC   __REG(0x126C0018)  
  10. #define     ADCMUX      __REG(0x126C001C)  


2、具体代码如下:

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

[cpp]  view plain  copy
  1. #include "exynos_4412.h"  
  2. #include "pwm.h"  
  3. #include "uart.h"  
  4.   
  5. unsigned char table[10] = {'0','1','2','3','4','5','6','7','8','9'};  
  6. void mydelay_ms(int time)  
  7. {  
  8.     int i, j;  
  9.     while(time--)  
  10.     {  
  11.         for (i = 0; i < 5; i++)  
  12.             for (j = 0; j < 514; j++);  
  13.     }  
  14. }  
  15.   
  16. adc_init(int temp)  
  17. {  
  18.     ADCCON = (1 << 16 | 1 << 14 | 99 <<6 | 1 << 1);  
  19.     ADCMUX = 3;  
  20.     temp = ADCDAT & 0xfff;  
  21. }  
  22.   
  23. /* 
  24.  *  裸机代码,不同于LINUX 应用层, 一定加循环控制 
  25.  */  
  26. int main (void)  
  27. {  
  28.     unsigned char bit4,bit3,bit2,bit1;  
  29.     uart_init();  
  30.     unsigned int temp = 0;  
  31.     adc_init(temp);  
  32.     puts("开始转换\n");  
  33.     while(1)  
  34.     {  
  35.         while(!(ADCCON & 0x8000));  
  36.         temp = ADCDAT & 0xfff;  
  37.         printf("U = %d\n",temp);  
  38.         temp = 1.8 * 1000 * temp/0xfff;  
  39.         bit4 = temp /1000;  
  40.         putc(table[bit4]);  
  41.         bit3 = (temp % 1000)/100;  
  42.         putc(table[bit3]);  
  43.         bit2 = ((temp % 1000)%100)/10;  
  44.         putc(table[bit2]);  
  45.         bit1 = ((temp % 1000)%100)%10;  
  46.         putc(table[bit1]);  
  47.         puts("mV");  
  48.         putc('\n');  
  49.         mydelay_ms(1000);  
  50.     }  
  51.    return 0;  
  52. }  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值