ARM裸机开发-ADC

ARM裸机开发:LM75温度寄存器读取(IIC)、ADC、逻辑分析仪 (一)转换原理:各种物理模拟信号,通过对应传感器转换为模拟电压信号。ADC通过对模拟电压信号采样、量化(将采样值映射为离散数值)、编码(转换为二进制代码),最终输出数字量。(二)类型:IMX6ULLADC为逐次逼近型,精度和转换速率均为中性能(双积分型,flash型)2.转换速率:高速ADC(音频),低速ADC(温度)eg:测试电压(3.8V) 参考电压(5V)(二)使用地址将A0,A1,A2焊接在GND端,则地址为0x48。(五)温度寄存器为16位只读寄存器,先读高8位再读低8位。 阅读详情

目录

一.背景

二.寄存器

HC0

HS

R0

CFG

GC

GS

三.实现

复用功能

电气属性

完整初始化

校准函数

读取传感器


一.背景

ADC是模拟到数字转换器(Analog-to-Digital Converter)的缩写。它是一种电子设备或模块,2440内部拥有一个ADC外设。用于将连续变化的模拟信号转换为离散的数字信号,以便数字系统(如微处理器、微控制器等)能够对其进行处理和分析。
  • ➢ 模拟信号一般是指连续变化的电压信号,其数值在一定范围内变化。而数字信号是由一系列离散的数字表示,只能取有限的值,通常以二进制形式表示。
  • ➢ ADC的工作原理是将模拟信号分割成一系列离散的取样,并将每个取样值转换为相应的数字表示。这个过程涉及到两个主要步骤:采样和量化。
  • ➢ 采样:ADC将连续变化的模拟信号在一定时间间隔内进行取样。取样频率决定了每秒采集的样本数,通常以赫兹(Hz)表示。采样过程通过保持并测量模拟信号在每个采样时间点的电压值来实现。
  • ➢ 量化:采样得到的连续模拟信号经过量化转换为数字形式。量化是将每个采样值映射到一个离散的数字值的过程。这通常通过比较采样值与参考电压之间的差异,并将其转换为数字表示。
  • ➢ ADC量化的过程是相对于一个基准值的,这个基准值称之为基准电压。一般采用逐次逼近法,ADC会先拿采用电压Vadc跟基准电压Vref的1/2进行比较,如果Vadc>Vref,则结果为1,否则结果为0。之后继续拿Vadc和Vref的1/4或Vref的3/4继续比较。这个过程有点像二分法,每次比较都会使量化的结果逼近真实值。
很明显,比较的次数决定了测量的精度,这个精度被称之为ADC的分辨率。比如一个比较了8次的ADC外设,它就称为8位ADC,其结果是0~255之间的一个数值,设该数值为n,那么实际电压就是Vref * (n/255)。如果把比较次数增加到10次,结果就是0~1023之间的一个数。常见的分辨率包括8位,10位,12位和16位。
相机,麦克风是ADC设备,喇叭是DAC
ADC最高频率限制20MHZ,ADACK为ADC内部时钟,imx6ull专门为ADC配置的时钟,默认20MHZ,所以经过分频器选择一分频即可将运行速度拉满

二.寄存器

HC0

AIEN:转换完成中断使能或禁止控制位,转换完成会引发中断,置0表示禁止,采用轮询方式检测是否转换完成。
ADCH:输入通道选择,如下有通道0到9

HS

转换完成标记位,在R0寄存器中存储

R0

CFG

OVWREN:数据覆写使能位,置0表示不覆盖上一次转换的结果,置1则表示覆盖,置0置1都可,因为本次转换一次读一次,所以无影响。

AVGS:硬件平均滤波选择位,选择在几次采样后进行滤波,默认即可,后续自己写一个滤波函数

ADTRG:转换触发选择位,清零软件触发ADC转换,开始干活。

REFSEL:选择基准电压,VREFH-VREFL得到基准电压

