深入解析TM4C ADC采样序列与数字比较器:寄存器配置与实战应用

发布时间:2026/7/27 3:32:03
深入解析TM4C ADC采样序列与数字比较器:寄存器配置与实战应用 1. ADC采样序列与数字比较器从寄存器配置到实战应用在嵌入式系统开发中模数转换器ADC的角色远不止于将模拟电压变成一个数字读数那么简单。尤其是在像TI Tiva™ TM4C129X这类高性能微控制器上其ADC模块集成了采样序列控制器和数字比较器这类高级功能它们能将ADC从一个被动的数据采集单元转变为一个具备初步“判断”和“决策”能力的智能前端。很多开发者可能只停留在使用库函数配置几个通道、读取FIFO数据的层面对底层那些名字冗长的寄存器望而却步。但当你需要实现精确的定时采样、多通道交错采集或者希望ADC在检测到电压越限时能自动触发一个PWM关断保护而不需要CPU频繁中断介入时深入理解这些寄存器配置就成了绕不开的坎。今天我们就抛开库函数的“黑箱”直接深入到寄存器位域把ADC采样序列的精细控制和数字比较器的灵活应用一次讲透让你能真正驾驭这颗芯片的模拟前端。2. 采样序列核心不只是选通道更是控制时序采样序列是TM4C ADC模块的调度核心。你可以把它想象成一个可编程的“采样任务清单”。每个序列器如SS0, SS1, SS2, SS3可以独立执行一个包含多个步骤Sample的采样任务每个步骤不仅定义了采集哪个通道的信号更精细地控制了“如何采集”这个过程。2.1 采样保持时间ADCSSTSHn确保信号稳定的关键输入提供的寄存器ADCSSTSH1、ADCSSTSH2、ADCSSTSH3等其核心字段是TSH0、TSH1等。这个配置项的重要性常常被低估。为什么需要采样保持时间ADC的输入端通常是一个采样保持电路。在“采样”阶段内部开关闭合让采样电容上的电压跟随外部输入信号变化在“保持”阶段开关断开电容上的电压被锁定供ADC核心进行量化。TSHn字段配置的正是这个“采样”阶段的持续时间以ADC时钟周期数为单位。配置背后的原理与计算表18-9给出了编码与时钟周期的对应关系。例如TSHn 0x0对应4个ADC时钟周期0x4对应16个周期。这个时间必须足够长让采样电容能够充电到与输入电压足够接近的精度。所需时间取决于信号源阻抗信号源内阻越大对电容充电的速率越慢。采样电容大小这是ADC内部的固定参数。所需精度要达到N位精度采样误差必须小于1/2^N。一个经验法则是采样时间常数 τ R_source * C_sample需要经过大约 N * ln(2) 个时间常数才能达到N位精度。例如对于12位精度需要约8.3个τ。如果你的信号源阻抗是1kΩ采样电容是10pF那么τ10ns。在ADC时钟为20MHz周期50ns时你至少需要ceil(8.3 * 10ns / 50ns) 2个时钟周期。但这仅仅是理论最小值。关键注意事项内部温度传感器的特殊要求数据手册特别强调如果采样内部温度传感器采样保持宽度应至少为16个ADC时钟TSHn 0x4。这是因为温度传感器通常是一个高阻抗源其输出驱动能力很弱需要更长的采样时间来确保电容充电到稳定、准确的值。忽略这一点是导致温度读数跳动大、不准的常见原因。实操配置示例假设我们使用序列器3SS3进行单次采样ADC时钟配置为16MHz采样外部通道AIN0和内部温度传感器。// 假设 ADC0 基地址宏定义 #define ADC0_BASE 0x40038000 #define ADCSSTSH3_OFFSET 0x0BC // 配置采样保持时间寄存器 (ADCSSTSH3) volatile uint32_t *pADCSSTSH3 (uint32_t *)(ADC0_BASE ADCSSTSH3_OFFSET); // 对于内部温度传感器采样必须设置 TSH0 0x4 (16个ADC时钟) // 我们选择 0x4 (16个时钟周期) uint32_t sstsh3_value 0x4; // 仅配置TSH0字段其他位为0 // 对于外部通道AIN0如果信号源阻抗低可以设置更短的时间例如0x2 (8个时钟) // 但序列器3是单步序列只有一个TSH0配置它同时应用于该序列的所有采样虽然这里只有一个。 // 因此我们必须以满足最苛刻条件温度传感器为准。 *pADCSSTSH3 sstsh3_value;这里引出一个重要概念一个序列内的所有采样步骤共享该序列的采样保持时间配置寄存器但每个步骤有独立的TSH字段如TSH0, TSH1...。对于SS3这样的单步序列器只有一个TSH0。对于SS1这样的多步序列器你可以为每一步设置不同的TSH值这在多通道且信号源特性差异大时非常有用。2.2 输入多路选择与扩展ADCSSMUXn ADCSSEMUXnADCSSMUX3和ADCSSEMUX3寄存器共同决定了采样步骤的输入源。工作原理拆解ADCSSMUXn寄存器的MUX0字段4位可以选择0-15共16个输入。ADCSSEMUXn寄存器的EMUX0位1位是一个扩展选择位。当EMUX0 0时MUX0选择的是AIN[15:0]即模拟输入通道0到15。当EMUX0 1时MUX0选择的是AIN[23:16]即模拟输入通道16到23。差分采样模式当ADCSSCTLn寄存器中的D0位设置为1时启用差分输入。此时MUX0字段的含义发生变化它不再选择单个通道而是选择差分输入对pair。例如MUX0 0选择差分对0AIN0为正端AIN1为负端。特别注意在差分模式下ADCSSEMUXn寄存器不被使用因为MUX0的4位足以寻址所有可用的差分对通常最多8对对应通道0-15。配置示例单端与差分采样// 配置序列器3的输入多路选择 (ADCSSMUX3) 和扩展选择 (ADCSSEMUX3) #define ADCSSMUX3_OFFSET 0x0A0 #define ADCSSEMUX3_OFFSET 0x0B8 volatile uint32_t *pADCSSMUX3 (uint32_t *)(ADC0_BASE ADCSSMUX3_OFFSET); volatile uint32_t *pADCSSEMUX3 (uint32_t *)(ADC0_BASE ADCSSEMUX3_OFFSET); // 示例1选择单端输入 AIN5 *pADCSSMUX3 0x5; // MUX0 0x5 *pADCSSEMUX3 0x0; // EMUX0 0, 选择低16通道组 // 示例2选择单端输入 AIN20 (属于高8通道组) *pADCSSMUX3 0x4; // MUX0 0x4对应高8通道组中的第4个通道 *pADCSSEMUX3 0x1; // EMUX0 1, 选择高8通道组(AIN16-AIN23) // AIN20 的索引计算20 - 16 4所以MUX00x4。 // 示例3选择差分输入对3 (AIN6, AIN7) // 首先需要在ADCSSCTL3中设置D01见下文。 // 然后配置MUX0为差分对编号。 *pADCSSMUX3 0x3; // 选择差分对3 (AIN6正AIN7负) // ADCSSEMUX3 在差分模式下忽略无需配置。2.3 采样序列控制ADCSSCTLn定义采样行为ADCSSCTL3寄存器是序列控制的核心它定义了每个采样步骤的具体行为。关键位域解析TS0(温度传感器选择)置1表示该步骤采样内部温度传感器此时MUX0选择无效。切记采样温度传感器时D0位必须为0非差分且TSH0需至少16个ADC时钟。IE0(中断使能)置1后当该步骤的转换完成时会置位原始中断标志。如果ADC中断屏蔽寄存器ADCIM中对应的位也使能则会向NVIC产生中断。一个序列内可以有多个步骤产生中断这允许你在一个序列的不同采样点进行事件通知。END0(序列结束)这是单步序列器如SS3的必须设置项。对于SS3你必须将其置1表示这一步就是整个序列。对于多步序列器如SS1你需要在最后一个采样步骤对应的ENDx位置1。D0(差分输入选择)如上所述置1启用差分采样模式。一个完整的单次采样序列SS3配置流程假设我们要用SS3单次采样外部通道AIN10并在转换完成后产生中断。#define ADCSSCTL3_OFFSET 0x0A4 volatile uint32_t *pADCSSCTL3 (uint32_t *)(ADC0_BASE ADCSSCTL3_OFFSET); // 配置控制寄存器 // TS00: 采样外部通道 // IE01: 使能本步骤转换完成中断 // END01: 这是序列的最后一步对于SS3必须为1 // D00: 单端输入模式 uint32_t ssctl3_value (0 3) | // TS0 0 (1 2) | // IE0 1 (1 1) | // END0 1 (0 0); // D0 0 *pADCSSCTL3 ssctl3_value; // 同时需要配置MUX选择AIN10 *pADCSSMUX3 0xA; // MUX0 0xA (AIN10) *pADCSSEMUX3 0x0; // EMUX0 0 (低16通道组) // 配置采样保持时间根据信号源特性 *pADCSSTSH3 0x2; // 假设设置TSH00x2即8个ADC时钟周期 // 最后在ADCACTSS寄存器中使能采样序列器3SS3并触发采样。这个配置清晰地展示了一个采样任务从信号选择、采样时长控制到结果通知的完整设定。3. 数字比较器让ADC具备“判断力”数字比较器是TM4C ADC模块中一个非常强大的功能它允许在不消耗CPU资源的情况下对ADC转换结果进行实时比较并根据结果触发中断或直接联动其他外设如PWM。3.1 工作原理与数据流数字比较器的工作流程独立于CPU。其核心思想是ADC完成一次转换产生一个12位的结果数据假设为12位精度。该结果数据除了被写入采样序列的FIFO供CPU读取外还可以被“旁路”直接发送到一个指定的数字比较器单元。数字比较器单元内部有两个可编程的阈值寄存器COMP0和COMP1。比较器逻辑将ADC结果与COMP0、COMP1进行比较判断其落在哪个“区域”低带、中带、高带。根据预先在控制寄存器ADCDCCTLn中配置的“模式”和“条件”决定是否产生中断DCINTx或触发信号DCTRIGx。如何将ADC结果路由到数字比较器这由采样序列操作寄存器ADCSSOPn和数字比较器选择寄存器ADCSSDCn控制。以序列器3为例ADCSSOP3的S0DCOP位决定本序列的采样结果去向。0结果存入FIFO3常规操作。1结果不存入FIFO而是发送到数字比较器单元。ADCSSDC3的S0DCSEL字段当S0DCOP1时此字段指定使用哪个数字比较器单元0-7。配置示例将SS3的采样结果送至数字比较器单元1#define ADCSSOP3_OFFSET 0x0B0 #define ADCSSDC3_OFFSET 0x0B4 volatile uint32_t *pADCSSOP3 (uint32_t *)(ADC0_BASE ADCSSOP3_OFFSET); volatile uint32_t *pADCSSDC3 (uint32_t *)(ADC0_BASE ADCSSDC3_OFFSET); // 配置操作寄存器结果送往数字比较器不进入FIFO *pADCSSOP3 0x1; // S0DCOP 1 // 配置选择寄存器使用数字比较器单元1 *pADCSSDC3 0x1; // S0DCSEL 0x1 (对应单元1)完成此配置后SS3每次的转换结果将直接喂给数字比较器单元1而不会出现在FIFO3中。这意味着CPU无法通过读取FIFO3来获得这个通道的数据数据完全由比较器硬件处理。这种设计非常适合监控类应用你只关心电压是否超限而不需要知道具体数值。3.2 比较器控制逻辑深度解析ADCDCCTLnADCDCCTL0~ADCDCCTL7这8个寄存器分别控制8个比较器单元的行为。每个寄存器的结构对称包含中断和触发两套独立的控制逻辑。核心字段详解CIC (Comparison Interrupt Condition) / CTC (Comparison Trigger Condition) 这两个字段定义了在哪个“区域”满足条件时会激活中断或触发功能。区域由COMP0和COMP1界定。0x0-低带 (Low Band)ADC Data COMP0 COMP10x1-中带 (Mid Band)COMP0 ADC Data COMP1(对于CIC) 或COMP0 ADC Data COMP1(对于CTC注意等号位置的细微差别通常应用中可忽略)0x3-高带 (High Band)COMP0 COMP1 ADC Data重要约束数据手册明确要求COMP1的值必须大于或等于COMP0否则会导致未定义行为。这保证了三个区域低、中、高的逻辑是清晰且互斥的。CIM (Comparison Interrupt Mode) / CTM (Comparison Trigger Mode) 定义了条件满足时的行为模式这是数字比较器灵活性的关键。0x0-始终 (Always)只要ADC数据落在选定区域每次转换都产生中断/触发。适用于需要持续监控的场合但可能产生大量事件。0x1-一次 (Once)只有当ADC数据首次进入选定区域时产生一次中断/触发。直到数据离开该区域并再次进入才会产生下一次事件。适用于检测状态跳变如按键按下电压从高到低穿越阈值。0x2-滞回始终 (Hysteresis Always)当数据进入选定区域时产生中断/触发并且只要数据停留在该区域或对立的区域之外就会持续产生。直到数据进入“对立的区域”对于低带是进入高带对于高带是进入低带滞回状态才被清除。注意此模式仅对CIC/CTC为0x0低带或0x3高带有效。它非常适合消除噪声引起的抖动例如实现一个带滞回的比较器用于电源的过压/欠压保护。0x3-滞回一次 (Hysteresis Once)当数据首次进入选定区域时产生一次中断/触发。此后即使数据仍在该区域内也不再产生新事件。只有当数据进入“对立的区域”清除滞回状态后再次进入原区域才会产生新事件。同样仅适用于低带或高带。CIE (Comparison Interrupt Enable) / CTE (Comparison Trigger Enable) 总使能位。必须置1相应的中断或触发功能才生效。实战场景配置电池电压监控与保护假设我们监控一个12位ADC量程0-3.3V测量的电池电压希望实现警告当电压低于2.8V约(2.8/3.3)*4095 ≈ 3475时产生中断通知CPU记录日志。紧急关断当电压低于2.5V约(2.5/3.3)*4095 ≈ 3102时立即触发PWM模块关闭放电MOSFET无需CPU干预。我们可以使用两个比较器单元或一个单元配合滞回模式。这里使用两个单元演示#define ADCDCCTL0_OFFSET 0xE00 // 比较器单元0控制寄存器 #define ADCDCCTL1_OFFSET 0xE04 // 比较器单元1控制寄存器 #define ADCDCCMP0_OFFSET 0xE40 // 比较器单元0阈值寄存器 #define ADCDCCMP1_OFFSET 0xE44 // 比较器单元1阈值寄存器 volatile uint32_t *pADCDCCTL0 (uint32_t *)(ADC0_BASE ADCDCCTL0_OFFSET); volatile uint32_t *pADCDCCTL1 (uint32_t *)(ADC0_BASE ADCDCCTL1_OFFSET); volatile uint32_t *pADCDCCMP0 (uint32_t *)(ADC0_BASE ADCDCCMP0_OFFSET); volatile uint32_t *pADCDCCMP1 (uint32_t *)(ADC0_BASE ADCDCCTL1_OFFSET); // 1. 配置比较器单元0用于低压警告 (2.8V) // 设置阈值 COMP0 3475, COMP1 COMP0我们设COMP1为一个很大的值如4095 // 这样“低带”就是 ADC值 3475。 *pADCDCCMP0 (4095 16) | (3475); // COMP14095, COMP03475 // 配置控制逻辑低带条件滞回一次模式避免电压在阈值附近抖动时频繁中断 uint32_t dcctl0_value (1 4) | // CIE 1使能中断 (0x0 2) | // CIC 0x0低带条件 (0x3 0); // CIM 0x3滞回一次模式 *pADCDCCTL0 dcctl0_value; // 2. 配置比较器单元1用于紧急关断 (2.5V) 并触发PWM // 设置阈值 COMP0 3102, COMP1 4095 *pADCDCCMP1 (4095 16) | (3102); // COMP14095, COMP03102 // 配置控制逻辑低带条件始终模式一旦低于阈值持续触发确保关断 uint32_t dcctl1_value (1 12) | // CTE 1使能触发 (0x0 10) | // CTC 0x0低带条件 (0x0 8) | // CTM 0x0始终模式 (0 4) | // CIE 0不使能中断仅用触发 (0x0 2) | // CIC 0x0 (无关因为CIE0) (0x0 0); // CIM 0x0 (无关) *pADCDCCTL1 dcctl1_value; // 3. 配置ADC采样序列例如SS3将其结果路由到数字比较器单元0和1。 // 注意一个采样结果只能送往一个比较器单元。如果需要同时送往两个单元 // 需要复制采样步骤或使用两个ADC序列器采样同一通道并分别指向不同比较器。 // 更常见的做法是只使用一个比较器单元设置COMP03102(关断), COMP13475(警告) // 然后通过判断ADC值具体落在低带(ADC3102)还是中带(3102ADC3475)来区分严重程度。 // 但这需要CPU读取比较器状态寄存器ADCDCRIS来判断响应速度不如直接触发PWM。 // 这里为了演示两个独立功能假设使用两个序列器。此配置实现了硬件级的保护电压一旦低于2.5V比较器单元1立即输出触发信号这个信号可以直接连接到PWM模块的故障保护输入引脚在数十纳秒内关闭功率输出速度远超软件中断响应。3.3 初始条件复位ADCDCRIC的重要性ADCDCRIC寄存器是一个只写寄存器用于复位数字比较器内部的中断和触发状态机。数据手册多次强调其重要性“Because the digital comparators use the current and previous ADC conversion values... it is important to reset the digital comparator to initial conditions when starting a new sequence so that stale data is not used.”为什么需要复位数字比较器的某些模式如“Once”和滞回模式是有状态的。它们需要记住上一次的转换结果来判断当前是“进入”还是“离开”某个区域。如果你在系统初始化、或改变监控通道后不清除这些状态那么比较器可能还残留着上一次通道的旧数据stale data导致第一次比较逻辑错误。安全操作流程在启动一个指向数字比较器的采样序列之前必须复位对应的比较器单元。#define ADCDCRIC_OFFSET 0xD00 volatile uint32_t *pADCDCRIC (uint32_t *)(ADC0_BASE ADCDCRIC_OFFSET); // 假设我们要使用比较器单元0和1 uint32_t dcric_value (1 16) | // DCTRIG0 1, 复位单元0触发状态 (1 0); // DCINT0 1, 复位单元0中断状态 // 如果也用了单元1则加上 (117) | (11) *pADCDCRIC dcric_value; // 重要写入后需要等待硬件自动清除这些位表示复位完成。 // 简单的做法是循环读取虽然该寄存器是WO但读取可能返回0或未定义通常检查对应位是否被清空需通过其他状态寄存器间接判断。 // 更稳妥的方法是延时几个时钟周期。数据手册建议软件在设置此位后应等待直到该位被清除。 // 由于是只写寄存器我们无法直接读回。一个常见的实践是插入一个短暂的空操作循环或延时。 for(int i0; i10; i) __asm( NOP); // 现在可以安全地启动ADC采样序列了忽略这一步是导致数字比较器功能异常、首次触发不按预期工作的常见坑点。4. 高级特性与系统集成4.1 外设属性与配置ADCPP ADCPCADCPP外设属性是一个只读寄存器提供了ADC模块的硬件能力信息。在编写可移植的驱动代码时读取这个寄存器非常有用。DC字段告诉你芯片支持多少个数字比较器单元例如输入中显示为0x8即8个。CH字段告诉你ADC有多少个输入通道例如0x1824个。TS位指示是否包含内部温度传感器。RSL字段ADC的分辨率例如0xC12位。ADCPC外设配置中的CR字段则允许你在运行时降低ADC的转换速率。这有什么用降低功耗和减少噪声。更高的转换速率意味着更活跃的模拟和数字电路功耗和开关噪声都会增加。在不需要高速采样的场合如慢速监测电池电压将CR设置为0x11/8速率、0x31/4速率或0x51/2速率可以显著降低系统功耗和ADC自身的噪声干扰提高低速高精度采样的性能。4.2 数字比较器与PWM的联动数据手册提到了数字比较器可以触发PWM发生器。这是如何实现的ADC模块产生的触发信号DCTRIGx会连接到芯片内部的触发信号网络。你需要在PWM模块的配置中选择ADC触发作为其故障保护Fault或同步加载事件的源。当ADC数字比较器满足触发条件时硬件会自动向PWM模块发送一个触发脉冲PWM模块可以据此立即将其输出强制为安全状态如拉低实现纳秒级的硬件保护这对于电机驱动、电源转换等安全关键应用至关重要。配置这部分需要查阅PWM模块和系统控制模块中关于触发输入选择的寄存器。5. 实战配置清单与避坑指南5.1 一个完整的单通道带数字比较器监控的配置流程假设使用ADC0的序列器3SS3监控AIN1电压并使用数字比较器单元0在电压超过2.9V时产生中断。初始化ADC时钟和模块使能ADC0时钟在SYSCTL-RCGCADC中等待稳定。禁用采样序列器配置ADCACTSS寄存器禁用SS3。配置采样序列器ADCSSMUX3 0x1 (选择AIN1)。ADCSSEMUX3 0x0 (低通道组)。ADCSSCTL3(03) | (12) | (11) | (00)(TS00, IE01, END01, D00)。ADCSSTSH3 0x2 (根据信号源设置TSH0例如8个时钟)。ADCSSOP3 0x1 (S0DCOP1送数字比较器)。ADCSSDC3 0x0 (S0DCSEL0选择比较器单元0)。配置数字比较器复位向ADCDCRIC写入(116) | (10)复位单元0的触发和中断状态并等待。设阈值计算2.9V对应ADC值假设3.3V参考12位(2.9/3.3)*4095 ≈ 3598。设置ADCDCCMP0(409516) | 3598(COMP14095, COMP03598)。设控制逻辑设置ADCDCCTL0(14) | (0x32) | (0x10)。解释CIE1使能中断CIC0x3高带条件即ADC值COMP0CIM0x1一次模式超过阈值只报一次警。配置ADC中断在ADCIM寄存器中使能SS3中断或数字比较器中断取决于具体型号和配置可能需要使能ADC数字比较器中断源。在NVIC中使能ADC中断。使能序列器并触发设置ADCACTSS寄存器的ASEN3位使能SS3。通过ADCEMUX寄存器配置触发源如处理器触发然后向ADCPSSI寄存器写入触发码开始采样。中断服务程序在ADC中断ISR中读取ADCISC寄存器检查中断源。如果是数字比较器中断则处理超压事件并清除相应的中断标志在ADCISC中写1清除。5.2 常见问题与排查技巧问题1ADC采样值不稳定跳动大。检查采样保持时间确保TSHn设置足够。对于高阻抗源如温度传感器、分压电阻很大的电路务必增加采样时间。可以用示波器观察ADC输入引脚在采样期间的波形看电压是否已稳定。检查参考电压和电源模拟部分的AVDD和GND是否干净参考电压引脚是否接了合适的去耦电容通常需要1uF0.1uF检查信号源信号源是否能驱动ADC的输入阻抗ADC输入引脚有采样电容在采样瞬间会吸入一个尖峰电流。如果信号源输出阻抗太高会导致采样期间电压被拉低。必要时增加一个运放缓冲器。问题2数字比较器根本不触发或不中断。检查路由配置确认ADCSSOPn的SnDCOP位是否设置为1以及ADCSSDCn的SnDCSEL是否指向了正确的比较器单元。检查比较器使能确认ADCDCCTLn中的CIE或CTE位是否已置1。检查阈值确认COMP0和COMP1的设置符合COMP1 COMP0。用调试器读出ADC的原始值与设定的阈值进行比较看是否满足你预设的条件低带、中带、高带。检查初始复位这是最容易被忽略的一步在启动序列前是否通过ADCDCRIC复位了对应的比较器单元检查方法在初始化流程中严格添加复位操作。检查中断使能除了ADCDCCTLn中的CIE还需要在ADC模块级中断屏蔽寄存器ADCIM中使能数字比较器中断以及在NVIC中使能ADC中断向量。问题3使用“Once”或滞回模式时逻辑行为不符合预期。理解状态机“Once”模式只在数据进入目标区域时触发一次。如果你希望数据离开区域时也触发需要配置两个比较器单元或者使用“Always”模式并在软件中判断状态变化。滞回模式的对立区域滞回模式的“清除”条件是进入“对立区域”。对于低带条件CIC0x0对立区域是高带ADC值 COMP1。确保你的COMP1设置合理滞回区间COMP0到COMP1足够宽以抵抗噪声。复位状态机改变监控条件或通道后务必通过ADCDCRIC复位比较器清除旧状态。问题4同时使用FIFO和数字比较器。记住二选一。当SnDCOP1时采样结果不会进入FIFO。如果你既需要数据又需要比较功能有两种方案使用两个采样序列器一个序列器如SS2配置为常规采样存入FIFO另一个序列器如SS3配置为送数字比较器。两者可以采样同一通道。使用比较器中断在ISR中读取FIFO这需要将采样结果同时存入FIFO并触发比较器中断通过设置IE0。在中断服务程序中你仍然可以从FIFO读取数据。但注意这要求比较条件满足时数据恰好是你关心的那次转换。深入理解并熟练运用ADC的采样序列和数字比较器能让你设计的嵌入式系统在模拟信号处理方面更加高效、智能和可靠。它把一部分确定的、实时的判断逻辑从软件转移到硬件不仅减轻了CPU负担更极大地提高了系统的响应速度和确定性。