本文主要是介绍MC9S12XEP100的ATD模块(ADC12B16CV1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
网上的各种示例基本都是用同步/轮询的方式来使用ATD模块的,自己封装ATD模块时想利用中断改成异步的方式,结果出现了莫名其妙的问题,我明明没有开启比较中断的,结果还是跳到了比较中断里头去了。一气之下,把整个文档翻译了一遍,顺带给大家分享了。
翻译了一遍之后果然发现了之前程序错在哪了。给大家强调一下
1. 除了FIFO模式,每次转换序列开始后的第一结果一定是放在ATDDR0中的!!!
2. 即使是FIFO模式下,每次重新开始转换时第一个结果也一定是在ATDDR0中的。不管你第一个转换的通道是不是AN0!!。我之前写模块写着写着就以为结果寄存器与模拟通道是一一对应的了,实际上不是这样的!
3. 一个序列转换完成后是只会置位SCF一次(中断也只会通知一次),然后应该在这次中断中(或轮询检测到SCF置位后)读取所有的结果寄存器,把全部的CCFx位都清零,否则下次转换可能就会变成比较中断了。
个人认为要理解这个ATD模块的关键就是要理解几个概念:转换序列、转换序列的首个通道以及转换序列的长度;怎么确定转换序列采样模拟输入通道的顺序,或换句话说,指定的环回通道对序列实际采样通道顺序的影响;结果寄存器与采样序列的对应关系;几种模式对采样的影响;使能比较时是无法得到转换结果的;不同外部触发方式对采样的影响…..
翻译的资料是公开的,我想应该不会有什么版权问题,如涉及版权问题,请联系我删除文章。
另外,本人对ATD模块的封装见此http://blog.csdn.net/lin_strong/article/details/78323904,需要的拿走。
第13章 模数转换器(ADC12B16CV1)
译者注:译者博客(http://blog.csdn.net/lin_strong),转载请保留这条。此为 MC9S12XEP100RMV1芯片手册的第13章内容,仅供学习交流使用,请勿用于商业用途。
介绍
ADC12B16C是一个16通道、12位、多路复用输入逐次逼近模数转换器。ATD的精度要参照设备的电器特征。
特性
- 8位、10位和12位分辨率
- 在停止模式下使用内部时钟进行转换
- 转换序列结束后自动转为低功耗状态
- 与可编程的数值进行比较是大于或是小于等于,并可产生中断;
- 可编程的采样时间
- 左/右对齐的结果
- 外部触发控制
- 采样序列完成触发中断
- 16路模拟输入通道的多路选择器
- VRH、VRL和(VRH+VRL)/2的特殊转换
- 转换序列长度为1至16
- 连续转换模式
- 多通道扫描
- 每个AD通道与4个额外的触发输入通道可用于配置外部触发功能。这四个额外的触发输入通道可以是芯片外部的或内部的。请参考设备规范以了解可用性和连通性。
- 可配置的通道环回位置(当在一个序列中转换多个通道时)。
运行模式
转换模式
可以通过软件编程来选择在单个通道或者多个通道上进行单次或者连续的转换。
MCU运行模式
- 停止模式
- ICLKSTP=0(ATDCTL2寄存器中)
进入停止模式并终止所有进行中的转换序列,如果有序列被终止,那么在退出停止模式后会重新开始。这与往ATDCTL5中重新写入以启动一个转换序列的效果是一样的。所以当以这种方式重新启动序列时,所有的标志位都会被清除。 - ICLKSTP=1(ATDCTL2寄存器中)
A/D转换序列会在停止模式下无缝地继续,这时会把内部生成的时钟ICLK作为ATD时钟。对于经历了运行模式到停止模式(或反过来)的转换,其结果不会写入结果寄存器,也不会设置CCF标志并且不会做任何比较。当在停止模式下进行转换时(ICLKSTP=1),需要一个ATD停止恢复时间tATDSTPRCV以离开停止模式切换回基于ATDCLK的总线时钟。不要在这段时间访问ATD寄存器。
- ICLKSTP=0(ATDCTL2寄存器中)
- 等待模式
ADC12B16C在运行模式和等待模式下的行为一致。为了减少能耗,在进入等待模式前需要终止连续转换。 - 冻结模式
在冻结模式时,根据FRZ1和FRZ0位,ADC12B16C要不然会继续直到结束,要不然直接停止。这对于调试和模拟很有用。
结构图
图 1.ADC12B16C结构图
信号描述
这个部分列出了所有到ADC12B16C模块的输入。
详细的信号描述
ANx(x = 15、14、13、12、11、10、9、8、7、6、5、4、3、2、1、0)
这个引脚是用作模拟输入通道x的。它也可以被配置为数字端口,或者ATD转换的外部触发器。
ETRIG3、ETRIG2、ETRIG1、ETRIG0
这些输入可以被配置为ATD转换的外部触发器。参考设备规范以了解这些输入的可用性和连通性。
VRH、VRL
VRH是ATD转换的参考高电压,VRL是参考低电压。
VDDA、VSSA
这些引脚是ADC12B16C的模拟电路的供能引脚。
内存映射和寄存器定义
这个部分提供了ADC12B16C中所有可用寄存器的详细描述。
模块内存映射
图 2提供了所有ADC12B16C寄存器的一个总览。
- 注意
- 寄存器地址(Register Address)=基地址(Base Address)+地址偏移量(Address Offset)。基地址是定义在MCU等级的,地址偏移量是定义在模块等级的。
图 2. ADC12B16C 寄存器总结
寄存器描述
这个部分按照地址顺序描述了所有的ADC12B16C寄存器以及他们的每个位。
ATD控制寄存器0(ATDCTL0)
写这个寄存器会终止当前的转换序列。
图 3.ATD控制寄存器0(ATDCTL0)
读:任何时候
写:任何时候,在特殊模式下总是往保留位7写0。
表 2.ATDCTL0字段描述
字段 | 描述 |
---|---|
3-0 WRAP[3-0] | 通道环回选择位 — 当进行多通道转换时,这几位决定是从哪个通道循环回AN0。表3总结了其编码规则。 |
.
表 3.多通道环回规则
WRAP3 | WRAP2 | WRAP1 | WRAP0 | 多通道转换(MULT=1)时,此通道在转换成功后会返回AN0的通道 |
---|---|---|---|---|
0 | 0 | 0 | 0 | 保留1 |
0 | 0 | 0 | 1 | AN1 |
0 | 0 | 1 | 0 | AN2 |
0 | 0 | 1 | 1 | AN3 |
0 | 1 | 0 | 0 | AN4 |
0 | 1 | 0 | 1 | AN5 |
0 | 1 | 1 | 0 | AN6 |
0 | 1 | 1 | 1 | AN7 |
1 | 0 | 0 | 0 | AN8 |
1 | 0 | 0 | 1 | AN9 |
1 | 0 | 1 | 0 | AN10 |
1 | 0 | 1 | 1 | AN11 |
1 | 1 | 0 | 0 | AN12 |
1 | 1 | 0 | 1 | AN13 |
1 | 1 | 1 | 0 | AN14 |
1 | 1 | 1 | 1 | AN15 |
1.如果只有AN0会被转换,使MULT=0
ATD控制寄存器1(ATDCTL1)
写这个寄存器会终止当前的转换序列。
图 4.ATD控制寄存器1(ATDCTL1)
读:任何时候
写:任何时候
表 4.ATDCTL1字段描述
字段 | 描述 |
---|---|
7 ETRIGSEL | 外部触发源选择 — 这一位选择外部触发源为AD通道或者ETRIG3-0输入之一。见设备规范以了解ETRIG3-0输入的可用性和连通性。如果某个ETRIG3-0输入选项不可用,写1到ETRISEL只会设置位但是没有任何作用,这意味着(由ETRIGCH3-0选择的)AD通道之一被配置为了外部触发的源。编码规则在表6中。 |
6–5 SRES[1:0] | A/D分辨率选择 — 这些位选择了A/D转换结果的分辨率。编码规则见表5。 |
4 SMP_DIS | 采样之前放电 0 采样之前不放电。 1 在采样通道之前内部采样电容放电。这会在采样时间上增加2ATD时钟周期。这有助于检测电路的断路,而不会测量上一次采样的通道 |
3–0 ETRIGCH[3:0] | 外部触发通道选择 — 这4位选择AD通道或者ETRIG3-0输入之一作为外部触发源。编码规则见表6。 |
.
表 5. A/D 分辨率编码规则
SRES1 | SRES0 | A/D分辨率 |
---|---|---|
0 | 0 | 8位 |
0 | 1 | 10位 |
1 | 0 | 12位 |
1 | 1 | 保留 |
.
表 6. 外部触发通道选择
ETRIGSEL | ETRIGCH3 | ETRIGCH2 | ETRIGCH1 | ETRIGCH0 | 外部触发通道 |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | AN0 |
0 | 0 | 0 | 0 | 1 | AN1 |
0 | 0 | 0 | 1 | 0 | AN2 |
0 | 0 | 0 | 1 | 1 | AN3 |
0 | 0 | 1 | 0 | 0 | AN4 |
0 | 0 | 1 | 0 | 1 | AN5 |
0 | 0 | 1 | 1 | 0 | AN6 |
0 | 0 | 1 | 1 | 1 | AN7 |
0 | 1 | 0 | 0 | 0 | AN8 |
0 | 1 | 0 | 0 | 1 | AN9 |
0 | 1 | 0 | 1 | 0 | AN10 |
0 | 1 | 0 | 1 | 1 | AN11 |
0 | 1 | 1 | 0 | 0 | AN12 |
0 | 1 | 1 | 0 | 1 | AN13 |
0 | 1 | 1 | 1 | 0 | AN14 |
0 | 1 | 1 | 1 | 1 | AN15 |
1 | 0 | 0 | 0 | 0 | ETRIG0(1) |
1 | 0 | 0 | 0 | 1 | ETRIG11 |
1 | 0 | 0 | 1 | 0 | ETRIG21 |
1 | 0 | 0 | 1 | 1 | ETRIG31 |
1 | 0 | 1 | X | X | 保留 |
1 | 1 | X | X | X | 保留 |
1.只有当ETRIG3-0输入选项可用(见设备规范),否则ETRISEL被忽略,这就是说外部触发源仍然是由ETRIGCH3-0选择的AD通道之一
ATD控制寄存器2(ATDCTL2)
写这个寄存器会终止当前的转换序列。
图 5.ATD控制寄存器2(ATDCTL2)
读:任何时候
写:任何时候
表 7.ATDCTL2字段描述
字段 | 描述 |
---|---|
6 AFFC | ATD标志位快速清零 0 通过向各自的CCF[n]标志位写1来清除ATD标志位。 1 变换所有ATD转换完成标志位为一个快速清零序列。 当禁用自动比较时(CMPE[n]=0),对结果寄存器的读访问会自动清零对应的CCF[n]标志位。 当使能自动比较时(CMPE[n]=1),对结果寄存器的写访问会自动清零对应的CCF[n]标志位。 |
5 ICLKSTP | 停止模式下的内部时钟 — 这一位使能停止模式下的A/D转换。当进入停止模式时如果ICLKSTP=1,ATD转换时钟会自动切换到内部生成时钟ICLK。当前转换序列会无缝地继续。转换速度会从预分频总线频率变为ICLK频率(见设备描述中的ATD电路特性)。ATDCTL4中的预分频位PRS4-0对ICLK频率没有作用。对于停止模式下进行的转换,可以使用自动比较中断或者序列完成中断来通知软件handler A/D值的变化。当在停止模式下进行转换时,外部触发不起作用。对于那些跨越了运行模式到停止模式的转变过程(或者反之)的转换,结果不会写入结果寄存器,不会设置CCF标志位并且不会进行比较。当在停止模式下进行转换时(ICLKSTP=1),需要一个ATD停止恢复时间tATDSTPRCV以离开停止模式切换回基于ATDCLK的总线时钟。不要在这段时间访问ATD寄存器。 0 如果在进入停止模式时A/D转换序列正在进行,实际的转换序列会被终止,并在退出停止模式时自动重启。 1 A/D转换会在停止模式中使用内部生成时钟(ICLK)继续转换。 |
4 ETRIGLE | 外部触发控制方式 — 这一位控制外部触发的方式。详见表8。 |
3 ETRIGP | 外部触发极性 — 这一位控制外部触发信号的极性。详见表8。 |
2 ETRIGE | 外部触发模式使能 — 这一位使能AD通道或者ETRIG3-0输入之一的外部触发,如表6所述。如果外部触发源是AD通道之一,这一个通道的数字输入缓存就会被使能。外部触发使得AD转换序列能与外部事件同步开始。外部触发在停止模式下不能工作。 0 禁用外部触发。 1 使能外部触发。 |
1 ASCIE | ATD序列完成中断使能 0 ATD序列完成中断被禁止。 1 ATD序列完成中断会在设置SCF=1时触发。 |
0 ACMPIE | ATD比较中断使能 — 如果转换n的自动比较被使能(ATDCMPE寄存器中的CMPE[n]=1),这一位使能自动比较中断。如果CCF[n]标志位被设置(表示成功比较了转换n),比较中断就会被触发。 0 ATD比较中断被禁用。 1 对于转换序列中使能了自动比较的转换(CMPE[n]=1),每当各个CCF标志位被置位时就会触发ATD比较中断。 |
.
表 8.外部触发配置
ETRIGLE | ETRIGP | 外部触发类型 |
---|---|---|
0 | 0 | 下降沿 |
0 | 1 | 上升沿 |
1 | 0 | 低电平 |
1 | 1 | 高电平 |
ATD控制寄存器3(ATDCTL3)
写这个寄存器会终止当前的转换序列。
图 6.ATD控制寄存器3(ATDCTL3)
读:任何时候
写:任何时候
表 7.ATDCTL3 字段描述
字段 | 描述 |
---|---|
7 DJM | 结果寄存器数据对齐方式 — 结果数据的格式总是无符号的。这一位控制转换结果数据在结果寄存器中的对齐方式。 0 左对齐。 1 右对齐。 表10给出了输入信号值在0到5.12V之间时的ATD结果的示例。 |
6–3 S8C、S4C、S2C、S1C | 转换序列长度 — 这些位控制每个序列的转换的数量。表11展示了所有的组合。在重置时,S4C会被设为1(序列长度为4)。这是为了兼容HC12家族。 |
2 FIFO | 结果寄存器FIFO模式 — 如果这一位是0(非FIFO模式),A/D转换结果会按照转换序列的顺序映射到结果寄存器中;首个转换结果出现在首个结果寄存器中(ATDDR0),第二个在第二个结果寄存器中(ATDDR1),以此类推。 如果这一位是1(FIFO模式),转换计数器不会在转换序列开始或结束的时候重置;相继的转换结果会被放到连续的结果寄存器中。在一个连续地扫描转换序列中,结果寄存器计数器会在到达结果计数器文件的结尾时循环回去。转换计数器的值(ATDSTAT0中的CC3-0)可以用于确定当前的转换结果是在哪个结果计数器中。 即使FIFO=1,在终止转换或启动一个新的转换时都会清零转换计数器,所以,一个新转换序列的首个结果总会放在首个结果寄存器(ATDDDR0)中。预期使用FIFO模式的是连续转换(SCAN=1)或者被触发的转换(ETRIG=1)。 可以使用转换完成标志来追踪是哪一个结果寄存器存储着有效的数据。标志位快速清除模式在一个要追踪有效数据的应用中不一定有用。 如果这个位是1,结果寄存器的自动比较总是被禁用的,就像ADC12B16C的ACMPIE和所有的CPME[n]都是0。 0:转换结果会根据选择的序列长度被放在对应的结果寄存器中。 1:转换结果会放在连续的结果寄存器中(在结尾会循环回头)。 |
1–0 FRZ[1:0] | 背景调试冻结使能 — 当在调试一个应用时,许多情况下在碰到断点(冻结模式)时让ATD暂停是十分有用的。这2位决定了ATD会怎么响应断点,如表12所示。存储节点和比较器参照电容上的泄露可能会降低被冻结的转换的精度,取决于冻结的时间。 |
.
表 10. 理想的ATD结果示例
输入信号 VRL=0V VRH=5.12V | 8位(分辨率=20mV) | 10位(分辨率=5mV) | 12位(转换曲线有1.25mV的偏移)(分辨率=1.25mV) |
---|---|---|---|
5.120V | 255 | 1023 | 4095 |
…… | … | … | … |
0.022 | 1 | 4 | 17 |
0.020 | 1 | 4 | 16 |
0.018 | 1 | 4 | 14 |
0.016 | 1 | 3 | 12 |
0.014 | 1 | 3 | 11 |
0.012 | 1 | 2 | 9 |
0.010 | 1 | 2 | 8 |
0.008 | 0 | 2 | 6 |
0.006 | 0 | 1 | 4 |
0.004 | 0 | 1 | 3 |
0.003 | 0 | 0 | 2 |
0.002 | 0 | 0 | 1 |
0.000 | 0 | 0 | 0 |
.
表 11. 转换序列长度编码规则
S8C | S4C | S2C | S1C | 每个序列的转换个数 |
---|---|---|---|---|
0 | 0 | 0 | 0 | 16 |
0 | 0 | 0 | 1 | 1 |
0 | 0 | 1 | 0 | 2 |
0 | 0 | 1 | 1 | 3 |
0 | 1 | 0 | 0 | 4 |
0 | 1 | 0 | 1 | 5 |
0 | 1 | 1 | 0 | 6 |
0 | 1 | 1 | 1 | 7 |
1 | 0 | 0 | 0 | 8 |
1 | 0 | 0 | 1 | 9 |
1 | 0 | 1 | 0 | 10 |
1 | 0 | 1 | 1 | 11 |
1 | 1 | 0 | 0 | 12 |
1 | 1 | 0 | 1 | 13 |
1 | 1 | 1 | 0 | 14 |
1 | 1 | 1 | 1 | 15 |
.
表 12.ATD在冻结模式(断点)下的行为
FRZ1 | FRZ0 | 冻结模式下的行为 |
---|---|---|
0 | 0 | 继续转换 |
0 | 1 | 保留 |
1 | 0 | 完成当前转换,然后冻结 |
1 | 1 | 立即冻结 |
ATD控制寄存器4(ATDCTL4)
写这个寄存器会终止当前的转换序列。
图 7.ATD控制寄存器4(ATDCTL4)
读:任何时候
写:任何时候
表 13.ATDCTL4 字段描述
字段 | 描述 |
---|---|
7–5 SMP[2:0] | 采样时间选择 — 这三位用来选择采样时间的长度,单位为ATD转换时钟周期。注意,ATD转换时钟周期本身是预分频值(PRS4-0)的函数。表14列出了可用的采样时间长度。 |
4–0 PRS[4:0] | ATD时钟预分频 — 这5位是二进制预分频值PRS。ATD转换时钟频率按如下公式计算: 参考设备规范获得允许的fATDCLK频率范围。 |
.
表 14.采样时间选择
SMP2 | SMP1 | SMP0 | 采样时间(ATD时钟周期数) |
---|---|---|---|
0 | 0 | 0 | 4 |
0 | 0 | 1 | 6 |
0 | 1 | 0 | 8 |
0 | 1 | 1 | 10 |
1 | 0 | 0 | 12 |
1 | 0 | 1 | 16 |
1 | 1 | 0 | 20 |
1 | 1 | 1 | 24 |
ATD控制寄存器5(ATDCTL5)
写这个寄存器会终止当前的转换序列并启动一个新的转换序列。如果使能了外部触发(ETRIGE=1),需要先写入ATDCTL5以使得转换序列能够被触发,转换序列会在每次触发事件发生时开始转换。转换的开始意味着采样阶段的开始。
图 8.ATD控制寄存器5(ATDCTL5)
读:任何时候
写:任何时候
表 15.ATDCTL5 字段描述
字段 | 描述 |
---|---|
6 SC | 特殊通道转换位 — 如果这个位被置位,可以使用ATDCTL5的CD、CC、CB和CA来选择特殊通道转换。表16列出了编码规则。 0 特殊通道转换禁用 1 特殊通道转换使能 |
5 SCAN | 连续转换序列模式 — 这个位用于选择转换序列是执行一次还是连续地进行。如果使能了外部触发(ETRIGE=1),设置这个位就没有任何作用了,换句话说,外部触发总是单次转换序列。 0 单次转换序列 1 连续的转换序列(扫描模式) |
4 MULT | 多通道采样模式 — 当MULT是0,ATD序列控制器每个采样序列只采样指定的那个模拟输入通道。这模拟通道由通道选择码(ATDCTL5中的控制位CD/CC/CB/CA)指定。当MULT是1,ATD序列控制器会横跨通道进行采样。采样的通道数是由序列长度值(S8C、S4C、S2C、S1C)确定。采样的首个模拟通道由通道选择码(ATDCTL5中的控制位CD/CC/CB/CA)指定;随后采样的通道通过递增通道选择码或者到AN0的环回来确定。 0 只采样一个通道 1 横跨多个通道采样 |
3–0 CD、CC、CB、CA | 模拟输入通道选择码 — 这4位选择采样哪个(些)输入通道。表16列出了选择输入通道的编码规则。 对于在单通道转换(MULT=0),这个选择码指定要采样的通道。 对于多通道转换(MULT=1),这个选择码指定要采样的转换序列中的首个通道。随后的通道通过递增通道选择码或者到AN0的环回(在转换了由ATDCTL0中环回通道选择位WRAP3-0指定的通道后)来确定。对于从比WRAP3-0指定的通道号更高的通道号开始的情况,首个环回是从AN15到AN0 |
.
表 16.模拟输入通道选择编码
SC | CD | CC | CB | CA | 模拟输入通道 |
---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | AN0 |
0 | 0 | 0 | 0 | 1 | AN1 |
0 | 0 | 0 | 1 | 0 | AN2 |
0 | 0 | 0 | 1 | 1 | AN3 |
0 | 0 | 1 | 0 | 0 | AN4 |
0 | 0 | 1 | 0 | 1 | AN5 |
0 | 0 | 1 | 1 | 0 | AN6 |
0 | 0 | 1 | 1 | 1 | AN7 |
0 | 1 | 0 | 0 | 0 | AN8 |
0 | 1 | 0 | 0 | 1 | AN9 |
0 | 1 | 0 | 1 | 0 | AN10 |
0 | 1 | 0 | 1 | 1 | AN11 |
0 | 1 | 1 | 0 | 0 | AN12 |
0 | 1 | 1 | 0 | 1 | AN13 |
0 | 1 | 1 | 1 | 0 | AN14 |
0 | 1 | 1 | 1 | 1 | AN15 |
1 | 0 | 0 | 0 | 0 | 保留 |
1 | 0 | 0 | 0 | 1 | 保留 |
1 | 0 | 0 | 1 | X | 保留 |
1 | 0 | 1 | 0 | 0 | VRH |
1 | 0 | 1 | 0 | 1 | VRL |
1 | 0 | 1 | 1 | 0 | (VRH+VRL)/2 |
1 | 0 | 1 | 1 | 1 | 保留 |
1 | 1 | X | X | X | 保留 |
ATD状态寄存器0(ATDSTAT0)
这个寄存器包含序列完成标志位、外部触发和FIFO模式的覆盖标志位以及转换计数器。
图 9.ATD状态寄存器0(ATDSTAT0)
读:任何时候
写:任何时候(对(CC3、CC2、CC1、CC0)没有作用)
表 17.ATDSTAT0 字段描述
字段 | 描述 |
---|---|
7 SCF | 序列完成标志 — 这个标志在一个转换序列完成时被置位。如果转换序列连续进行(SCAN=1),这个标志位会在每次转换序列完成时被置位。这个标志位会在以下情况之一时被清零: A)向SCF写”1” B)写ATDCTL5(这样就开始了个新的转换序列) C)如果AFFC=1并且读一个结果寄存器 0 转换序列没有完成 1 转换序列已完成 |
5 ETORF | 外部触发覆盖标志 — 当在边沿触发模式(ETRIGLE=0)时,如果在转换序列进行中探测到了额外的激活边沿,就会设置覆盖标志。当以下情况之一发生时这一位被清零: A)向ETORF写”1” B)写ATDCTL0、1、2、3、4,ATDCMPE或ATDCMPHT(转换序列被终止) C)写ATDCTL5(开始一个新的转换序列) 0 没有发生外部触发覆盖 1 发生了外部触发覆盖 |
4 FIFOR | 结果寄存器覆盖标志 — 这一位指示了某个结果寄存器在它对应的转换完成标志位(CCF)被清零之前又被写入了。这个标志位在使用FIFO模式时最有用,因为这标志位暗示结果寄存器与输入通道已经不同步了。然而,对于非FIFO模式它也是有用的,它表明一个结果寄存器在它被读取之前就被覆盖了(比如,旧的数据丢失了)。当以下情况之一发生时这一位被清零: A)向FIFOR写”1” B)写ATDCTL0、1、2、3、4,ATDCMPE或ATDCMPHT(转换序列被终止) C)写ATDCTL5(开始一个新的转换序列) 0 没有发生覆盖 1 发生了覆盖(结果寄存器在对应的CCFx标志位还是1的时候被写入了) |
3–0 CD、CC、CB、CA | 转换计数器 — 这4个只读位是转换计数器的二进制值。这转换计数器指向存放当前转换结果的结果寄存器。比如CC3=0、CC2=1、CC1=1、CC0=0说明当前转换的结果将被放到ATD结果寄存器6中。如果是非FIFO模式(FIFO=0),转换计数器会在转换序列开始和结束时被初始化为0.如果是FIFO模式(FIFO=1),计数器就不会被初始化。转换计数器会在到达最大值时循环回去。 终止一个转换或者开始一个新的转换都会清零转换计数器,即使FIFO=1。 |
ATD比较使能寄存器(ATDCMPE)
写这个寄存器会终止当前的转换序列。
图 10.ATD比较使能寄存器(ATDCMPE)
读:任何时候
写:任何时候
表 18.ATDCMPE 字段描述
字段 | 描述 |
---|---|
15–0 CMPE[15:0] | 一个序列的转换号n(n=0~15)的比较使能 — 这些位独立地使能一个转换序列的转换结果的自动比较。每个比较的意义是由ATDCMPHT寄存器中的CMPHT[n]位决定的。 对于每个CMPE[n]=1的转换号,做如下事情: 1)向ATDDRn结果寄存器写入要比较的值 2)向ATDCPMHT寄存器的CMPHT[n]位写入比较操作符 ATDSTAT2寄存器中的CCF[n]将独立地标识任何一次成功的比较。 0 不使用自动比较 1 使能了一个序列的第n个转换的自动比较 |
ATD状态寄存器2(ATDSTAT2)
这个只读寄存器包含了转换完成标志位CCF[15:0]。
图 11.ATD状态寄存器2(ATDSTAT2)
读:任何时候
写:任何时候,没有任何用
表 19.ATDSTAT2 字段描述
字段 | 描述 |
---|---|
15–0 CCF[15:0] | 转换完成标志n(n=0~15) — 在一个序列的每次转换的结尾,都会设置一个转换完成标志。这个标志位与在序列中的转换位置(以及寄存器号)相关。因此,在非FIFO模式中,当序列中的第9个转换完成时,会置位CCF[8],并且可以到结果寄存器ATDDR8中获得结果;CCF[9]则会在序列中第10个转换完成时被置位,然后到结果寄存器ATDDR9中获得结果;以此类推。 如果转换结果的自动比较被使能(ATDCMPE中的CMPE[n]=1),转换完成标志位只有在与ATDDRn的比较为真时才会被置位,这时如果ACMPIE=1,则会触发比较中断。在这种情况下,由于ATDDRn结果寄存器存储着比较值,转换结果不会被存储在那里,而是直接丢失了。 当下面之一发生时,CCF[n]标志位会被清零: A)写ATDCTL5(开始一个新的转换序列) B)当AFFC=0,向CCF[n]写”1” C)当AFFC=1且CMPE[n]=0时,读结果寄存器ATDDRn D)当AFFC=1且CMPE[n]=1时,写结果寄存器ATDDRn 要是同时置位和清零CCF[n]:方法A)导致的清零会覆盖置位。方法B)或C)或D)导致的清零会被置位给覆盖 0 第n个转换还没有完成或者没有成功地比较 1 如果(CMPE[n]=0):第n个转换完成了。结果已经在ATDDRn中。如果(CMPE[n]=1):第n个转换完成后使用在CMPGT[n]中的比较符与ATDDRn中的被比较值进行比较的结果为真。(ATDDRn中不是转换结果) |
ATD输入使能寄存器(ATDDIEN)
图 12.ATD输入使能寄存器(ATDDIEN)
读:任何时候
写:任何时候
表 20.ATDDIEN 字段描述
字段 | 描述 |
---|---|
15–0 IEN[15:0] | 通道x(x=0~15)上的ATD数字输入使能 — 这些位控制从模拟输入引脚(ANx)到数字寄存器的数字输入缓存。 0 禁用对ANx引脚的数字输入缓存 1 使能在ANx引脚上的数字输入缓存。 注意: 设置这1位会连续地使能对应的数字输入缓存。如果这一位被置位,同时还使用它作为模拟端口,会有潜在的增加的能耗,因为数字输入缓存可能在线性区。 |
ATD大于比较寄存器(ATDCMPHT)
写这个寄存器会终止当前的转换序列。
图 13.ATD大于比较寄存器(ATDCMPHT)
读:任何时候
写:任何时候
表 21.ATDCMPHT 字段描述
字段 | 描述 |
---|---|
15–0 CMPHT[15:0] | 转换号n(n=0~15)的大于比较操作使能 — 这个位选择对转换结果的比较操作。 0 如果第n个转换的结果 小于或等于 ATDDRn中的比较值,就会置位ATDSTAT2中的标志位 1 如果第n个转换的结果 大于 ATDDRn中的比较值,就会置位ATDSTAT2中的标志位。 |
ATD转换结果寄存器(ATDDRn)
A/D转换结果会被存储在16位结果寄存器中。结果总是无符号格式数据。通过ATDCTL3中的DJM控制位来选择左/右对齐。
如果使能了转换结果的自动比较(ATDCMPE中的CMPE[n]=1),这些寄存器必须按照DJM对应的左/右对齐格式写入要比较的值。在这种情况下,由于ATDDRn寄存器被用于存储比较值,结果不能存到里头去,而是被丢弃了。
读:任何时候
写:任何时候
- 注意:
- 对于没有使用自动比较的转换,转换结果会在每次转换后存在结果寄存器中。这种情况下,除了最初始的值,不要写ATDDRn,因为可能会覆盖一个A/D转换结果。
左对齐结果数据(DJM=0)
图 14.左对齐的ATD转换结果寄存器(ATDDRn)
右对齐结果数据(DJM=1)
图 15.右对齐的ATD转换结果寄存器(ATDDRn)
表16展示了根据A/D转换分辨率,转换结果是怎么传递到ATD结果寄存器中的。比较总是使用转换结果和ATDDRn中比较值的全部12位来进行的。
表 22.到ATDDRn的转换结果映射
A/D分辨率 | DJM | 映射到ATDDRn中的转换结果 |
---|---|---|
8位数据 | 0 | Bit[11:4] = result, Bit[3:0]=0000 |
8位数据 | 1 | Bit[7:0] = result, Bit[11:8]=0000 |
10位数据 | 0 | Bit[11:2] = result, Bit[1:0]=00 |
10位数据 | 1 | Bit[9:0] = result, Bit[11:10]=00 |
10位数据 | X | Bit[11:0] = result |
功能描述
ADC12B16C结构上分为一个模拟子块和一个数字子块。
模拟子块
模拟子块包含所有的用于进行单次转换的模拟电路。独立的供能引脚VDDA和VSSA使得模拟子块能与其他MCU电路的噪音隔离开。
采样保持机
采样保持(S/H)机从外部世界接受模拟信号并在存储节点上存储它们为电容电荷。
在采样过程中,模拟输入直接连接到存储节点上。
输入模拟信号是单极性的,并且电位必须在VSSA到VDDA之间。
在存储过程中,模拟输入与存储节点断开连接。
模拟输入多路选择器
模拟输入多路选择器连接16个外部模拟输入通道之一到采样保持机。
模数转换(A/D)机
A/D机实现模拟到数字的转换。分辨率可以用编程方式选为8位或10位或12位。A/D机使用逐次逼近架构。原理是通过比较存储的模拟采样电位与一系列数字地生成的模拟电位。通过使用二分查找算法,A/D机定位到最接近采样电位的电位。
当不在转换时,A/D机会自动地下电。
只有电位范围在VRL和VRH之间的模拟输入信号才能输出正确的数字结果。
数字子块
这个子部分更加详细地解释了一些数字特性。详见”寄存器描述”。
外部触发输入
外部触发特性使得用户能够将ATD转换与外部环境事件同步,而不是依靠软件来通知ATD模块什么时候开始转换。外部触发信号(可在ATDCTL1中配置,重置时是ATD通道15)被编程为边沿或电平触发。表23给出了不同的控制位组合与它们对外部触发功能的影响的简短描述。
表 23.外部触发控制位
ETRIGLE | ETRIGP | ETRIGE | SCAN | 描述 |
---|---|---|---|---|
X | X | 0 | 0 | 忽略外部触发。进行单次转换序列并停止。 |
X | X | 0 | 1 | 忽略外部触发。进行连续的转换序列。 |
0 | 0 | 1 | X | 下降沿触发。每次触发进行单次转换序列。 |
0 | 1 | 1 | X | 上升沿触发。每次触发进行单次转换序列。 |
1 | 0 | 1 | X | 低电平触发。当触发器激活时进行连续的转换序列。 |
1 | 1 | 1 | X | 高电平触发。当触发器激活时进行连续的转换序列。 |
在转换过程中,如果探测到了额外的激活边沿,就会置位覆盖错误标志ETORF。
不管在电平还是边沿触发模式中,当触发条件成立时,首个转换就会开始。
一旦ETRIGE被使能,就不能通过写入ATDCTL5来开始转换,而是必须由外部触发。
如果电平模式被激活,在一个转换序列中,不管外部触发失效还是重新有效都不会构成覆盖。因此,标志位不会被置位。如果在电平模式下,当序列完成时触发仍然有效,就会立刻触发下一个序列。
通用的数字端口操作
输入通道引脚可以复用数字和模拟数据。作为模拟输入,他们会被复用并作为到A/D转换器的采样模拟通道。模/数复用操作是在输入片上进行的。输入片总是连接到ADC12B16C的模拟输入通道上。输入片的信号被缓存到数字端口寄存器。这个缓存可以使用ATDDIEN寄存器来开启或关闭。这很重要,这样当模拟电平作为输入时,缓存就不会产生过载电流。
重置
当重置时,ADC12B16C处于下电状态。在寄存器描述部分(见”寄存器描述”)列出了每个位的重置状态。
中断
表24列出了ADC12B16C的中断。参考MCU规范以获得对应的向量地址和优先级。
表 24.ATD中断向量
中断源 | CCR掩码 | 本地使能 |
---|---|---|
序列完成中断 | 1位 | ATDCTL2中的ASCIE |
比较中断 | 1位 | ATDCTL2中的ACMPIE |
见”寄存器描述”以获得更多细节信息。
这篇关于MC9S12XEP100的ATD模块(ADC12B16CV1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!