1、freescalemc9s12xs128adcFREESCALE MC9S12XS128 ADC单位:安徽师范大学物理与电子信息学院通信工程系作者: 刘永学和PWM模块一样,下面来总结一下128的另一个模块,AD模块,这个模块用的较多,自己着这个模块还有一些理解的也不是那么的透彻,也希望通过这次的整理能够把自己的思路重新来整理一下。言归正传!从这个模块的寄存器开始来!12中A/D转换共有两个方块,每个方块各有8个输入通道,使用时应以标头ATD0或ATD1标识。8/10 /12位精度;7 us, 10-位单次转换时间.;采样缓冲放大器;可编程采样时间;左/右对齐, 有符号/无符号结果数据;外部触
2、发控制;转换完成中断;模拟输入8通道复用;模拟/数字输入引脚复用;1到8转换序列长度;连续转换模式;多通道扫描方式。ATD模块有模拟量前端、模拟量转换、控制部分及结果存储等四部分组成。其中模拟前端包括多路转换开关、采样缓冲器、放大器等,结果存储部分主要有8个16位的存储器和反映工作状态的若干标志位。要完成ATD转换的特定功能,必须对相关寄存器有所了解。在12AD模块中,ATDCTL2,3,4,5为常用的控制寄存器,ATDSTAT0,1为常用的两个状态控制器,ATDDR0-7为八个结果寄存器。ATD工作时,由CPU发出启动命令,然后经采样、模数转换,最后将结果保存到相应的寄存器。ATD每次启动要
3、进行若干个扫描循环,每个扫描循环称为一个转换序列,每个转换序列能包含1-8最多8次转换,由控制寄存器ATDCTL3中的S8C/S4C/S2C/S1C等位来决定。这些转换序列可以针对某个单一通道,也可以针对几个相邻通道,每个通道可以使外部模拟输入,也可以是参考电压或其他保留信号,ATD可支持多种不同的通道信号组合。每次转换包括哪些通道由ATDCTL5中的CC、CB、CA决定的。对单一通道连续进行多次转换有利于实现滤波,一次转换多个通道则可以通过一次启动命令快速浏览多个信号,中间无需CPU干涉,节约了CPU时间。ATD的运行方式分为单次和连续运行两种。在单次方式下,每个转换序列完成后,寄存器ATD
4、STAT中的SCF置位,然后ATD模块暂停。在连续方式下,转换以转换序列为单位连续进行,当第一个转换序列完成后,SCF置位,同时ATD模块开始下一个转换序列。在上述两种方式下,每个通道的转换结果进入到对应结果寄存器后,寄存器ATDSTAT1种对应的CCF位置1,对存放转换结果的寄存器进行读操作后,CCF位将自动清0。转换过程的启动是通过写入寄存器5ATDCTL5实现的。ATD转换所需要的时钟周期数是固定不变的,但是采样时间和时钟频率可以通过ATDCTL4在一定范围内选择,因此转换时间也可以选首先认识一下该模块的构造 接下来就看一下该模块的寄存器:ADC模块的寄存器值较多,学习起来较为麻烦。1、
5、 AD控制寄存器0(ATDCTL0)WRAP3WRAP0:回绕通道选择位。在任何时候都可以进行读写操作不过这些位只有在ATDCTL5的MULT为1的情况下,就是多通道转换模式下才有效。2、 AD控制寄存器1(ATDCTL1)其中D7位ETRIGESL位外部触发源选择,这个寄存器主要用的是ETRIGCH0、ETRIGCH1、ETRIGCH2 、ETRIGCH3 、外部触发通道选择SMP_DIS 采样放电控制位、SRES1、SRES0 这两位为采样精度选择位当这两位分别00是为8位采样精度、01时为10为采样精度、10时为12位的采样精度!在使用时基本上设置好采样精度就行了。3、AD控制寄存器2(
6、ATDCTL2) AFFC:AD快速清所有标志位1 = 快速标志位清零顺序每次读取结果寄存器自动清零0 = 正常标志位清零顺序需要手动对状态标志位清零ICLKSTP:停止模式中内部时钟位,该位在停止模式中使能AD转换ETRIGLE、ETRIGP:外部触发信号触发条件选择位ETRIGE:外部触发信号使能位,1时使能外部触发信号,0时禁止外部触发信号ASCIE:AD完成中断使能位。为1时AD转换结果时使能中断、为0时AD转换结果不会引发中断ACMPIE:AD比较中断使能位,为1时使能AD比较中断请求,为0时禁用AD中断请求。3、 AD控制寄存器3(ATDCTL3)这个寄存器相对用得较多,理解起来也
7、不太容易,DJM:结果寄存器数据对齐位0左对齐,1右对齐S8CS1C:AD转换序列的长度选择位,这些位控制每一个AD的转换序列长度下面是控制长度列表。FIFO:结果寄存器先进先出模式选择位,为0时非先进先出模式,根据装换序列的先后顺序将装转换结果放入结果寄存器。在这里需要做一个说明,就是这个部分采样值存放的问题,也就是按顺序放到结果寄存器里面,为1时先进先出模式,转换结果依次顺延放到结果寄存器中,当使用完最后一个结果寄存器后重新回到第一个结果寄存器。FRZ0-FRZ1:背景调试冻结使能位这两位为00AD转换继续工作,01完成当前的转换后进入冻结模式,10时保留值。4、 AD控制寄存器4(ATD
8、CTL4)这三个位采样时间选择位PRS4:0:AD转换时钟预分频因子计算公式为:fATDCLK= Fbus/(2(PRS+1))注意使用时应使fATDCLK的范围在0.25M到8.3M5、 AD控制寄存器5(ATDCTL5)MULT为0时:单个通道采样。ATD 的队列控制器只从指定的输入通道进行采样,可以使用ATDCTL5寄存器中的CC、CB 和CA 三位来指定需要采样的模拟量输入通道。S8C、S4C、S2C 和S1C 控制位来指定转换次数。1 时:对多个的通道进行采样。每次采样的通道数量由S8C、S4C、S2C 和S1C 控制位来指定,第一个采样通道由CC、CB 和CA 控制位来指定,其它采
9、样通道由通道选择码CC、CB 和CA 的增加来决定。6、状态寄存器0(ATDSTAT0) FIFOR:FIFO 溢出标志。1=有FIFO溢出,0=无FIFO溢出。如果转换完成标志(CCF)在没有被清零时结果寄存器被写入新值(覆盖),则置位。清零条件:对此位写1;写控制寄存器5,开始一个新队列CC3、CC2、CC1、CC0:转换计数器。 代表了哪个结果寄存器将要接收当前转换的结果。 非FIFO 模式(FIFO=0),这4位的初始值为0,计数完成后又会回到初始值。 FIFO 模式(FIFO=1),转换计数器处于循环计数状态7、状态寄存器2(ATDSTAT2)CCFx: 1=完成队列中的第x 个转换
10、;在完成队列转换中的某个AD转换时,相对应的CCFx位就会被置位,结果存储在ATDDRx 中。0=转换未完成。 清零条件: 写控制寄存器5,开始一个新队列; AFFC=1,对结果寄存器访问; AFFC=0,首先读状态寄存器1,然后访问结果寄存器8、AD转换结果寄存器(ATDDRn) 单片机120引脚:ATDDR0ATDDR15:015通道的结果寄存器。A/D转换的结果需要从这几个寄存器中读取。每个16位寄存器可以分成2个8位的寄存器来读取,分别为ATDDRxH和ATDDRxL。 注意转换结果在这16个16位寄存器中的存储格式。以10位左、右对齐为例: 左对齐10位数据 右对齐10位数据 另外还
11、要注意有符号数据和无符号数据的区别单片机80引脚:ATDDR0ATDDR7:07通道的结果寄存器。A/D转换的结果需要从这几个寄存器中读取。每个16位寄存器可以分成2个8位的寄存器来读取,分别为ATDDRxH和ATDDRxL。 注意转换结果在这8个16位寄存器中的存储格式。以10位左、右对齐为例: 左对齐10位数据 右对齐10位数据 另外还要注意有符号数据和无符号数据的区别。AD模块用的差不多就是这些寄存器,我列举一下自己在AD模块编写的一点初始化程序,和总结一下AD初始化编程的一些简单的步骤。void ADC_Init(void) ATD0CTL1=0x40;ATD0CTL2=0x40; /禁止外部触发, 中断禁止ATD0CTL3=0xB0; /a右对齐无符号,每次转换6个序列, No FIFO, Freeze模式下继续转ATD0CTL4=0x0f;ATD0CTL5=0x30;ATD0DIEN=0x00; /禁止数字输/禁止数字输入初始化编程的一些步骤:1ATD启动;2.按照要求对转换为数、扫描方式、采样时间、时钟频率及标志检查等方式进行设置;也即根据自己的需要对AD的控制寄存器进行设置即可,最后就是禁止AD!
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1