嵌入式学习第四十天(imx6ull裸机——ADC)

ADC是模拟信号到数字信号转换器,是一种电子设备或者模块;它用于将连续的模拟信号转换成离散的数字信号,以便数字设备(微处理器等)对其分析和处理。

ADC的工作原理:将模拟信号在一定时间间隔内分割成离散的取样,并将每个取样值转换成数字表示;这个过程主要有两个步骤:采样和量化;

采样:将连续的模拟信号在一定的事件内进行取样;采样的频率决定了单位时间内的采样点,通常以(赫兹)HZ表示;

量化:将得到的取样值转换成数字形式。这个过程通常是需要将采样值和基准值进行比较,并将其转换为数字表示

imx6ull内部有两个ADC,都是采用逐次逼近法,它的分辨率是可以选择的,有8/10/12位;同时它内部还有自动校准功能,最大转换速率为1MHZ,所以进行一次转换所需要的最快转换时间为1us;同时imx6ull内部还有硬件平均功能和比较功能,这就大大方便了我们对软件的设置。

每个ADC都有10个通道,这里的通道就是说输入的电压信号从哪个引脚出来,他其实就是GPIO00~GPIO09这10个引脚;在配置引脚时只需要配置GPIO就行,电气属性选择默认下的KEEP模式就行了。

cs 复制代码
int adc1_init(void)
{
    IOMUXC_SetPinMux(IOMUXC_GPIO1_IO01_GPIO1_IO01, 1);
    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO01_GPIO1_IO01, 0x10b0);

//我们这里用不到中断所以关闭中断使能
    ADC1->HC[0] &= ~(1<<0);

//ADC1_CFG
    ADC->CFG = 0;
    ADC->CFG &= (0XB<<0);
    
//ADC1_GC
    ADC1->GC = 0;
    ADC1->GC |= (0X1<<0);

//校准
    ADC1->GC |= (1<<7);
    while(ADC->GC & (1<<7));
    if((ADC1->GS & (1<<1))==1)
    return -1;
    return 0;
    }
 

unsigned short adc1_read(void)
{
    ADC1->HC[0] &= ~(0X1F<<0);
    ADC1->HC[0] = 0X1;
    while(!(ADC1->HS & (1<<0)))
    return ADC1->HS & 0xfff;
}
相关推荐
comyccccc21 分钟前
LM2596电源PCB布局布线全解析学习笔记
单片机·嵌入式硬件
恒锐丰科技林技术员2 小时前
EG2122 半桥栅极驱动芯片原理与工程应用解析
经验分享·嵌入式硬件·硬件工程
fly_sunnn4 小时前
STM32-GPIO输出以及按键控制LED&光敏传感器控制蜂鸣器
stm32·单片机·嵌入式硬件
数字新视界4 小时前
U位资产管理系统发布全面数字化监控解决方案
嵌入式硬件·物联网·系统架构·机房管理·动力与环境监控系统
qq_401700416 小时前
FreeRtos:SysTick的功能分析
单片机·嵌入式硬件
zbyyd7 小时前
i.MX6ULL 裸机开发|GT9147 触控 + SPI 与 ADXL345 加速度传感器驱动
单片机·嵌入式硬件
fly_sunnn7 小时前
STM32-LED闪烁·LED流水灯·蜂鸣器
stm32·单片机·嵌入式硬件
殷忆枫9 小时前
基于STM32的独居老人语音/一键双模紧急呼救系统设计与实现
stm32·嵌入式硬件·xcode
袁章根9 小时前
基于瑞昱RTL8367S交换机电路设计(一)
网络·嵌入式硬件·硬件架构·硬件工程
深圳市恒锐丰科技杨生10 小时前
EG44273 20V 低压单通道低侧栅极驱动芯片|屹晶 EGmicro
嵌入式硬件·硬件工程