ADC_VREFH接了3.3V电压(3P3),所以VREFL理论接地,为0V电压。

ADHSC:高速配置,设置转换速度。

ADSTS:采样周期,00表示一次采样消耗2个时钟周期,越久越精准

ADLPC:低功耗模式,置0表示不在低功耗。

ADIV:时钟分频位,00表示输入时钟不分频。

ADLSMP:长采样或者短采样,默认即可。

MODE:设置ADC分辨率,设置最高12位

ADICLK:选择输入时钟,11为上述提及的专用时钟20MHZ。

GC

CAL:使用ADC之前校准,将CAL置1

ADCO:持续转换使能位,0表示单次转换,1表示持续转换,本次采用单次转换。

而要开启ADC转换要先切换一次通道,比如从ADC1通道0切换到ADC1通道1,开启转换。

AVGE:硬件平均功能使能位,清零表示硬件平均滤波失能,因为要自己写滤波,所以置零。

ACFE:设置中断阈值,根据结果触发中断,本次不用中断,置0

ACFGT:对中断比较结果的判断,大于,小于,置0

ACREN:开启ACFE位

DMA:DMA位,本次不用。

对ADACK的使能配置,置1表示时钟输出使能。

GS

0表示校准成功,1失败,失败清零

三.实现

采用如上的光敏电阻器,将AO模拟输出口接入到GPIO 1号引脚即可得到模拟信号,若接DO则为数字信号,本次学习探究底层,故接AO,后续可实现函数将模拟信号转换为对应的数字信号。

复用功能

    // 配置引脚复用功能
    IOMUXC_SetPinMux(IOMUXC_GPIO1_IO01_GPIO1_IO01, 0);

电气属性

PUE位配0为保持电压,若置1则为拉,可能改变传感器输入的电压

PKE置1为保持功能使能

    // 配置电气属性
    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO01_GPIO1_IO01, IOMUXC_SW_PAD_CTL_PAD_PKE(1));
    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO01_GPIO1_IO01, IOMUXC_SW_PAD_CTL_PAD_PUE(0));

完整初始化


void adc1_channel1_init(void)
{
    // 配置引脚复用功能
    IOMUXC_SetPinMux(IOMUXC_GPIO1_IO01_GPIO1_IO01, 0);
    // 配置电气属性
    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO01_GPIO1_IO01, IOMUXC_SW_PAD_CTL_PAD_PKE(1));
    IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO01_GPIO1_IO01, IOMUXC_SW_PAD_CTL_PAD_PUE(0));

    ADC1->HC[0] &= ~(1 << 7);//置0表示禁止,采用轮询方式检测是否转换完成。
    ADC1->CFG = 0;
    ADC1->CFG |= (1 << 3) | (3 << 0);
    //2,3位MODE:设置ADC分辨率,设置最高12位
    //0,1位ADICLK:选择输入时钟,11为上述提及的专用时钟20MHZ。
    ADC1->GC = 0;
    ADC1->GC |= (1 << 0);//对ADACK的使能配置,置1表示时钟输出使能。

    // 校准
    printf(adc1_calibration() ? "calibration completed normally!\n" : "calibration completed failed!\n");
}

校准函数

内部对电压校准,校准之后产生误差,下次调用会自动减去误差

int adc1_calibration(void)
{
    // 校准
    ADC1->GC |= (1 << 7);
    while ((ADC1->GC & (1 << 7)) != 0);//校准需要过一段时间,校准完成后此位会自动清零,所以卡住等校准成功

    if ((ADC1->GS & (1 << 1)) == 0)    //GSbit1位清零说明校准通过
    {
        return 1;
    }
    else 
    {
        return 0;
    }
} 

读取传感器

unsigned short adc1_get_origin_value(void)//数字信号
{
    ADC1->HC[0] = 0;
    ADC1->HC[0] = 1;//切换通道,开启转换
    while ((ADC1->HS & (1 << 0)) == 0);

    return ADC1->R[0] & 0xFFF;  //读取ADC转换完成后的数据
}

