飞思卡尔单片机AD模块简述(1)

本文详细介绍了S12XS系列微控制器中的模拟数字转换器(ATD)模块及其27个寄存器的功能。通过具体实例,讲解了如何设置ATD的转换精度、采样时间和触发方式等参数。

S12XS系列MCU的ATD模块共有27个寄存器,包括6个ATD转换控制寄存器,2个ATD转换状态寄存器,1个ATD比较使能寄存器,1个ATD比较方式寄存器,1个ATD转换输入使能寄存器和16个ATD转换结果寄存器(其中ATDCTL0~ATDCTL5和ATDSTAT0这7个寄存器为8位寄存器,其余寄存器都是16位寄存器)。

先给出一段例程

Code:
  1. voidATD_init(void)
  2. {
  3. ATD0CTL1=0x0f;//选择8位转换精度
  4. ATD0CTL2=0x40;//打开CCF快速清零位,关闭外部触发输入,关闭中断
  5. ATD0CTL3=0x08;//数据左对齐,non-fifo,转换序列长度为1
  6. ATD0CTL4=0xE3;//采样时间为24个ATD时钟周期,ATDCLK=8MB/8=1MHz
  7. }

下面对各个寄存器做一个介绍:

(1)ATD控制寄存器0

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
保留000WRAP3WRAP2WRAP1WRAP0
复位值00001111

WRAP [ 3 : 0 ]:回旋通道选择位。这些选择位只有在ATDCTL5的MULT位为1的情况下,也就是多通道转换模式下,才是有效的。WRAP [ 3 : 0 ] = 0时,为保留值。WRAP [ 3 : 0 ]:= x(1<x<15)时,在多通道转换模式下,当完成对第x个模拟输入通道(ANx)的ATD转换后,下一个ATD转换通道将回绕到第0个通道AN0,而不是第N+1个通道。

(2)ATD控制寄存器1

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
读/写ETRIGSELSRES1SRES0SMP_DISETRIGCH3ETRIGCH2ETRIGCH1ETRIGCH0
复位值01001111

ETRIGSEL。外部触发源选择位。

SRES [ 1 : 0 ]:ATD转换精度选择位。

SRES1SRES0ATD转换精度
008位
0110位
1012位
11保留

SMP_DIS:采样前放电控制位。1时对模拟信号采样前,释放ATD模块内部采样电容中的电荷。

ETRIGCH [ 3 : 0 ] :外部触发通道选择位。当ETRIGCH [ 3 : 0 ] 为x(0<x<15)时,选择第x个模拟输入通道ANx为外部触发信号。

(3)ATD控制寄存器2

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
0AFFCICLKSTPETRIGLEETRIGPETRIGEASCIEACMPIE
复位值00000000

AFFC:ATD转换CCF快速清零位。

ICLKSTP:停止模式内部时钟使能位。1位在停止模式下,ATD模块可以继续使用模块内部时钟ICLK进行ATD转换。0位在停止模式下,ATD模块停止当前的转换,退出停止模式后,ATD转换自动重新开始。

ETRIGLE:外部触发电平/边沿控制位。

ETRIGP:外部触发极性控制位。

ETRGLEETRIGP外部触发条件
00下降沿
01上升沿
10低电平
11高电平

ETRIGE:外部触发信号使能位。

ASCIE:ATD转换序列结束中断使能位。1为使能ATD转换序列结束中断,也就是说,当SCF=1时,将引发中断;0时,为禁止ATRD转换序列结束中断。

ACMPIE:ATD比较中断使能位。

(4)ATD控制寄存器3

Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
读/写DJMS8CS4CS2CS1CFIFOFRZ1FRZ0
复位值00100000

DJM:结果寄存器数据对齐位。1表示结果寄存器中的数据位右对齐,0表示结果寄存器中的数据结果为左对齐。

S8C,S4C,S2C,S1C:A/D转换序列长度定义位,这4位定义了一个A/D转换序列的长度,默认S4C为1,即默认转换序列的长度为4。

S8CS4CS2CS1C转换序列长度
00008
00011
00102
00113
01004
01015
01106
01117
1xxx8

FIFO:结果寄存器先进先出模式位。1表示先进先出模式,转换结果依次放在连续的结果寄存器中,当使用完最后一个结果寄存器后,会重新回到第一个结果寄存器存放转换结果。可以根据完成标志位判断哪个寄存器中的结果数据有效。0表示非先进先出模式。A/D转换结果在寄存器中的存放位置和转换序列中的顺序相关联,简单的说,第一次转换的结果放在第一个结果寄存器中,第二次转换的结果放在第二个结果寄存器中,依次类推。

FRZ [ 1 : 0 ]:后台调试冻结使能位。当调试程序时,如果遇到断点,有时希望此时ATD模块停止。

FRZ1FRZ0工作状态
00继续转换
01未定义
10完成当前转换,然后暂停
11立即暂停

AD模块卡尔调试程序全部文件: #include <hidef.h> /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ int i; unsigned char RX_ID[4],RX_DS[8]; unsigned int r[8]; unsigned int temp[2],s; void setbusclock(void) { CLKSEL=0X00; // disengage PLL to system PLLCTL_PLLON=1; // turn on PLL SYNR=0x01; // VCOFRQ[7:6];SYNDIV[5:0] // fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1) // fPLL= fVCO/(2 × POSTDIV) // fBUS= fPLL/2 // VCOCLK Frequency Ranges VCOFRQ[7:6] // 32MHz <= fVCO <= 48MHz 00 // 48MHz < fVCO <= 80MHz 01 // Reserved 10 // 80MHz < fVCO <= 120MHz 11 REFDV=0x01; // REFFRQ[7:6];REFDIV[5:0] // fREF=fOSC/(REFDIV + 1) // REFCLK Frequency Ranges REFFRQ[7:6] // 1MHz <= fREF <= 2MHz 00 // 2MHz < fREF <= 6MHz 01 // 6MHz < fREF <= 12MHz 10 // fREF > 12MHz 11 // pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz; POSTDIV=0x00; // 4:0, fPLL= fVCO/(2xPOSTDIV) // If POSTDIV = $00 then fPLL is identical to fVCO (divide by one). _asm(nop); // BUS CLOCK=16M _asm(nop); while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it; CLKSEL_PLLSEL =1; //engage PLL to system 分频; } //[设置总线时钟频率为16MHZ] ; // void ATDInit(void) { ATD0CTL2=0x42; // ATD启动,禁止外部触发,允许ATD中断; ATD0CTL3=0x88; // 背景调试模式下继续转换,每1次转换一个转换序列,继续转换; ATD0CTL4=0x01; // 采样时间为 2个时钟周期,转化按10位进行,总分频系数为8; ATD0CTL5=0x20; // 数据右对齐,无符号,单通道采集, } //[AD进行初始化];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值