MC9S12XEP100的ATD模块(ADC12B16CV1)

2023-11-04

网上的各种示例基本都是用同步/轮询的方式来使用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寄存器。
  • 等待模式
    ADC12B16C在运行模式和等待模式下的行为一致。为了减少能耗,在进入等待模式前需要终止连续转换。
  • 冻结模式
    在冻结模式时,根据FRZ1和FRZ0位,ADC12B16C要不然会继续直到结束,要不然直接停止。这对于调试和模拟很有用。

结构图

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等级的,地址偏移量是定义在模块等级的。

ADC12B16C寄存器总结
图 2. ADC12B16C 寄存器总结

寄存器描述

这个部分按照地址顺序描述了所有的ADC12B16C寄存器以及他们的每个位。

ATD控制寄存器0(ATDCTL0)

写这个寄存器会终止当前的转换序列。

ATD控制寄存器0
图 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)

写这个寄存器会终止当前的转换序列。

ATD控制寄存器1
图 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)

写这个寄存器会终止当前的转换序列。

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)

写这个寄存器会终止当前的转换序列。

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)

写这个寄存器会终止当前的转换序列。

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转换时钟频率按如下公式计算: 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以使得转换序列能够被触发,转换序列会在每次触发事件发生时开始转换。转换的开始意味着采样阶段的开始。

ATD控制寄存器5(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模式的覆盖标志位以及转换计数器。

ATD状态寄存器0(ATDSTAT0)
图 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)

写这个寄存器会终止当前的转换序列。

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]。

ATD状态寄存器2(ATDSTAT2)
图 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)

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)

写这个寄存器会终止当前的转换序列。

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)

左对齐的ATD转换结果寄存器
图 14.左对齐的ATD转换结果寄存器(ATDDRn)

右对齐结果数据(DJM=1)

右对齐的ATD转换结果寄存器
图 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

