参考资料: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、设置注册组是否工作在间断欧式、触发源选择、通道选择、是够使能中断,是否自动注入; ADCON = 1
说明: 1、单次模式和连续模式只能任选其一,且对所有组都有效;且对所有组都有效 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中断;
|