float adc1_get_value(void)    //转换为模拟信号
{
    return adc1_get_origin_value() / 4095.0 * 3.3;
}

ARM嵌入式开发实战:从裸机到uClinux的完整学习路径与避坑指南 嵌入式系统开发是连接硬件与软件的关键技术领域,其核心在于通过交叉编译工具链在主机上生成可在目标硬件(如ARM处理器)上运行的代码。理解计算机体系结构、中断机制和内存映射是掌握嵌入式开发的基础。这些技术使得开发者能够直接操作寄存器,控制外设,实现从简单的GPIO控制到复杂的多任务调度。在工程实践中,搭建稳定的开发环境(如使用虚拟机安装Linux发行版并配置交叉编译器)是项目成功的首要步骤。通过引入实时操作系统(如uC/OS-II)和嵌入式Linux(如uClinux),开发者可以构建更复杂的应用,并利用NFS 阅读详情

相关推荐

ARM Cortex-M3裸机闭环控制:绿植养护系统设计与实现

嵌入式闭环控制系统是工业自动化与智能硬件的核心基础,其本质是通过传感器反馈、控制器运算与执行器动作构成的实时反馈回路。基于ARM Cortex-M3架构的裸机开发,绕过RTOS或Linux抽象层,直接操作寄存器,可实现微秒级GPIO时序控制与确定性外设调度,显著提升系统可靠性与可复现性。该技术广泛应用于小型环境控制器、农业物联网终端及高校嵌入式课程设计等场景,尤其适合需多路协同、状态严格约束(如‘先开阀再启泵’)的机电一体化项目。本文以LM3S9B96为平台,详解ADC校准、I2C/单总线驱动、频率捕获及安

weixin_29165725的博客 177

从裸机到Linux IIO:ARM ADC驱动开发全链路解析

模数转换器(ADC)是嵌入式系统连接模拟世界与数字世界的关键外设,其核心原理是将连续模拟电压离散化为数字量,分辨率与采样率共同决定了信号采集的精度与带宽。在ARM架构中,ADC驱动开发涉及寄存器配置、采样周期计算、滤波处理及设备树编写等环节。裸机开发直接操作寄存器实现通道选择与数据读取,而Linux内核则通过IIO子系统提供标准化的字符设备接口,利用sysfs和缓冲区机制简化应用层数据获取。掌握从裸机到Linux IIO的完整链路,不仅能提升驱动移植效率,还能在工业控制、传感器采集等场景中实现高可靠的数据转

weixin_29174141的博客 305

大一Python之循环解决实际问题

pythin之循环解决实际问题

weixin_66263546的博客 2287

从0学arm,基于Cortex-A9 ADC裸机驱动详解

在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写基于ARM的裸机程序和基于Linux的驱动程序。ARM架构:Cortex-A9 Linux内核:3.14在讲述ADC之前,我们需要先了解什么是模拟信号和数字信号。

tecoes的博客 408

AWR1642+DCA1000EVM 不使用mmWave Studio软件采集原始ADC数据 Timeout问题汇总

DCA1000 EVM Timeout问题汇总

Jesy_Hsu的博客 1476

GD32测量pwm波频率以及占空比

1、需求 最近做的一个项目,其中有一个传感器输出是pwm波形,频率代表速度,频率越高速度越快。不同的占空比代表不同的故障类型。占空比10%~90%,频率范围20hz ~1khz。 基于以上的需求,单片机要实现两个功能: 1、测量频率 2、测量占空比 这怎么玩呢?从没搞过啊。 2、需求分析 经过查找资料以及参考正点原子的教程,发现单片机的定时器的输入捕获功能能够实现该功能。 2.1分析 如上图所示,测量占空比和测量频率实际上就是测量波形的长度。 对于占空比,就是测量T2与T1时刻的差值 对于频率,就是测量T

