15. 模数转换器ADC

15. 模数转换器ADC

15.1 ADC简介

CH559芯片提供10位或11可选的逐次逼近型模拟数字转换器。该转换器具有8个模拟信号输入通道,可以分时采集。

ADC主要特性:

  1. 可选10位或11位分辨率;
  2. ADC模拟输入电压范围:0到VDD33;
  3. 最高1MSPS采样速率;
  4. 支持自动交替通道模式,用于在两个输入通道之间进行自动交替转换;
  5. 内置2级FIFO,支持自动采样和DMA。

15.2 ADC寄存器

表15.2.1 ADC相关寄存器列表

名称地址描述复位值
ADC_EX_SW F7hADC扩展模拟开关控制寄存器 00h
ADC_SETUP F6hADC设置寄存器 08h
ADC_FIFO_H F5hADC的FIFO高字节(只读) 0xh
ADC_FIFO_L F4hADC的FIFO低字节(只读) xxh
ADC_FIFO F4hADC_FIFO_L和ADC_FIFO_H组成16位SFR 0xxxh
ADC_CHANN F3hADC通道选择寄存器 00h
ADC_CTRL F2hADC控制寄存器 00h
ADC_STAT F1hADC状态寄存器 04h
ADC_CK_SE EFhADC时钟分频设置寄存器 10h
ADC_DMA_CN EEhDMA剩余计数寄存器 00h
ADC_DMA_AH EDhDMA当前缓冲区地址高字节 0xh
ADC_DMA_AL EChDMA当前缓冲区地址低字节 xxh
ADC_DMA EChADC_DMA_AL和ADC_DMA_AH组成16位SFR 0xxxh

DMA当前缓冲区地址(ADC_DMA):

名称访问描述复位值
[7:0]ADC_DMA_AHRW当前DMA地址高字节,可预置初值,DMA后自动增加,仅低4位有效,高4位固定为0,仅支持xRAM前4K0xh
[7:0]ADC_DMA_ALRW当前DMA地址低字节,可预置初值,DMA后自动增加,仅高7位有效,最低位固定为0,仅支持偶地址xxh

DMA剩余计数寄存器(ADC_DMA_CN):

名称访问描述复位值
[7:0]ADC_DMA_CNRW当前DMA剩余计数,可预置初值,DMA操作后自动减少00h

时钟分频设置寄存器(ADC_CK_SE):

名称访问描述复位值
7bADC_CHK_CLK_SELRWAIN7电平检测延时时钟频率选择,该位为0则低速1x时钟频率;该位为1则高速4x时钟频率0
[6:0]MASK_ADC_CK_SERWADC时钟分频系数,设置内部ADC工作时钟10h

ADC状态寄存器(ADC_STAT):

名称访问描述复位值
7 bADC_IF_DMA_END RWDMA完成中断标志位,该位为1表示有中断;该位为0则无中断。写1清零或写ADC_DMA_CN时清零0
6 bADC_IF_FIFO_OV RW该位为1表示FIFO溢出中断;该位为0则无中断。写1清零0
5 bADC_IF_AIN7_LOW RW该位为1表示检测到AIN7低电平中断,写1清零0
4 bADC_IF_ACT RW该位为1表示一次ADC转换完成中断,写1清零0
3 bADC_AIN7_INT R0该位为1表示AIN7输入低电平的延时状态0
2 bADC_CHANN_ID R0在自动交替通道模式下是当前通道识别标志,为0表示AIN0或AIN6;为1表示AIN1或AIN4或AIN70
2 bADC_DATA_OK RO在手工选择通道模式下是ADC转换完成和结果就绪标志,为1表示ADC数据已准备好,且ADC转换器空闲;为0表示ADC正在进行中,数据尚未就绪1
[1:0] MASK_ADC_FIFO_CNT R0 ADC的FIFO当前计数00b

MASK_ADC_FIFO_CNT由bADC_FIFO_CNT1和bADC_FIFO_CNT0组成,用于显示ADC的FIFO计数。

MASK_ADC_FIFO_CNT描述
00b FIFO空,如果读FIFO,将直接返回当前ADC结果数值
01b FIFO中有1个数据
10b FIFO满,FIFO中有2个数据
11b 未知错误

ADC控制寄存器(ADC_CTRL):

名称访问描述复位值
7 bADC_SAMPLE RW 在手动采样模式下是采样控制位,先置1稍后再清0产生高电平脉冲启动一次ADC;在自动采样模式下是自动采样的采样脉冲状态0
6 bADC_SAMP_WIDTH RW 自动采样模式下的采样脉冲的宽度控制位,为0则1个ADC时钟宽度;为1时则2个ADC时钟宽度0
5 bADC_CHANN_MOD1 RW ADC通道模式高位0
4 bADC_CHANN_MOD0 RW ADC通道模式低位0
[3:0] MASK_ADC_CYCLE RWADC运行周期数,为0表示手动采样;非0值表示设置自动采样的运行周期(以ADC时钟计数)0000b

由bADC_CHANN_MOD1和bADC_CHANN_MOD0组成的MASK_ADC_CHANN是ADC通道控制模式标志位。

MASK_ADC_CHANN描述
00b 手工选择通道模式,设置ADC_CHANN选择当前输入通道
01b 自动交替通道模式,在AIN0和AIN1之间自动交替切换
10b 自动交替通道模式,在AIN6和AIN4之间自动交替切换
11b 自动交替通道模式,在AIN6和AIN7之间自动交替切换

