一、ADC 控制寄存器(ADC_CONTR),PWM 触发 ADC 控制
ADC_POWER:ADC 电源控制位
0:关闭 ADC 电源
1:打开 ADC 电源。
建议进入空闲模式和主时钟停振/省电模式前将 ADC 电源关闭,以降低功耗特别注意:
1、给 MCU 的 内部 ADC 模块电源打开后,需等待约 1ms, 等 MCU 内部的 ADC 电源稳定后再让 ADC 工作;
2、适当加长对外部信号的采样时间,就是对 ADC 内部采样保持电容的充电或放电时间,时间够,内部才能和外部电势相等。
ADC_START:ADC 转换启动控制位。写入 1 后开始 ADC 转换,转换完成后硬件自动将此位清零。
0:无影响。即使 ADC 已经开始转换工作,写 0 也不会停止 A/D 转换。
1:开始 ADC 转换,转换完成后硬件自动将此位清零。
ADC_FLAG:ADC 转换结束标志位。当 ADC 完成一次转换后,硬件会自动将此位置 1,并向 CPU 提出中断请求。此标志位必须软件清零。
ADC_EPWMT:使能 PWM 实时触发 ADC 功能。详情请参考 16 位高级 PWM 定时器章节
ADC_CHS[3:0]:ADC 模拟通道选择位
(注意:被选择为 ADC 输入通道的 I/O 口,必须设置 PxM0/PxM1 寄存器将 I/O 口模式设置为高阻输入模式。另外如果 MCU 进入主时钟停振/省电模式后,仍需要使能 ADC 通道,则需要设置 PxIE寄存器关闭数字输入通道,以防止外部模拟输入信号忽高忽低而产生额外的功耗)
从表格中可以看到,ADC的输入通道宗教有16个,但其中有一个是专门为内部测试用的,剩下的15个通道覆盖P1.0~P1.7及P0.0~P0.6。从设置上看,一次只能指定一个通道有效,不像其它ARM单片机那样,可以一次指明使用多个通道。不过是否可以通过多次设置,实现多个通道同时工作呢?
二、ADC 配置寄存器(ADCCFG)
RESFMT:ADC 转换结果格式控制位
0:转换结果左对齐。ADC_RES 保存结果的高 8 位,ADC_RESL 保存结果的低 4 位。格式如下:
1:转换结果右对齐。ADC_RES 保存结果的高 4 位,ADC_RESL 保存结果的低 8 位。格式如下:
SPEED[3:0]:设置 ADC 时钟{FADC=SYSclk/2/(SPEED+1)}
三、ADC 转换结果寄存器(ADC_RES,ADC_RESL)
当 A/D 转换完成后,转换结果会自动保存到 ADC_RES(高八位) 和 ADC_RESL(低八位) 中。保存结果的数据格式请参考 ADC_CFG 寄存器中的 RESFMT 设置。
四、ADC 时序控制寄存器(ADCTIM)
CSSETUP:ADC 通道选择时间控制 Tsetup
CSHOLD[1:0]:ADC 通道选择保持时间控制 Thold
SMPDUTY[4:0]:ADC 模拟信号采样时间控制 Tduty(注意:SMPDUTY 一定不能设置小于 01010B)
ADC 数模转换时间:Tconvert。12 位 ADC 的转换时间固定为 12 个 ADC 工作时钟,一个完整的 ADC 转换时间为: Tsetup + Tduty + Thold + Tconvert,如下图所示:
五、ADC 扩展配置寄存器(ADCEXCFG)
ADCETR_PS[1:0]:ADC 外部触发脚 ADC_ET 功能脚选择
ADCETRS[1:0]:ADC 外部触发脚 ADC_ETR 控制位
注:使用此功能前,必须打开 ADC_CONTR 中的 ADC 电源开关,并设置好相应的 ADC 通道
CVTIMESEL[2:0]:ADC 自动转换次数选择
这个功能还是不错的,对于希望获得多次结果的平均值处理,不需要用程序完成。
注:
1、当使能 ADC 自动转换多次功能后,ADC 中断标志只会在 ADC 自动转换到设置的次数后,才会被置1(例如:设置 CVTIMESEL 为 101B,即 ADC 自动转换 4 次并取平均值,则 ADC 中断标志位每完成 4 次 ADC 转换才会被置 1)
2、当 ADC 处于 DMA 模式下时,ADCEXCFG 设置的多次转换次数无效。ADCEXCFG 设置的重复转换次数只有在非 DMA 模式下才有效。