1. 项目概述RA8D2 ADC16H的高级调度与协同在嵌入式实时控制系统的核心模数转换器ADC扮演着连接物理世界与数字世界的桥梁角色。无论是电机驱动中的三相电流采样、电源管理中的电压电流监控还是多传感器融合应用中的环境数据采集都对ADC的吞吐量、实时性和同步精度提出了严苛要求。传统的ADC扫描模式通常是按照预设的通道顺序依次进行转换这在处理具有不同紧急程度和时序关联性的多路信号时就显得力不从心。高优先级的紧急信号如过流保护必须等待低优先级的常规巡检完成这种“先来后到”的机制在关键时刻可能导致系统响应延迟甚至引发故障。瑞萨电子RA8D2系列微控制器集成的16位高精度ADC模块ADC16H正是为应对此类复杂场景而生。它超越了基础的单通道或顺序扫描功能引入了组优先级操作和同步操作两大高级调度机制。简单来说你可以将多个模拟输入通道AN000, AN001等划分到不同的“扫描组”中并为每个组设定优先级。当高优先级组的触发信号到来时ADC能够立即中断正在进行的低优先级组转换转而处理更紧急的任务处理完毕后再无缝恢复之前的任务这极大地保障了关键信号的实时性。另一方面当系统需要使用多个ADC单元如ADC0和ADC1同时采集具有严格相位关系的信号时例如电机三相电流同步操作功能可以确保所有ADC单元以完全一致的节拍开始采样和转换消除因启动时间差异带来的相位误差为算法提供精准同步的数据基础。理解并熟练运用这两项功能意味着你能够从“使用ADC”进阶到“驾驭ADC”从而在复杂的嵌入式应用中构建出更可靠、更高效的数据采集系统。接下来我们将深入拆解其设计思路、配置细节、实战步骤以及那些手册上不会写的“避坑指南”。2. 核心功能设计思路与架构解析要驾驭ADC16H的组优先级和同步功能首先必须理解其背后的设计哲学和硬件架构。这不仅仅是配置几个寄存器而是关于如何在硬件层面实现一个灵活、可抢占、可同步的实时数据采集调度器。2.1 扫描组与虚拟通道资源管理的基石ADC16H管理模拟输入通道的核心概念是虚拟通道和扫描组。物理引脚上的模拟输入如AN000需要被分配到某个虚拟通道VC0-VCx这完成了信号源到ADC内部逻辑的映射。而扫描组则是更高一层的任务管理单元一个扫描组可以包含一个或多个虚拟通道并关联到一个特定的ADC单元ADC0或ADC1和一种操作模式如单次扫描、连续扫描。为什么这样设计这种分层架构提供了极大的灵活性。例如在一个电机控制应用中你可以扫描组0高优先级关联到ADC0包含虚拟通道VC0、VC1、VC2分别对应电机的U、V、W三相电流。设置为连续扫描模式以实现对电流的实时、不间断监控。扫描组1低优先级关联到ADC0或ADC1包含虚拟通道VC3、VC4分别对应母线电压和散热器温度。设置为单次扫描模式由定时器周期性触发进行巡检。通过这种分组你将关键的动力系统信号与辅助监控信号区分开来为后续的优先级调度奠定了基础。2.2 组优先级操作实时性的硬件保障组优先级操作的核心理念是可抢占式调度。在支持的操作模式下主要是SAR模式下的单次和连续扫描扫描组被赋予了固定的优先级顺序组0 组1 … 组n。当高优先级组的转换触发信号到来时ADC硬件会执行以下操作中断与上下文保存立即暂停当前低优先级组的转换序列。这里的关键细节是ADC硬件会自动记录被中断组当前转换到了哪个虚拟通道以及该通道的转换状态例如如果使用了多次转换取平均功能已累积的数据是保留还是丢弃有特定规则。执行高优先级任务转而执行高优先级组的所有通道转换。恢复与继续高优先级组任务完成后自动恢复被中断的低优先级组从其被暂停的通道继续完成剩余转换。这种机制的价值在于它用硬件实现了最底层的实时响应。例如当电机驱动芯片检测到瞬间过流触发高优先级组ADC可以立即中断正在进行的温度采样低优先级组在微秒级内完成过流信号的采集让CPU能第一时间进入保护中断例程其响应速度远高于由软件查询标志位再发起转换的方式。2.3 同步操作相位一致性的关键在多ADC单元或需要严格时序对齐的应用中同步操作至关重要。它的目标是让多个ADC单元ADC0和ADC1的采样保持电路在同一时钟边沿同时动作。ADC16H通过一个内部的同步操作周期信号来实现这一点。当使能同步功能后所有ADC单元的操作采样开始、转换开始都会对齐到这个同步周期的边界。即使不同扫描组的触发信号在不同时间到达它们也会先等待直到下一个同步周期起点才真正开始执行。一个典型应用场景是三相电机控制。通常需要同时采样三相电流以准确计算磁场矢量。如果使用两个ADC单元比如ADC0采U、V相ADC1采W相在没有同步功能的情况下两个ADC的启动时刻可能有数个时钟周期的随机偏差导致计算出的电流相位信息存在误差影响控制精度。启用同步操作后可以确保三相信号是在完全相同的时刻被采样从而得到真正“瞬时”的三相数据。2.4 模式兼容性与限制设计的边界并非所有模式都支持这些高级功能理解限制是正确设计的前提组优先级操作仅适用于SAR模式下的单次扫描和连续扫描模式。在过采样模式或混合模式下是禁止的。这是因为过采样和混合模式依赖于特定的数据流和滤波器状态被中断后难以无损恢复。同步操作可以与多种模式结合但带来了严格的时序约束。最核心的限制是每个通道的采样时间与转换时间之和必须是同步操作周期的整数倍。这要求工程师在系统设计初期就需要根据ADC时钟频率和所需采样率仔细计算并协调这些时间参数。专用采样保持电路这是一个提升多通道采样一致性的高级特性。但在组优先级操作中它仅能分配给最高优先级的扫描组使用。这是因为专用S/H电路是独立于ADC核心的硬件资源其状态在任务切换时管理复杂度高。注意硬件限制是铁律。试图在禁止的模式下启用这些功能或者违反同步操作的时序约束将导致ADC行为不可预测可能表现为数据错乱、转换卡死。在调试异常问题时首先应核对寄存器配置是否符合手册中的所有“Restrictions”条款。3. 组优先级操作详解与实战配置理解了设计思路后我们进入实战环节。组优先级操作的配置核心在于几个关键寄存器我们将通过一个具体的电机控制与系统监控案例一步步拆解配置流程和操作细节。3.1 寄存器配置核心解析组优先级操作的使能和模式选择主要通过A/D组扫描优先级控制寄存器进行配置。以下是对关键位的解读PGSm (Priority Group Scan Enable)这是组优先级操作的总开关。必须设置为1来使能该功能。RSCNm (ReStart Control for iNterrupted Group)此位控制被中断的扫描组如何恢复。通常设置为1表示从中断点继续完成未完成的通道转换。如果设为0则中断后该组需要重新触发才能开始新的扫描。LGRRSm (Low Group ReStart Selection)与RSCNm配合进一步细化恢复行为。在大多数需要无缝恢复的场景下也设置为1。GRPm (Group Priority Operation)此位定义了该扫描组是否参与组优先级调度。设为1表示该组遵循优先级规则设为0则表示该组独立运行不参与优先级抢占。一个典型的配置示例假设我们使用扫描组0和组1且都使用ADC0。// 假设 ADC0 对应的组优先级控制寄存器为 ADGSPCR0 ADGSPCR0 0x0000000F; // 二进制: 0000 0000 0000 0000 0000 0000 0000 1111 // 这表示: PGS01, RSCN01, LGRRS01, GRP01 (组0使能优先级) // 对于组1通常有独立的寄存器位或另一个寄存器例如ADGSPCR1 ADGSPCR1 0x0000000F; // 同样使能组1的优先级功能 // 此时组0的优先级天然高于组1。3.2 单次扫描模式下的优先级操作实战场景扫描组1低优先级正在进行AN001、AN002、AN003三个通道的单次扫描。此时扫描组0高优先级仅AN000通道的触发信号到来。硬件行为流程组1扫描开始组1的触发信号启动ADC开始按顺序转换AN001。高优先级触发中断在转换AN002的过程中或任何时刻组0的触发信号到达。上下文保存与切换ADC硬件立即暂停组1对AN002的转换如果正在转换并保存当前进度。随后立即开始组0的扫描转换AN000。高优先级任务完成AN000转换完成数据存入ADDR0并可产生扫描结束中断。低优先级任务恢复ADC自动回到组1从被中断的通道AN002继续完成其剩余的转换AN002, AN003。配置要点与心得中断服务程序在组0高优先级的扫描结束中断服务程序中应尽快读取ADDR0的数据并进行处理如判断是否过流。由于组1的恢复是硬件自动完成的无需在软件中进行特殊操作。数据一致性如果组1的通道使用了A/D转换值加法/平均功能需要特别注意在单次扫描模式下如果转换序列被中断正在进行的累加或平均的中间结果会被丢弃。恢复后该通道的转换会从头开始重新进行指定次数的转换。这意味着对于使用了平均功能的低优先级通道其数据更新周期在发生抢占后会变长。触发源管理高优先级组的触发源应选择响应速度最快的来源如PWM保护触发、GPIO外部中断等。低优先级组可以使用常规的定时器触发。3.3 连续扫描模式下的优先级操作实战连续扫描模式下的行为更为复杂因为它涉及一个“常驻”的后台任务。场景扫描组1低优先级被配置为连续扫描模式持续循环采集AN001-AN003。扫描组0高优先级为单次扫描模式采集AN000。硬件行为流程组1连续运行组1启动后便持续在AN001-AN002-AN003-AN001…这个循环中运行。高优先级触发组0触发信号到来。抢占与执行组1的连续扫描被中断组0执行一次单次扫描。恢复组0完成后组1的连续扫描从断点处恢复并继续循环。关键限制与陷阱 这是手册中明确强调且极易出错的一点在连续扫描模式下禁止向已启动连续扫描的组输入优先级低于它的触发信号。正确情况低优先级组组1在连续扫描高优先级组组0触发可以中断它。禁止情况高优先级组组0在连续扫描虽然不常见但可能此时输入低优先级组组1的触发信号。此操作不被保证可能导致功能异常。实战建议在设计系统时通常将需要最高实时性、但数据量小的关键保护信号如过流、过压设为高优先级、单次扫描模式。将需要连续监控的常规信号如温度、电压设为低优先级、连续扫描模式。这样既保证了关键信号的即时响应又实现了常规信号的持续观测。3.4 专用采样保持电路在优先级操作中的应用专用采样保持电路可以显著提升多通道采样的同步性因为它能为每个通道独立保持采样瞬间的电压值。但在组优先级操作中它有一个重要限制只能分配给当前参与优先级操作的所有组中优先级最高的那个组使用。配置逻辑通过ADSHnCR寄存器使能特定通道的专用S/H电路如SH0, SH1。在ADSHEXCR寄存器中将这些使能的S/H电路分配给指定的扫描组。如果同时使能了组0和组1的优先级操作且组0优先级更高那么只能将专用S/H电路分配给组0。试图同时分配给组0和组1或单独分配给组1都可能违反硬件限制。优势对于高优先级组使用专用S/H意味着组内所有通道的采样时刻可以非常接近尽管不是绝对同时但远优于共享S/H的轮流采样这对于需要分析同一时刻多个关键信号的应用如三相电流非常有价值。4. 同步操作详解与精密时序设计同步操作的目标是让多个ADC单元“齐步走”它的配置核心在于时序的精确计算与对齐。4.1 同步操作的基础配置同步功能通过A/D同步控制寄存器进行配置。其中ADSYCYC[7:0]位域定义了同步操作周期的长度单位为ADCLK周期。使能同步操作的基本步骤禁用同步首先确保ADSYCR.ADSYDISm位为1禁用以便安全配置其他参数。计算并设置周期根据系统需求如目标采样率和ADC时钟ADCLK计算ADSYCYC值。例如若ADCLK60MHz希望同步周期为1μs则ADSYCYC 1μs / (1/60MHz) 60。将其写入ADSYCYC[7:0]。配置通道时序这是最关键也是最容易出错的一步。必须确保每个通道的采样时间与转换时间之和是同步操作周期的整数倍。采样时间由ADSSTRx.SSTy[9:0]设置。转换时间由ADCNVSTR.CSTm[5:0]设置通常是固定值取决于分辨率和硬件。验证公式(SSTy CSTm) % ADSYCYC 0。如果不满足需要调整SSTy或ADSYCYC。使能同步将ADSYDISm位清零使能同步操作。4.2 同步操作模式下的行为分析使能同步后ADC的行为发生变化触发等待当某个扫描组的触发信号到来时ADC不会立即开始采样而是等待下一个同步周期边沿。同步启动在同步边沿所有已收到触发信号且等待中的扫描组将同时开始它们的采样操作。节拍运行后续每个通道的采样、保持、转换操作都严格遵循同步周期的节拍。这种机制带来的好处是确定性。无论触发信号何时到达所有相关ADC单元的开始时刻偏差是固定的小于一个同步周期这对于需要计算通道间相位差的应用如功率因数测量至关重要。4.3 与专用采样保持电路协同工作当同步操作与专用S/H电路结合时时序要求更为严格。除了基础的要求外还需满足S/H切换时间对齐专用S/H电路的保持模式切换时间SHHST必须设置为与ADC的转换时间CSTm相等。即ADSHSTRm.SHHST[2:0] ADCNVSTR.CSTm[5:0]。S/H周期对齐专用S/H电路的采样时间与保持切换时间之和也必须是同步周期的整数倍。即(SHSST SHHST) % ADSYCYC 0。配置示例 假设ADCLK60MHzADSYCYC60(周期1μs)CSTm14个ADCLK周期。则必须设置SHHST 14。若设置SHSST 46则46 14 60满足整数倍关系。对于ADC通道需设置SSTy 60 - 14 46。这样专用S/H电路和ADC核心的整个工作循环都被严格锁相在1μs的同步周期内。4.4 断开检测辅助功能与同步的关联断开检测辅助功能用于检测传感器线路是否断开。当它与同步功能一起使用时有一个简单但必须遵守的规则断开检测周期必须等于同步操作周期。 即ADSGDCRn.ADNDIS[7:0] ADSYCR.ADSYCYC[7:0]。 这是因为断开检测也需要在固定的时间窗口内进行测量将其周期与同步周期对齐可以简化系统时序避免时序冲突。5. 实战配置流程与代码示例让我们结合一个具体的电机控制应用场景将组优先级和同步操作配置起来。假设系统需要高优先级组组0使用ADC0通过专用S/H电路SH0, SH1, SH2同步采样电机三相电流AN000, AN002, AN004单次扫描由PWM保护事件触发。低优先级组组1使用ADC0常规采样母线电压AN001和温度AN003连续扫描由定时器触发。同步组组2使用ADC1采样另一路隔离后的三相电压AN006, AN008, AN010需要与组0的电流采样严格同步单次扫描由同一PWM事件触发。5.1 初始化步骤与寄存器配置以下是一个简化的C语言配置流程重点展示关键步骤/* 步骤1: 基础时钟与模式配置 */ R_ADC0-ADMOD 0x00000001; // 设置ADC0为SAR模式 R_ADC1-ADMOD 0x00000001; // 设置ADC1为SAR模式 /* 步骤2: 配置同步操作周期 (假设ADCLK60MHz 目标同步周期1us) */ uint32_t sync_cycle 60; // 60 ADCLK cycles 1us 60MHz R_ADC0-ADSYCR (0 0) | (sync_cycle 8); // ADSYCYC60, ADSYDIS00 (使能同步) R_ADC1-ADSYCR (0 16) | (sync_cycle 24); // ADSYCYC60, ADSYDIS10 /* 步骤3: 配置通道采样时间与转换时间确保满足整数倍关系 */ uint32_t cst_time 14; // 假设16位转换需要14个ADCLK uint32_t sst_time sync_cycle - cst_time; // 46个ADCLK // 配置ADC0的转换时间 R_ADC0-ADCNVSTR (cst_time 0); // 配置所有相关通道的采样时间 (示例为通道0) R_ADC0-ADSSTR0 (sst_time 0); // 对AN000 /* 步骤4: 配置专用采样保持电路 (用于高优先级组0) */ // 使能SH0, SH1, SH2并设置采样和保持时间 R_ADC0-ADSH0CR | 0x00000001; // 使能SH0 R_ADC0-ADSHSTR0 ((46 0) | (14 8)); // SHSST46, SHHST14 (必须等于CST) // 类似配置SH1, SH2... // 将SH0,1,2分配给扫描组0 R_ADC0-ADSHEXCR (0x00000007 0); // 位[2:0]111 表示SH0,1,2分配给组0 /* 步骤5: 配置虚拟通道与扫描组 */ // 将物理通道AN000, AN002, AN004映射到虚拟通道0,1,2并分配给组0 R_ADC0-ADVCSPR0 (0x0000 0) | (0x0002 16); // VC0AN000, VC1AN002 R_ADC0-ADVCSPR1 (0x0004 0); // VC2AN004 R_ADC0-ADSGR0 (0x00000007 0); // 组0包含VC0, VC1, VC2 // 配置组1低优先级连续扫描 R_ADC0-ADVCSPR2 (0x0001 0) | (0x0003 16); // VC3AN001, VC4AN003 R_ADC0-ADSGR1 (0x00000018 0); // 组1包含VC3, VC4 (0x18 二进制11000即bit3,4) R_ADC0-ADCSR1 0x00000001; // 设置组1为连续扫描模式 // 配置ADC1的组2同步组 R_ADC1-ADVCSPR6 (0x0006 0) | (0x0008 16); // VC6AN006, VC7AN008 R_ADC1-ADVCSPR7 (0x000A 0); // VC8AN010 R_ADC1-ADSGR2 (0x000001C0 0); // 组2包含VC6, VC7, VC8 /* 步骤6: 配置组优先级操作 */ // 使能ADC0的组优先级功能并设置组0和组1参与优先级调度 R_ADC0-ADGSPCR0 (1 0) | (1 1) | (1 2) | (1 3); // PGS01, RSCN01, LGRRS01, GRP01 // 对于组1通常有独立的寄存器字段假设在ADGSPCR1中 R_ADC0-ADGSPCR1 (1 16) | (1 17) | (1 18) | (1 19); // 使能组1优先级 /* 步骤7: 配置触发源 */ // 组0高优先级和组2同步组使用PWM保护触发 R_ADC0-ADSTRGR0 0x0000000A; // 假设选择PWM单元0的故障触发作为组0触发源 R_ADC1-ADSTRGR2 0x0000000A; // 组2使用相同的触发源以实现同步启动 // 组1低优先级使用定时器触发 R_ADC0-ADSTRGR1 0x00000003; // 假设选择GPT定时器触发 /* 步骤8: 使能中断并启动 */ // 使能组0和组2的扫描结束中断高优先级和同步组需要快速响应 R_ADC0-ADIER0 | 0x00000001; // 使能组0扫描结束中断 R_ADC1-ADIER2 | 0x00000004; // 使能组2扫描结束中断 (假设位2对应组2) // 启动ADC单元 R_ADC0-ADCSR0 | 0x00000001; // 启动ADC0 R_ADC1-ADCSR0 | 0x00000001; // 启动ADC1 // 组1的连续扫描将在其触发源到来时自动开始5.2 中断服务程序处理要点// 高优先级组0电机电流中断服务程序 void ADC0_Group0_ScanEnd_IRQHandler(void) { // 1. 清除中断标志 R_ADC0-ADSCANENDSR0 | 0x00000001; // 2. 快速读取数据 int16_t phaseU_current (int16_t)R_ADC0-ADDR0; int16_t phaseV_current (int16_t)R_ADC0-ADDR1; int16_t phaseW_current (int16_t)R_ADC0-ADDR2; // 3. 紧急处理如过流判断、保护动作 if(phaseU_current OVER_CURRENT_THRESHOLD || phaseV_current OVER_CURRENT_THRESHOLD || phaseW_current OVER_CURRENT_THRESHOLD) { PWM_Shutdown(); // 立即关闭PWM输出 Set_Fault_Flag(); } // 4. 可选将数据送入FIFO或传递给任务进行后续控制算法计算 // ... } // 同步组2电机电压中断服务程序 void ADC1_Group2_ScanEnd_IRQHandler(void) { R_ADC1-ADSCANENDSR2 | 0x00000004; // 清除标志 int16_t phaseU_voltage (int16_t)R_ADC1-ADDR6; int16_t phaseV_voltage (int16_t)R_ADC1-ADDR7; int16_t phaseW_voltage (int16_t)R_ADC1-ADDR8; // 由于与组0同步触发此处的电压与组0的电流是同一时刻采样的 // 可用于精确的功率计算或观测器更新 }6. 常见问题、调试技巧与避坑指南即使按照手册配置在实际调试中也可能遇到各种问题。以下是我在多个项目中总结出的常见陷阱和解决思路。6.1 组优先级操作不生效或行为异常问题现象高优先级触发后低优先级组没有被中断或者中断后恢复的位置不对。排查清单模式检查确认ADC是否工作在SAR模式下的单次扫描或连续扫描。在过采样或混合模式下组优先级功能是禁止的。检查ADMOD寄存器。寄存器配置验证逐位核对ADGSPCRm寄存器。PGSm必须为1总使能。GRPm必须为1该组参与优先级调度。常见错误是只设置了高优先级组的GRP忘了设置低优先级组的GRP导致低优先级组根本不参与优先级体系无法被抢占。确保高优先级组的组编号确实小于低优先级组组0 组1 组2 …。触发源确认确保高优先级组的触发信号确实产生了。可以用示波器监控对应的触发输入引脚或者在中断服务程序中设置一个翻转IO口的语句来验证触发是否到达以及中断是否响应。连续扫描模式下的禁忌绝对不要向一个已处于连续扫描状态的组发送一个优先级比它低的组的触发信号。这是硬件禁止的行为会导致不可预知的结果。在设计触发逻辑时务必保证这一点。6.2 同步操作下数据错位或采样率不对问题现象使能同步后采样周期变得不稳定或者多个ADC单元的数据看起来没有对齐。排查清单时序公式验证这是最关键的步骤。必须严格验证SSTy CSTm N * ADSYCYC。计算时注意SSTy和CSTm的单位都是ADCLK周期。使用一个简单的调试函数在初始化后打印计算值void Check_Sync_Timing(uint32_t sst, uint32_t cst, uint32_t sync_cycle) { if ( ((sst cst) % sync_cycle) ! 0 ) { printf(Error: Timing mismatch! (SST:%lu CST:%lu) %% SYNC:%lu %lu\n, sst, cst, sync_cycle, (sstcst)%sync_cycle); // 此处可以进入错误处理或调整参数 } }专用S/H电路时序如果使用了专用S/H还需额外验证SHSST SHHST M * ADSYCYC以及SHHST CSTm。任何一个等式不满足同步都会出问题。同步使能时机务必在配置好所有时序参数后最后才将ADSYDISm位清零来使能同步。如果在配置中途使能ADC可能以不确定的时序开始工作。监控信号充分利用ADC16H提供的监控信号输出功能。将ADSYNC、ADnFLAG1、ADSTn信号配置到特定的GPIO引脚上用示波器观察。ADSYNC应该看到周期非常稳定的脉冲其周期等于ADSYCYC * ADCLK。ADSTn当某个ADC单元开始扫描时此信号应拉高并在ADSYNC的边沿对齐。ADnFLAG1此信号在转换期间拉高可以直观看到每次转换的耗时是否与CSTm设置相符。 通过观察这些波形可以直观判断同步是否真正生效以及时序是否符合预期。6.3 断开检测功能与同步周期冲突问题现象同时使能断开检测和同步功能后断开检测结果不准或ADC工作异常。解决方案牢记规则断开检测周期必须等于同步操作周期。即ADSGDCRn.ADNDIS[7:0]必须设置为与ADSYCR.ADSYCYC[7:0]相同的值。如果忘记设置或者设置成不同的值内部时序会产生冲突。6.4 中断服务程序中的耗时操作影响实时性问题现象高优先级组虽然能及时抢占ADC转换但CPU却在中断服务程序中花费了太长时间处理数据导致系统响应变慢甚至可能影响下一次高优先级触发。优化建议中断服务程序只做最紧急的事在最高优先级的中断里如过流保护只进行标志位判断、执行最紧要的保护动作如关闭PWM、设置故障标志。避免在中断中进行复杂计算、浮点运算或大量数据搬移。使用DMA或FIFO对于需要后续处理的数据如用于电流环计算的采样值配置ADC在转换结束后直接通过DMA将数据搬运到指定的内存缓冲区或者存入FIFO。中断服务程序仅需检查DMA完成标志或FIFO状态然后触发一个低优先级的软件任务来处理这些数据。测量中断延迟在中断入口和出口翻转一个GPIO用示波器测量脉冲宽度即可准确知道该中断服务程序的最大执行时间。确保这个时间远小于高优先级事件的最小发生间隔。6.5 电源噪声与参考电压的影响一个更深层次的坑即使软件配置完美如果硬件电路设计不当高精度ADC的性能也无法发挥在组切换或同步时刻可能引入噪声。硬件设计检查点参考电压VREFH和VREFL引脚必须连接高质量、低噪声的去耦电容通常推荐一个10μF的钽电容并联一个0.1μF的陶瓷电容并且走线尽可能短、粗远离数字噪声源。模拟电源隔离AVCC电源最好使用磁珠或小电阻从数字电源VCC隔离并采用独立的LC滤波网络。采样保持时间对于高阻抗信号源需要确保SSTy设置的采样时间足够长让采样电容上的电压能够稳定到目标精度。可以尝试逐步增加SSTy的值观察转换结果是否稳定下来以确定最小值。同步操作下的电流尖峰当多个ADC单元或通道在同步信号边沿同时开始采样时可能会从AVCC吸入较大的瞬时电流造成电源毛刺。在AVCC引脚附近增加更大容量的储能电容如1μF有助于缓解此问题。