GPADC
Analog to Digital Converter
简介
12bit数据精度
主次两通道,主通道数据可用DMA读取
单通道最高256k采样率
双通道最高支持64k采样率
支持过采样处理
支持下采样处理
主通道支持高通录波器处理
支持18种不同信号源的采集
主次通道转换完成中断
主通道FIFO中断
单次和连续采样模式
功能描述及使用
工作时钟
主次两通道工作时钟相同,由CMU模块 ADC_CLK寄存器配置
工作模式
单采样
模块默认处于空闲,直到软件发起开始命令,模块工作,采集数据后,将数据放入主通道数据寄存器,或次通道数据寄存器中。
- 连续采样
软件发起开始命令,按照设置频率采样,输出数据。
- 混合采样
主通道连续采样,次通道偶尔发起单次采样
主通道使用
1. 使能ADC模块,并配置模块时钟
置位CMU_CLKEN0.ADC,开启ADC时钟
置位RMU_RSTEN0.ADC,释放ADC模块
配置CMU_ADCCLK寄存器,选择模块工作时钟源,并选择分频
2. 配置ADC_MCFG寄存器,设置主通道参数
配置MAIN_MODE比特,选择工作模式,值为0表示单次采样模式,值为1表示连续采样模式
配置MAIN_SEL比特域,选择采样信号源,值为0表示采集信号GPIO00,值为1表示采集信号GPIO01,值为2表示采集信号GPIO02,值为3表示采集信号GPIO03,值为4表示采集信号GPIO04,值为5表示采集信号GPIO24,值为6表示采集信号GPIO25,值为7表示采集信号GPIO26,值为8表示采集信号VREF_1P5,值为9表示采集信号DVDD,值为10表示采集信号AVCC,值为11表示采集信号IOVCC,值为12表示采集信号AGND,值为13表示采集信号GPIO22,值为14表示采集信号GPIO23,值为15表示采集信号VCC,值为16表示采集信号MIC_P,值为17表示采集信号MIC_N,值为18表示采集信号MIC_P&N
配置MAIN_DS比特域,设定下采样。值为0表示禁止下采样,值大于0,表示这顶值加一的下采样率
配置MAIN_OSR比特域,设定上过样值,0表示禁止采样,值为1表示2倍过采样,值为2表示4倍过采样,值为3表示8倍过采样,值为4表示16倍过采样,值为5表示32倍过采样
MAIN_DS域MAIN_OSR不能同时为大于0的值
配置MIAN_LAT比特,当为一个通道工作,此比特为1,当主次两通道一起工作,此比特为0
配置MAIN_LE比特
配置MIAN_SIGN比特,配置过采样和下采样数据为有符号数或无符号数,值为0表示无符号数,值为1表示有符号数
配置DRQ_LVL比特域,配置fifo可读数据阈值中断,当FIFO中可读数据大于设定值,产生可读pending
配置HPF_SEL比特域,设置高通滤波器,值为0表示禁止高通滤波,值为1表示32系数滤波器,值为2表示64系数录波器,值为3表示128系数滤波器,值为4表示256滤波器系数,置位5表示512滤波器系数,值为6表示1024系数滤波器,置位7表示2048系数滤波器
3. 配置ADC_ANA寄存器,配置模拟参数
4. 配置ASC_CTL寄存器,配置采样率等参数
配置NC比特域
配置WE比特域,设定采样率,采样率等于ADC工作时钟除以WE的设定值,即为模块的最大采样率
配置MAIN_START比特,启动主通道采样,值为1启动采样,值为0,停止采样
5. 读取ADC_STA获取FIFO状态
6. 读取ADC_MDAT获取主通道数据
次通道使用
1. 使能ADC模块,并配置模块时钟
置位CMU_CLKEN0.ADC,开启ADC时钟
置位RMU_RSTEN0.ADC,释放ADC模块
配置CMU_ADCCLK寄存器,选择模块工作时钟源,并选择分频
2. 设置ADC_CFG1,配置次通道参数
配置EXTRA_MODE比特,设置此通道工作模式,值为0表示单次采样模式,值为1表示连续采样模式
配置EXTRA_SEL比特域,设置通道采集信号源,值为0表示采集信号GPIO00,值为1表示采集信号GPIO01,值为2表示采集信号GPIO02,值为3表示采集信号GPIO03,值为4表示采集信号GPIO04,值为5表示采集信号GPIO24,值为6表示采集信号GPIO25,值为7表示采集信号GPIO26,值为8表示采集信号VREF_1P5,值为9表示采集信号DVDD,值为10表示采集信号AVCC,值为11表示采集信号IOVCC,值为12表示采集信号AGND,值为13表示采集信号GPIO22,值为14表示采集信号GPIO23,值为15表示采集信号VCC,值为16表示采集信号MIC_P,值为17表示采集信号MIC_N,值为18表示采集信号MIC_P&N
配置EXTRA_DS比特域,设定下采样。值为0表示禁止下采样,值大于0,表示这顶值加一的下采样率
配置EXTRA_OSR比特域,设定上过样值,0表示禁止采样,值为1表示2倍过采样,值为2表示4倍过采样,值为3表示8倍过采样,值为4表示16倍过采样,值为5表示32倍过采样
EXTRA_DS域EXTRA_OSR不能同时为大于0的值
配置EXTRA_LAT比特,当为一个通道工作,此比特为1,当主次两通道一起工作,此比特为0
配置EXTRA_LE比特
配置EXTRA_SIGN比特,设定数据符号,0表示无符号位,1表示有符号位
3. 配置ADC_ANA寄存器,配置模拟参数
4. 配置ASC_CTL寄存器,配置采样率等参数
配置NC比特域
配置WE比特域,设定采样率,采样率等于ADC工作时钟除以WE的设定值,即为模块的最大采样率
配置MAIN_START比特,启动主通道采样,值为1启动采样,值为0,停止采样
5. 读取ADC_PD寄存器
获取ECTRA_PD,若置位表示此通道采集到有效数据
6. 读取ADC_EDAT寄存器
获取此通道采集数据。
API说明
api函数只提供次通道数据读取函数,默认ADC的初始化在系统初始化中进行
次通道ADC在api中重命名为GPADC,只支持单次采样
-
enum gpadc_signal_source_t
GPADC采集的信号
- GPADC_Signal_GPIO00: 信号来自GPIO00
GPADC_Signal_GPIO01: 信号来自GPIO01
GPADC_Signal_GPIO02: 信号来自GPIO02
GPADC_Signal_GPIO03: 信号来自GPIO03
GPADC_Signal_GPIO04: 信号来自GPIO04
GPADC_Signal_GPIO24: 信号来自GPIO24
GPADC_Signal_GPIO25: 信号来自GPIO25
GPADC_Signal_GPIO26: 信号来自GPIO26
GPADC_Signal_VERF1P5: 信号来自VERF1.5V
GPADC_Signal_DVDD: 信号来自DVDD
GPADC_Signal_AVCC: 信号来自AVCC
GPADC_Signal_IOVCC: 信号来自IOVCC
GPADC_Signal_AGND: 信号来自AGND
GPADC_Signal_GPIO22: 信号来自GPIO22(耐压5V)
GPADC_Signal_GPIO23: 信号来自GPIO23(耐压5V)
GPADC_Signal_VCC: 信号来自VCC(耐压5V)
GPADC_Signal_MICP: 信号来自MICP
GPADC_Signal_MICN: 信号来自MICN
GPADC_Signal_MICPN: 信号来自MICN和MICP
-
void gpadc_start(gpadc_signal_source_t gpadc_signal)
GPADC通道开始运行
- 参数
gpadc_signal – 采集的信号源,参数选择gpadc_signal_source_t
- 返回
无
-
uint16_t gpadc_get_data()
获取GPADC通道采集数据
- 返回
GPADC数据
- Retval
uint16_t
-
void gpadc_irq_enable()
使能GPADC通道中断
- 返回
无
-
void gpadc_irq_disable()
失能GPADC通道中断
- 返回
无
-
soc_set_t gpadc_irq_get_flag()
获取GPADC通道中断pending
- 返回
中断pending
- 返回值
Reset – 中断pending未产生,无有效数据
Set – 中断pending产生,有有效数据
- Note
gpadc_start()后,有效数据产生后,将返回Set
-
void gpadc_irq_clear_flag()
清除GPADC通道中断pending
- 返回
无
- Note
调用gpadc_get_data()读取数据后,应调用改函数,以后续读数的正确性。
使用
3v计算公式 :Vout = Vadc/4096*3.0
5v计算公式 :Vout = Vadc/4096*12.0
其中 Vout表示测量的电压值,单位V(伏) Vadc表示adc的采样值
调用gpadc_irq_clear_flag()清除有效数据pending
调用gpadc_start(gpadc_signal),采集指定信号源
调用gpadc_irq_get_flag()获取返回值,判断是否有效数据获取
调用gpadc_get_data()获取采集信号数据
注意