Jack Yi的博客 9071

【ARM 裸机开发 (IMX6ULL-mini)】嵌入式 ADC 原理及 IMX6ULL 实战开发

ADC是嵌入式设备采集模拟信号的核心外设,可将温度、电压等连续模拟量转换为单片机能识别的数字量。本文详细讲解ADC核心工作原理、采样量化流程与逐次逼近算法,聚焦IMX6ULL芯片ADC模块,介绍其硬件架构、通道分配、关键寄存器功能及硬件校准、均值滤波等特性。同时结合光敏电阻采集实战,讲解引脚配置、参数初始化、软件触发采样、电压换算的完整流程,并提供可直接复用的驱动源码,帮助开发者快速掌握IMX6ULL ADC开发技巧。

2403_89702754的博客 446

Vivaldi天线HFSS建模实战:从参数化曲线到辐射优化的完整流程

本文详细介绍了Vivaldi天线在HFSS中的建模与优化全流程,涵盖参数化曲线绘制、馈电系统设计及性能验证等关键步骤。通过实战案例分享,帮助工程师掌握超宽带天线的HFSS建模技巧,提升雷达探测和通信系统设计效率。重点解析了指数渐变曲线建模、微带馈电优化等核心技术要点。

weixin_29228781的博客 274

嵌入式arm(五)裸机编程之简单的使用{看门狗}{PWM}{ADC}快速练习

使用开发板:FS4412,Soc:Exynos4412,内核型号:cortex-A9,架构:armv7; 文档:开发板原理图,Soc数据手册; 环境:文件编写及编译:Linux;下载程序:超级终端hypertrm;串口下载 编译器:交叉编译器arm文章目录一 看门狗定时器1 什么是看门狗定时器1.1 看门狗是啥?1.2 看门狗有什么用?2 看门狗的使用2.1 查硬件电路2.2 查寄存器2.3 编程二 PWM驱动无源蜂鸣器1 粗略提一点概念2 查硬件电路3 查寄存器4 编程三 ADC的简单使用1 简单描述2

bai_3525的博客 1101

2025年一篇解决Windows11安装医学图像处理工具-FSL(各种问题解决,过程详细,小白轻松安装)

2025年一篇帮你解决FSl安装所有问题,包括环境安装、使用说明、常见问题,过程简单易懂,小白轻松安装。

weixin_52145255的博客 2524

大模型知识边界探索:LLM设计的极限测试

最优化理论是数学中的一个分支,主要研究如何从给定的一组约束条件下找到最优解。目标函数:定义了需要优化的指标,可以是最大化或最小化。约束条件:定义了在优化过程中需要满足的限制条件。无约束优化:目标函数和约束条件都不存在。有约束优化:目标函数存在,但存在约束条件。多目标优化:同时需要优化多个目标函数。极限测试(Ultimate Test)是一种系统性的方法,用于评估大型模型(如LLM)在极端条件下的性能和稳定性。极端数据分布:与模型训练数据分布显著不同的数据集。极端计算资源。

AI天才研究院 432

重头开始嵌入式第四十六天(硬件 ARM裸机开发 ADC 中断 UART)

ADC(Analog-to-Digital Converter)即模拟数字转换器。在计算机系统中,中断是一种非常重要的机制。中断是指计算机在执行程序的过程中,由于出现了某些突发事件(如外部设备请求服务、定时器溢出等),暂停当前正在执行的程序,转而去执行相应的中断处理程序,处理完突发事件后再返回到被中断的程序继续执行。在芯片和通信领域中,UART(Universal Asynchronous Receiver/Transmitter)即通用异步收发传输器。

qq_64792908的博客 1684

基于STM32+华为云设计的智能鱼缸