见”寄存器描述”以获得更多细节信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MC9S12XEP100的ATD模块(ADC12B16CV1) 的相关文章

  • 【海思SS626

    目录 一 下载 Ubuntu 18 04 6 LTS 二 VMware17创建虚拟机 三 安装Ubuntu18 04LTS 四 安装其他软件 五 总结 一 下载 Ubuntu 18 04 6 LTS 问题 为什么要下载 Ubuntu18 0
  • 基于32单片机的16通道ADC的数据采集

    基于32单片机的16通道ADC的数据采集 这个部分的内容 是作为外部模拟量部分的采集工作 按照任务要求 所设计的方案 需要完成以下指标 ADC必须能采集16通道的模拟量 ADC的分辨率是16bit 采样率不小于20khz 由此分析可以得出
  • 在Linux中使用shell指令完成文件打包、压缩、解压缩

    一 写一个1 sh脚本 将以下内容放到脚本中 在家目录下创建目录文件dir 在dir下创建dir1和dir2 把当前目录下的所有文件拷贝到dir1中 把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2 tar xz 再
  • 掌握GDB调试工具,轻松排除bug!

    一 什么是GDB gdb是GNU debugger的缩写 是编程调试工具 GDB官网 https www gnu org software gdb GDB适用的编程语言 Ada C C objective c Pascal 等 GDB的工作
  • 51单片机开发系列一-51单片机开发环境搭建以及入门汇编代码

    51单片机开发系列一 51单片机开发环境搭建以及入门汇编代码 象棋小子 1048272975 1 51单片机概述 51单片机是对所有兼容Intel 8031指令系统的单片机的统称 目前教科书基本都是以早期的MCS 51为原型 讲解微机的原理
  • STM32使用USB虚拟串口+YMODEM实现IAP升级

    USB虚拟串口 基于USB CDC可以将USB做成虚拟串口 这块ST已经给我们做好了 直接使用相关封装好的接口就可以了 具体使用参考 https blog csdn net mirco mcu article details 1060819
  • 驱动开发概念详解

    1 什么是驱动 能够驱使硬件实现特定功能的软件代码 可以根据驱动程序是否依赖于系统内核将其分为裸机驱动和系统驱动 1 1裸机驱动 编写的驱动代码中没有进行任何内核相关的API调用 开发者查询资料配置寄存器完成硬件相关控制 不依赖于系统内核
  • lv4 嵌入式开发-6 格式化输入输出

    目录 1 标准I O 格式化输出 2 标准I O 格式化输入 3 小结 4 标准I O 思考和练习 1 标准I O 格式化输出 include
  • DTMF通信系统设计—基于MATLAB和STM32

    文章目录 1 摘要 2 设计任务 3 课程设计主要解决的问题 4 设计内容 4 1 整体设计方案 4 2 详细设计内容 5 结果与分析 5 1 基于MATLAB 的DTMF 通信系统 5 2 双机通信模拟 5 2 基于单片机的DTMF 通信
  • simulink的工具箱开发stm32步骤

    1 打开stm32cubeMx 配置芯片信息 记得配置时钟 之前就是因为没有配置time 出现灯不亮的问题 2 打开Matlab 将当前工作目录切换到配置文件的目录IOC配置文件 stm32cubeMx 然后开始调用simulink模块 3
  • 【面试】嵌入式软件与非嵌入式软件、设备驱动与裸机驱动开发区别

    嵌入式软件开发与非嵌入式软件开发区别 设备驱动开发与裸机驱动开发区别 嵌入式开发与传统单片机开发区别 如果面试遇到这样的问题 三个问题的答案一致 答 我认为嵌入式软件与非嵌入式软件 设备驱动开发与裸机驱动开发 嵌入式开发与传统单片机开发 的
  • x86架构芯片启动过程分析

    1 上电启动顺序 上电自检 读取ROM里的bios程序 bios程序会进行硬件检测 比如 内存 硬盘 显卡等 bios完成自检后 需要选择引导设备 比如设备上有U盘 SSD eMMC 机械硬盘 bios需要知道从哪个启动介质去启动计算机 b
  • lv4 嵌入式开发-4 标准IO的读写(二进制方式)

    目录 1 标准I O 按对象读写 2 标准I O 小结 3 标准I O 思考和练习 文本文件和二进制的区别 存储的格式不同 文本文件只能存储文本 除了文本都是二进制文件 补充计算机内码概念 文本符号在计算机内部的编码 计算机内部只能存储数字
  • 编程器烧写NAND flash的一些说明

    注意事项 1 大小端模式 也即在使用编程器时需不需要做字节反序 2 Spare area处理方式 需要还是不需要 是否含有私有ECC算法 3 坏块处理方式 摘要一段说明如下 虽然针对西尔特SUPERPRO 9000U的文章 但也对许多其他的
  • Ubuntu—vi编辑器的使用一

    vi编辑器 vi是Linux中最基本的编辑器 但vi编辑器在系统管理 服务器配置工作中永远都是无可替代的 vi编辑器的使用 vi有以下三种模式 命令行模式 用户在用vi编辑文件时 最初进入的是该模式 可以进行复制 粘贴等操作 插入模式 进行
  • 西门子PLC s7-1200学习之路

    1 Introduction 最近因为一个项目需要使用西门子PLC 买了一个入门级的PLC s7 1200 并完成了一个PLC和PC通过TCP进行通信的小程序 为了防止活干完了 内容就全忘了 所以用一个笔记进行梳理和总结 入门一种语言 需要
  • Keil(MDK-ARM)的调试步骤

    Keil MDK ARM 的调试步骤 1 编译 调试 在线调试分类 软件在线调试和硬件在线调试 由于现在硬件成本 较便宜 般我们都使 硬件在线调试 也就是软件直接下载到芯 打开软件 程 gt 编译 gt 下载 gt 调试 如下图1 2 3
  • thttpd嵌入式www服务工具的使用

    thttpd是一个非常小巧的轻量级web server 它非常简单 仅仅提供了HTTP 1 1和简单的CGI支持 在其官方网站上有一个与其他web server 如Apache Zeus等 的对比图 Benchmark 可以参考 此外 th
  • 关于/dev/console的个人理解

    嵌入式开发里 首先需要配置一个串口 用于打印printk信息到控制台 以2440为例 这里的 dev console 设备号 5 1 就是控制台 用于printk信息输出到的设备 但是呢 dev console是个虚拟设备 他需要映射到真正
  • 开发板配置NFS服务

    文章目录 NFS介绍 NFS版本 NFS服务器和客户端 安装NFS 配置NFS服务器 启动NFS服务 挂载NFS共享 NFS安全性 NFS日志 开发板配置NFS环境 环境 操作前先关闭防火墙 配置过程 server端的配置 开发板的操作 常

