GD32F130FXP6学习笔记六:cortex-m3系列的ADC初识

参考资料:http://blog.sina.com.cn/s/blog_5e87dc1201018l1n.html

GD32F130FXP6学习笔记六:cortex-m3系列的ADC初识_第1张图片


查看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中断;

你可能感兴趣的:(mdk)