本项目基于STM32单片机设计一款基于物联网的智能鱼缸系统,并通过应用侧接口开发上位机APP实现远程对鱼缸参数的检测和控制。该系统包括水温检测、水质检测、自动或手动换水、氛围灯灯光变换和自动或手动喂食等功能,可以帮助用户更好地管理鱼缸,提高鱼儿的生存率,同时增强用户对家庭装饰品的掌控感和科技感。

1万+

视频教程-ADC-1.13.ARM裸机第十三部分-驱动/内核开发

ADC-1.13.ARM裸机第十三部分 互联网课程品牌《朱老师物联网大讲堂》...

weixin_28982253的博客 155

使用 Python 和蒙特卡罗计算未来股价走势以及历史波动率和隐含波动率

蒙特卡罗模拟等工具使投资者能够洞察一系列潜在的未来。这远离了单纯的猜测,迈向了明智的、数据驱动的决策。

探索人工智能领域 707

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ARM-10-I.MX6U ADC

软件触发模式下,向 HC[n] 写入通道号就会立刻启动一次转换,这就是"写通道号 = 触发转换"。:读取 R[0] 这个动作会自动清除 HS 中的 COCO0 标志,为下次转换做准备。在部分芯片为无效值或 16 位模式,读数需用 0xFFF 掩码取低 12 位。,最大分辨率 4096 个刻度(0~4095),参考电压一般为 3.3V。:I.MX6ULL 的 ADC 最高支持 12 位,MODE 设为。:模数转换器,把连续的模拟电压信号转换成离散的数字值。,不能配置为普通 GPIO。

somi7的博客 422

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

stc5 采集adc值越来越小_一文搞懂ADC裸机和基于Linux驱动编写方法

欢迎FPGA工程师加入官方微信技术群点击蓝字关注我们FPGA之家-中国最好最大的FPGA纯工程师社群前言在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写基于ARM的裸机程序和基于Linux的驱动程序。ARM架构:Cortex-A9 Linux内核:3.14在讲述ADC之前,我们需要先了解什么是模拟信号和数字信号。模拟信号主要是与离散的数字信号相对的连续的信号。...

weixin_39880490的博客 447

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复习总结最终版:ARM裸机

②r14(lr):链接寄存器:调用子函数时,硬件会自动将下一条指令的地址(返回地址)存入lr。②数据传输(全双工):因为已提前设置好采样边沿,所以主设备和从设备采样边沿时会分别在两条数据线采样。⑦stop信号:主设备数据传输结束时,会在SCL高电平时,使SDA产生一个上升沿。①r13(sp):栈指针寄存器:嵌套函数需要压栈和弹栈,对局部变量和地址(因为两个函数可能有同一变量名,防止操作错误)11.str r1,[r0],#4 //先用再偏移,将值存储到r0原来地址,地址偏移4,r0指向偏移后的地址。

2501_91498265的博客 1092

stc5 采集adc值越来越小_万字长文 | 你确定还不懂Linux的ADC驱动?

前言在嵌入式开发中,ADC应用比较频繁,本文主要讲解ADC的基本原理以及如何编写基于ARM的裸机程序和基于Linux的驱动程序。ARM架构:Cortex-A9 Linux内核:3.14在讲述ADC之前,我们需要先了解什么是模拟信号和数字信号。模拟信号主要是与离散的数字信号相对的连续的信号。模拟信号分布于自然界的各个角落,如每天温度的变化,而数字信号是人为的抽象出来的在时间上不连续的信号。...

weixin_39817347的博客 431

ARM体系结构

ARM体系结构一、预备知识1.1、计算机系统组成二、ARM公司简介2.1、ARM公司2.2、ARM全球分布2.3、ARM公司合作伙伴2.4、ARM产品应用2.5、ARM处理器的最新发展三、系统设计3.1、嵌入式和单片机的区别3.2、★SOC3.3、AMBA四、ARM编程模型4.1、数据和指令类型4.2、★工作模式4.3、★寄存器4.4、异常4.5、大小端五、ARM汇编指令集5.1、为什么要学习汇编5.2、模拟器编译环境搭建5.3、编译5.4、★ARM汇编指令5.5、协处理器指令5.6、ARM汇编伪指令5.7