ADC通道选择寄存器(ADC_CHANN):

名称访问描述复位值
[7:0]ADC_CHANNRW选择当前ADC模拟输入通道,从8个通道中选择1个,位0~位7分别对应AIN0~AIN700h

ADC的FIFO端口(ADC_FIFO):

名称访问描述复位值
[7:0]ADC_FIFO_HROADC的FIFO高字节,仅低4位有效,高4位固定为00xh
[7:0]ADC_FIFO_LROADC的FIFO低字节xxh

ADC设置寄存器(ADC_SETUP):

名称访问描述复位值
7 bADC_DMA_EN RW该位为1使能ADC的DMA和DMA中断;为0关闭使能0
6 bADC_IE_FIFO_OV RW该位为1使能FIFO溢出中断;该位为0关闭使能0
5 bADC_IE_AIN7_LOW RW该位为1使能检测AIN7低电平中断0
4 bADC_IE_ACT RW该位为1使能ADC转换完成中断;该位为0关闭使能0
3 bADC_CLOCK RO内部ADC时钟信号的当前电平0
2 bADC_POWER_EN RWADC采样转换模块的电源控制位,该位为0表示关闭ADC模块的电源,进入睡眠状态;该位为1表示开启0
1 bADC_EXT_SW_EN RW扩展模拟开关模块的电源控制位,该位为0表示关闭扩展模拟开关模块;该位为1表示开启0
0 bADC_AIN7_CHK_EN RW检测AIN7低电平模块的电源控制位,该位为0表示关闭检测AIN7低电平模块;该位为1表示开启0

ADC扩展模拟开关控制寄存器(ADC_EX_SW):

名称访问描述复位值
7 bADC_SW_AIN7_H RW AIN7通道内部模拟开关连接控制,该位为1内部连接AIN7到VDD33;该位为0断开AIN7与VDD330
6 bADC_SW_AIN6_L RW AIN6通道内部模拟开关连接控制,该位为1内部连接AIN6到GND;该位为0断开AIN6与GND0
5 bADC_SW_AIN5_H RW AIN5通道内部模拟开关连接控制,该位为1内部连接AIN5到VDD33;该位为0断开AIN5与VDD330
4 bADC_SW_AIN4_L RW AIN4通道内部模拟开关连接控制,该位为1内部连接AIN4到GND;该位为0断开AIN4与GND0
3 bADC_EXT_SW_SEL RW内部模拟开关的导通电阻值选择位,该位为0选择高阻,约800Ω;该位为1选择低阻,约300Ω0
2 bADC_RESOLUTION RWADC分辨率选择位,该位为0选择10位分辨率;该位为1选择11位分辨率0
1 bADC_AIN7_DLY1 RW 检测AIN7低电平的延时控制位10
0 bADC_AIN7_DLY0 RW 检测AIN7低电平的延时控制位00

bADC_AIN7_DLY1和bADC_AIN7_DLY0组成MASK_ADC_AIN7_DLY,用于选择检测AIN7电平变化后的延时:00则无延时,01则最长延时,10则较长延时,11则较短延时。

15.3 ADC功能

ADC采样模式配置步骤:

  1. 设置ADC设置寄存器ADC_SETUP中的bADC_POWER_EN位为1,开启ADC模块。
  2. 设置时钟分频设置寄存器ADC_CK_SE,选择时钟频率,频率最高12MHz,建议不低于1MHz。
  3. 清空FIFO中的已有数据;如果需要用到中断或者DMA,那么在此处进行相关设置。
  4. 对于自动采样模式,那么应该先设置ADC通道选择寄存器ADC_CHANN。
  5. 设置ADC控制寄存器ADC_CTRL中的bADC_SAMPLE和MASK_ADC_CYCLE,如果MASK_ADC_CYCLE设置为0,则为手动采样模式;如果MASK_ADC_CYCLE设置为非0值,则为自动采样模式,此时MASK_ADC_CYCLE就是连续不断自动采样的时钟周期。
  6. 对于手工采样模式,设置ADC通道选择寄存器ADC_CHANN,选择ADC模拟信号输入通道。
  7. 如果是手动采样模式,那么需要通过设置bADC_SAMPLE位为1并延时至少一个ADC时钟周期后再清0,完成一次模拟信号采样并启动一次ADC转换。
  8. 等待ADC状态寄存器ADC_STAT的bADC_IF_ACT位为1,表示ADC转换结束,可通过ADC_FIFO读取结果数据。
  9. 或读取ADC状态寄存器ADC_STAT的MASK_ADC_FIFO_CNT获得FIFO计数,再通过ADC_FIFO读取若干数据,建议丢弃第一个ADC结果数据,因为有可能采样不完全。
  10. 如需DMA步骤:设置ADC_DMA为用户定义的数据缓冲区的起始地址值,设置ADC_DMA_CN为用户定义的DMA剩余计数,并设置ADC_SETUP中的bADC_DMA_EN位为1,即开启DMA功能。
  11. ADC结果数据共12位,其中位0~位10为ADC数值,位11是标志位,位12~位15始终为0。对于手工选择通道模式,位11始终为0;对于自动交替通道模式,位11表示该ADC数值的通道识别标志,参考bADC_CHANN_ID说明。