1 IMX6ULL寄存器#
1.1 ADCx_CFG(x=1~2) 配置寄存器#
OVWREN (bit16):数据复写使能位,为 1 的时候使能复写功能,为 0 的时候关闭复写功能。
AVGS(bit15:14):硬件平均次数,只有当 ADC1_GC 寄存器的 AVGE 位为 1 的时候才有效
ADTRG(bit13):转换触发选择。为 0 的时候选择软件触发,为 1 的时候,不选择软件触发。
REFSEL(bit12:11):参考电压选择,为 00 时选择 VREFH/VREFL 这两个引脚上的电压为参考电压,正点原子 ALPHA 开发板上 VREFH 为 3.3V,VREFL 为 0V。
ADHSC(bit10):高速转换使能位,当为 0 时为正常模式,为 1 时为高速模式。
ADSTS(bit9:8):设置 ADC 的采样周期,与 ADLSMP 位一起决定采样周期:
ADLSMP(bit4):长采样周期使能位,当值为 0 时为短采样周期模式,为 1 时为长采样周期模式。搭配 ADSTS 位一起控制 ADC 的采样周期。
MODE(bit3:2):选择转换精度:
ADICLK(bit1:0):输入时钟源选择,为 00 的时候选择 IPG Clock,为 01 的时候选择 IPG Clock/2,为 10 的时候无效,为 11 的时候选择呢 ADACK。本教程我们设置为 11,也就是选择ADACK 为 ADC 的时钟源。
1.2 ADCx_GC 通用控制寄存器#
CAL(bit7):当该位写入 1 时,硬件校准功能将会启动,校准过程中该位会一直保持 1,校准完成后会清 0,校准完成后需要检查一下ADC_GS[CALF]位,确认校准结果。
ADCO(bit6):连续转换使能位,只有在开启了硬件平均功能时有效,为 0 时只能转换一次或一组,当 ADCO 为 1 时可以连续转换或多组。
AVGE(bit5):硬件平均使能位。为 0 时关闭,为 1 时使能。
ACFE(bit4):比较功能使能位。为 0 时关闭,为 1 时使能。
ACFGT(bit3):配置比较方法,如果为 0 的话就比较转换结果是否小于 ADC_CV 寄存器值,如果为 1 的话就比较装换结果是否大于或等于 ADC_CV 寄存器值。
ACREN(bit2):范围比较功能使能位。为 0 的话仅和 ADC_CV 里的 CV1 比较,为 1 的话和 ADC_CV 里的 CV1、CV2 比较。
ACREN(bit2):范围比较功能使能位。为 0 的话仅和 ADC_CV 里的 CV1 比较,为 1 的话和 ADC_CV 里的 CV1、CV2 比较。
DMAEN(bit1):DMA 功能使能位,为 0 是关闭,为 1 是开启
ADACKEN(bit0):异步时钟输出使能位,为 0 是关闭,为 1 时开启
1.3 ADCx_GS 通用状态寄存器#
AWKST(bit2):异步唤醒中断状态,为 1 时表示发生了异步唤醒中断。为 0 时没有发生异步中断。
CALF(bit1):校准失败标志位,为 0 的时候表示校准正常完成,为 1 的时候表示校准失败。
ADACT(bit0):转换活动标志,为 0 的时候表示转换没有进行,为 1 的时候表示正在进行转换。
1.4 ADCx_HS 状态寄存器#
COCO0表示转换完成.
COCO0(bit0):每次转换完成此位就会被置 1。
1.5 ADCx_HC0 控制寄存器#
AIEN(bit7):转换完成中断控制位,为 1 的时候打开转换完成中断,为 0 的时候关闭。
ADCH(bit4:0):转换通道选择,可以设置为 00000~01111 分别对应通道 0~15。11001 为内部通道,用于 ADC 自测。
1.6 ADCx_R0 数据寄存器#
2 流程代码#
1 | 1、初始化 ADC1_CH1 |
2.1 初始化#
1 | void adc1ch1_init(void) { |
2.2 自动校准#
1 | status_t adc1_autocalibration(void) { |
2.3 获取ADC原始值#
1 | unsigned int getadc_value(void) { |
2.4 获取ADC原始值(多次取平均)#
1 | unsigned short getadc_average(unsigned char times) { |
2.5 获取模数转换后的电压#
由于精度为12 bit, ADC范围为[0, 4095]。同时电压满输出时为3.3v,因此当ADC数据拉满,得到3300mv,也就是3.3v
1 | unsigned short getadc_volt(void) { |