参考资料:http://blog.sina.com.cn/s/blog_5e87dc1201018l1n.html
查看GD32F130FXP6用户指南的ADC章节,发现AD有两个组,4中转换模式。
一、AD两个组
1、规则通道组
通过寄存器配置把某些通道放到一组里面(GD32F130FXP6最多支持16个通道),
然后逐个转换这组通道,这组通道都转换完成后,再从头开始转换,那么这个组就
叫做规则组。
2、注入组
但是实际应用中,有可能需要临时中断规则组的转换,对某些通道进行转换,这些需要中断
规则组而进行转换的通道组,就称为注入组(GD32F130FXP6最多支持4个通道)。对于
ADC模块来说,它按规则转换规则组时,被要求临时转换规则组之外的某些通道,就好像
这组通道临时注入了原来的顺序,所以形象地称其为注入组。
一个不太恰当的比喻是:规则通道组的转换好比是程序的正常执行,而注入通道组的转换则
好比是程序正常执行之外的一个中断处理程序。
二、四中工作模式
1、单次模式
每触发一次,规则组或者注入组就转换一次,每次转换都是按着既定的通道次序转换,每次
转换完成后,EOC或者EOIC就被置位。每个通道转换,都需要触发信号。
2、连续转换模式
触发一次,规则组或者注入组就把本组所有指定的通道按着顺序,逐个转换一遍,每个通道
转换完成都会引发EOC或者EOIC就被置位,切循环不停(有待验证)。
如果使能了扫描模式,则只有当最后一个通道转换完成后,才会引发EOC或者EOIC就被置位
注:扫描模式下,要使能DMA。
3、扫描模式
触发一次,规则组或者注入组就把本组所有指定的通道按着顺序,逐个转换一遍,只有当最后
一个通道转换完成后,才会引发EOC或者EOIC就被置位。每轮转换,都需要触发信号。
注:扫描模式下,要使能DMA。
4、间断模式
规则组和注入组同时只能有一组被设置为间断模式。
规则组:可以每次选择N(<=8)个进行转换,每个分片都需要启动信号,最后一个分片转换
完成后,触发EOC。
注入组:只能每次转换一个,当注入组最后一个转换完成后,触发EOIC。
三、ADC模块初始化
初始化顺序:
1、禁止ADC模块工作(ADCON = 0);
2、设置时钟源、预分频系数;
3、设置通道采样周期,设置数据对齐方式,设置ADC工作模式;
4、设置PIN为模拟引脚或者模拟输入引脚;
5、设置规则组是否工作在间断模式、触发源选择、通道选择、是否使能中断;
6、设置注册组是否工作在间断欧式、触发源选择、通道选择、是够使能中断,是否自动注入;
7、使能ADC模式(ADCON = 1);
说明:
1、单次模式和连续模式只能任选其一,且对所有组都有效;
2、在单次模式或者连续模式下,选择是否使能扫描模式,且对所有组都有效;
3、两个组只能同时有一组工作在间断模式下,间断模式下(单次、连续、扫描设定无效);
4、单次和连续区别:单次:启动一次,转换一次(不一定是一个通道);连续:启动一次,不关闭就不停;
5、扫描模式禁止和和使能区别:禁止:每个通道转换完成,都会置位标志位;使能:只有当本组设定的最后
一个通道转换完成,才置位标志位;
6、如果使能了扫描模式,规则组必须使用DMA方式存储数据;注册组则不用(每个通道都有自己的缓存存储器);
7、使能外部触发模式,其使能位必须使能(软件触发也是外部触发类,没有找到内部触发类);
8、使能中断时候,不但要使能ADC模块中断控制位,还要通过
NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority)
设置优先级;
通过NVIC_EnableIRQ(IRQn_Type IRQn) 设置相应中断向量号在内核级打开,否则不能进入中断。
(我就在这里吃了大亏,欲哭无泪。。。。。。)。
9、查询模式OK,中断不进原因
1)NVIC_EnableIRQ(IRQn_Type IRQn)没有使能;
2)启动文件里面没有注册中断向量函数(厂家提供的启动文件不全);
3)启动文件里面的中断函数名称和xxxxxx_it(例如:gd32f1x0_it)里面的中断函数名称不一致;
注意:
1、AD的校准会触发AD转换,如果这个时候中断是开启的,会进入AD中断;