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

本文详细介绍了ATD模块中的关键寄存器功能,包括比较使能寄存器、状态寄存器2、输入使能寄存器、比较方式寄存器及结果寄存器等。解析了各寄存器如何配置ATD转换序列、比较操作及结果处理。

(8)ATD比较使能寄存器

Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
读/写CMPE15CMPE14CMPE13CMPE12CMPE11CMPE10CMPE9CMPE8CMPE7CMPE6CMPE5CMPE4CMPE3CMPE2CMPE1CMPE0
复位值0000000000000000

CMPE [ 15 : 0 ]:比较使能位。当CMPE [n]为1时,对一个转换序列中的第N次ATD转换的结果进行比较。当CMPE [ n ]为0时,不做比较。

(9)ATD状态寄存器2

Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
CCF15CCF14CCF13CCF12CCF11CCF10CCF9CCF8CCF7CCF6CCF5CCF4CCF3CCF2CCF1CCF0
复位值0000000000000000

CCF [ 15 : 0 ]:转换或比较序列完成位。当CCF [ n ]为1时,如果比较功能被禁止(CMPE [ n ] = 0),表示转换序列中的第N次转换完成,结果放在第N个结果寄存器中;如果比较功能被使能(CMPE [ n ] = 1),表示对转换序列中的第N次转换结果进行比较的结果为真,由于结果寄存器存储的是比较阈值,ATD转换结果则丢失。当CCF [ n ]为0时,表示转换未完成或者比较不成功。

(10)ATD输入使能寄存器

Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
IEN15IEN14IEN13IEN12IEN11IEN10IEN9IEN8IEN7IEN6IEN5IEN4IEN3IEN2IEN1IEN0
复位值0000000000000000

IEN [ 15 : 0 ]:ATD数字输入使能位。通用输入输出端口AD口与ATD模块的模拟输入引脚复用。如果要把某个模拟输入引脚作为通用输入引脚使用,必须置对应的IEN位。当IEN [ x]为1时,使能ANx引脚上的数字输入缓冲器;当IEN [x ]为0时,关闭ANx引脚上的数字输入缓冲器。

(11)ATD比较方式寄存器

Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
CMPHT15CMPHT14CMPHT13CMPHT12CMPHT11CMPHT10CMPHT9CMPHT8CMPHT7CMPHT6CMPHT5CMPHT4CMPHT3CMPHT2CMPHT1CMPHT0
复位值0000000000000000

CMPHT [ 15 : 0 ]:ATD比较方式选择位。当CMPHT [n ]被置1,且对应的比较使能位CMPE [n ]被置1时,如果转换序列中的第N次转换结果大于ATDDRn中的比较阈值,CCF [ n ]被置位,表示比较结果为真。当CMPHT [n ]被置0,且对应的比较使能位CMPE [n ]被置1时,如果转换序列中的第N次转换结果小于或等于ATDDRn中的比较阈值,CCF [ n]被置位,表示比较结果为真。

(12)ATD结果寄存器

Bit15Bit14Bit13Bit12Bit11Bit10Bit9Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Bit0
ATDxDR15ATDxDR14ATDxDR13ATDxDR12ATDxDR11ATDxDR10ATDxDR9ATDxDR8ATDxDR7ATDxDR6ATDxDR5ATDxDR4ATDxDR3ATDxDR2ATDxDR1ATDxDR0
复位值0000000000000000

当关闭比较操作时,ATD结果会被写入结果寄存器中。ARD状态寄存器0中的CC3~CC0位转换计数,表示当前转换的结果将要写入的结果寄存器的编号。转换结果在结果寄存器中的放置方式与转换精度(8、10、12位)和结果对齐方式有关。

ATD转换精度DJM转换结果在ATDDRx中的放置方式
8位0Bit [ 15:8 ]=转换结果
8位1Bit [ 7:0 ]=转换结果
10位0Bit [ 15:6 ]=转换结果
10位1Bit [ 9:0 ]=转换结果
12位0Bit [ 15:4 ]=转换结果
12位1Bit [ 11:0 ]=转换结果

当使能比较功能时,ATD转换结果和比较阈值都总是12位的,与SRES [ 1:0 ]的值无关。当DJM=0时,比较阈值应写到ATDDRn寄存器的Bit [ 15:4 ]中;当DJM=1时,比较阈值应写到ATDDRn寄存器的Bit [ 11:0 ]中。此时,ATD转换结果不会放到结果寄存器,比较完成后则丢失。

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进行初始化];
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值