子羽丿_的博客 1万+

深入解析ARM Cortex-M3内核与LPC13xx系列MCU的嵌入式开发实战

在嵌入式系统开发中,微控制器(MCU)是连接软件与物理世界的核心。其内部架构,如经典的哈佛架构与冯·诺依曼架构之分,直接决定了指令与数据访问的效率。通过内置的嵌套向量中断控制器(NVIC)等机制,MCU能够实现低延迟的实时响应,这是工控、物联网等场景的关键技术价值。具体到应用层面,开发者需要在性能、功耗、成本与外设集成度之间寻求最佳平衡。以广泛应用的ARM Cortex-M3内核为例,其成熟的设计生态为众多项目提供了可靠基石。NXP的LPC13xx系列正是基于此内核的杰出代表,它集成了丰富的通信接口、模拟外

weixin_32103009的博客 157

硬件开发实战:点亮LED到外设驱动

本文面向有一定嵌入式基础的读者,重点展示单片机硬件开发的实战与代码实现。通过几个典型的小项目(LED、UART、ADC+DMA、I2C),带你快速上手 STM32 系列外设编程与调试。

2501_93174762的博客 204

嵌入式ARM方向毕设实战:从裸机开发到RTOS任务调度的完整实现

通过这个从裸机到FreeRTOS的温控系统实战,我们不仅实现了一个功能完整的项目,更重要的是掌握了一套模块化、解耦的嵌入式开发方法。外设驱动被封装成独立的模块,任务各司其职并通过安全的机制通信,调试也有了更专业的工具和思路。这套代码结构清晰、注释完整,稍作修改就能应用到其他类似的项目中,比如智能小车、环境监测站等,绝对是毕设的加分项。

2600_94960101的博客 325

ARM嵌入式系统中触摸屏中断控制与驱动开发

触摸屏作为嵌入式系统的重要输入设备,其工作原理基于电阻式分压原理,通过X/Y轴电极检测触点位置。在ARM架构中,S3C2410A处理器内置10位ADC和专用触摸屏接口,采用中断驱动机制实现高效坐标采集。硬件设计需注意ESD保护、滤波电路和参考电压稳定性,软件层面则涉及中断优先级管理、Linux驱动框架和性能优化技术。针对嵌入式开发中的实际问题,如坐标漂移和多点干扰,可通过中值滤波算法和互斥采样等方案解决。在工业控制、医疗设备等应用场景中,合理的触摸屏中断控制能显著提升人机交互体验。

weixin_33716941的博客 422

创龙基于TI AM335x ARM Cortex-A8 CPU,主频高达1GHz开发板规格书,用于电力控制

TL335x-EVM是由广州创龙基于TI ARMCortex-A8而设计的工业级开发板。它为用户提供了SOM-TL335x核心板的测试平台,用于快速评估SOM-TL335x核心板的整体性能。 TL335x-EVM底板采用沉金无铅工艺的4层板设计,不仅为客户提供丰富的AM335x入门教程以及...

323

☆嵌入式硬件的学习:ARM 裸机 知识点总结

本文摘要:介绍了通信基础概念,包括单工/半双工/全双工通信模式、串行/并行通信方式、异步/同步通信区别。重点阐述了串口通信的电气特性(TTL/RS232/RS485)、参数配置及中断处理流程。详细说明了ARM芯片中PLL锁相环、分频器的配置方法,以及EPIT和GPT定时器的工作原理。最后解析了IIC通信协议的核心时序,包括起始/停止信号、数据传输规则、应答机制和读写时序。内容涵盖嵌入式系统开发中的关键通信与时钟技术要点。

2301_77695365的博客 258
上一篇: ARM裸机开发-I2C-LM75
下一篇: ARM裸机开发-SPI
剑指offer.
博客等级 码龄3年 15粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值