嵌入式学习第四十天(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;
}
相关推荐
xx~t11 小时前
嵌入式学习——ARM1
linux·arm开发·嵌入式硬件·arm
xx~t11 小时前
嵌入式——ARM1(详细篇)
linux·arm开发·嵌入式硬件·arm
周洲083012 小时前
STM32 ADC 采集实战|电压采集、分压计算、数据滤波
stm32·单片机·嵌入式硬件
狂奔蜗牛(bradley)13 小时前
搞定100ns抖动:ARM+FPGA混合EtherCAT主站实战方案
嵌入式硬件·fpga开发
HZZD_HZZD13 小时前
CSDN_批发市场水电漏损归因算法LAM的原理与落地
嵌入式硬件·物联网·算法
H_oRIZoN_15 小时前
Linux入门DAY40(51 单片机入门:GPIO、中断、定时器、PWM、蜂鸣器完整梳理)
单片机·嵌入式硬件
LCG元15 小时前
STM32F103 复位来源诊断实战:RCC_CSR 标志位判优、BKP 复位计数持久化与六种复位源注入实测
stm32·单片机·嵌入式硬件
HUI-47416 小时前
EG1177|SOP‑7 内置 100V‑NMOS 异步降压,20‑90V 高压恒压恒流小功率电源优选
嵌入式硬件·硬件工程
Doraemomo17 小时前
IMX6ULL裸机开发——I2C通信协议
arm开发·嵌入式硬件·imx6ull