随机推荐

  • 2012 IMF 全球人均gdp排名

    发信人 ranger20 江淮度寒食 京洛缝春衣 信区 EconForum 标 题 2012 IMF 全球人均gdp排名 发信站 水木社区 Wed Jan 2 22 08 45 2013 站内 中国排名84 还需要iphone 18才能看到
  • 微信小程序中部分iPhone手机不兼容white-space: nowrap;的解决方案

    bug表现 目前发现iPhoneX iPhone11 pro iPhone12 pro 等个别机型对强制不换行的样式失效 解决方案 亲测 使用CSS box orient 属性 Firefox display moz box moz box
  • 【Mysql数据库全套教程笔记-SELECT使用篇】

    Mysql基础篇 SELECT使用篇 SQL之SELECT使用篇 第03章 基本的SELECT语句 第04章 运算符 第05章 排序与分页 第06章 多表查询 第07章 单行函数 第08章 聚合函数 第09章 子查询 我做的笔记 希望能帮助
  • java2.0——数据类型

    目录 一 字面常量 二 数据类型 1 引用数据类型 2 基本数据类型 注意 三 变量 1 语法格式 2 各变量中的注意事项 3 类型转换 1 自动类型转换 隐式 2 强制类型转换 显式 3 类型提升 四 字符串类型 一 字面常量 常量即程序
  • C# params 用法简介

    params 是C 的关键字 可变长参数 是在声明方法时参数类型或者个数不确定时使用 关于params 参数数组 需掌握以下几点 一 参数数组必须是一维数组 二 不允许将params修饰符与ref和out修饰符组合起来使用 三 与参数数组对
  • 两个大一网页设计期末课设-HTML+CSS+JS前端课设(附下载链接)

    大一网页设计期末课设 HTML CSS JS前端课设 1 公司网站模板 2 游戏网站 1 公司网站模板 点我该项目下载资源 https download csdn net download weixin 43474701 87941280
  • Silicon Labs CP210x USB to UART Bridge,COM口无法识别

    一直用一个电脑端 识别USB转串口的函数接口 但在Silicon Labs CP210x USB to UART Bridge上 却无法成功识别 确认过Silicon Labs CP210x USB to UART Bridge和Proli
  • 设计原则:开闭原则

    开闭原则 OCP 开闭原则的英文全称是 Open Closed Principle 简写为 OCP 它的英文描述是 softwareentities modules classes functions etc should be open
  • Selenium 屏蔽 webdriver被识别出来 的一些解决办法

    问题描述 使用 selenium 模拟浏览器进行数据抓取是目前最通用的爬虫方案 所见即所得 通吃各种数据加载方式 能绕过JS加密 爬虫检测 签名机制 但是Selenium依然能被检测到 它在运行时会暴露出一些预定义的JavaScript变量
  • led灯条串联图_灯带/LED灯条的安装,安装接线示意图

    灯带由于发光颜色多变 可调光 可控制颜色变化 经常会被用于家装中的装饰作用 而且有些小地方 1 灯带 LED灯条的安装方法 每款灯带的背后都贴有自粘性3M双面胶 安装时可以直接撕去3M双面胶表面的贴纸 然后把灯带固定在安装位置 用手把它贴紧
  • luffy配置相关

    目录 后台配置之封装logger 在项目中集成日志 封装全局异常 二次封装response 数据库配置 在项目中配置使用mysql User模块User表配置 开放media访问 路飞前台项目创建和配置 elementui vue cook
  • (附源码)计算机毕业设计ssm车位管理系统

    项目运行 环境配置 Jdk1 8 Tomcat7 0 Mysql HBuilderX Webstorm也行 Eclispe IntelliJ IDEA Eclispe MyEclispe Sts都支持 项目技术 SSM mybatis Ma
  • 深入浅出SSD

    深入浅出SSD https download csdn net download vb748 19408058
  • Elasticsearch multi-index join实践

    Elasticsearch 多索引 join 实践 注 本文采用的实现语言是python 用到了python中的第三方库 作者 aideny 前言 博主近期在开发一个解析引擎 把我们定义的json格式查询语言解析成多种数据源的查询语言 然后
  • uni-app开发微信小程序,动态修改底部tabbar文字及顶部导航栏文字方法

    修改顶部导航文字 uni setNavigationBarTitle title res data data name 修改底部tabbar文字 uni setTabBarItem index 2 title res data data n
  • 恢复目录数据库发生 ORACLE 错误: ORA-00955: 名称已由现有对象使用

    author skate time 2009 02 19 在创建catalog的时候 如果报如下的错误 可以采用 drop catalog 然后再创建的方法解决 或直接运行spdrop sql 原因可能是以前创建过catalog RMAN
  • c语言程序 输入一个四位数,用c语言编程:输入一个四位数,求出它的个位、十位、百位、千位...

    满意答案 QQ89748770 推荐于 2018 02 26 采纳率 45 等级 13 已帮助 7318人 C代码 int a scanf d a printf 个位 d 十位 d 百位 d 千位 d a 10 a 100 10 a 100
  • python 使用exchange发送邮件

    安装库exchangelib pip install exchangelib 脚本内容 coding utf 8 Created on 2018 2 from exchangelib import DELEGATE Account Cred
  • 2.1矩阵的概念

    矩阵有什么用 矩阵可以用于表示复杂的信息 关系 下图左边是航班图 用 1 表示有航班 0 为无航班信息 这样就可以把左图转化到一张表 这里我联想到了自然语言处理中的词文档共现矩阵 图像处理中每一副数字图像也是一个矩阵 矩阵的定义 直观印象
  • MC9S12XEP100的ATD模块(ADC12B16CV1)

    网上的各种示例基本都是用同步 轮询的方式来使用ATD模块的 自己封装ATD模块时想利用中断改成异步的方式 结果出现了莫名其妙的问题 我明明没有开启比较中断的 结果还是跳到了比较中断里头去了 一气之下 把整个文档翻译了一遍 顺带给大家分享了