深入解析RA8T1 ADC12高级功能:连续采样、硬件比较与组调度

📅 2026/6/28 14:47:12
深入解析RA8T1 ADC12高级功能:连续采样、硬件比较与组调度
1. 项目概述与ADC12核心价值在嵌入式系统开发尤其是工业控制、电机驱动和精密传感器采集领域模数转换器ADC的性能往往是决定整个系统精度和实时性的关键瓶颈。很多开发者在使用MCU内置ADC时往往只停留在“配置通道、启动转换、读取结果”的基础层面却忽略了其内部丰富的寄存器功能所能带来的巨大潜力。这就像只开了一辆高性能跑车的经济模式完全浪费了它的澎湃动力和精准操控。瑞萨电子的RA8T1系列微控制器集成的ADC12模块就是一个典型的“性能富矿”。它远不止是一个简单的12位逐次逼近型SARADC其内部集成了通道专用的采样保持电路、灵活可配的窗口比较器以及复杂的多通道组扫描与优先级控制逻辑。这些高级功能通过一系列精心设计的寄存器进行控制能够将ADC从一个被动的数据采集单元转变为一个主动的、智能的“信号处理前端”。本次我们就来深入挖掘RA8T1 ADC12模块中几个常被忽视但至关重要的寄存器ADSHMSR采样保持模式选择寄存器、ADCMPCR比较功能控制寄存器和ADGSPCR组扫描优先级控制寄存器。理解并熟练运用它们你就能实现诸如后台连续采样以消除转换间隙、基于硬件比较的即时事件触发、以及多任务场景下的ADC资源动态调度从而大幅提升系统响应速度、降低CPU中断负载并增强系统的可靠性。对于从事电机FOC控制、多路传感器监控或电池管理系统BMS开发的工程师来说掌握这些内容是从“能用”到“用好”ADC的必经之路。2. 核心寄存器功能深度解析要驾驭ADC12的高级功能必须首先理解其核心控制逻辑。这些功能并非孤立存在而是与ADC的基础状态机紧密耦合。一个最重要的前提是在修改大多数高级功能寄存器如ADSHMSR.SHMD, ADCMPCR, ADGSPCR之前必须确保ADC转换已停止即ADCSR.ADST位为0。这是一个硬性安全规则违反它可能导致不可预测的硬件行为或转换错误。2.1 ADSHMSR解锁后台连续采样的钥匙ADSHMSR (A/D Sample and Hold Operation Mode Selection Register)寄存器虽然只有最低位SHMD有效但它控制着ADC12一项极为实用的特性通道专用采样保持电路的连续采样模式。2.1.1 寄存器位域与功能该寄存器位于偏移地址0x07C。其核心是第0位SHMD (Sampling Operation Selection)SHMD 0常规采样模式。这是默认状态。采样保持电路仅在ADC转换序列真正对该通道执行“采样”阶段时工作采样完成后立即进入“保持”状态以供转换。SHMD 1启用连续采样功能。此时被ADSHCR.SHANS[2:0]位选中的那个通道专用的采样保持电路会在ADC不进行转换操作的空闲时间里持续对模拟输入信号进行采样。2.1.2 工作原理与性能优势理解这个功能需要先了解RA8T1 ADC12的一个关键架构特点它为部分或全部通道配备了专用的采样保持电路。在常规模式下当ADC转换器忙于转换其他通道时这个专用电路是闲置的。启用SHMD1后情况发生了变化ADC空闲时专用采样保持电路持续对目标通道的输入信号进行跟踪和采样。ADC启动转换时该电路瞬间从“采样”切换到“保持”状态将刚刚采样的电压值锁存住供ADC核心进行转换。这样做带来的直接好处是消除了“采样建立时间”。在常规模式下ADC切换到某个通道后需要等待采样保持电路的电容充电到输入电压建立时间这个时间与信号源阻抗有关。而在连续采样模式下电容始终跟踪着输入电压转换启动时几乎无需等待特别适合需要极高转换速率或对信号建立时间敏感的应用。2.1.3 关键配置约束与实操要点配置时机绝对关键必须在ADCSR.ADST 0ADC停止且ADSHCR.SHANS[2:0]已选好目标通道时才能设置SHMD位。顺序错误会导致功能异常。启动延迟要求手册明确要求将SHMD设置为1后必须等待至少400ns在信号源阻抗≤1kΩ的条件下才能将ADCSR.ADST置1启动转换。这是为了保证采样保持电路有足够的时间进入稳定的连续采样状态。在实际编程中通常插入几个NOP指令或一个短延时函数即可满足。应用场景此功能非常适合对单一关键高速信号例如电机相电流、高频振动传感器进行连续监控。你可以将其他通道配置为按需扫描而这个关键通道则通过SHMD实现“随时待命瞬时捕获”。注意连续采样功能会略微增加功耗因为采样保持电路始终在工作。在低功耗应用中需权衡利弊。2.2 ADCMPCR硬件窗口比较器让ADC学会“判断”ADCMPCR (A/D Compare Function Control Register)是ADC12的“大脑”之一它赋予了ADC硬件级别的实时判断能力。无需CPU干预ADC自身就能判断转换结果是否超出预设范围并立即触发中断或事件。2.2.1 核心位域详解这个16位寄存器控制着两套独立的比较窗口Window A和Window B以及它们的组合逻辑。CMPAE / CMPBE (Bit 11 / Bit 9)分别使能比较窗口A和B。只有使能后对应的窗口比较逻辑才会生效。修改此位前也必须确保ADST0。WCMPE (Bit 14)窗口功能使能位。这是理解比较模式的关键。WCMPE 0单边界比较器模式。此时每个窗口只使用一个参考值Window A用ADCMPDR0Window B用ADWINLLB。比较逻辑是简单的“大于”或“小于”由CMPLCHAn等位决定。WCMPE 1双边界窗口比较模式。此时每个窗口使用上下两个参考值Window A用ADCMPDR0和ADCMPDR1Window B用ADWINLLB和ADWINULB。比较逻辑可以是“区间内”或“区间外”用于检测信号是否落在正常范围内。CMPAIE / CMPBIE (Bit 15 / Bit 13)比较中断使能。当窗口A或B的比较条件满足时是否产生ADC12i_CMPAI或ADC12i_CMPBI中断。这实现了基于模拟信号的即时事件响应。CMPAB[1:0] (Bit 1:0)窗口A/B复合条件设置。这是最精彩的部分仅在单次扫描模式且两个窗口都使能时有效。它定义了如何综合两个窗口的比较结果来产生最终的匹配事件(ADC12i_WCMPM)或不匹配事件(ADC12i_WCMPUM)输出。00逻辑或 (OR)。窗口A或窗口B条件满足即输出匹配。01逻辑异或 (XOR)。窗口A和窗口B条件只有一个满足时输出匹配。这可用于检测信号偏离了哪个预设范围。10逻辑与 (AND)。窗口A和窗口B条件同时满足才输出匹配。这可以创建更复杂的判断条件。11 禁止设置。2.2.2 比较条件逻辑图解理解CMPLCHAn在ADCMPLR0/1中和WCMPE的配合至关重要。下图清晰地展示了其逻辑关系当 WCMPE 0 (单边界模式)时CMPLCHAn 0 判断A/D转换结果ADCMPDR0(或ADWINLLB) 不满足。CMPLCHAn 1 判断A/D转换结果ADCMPDR0(或ADWINLLB) 满足。当 WCMPE 1 (窗口模式)时CMPLCHAn 0 判断A/D转换结果ADCMPDR0或ADCMPDR1 满足即在区间外。CMPLCHAn 1 判断ADCMPDR0A/D转换结果ADCMPDR1 满足即在区间内。2.2.3 实战应用场景过压/欠压保护在电源监控中设置Window A为欠压阈值单边界CMPLCHA0Window B为过压阈值单边界CMPLCHA1。使用CMPAB00(OR逻辑)电压一旦低于欠压点或高于过压点立即触发中断进行保护。容错区间监测在传感器信号监测中设置Window A和B为同一个合理范围窗口模式CMPLCHA1。使用CMPAB10(AND逻辑)虽然此处不典型更常用的是单个窗口的区间内判断。更高级的用法是设置两个有重叠的区间用XOR逻辑判断信号处于哪个特定子区间。硬件触发事件比较匹配事件ADC12i_WCMPM可以连接到其他外设如GPTDTC用于触发特定操作。例如当温度传感器读数超过阈值时自动触发风扇控制PWM的占空比调整全程无需CPU参与。2.3 ADGSPCR多通道扫描的智能调度器在复杂的嵌入式应用中ADC往往需要服务多个具有不同实时性要求的任务。ADGSPCR (A/D Group Scan Priority Control Register)就是为了解决多通道扫描的优先级抢占与恢复问题而设计的。2.3.1 寄存器位域与工作模式基础RA8T1的ADC12支持将通道分组例如Group A和Group B进行扫描。ADGSPCR在组扫描模式(ADCSR.ADCS[1:0]01b)下生效。PGS (Bit 0)组优先级操作设置。这是总开关必须置1才能启用后续的优先级控制功能。GBRSCN (Bit 1)低优先级组重启设置。这是核心控制逻辑之一。GBRSCN 0禁用重新扫描。如果高优先级组触发并打断了低优先级组的扫描低优先级组被停止并丢弃。即使高优先级组转换完成低优先级组也不会自动继续。GBRSCN 1启用重新扫描。如果低优先级组扫描被高优先级组打断在高优先级组扫描完成后自动重新开始低优先级组的扫描。LGRRS (Bit 14)重启通道选择。仅在PGS1且GBRSCN1时有效。它决定了低优先级组被中断后恢复扫描时的起点。LGRRS 0从该组的第一个通道开始重新扫描。无论中断时扫描到哪个通道都从头再来。LGRRS 1从该组中未完成转换的通道开始继续扫描。这保证了数据采集的连续性不会丢失被中断通道的数据。GBRP (Bit 15)单次扫描连续启动。这是一个特殊模式当PGS1时将此位置1会持续地对低优先级组进行单次扫描。一旦一次单次扫描完成立即自动开始下一次形成一种“低优先级后台连续扫描”的效果。在此模式下GBRSCN的设置会被忽略。2.3.2 优先级调度流程与场景分析让我们通过一个典型电机控制结合温度监控的场景来理解其工作流程配置Group A (高优先级) 包含电机三相电流采样通道AN0, AN1, AN2。配置为由PWM定时器触发的扫描用于FOC电流环控制要求极高的实时性和确定性。Group B (低优先级) 包含多个温度、电压监控通道AN10, AN11, AN12。配置为软件触发或低速定时器触发用于系统状态监测。设置PGS1,GBRSCN1,LGRRS1。运行过程系统初始化后ADC开始扫描低优先级的Group B温度监控。当PWM定时器触发事件到来例如每个PWM周期中点高优先级的Group A立即抢占ADC资源中断Group B的扫描开始转换三相电流。Group A转换完成后由于GBRSCN1且LGRRS1ADC自动从Group B被中断的那个通道开始继续完成剩余的转换。如果Group B扫描期间再次被Group A打断流程重复。模式选择考量GBRSCN0, LGRRSX 适用于低优先级组的数据可丢弃的场景。例如周期性刷新显示用的慢速AD值被关键控制任务打断后丢一帧数据无关紧要。GBRSCN1, LGRRS0 适用于低优先级组需要完整扫描但不要求数据严格连续的场景。例如巡检多个传感器即使被打断下次也是重新完整巡检一遍。GBRSCN1, LGRRS1 适用于低优先级组数据必须连续、不允许丢失任何一次采样的场景。这是最精细的资源调度模式。GBRP1 适用于需要持续、独立地监控一组后台信号且这组信号的扫描不希望被其他任何高优先级任务影响其连续性的场景。此时高优先级组仍然可以抢占但低优先级组会以“单次扫描-完成-立即启动下一次”的循环持续运行。3. 寄存器配置实战与代码示例理解了原理我们通过具体代码来展示如何配置这些高级功能。以下示例基于RA8T1的HAL库风格代码并假设已完成ADC模块的基础初始化时钟、引脚等。3.1 配置连续采样模式ADSHMSR假设我们需要对通道5AN05进行连续采样以实现最快的转换响应。/** * brief 配置ADC1的通道5启用连续采样模式 * note 必须在ADC停止状态下配置 */ void ADC_ConfigureContinuousSampling(void) { /* 1. 确保ADC转换已停止 */ while(ADC12.ADCSR.BIT.ADST ! 0) { /* 等待 */ } ADC12.ADCSR.BYTE 0x00; // 确保ADST0 /* 2. 选择通道5使用其专用采样保持电路 */ ADC12.ADSHCR.BIT.SHANS 5; // 选择AN05通道 /* 3. 启用连续采样模式 */ ADC12.ADSHMSR.BIT.SHMD 1; /* 4. 关键等待至少400ns以满足采样建立时间要求 */ /* 方法一插入NOP指令需根据主频计算数量*/ // for(uint32_t i0; i10; i) { __NOP(); } /* 方法二使用微秒延时函数更可靠 */ R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MICROSECONDS); // 延时1us远大于400ns /* 5. 后续可以正常配置扫描序列并启动ADC */ // ADC12.ADANSA0.BIT.ANSA5 1; // 将通道5加入扫描组 // ... 其他配置 // ADC12.ADCSR.BIT.ADST 1; // 启动转换 }实操心得这里的400ns等待是手册在特定源阻抗下的要求。在实际应用中如果信号源阻抗较高例如来自高输出阻抗的传感器这个时间可能需要更长。一个稳健的做法是在启用连续采样后先对该通道执行一次“哑”转换并丢弃结果让采样保持电容充分充电到稳定值然后再开始正式的数据采集。3.2 配置硬件窗口比较器ADCMPCR及相关寄存器假设我们需要监控通道0AN00的电压当电压低于1.0V欠压或高于3.0V过压时立即产生中断。我们使用Window A的窗口比较模式来实现“区间外”报警。/** * brief 配置ADC1的窗口比较功能监测AN00超出[1.0V, 3.0V]范围则中断 * param vref: ADC参考电压 (单位: mV) */ void ADC_ConfigureWindowCompare(uint32_t vref_mv) { /* 0. 计算比较阈值对应的ADC数字值 (12位精度) */ uint16_t lower_threshold (uint16_t)((1000UL * 4096) / vref_mv); // 1.0V对应值 uint16_t upper_threshold (uint16_t)((3000UL * 4096) / vref_mv); // 3.0V对应值 /* 1. 确保ADC停止 */ while(ADC12.ADCSR.BIT.ADST ! 0) { /* 等待 */ } /* 2. 必须先禁用比较功能才能安全配置相关寄存器 */ ADC12.ADCMPCR.WORD 0x0000; // 清除所有比较使能位 /* 3. 配置窗口A的上下限寄存器 (ADCMPDR0, ADCMPDR1) */ ADC12.ADCMPDR0 lower_threshold; // 下限1.0V ADC12.ADCMPDR1 upper_threshold; // 上限3.0V /* 4. 选择通道0启用窗口比较 */ ADC12.ADCMPANSR0.BIT.CMPCHA00 1; // 使能AN00的比较功能 /* 5. 设置通道0的比较条件为“区间外” */ /* 在窗口模式下(WCMPE1)CMPLCHAxx0 表示 (结果 下限) OR (结果 上限) */ ADC12.ADCMPLR0.BIT.CMPLCHA00 0; /* 6. 配置比较控制寄存器 */ ADC12.ADCMPCR.BIT.WCMPE 1; // 使能窗口功能双边界 ADC12.ADCMPCR.BIT.CMPAE 1; // 使能窗口A ADC12.ADCMPCR.BIT.CMPAIE 1; // 使能窗口A比较匹配中断 /* 本例只用一个窗口CMPBE保持0CMPAB位无效 */ /* 7. 清除可能存在的旧状态标志 */ ADC12.ADCMPSR0.WORD ~(1u 0); // 清除通道0的比较状态标志 /* 8. 配置NVIC启用ADC比较中断 (ADCMPAI) */ /* ... NVIC配置代码 ... */ /* 9. 将AN00加入常规扫描序列 */ ADC12.ADANSA0.BIT.ANSA00 1; /* 10. 现在可以启动ADC扫描了 */ // ADC12.ADCSR.BIT.ADST 1; } /** * brief ADC比较中断服务例程 */ void ADC_CMPA_IRQHandler(void) { if(ADC12.ADCMPSR0.BIT.CMPSTCHA00 1) { /* 通道0发生了越限事件 */ uint16_t ad_value ADC12.ADDR00; // 读取触发时的转换值 // 进行紧急处理如关闭负载、记录故障等... /* 必须通过“读-改-写”方式清除状态标志 */ ADC12.ADCMPSR0.WORD ~(1u 0); // 写0清除对应标志位 } // ... 检查其他通道标志 }3.3 配置组扫描优先级ADGSPCR假设我们有两个任务任务A高优先级需要以100kHz速率采样3个电流通道AN0-AN2任务B低优先级需要以1kHz速率巡检4个温度通道AN10-AN13。我们希望高优先级任务能打断低优先级任务且低优先级任务能从中断点恢复。/** * brief 配置ADC1的组扫描与优先级控制 */ void ADC_ConfigureGroupPriorityScan(void) { /* 1. 停止ADC */ ADC12.ADCSR.BIT.ADST 0; while(ADC12.ADCSR.BIT.ADST ! 0) { /* 等待 */ } /* 2. 配置扫描模式为组扫描模式 (必须先于PGS设置) */ ADC12.ADCSR.BIT.ADCS 0x01; // 01b 组扫描模式 /* 3. 配置组A高优先级通道 */ ADC12.ADANSA0.WORD 0x0007; // AN00, AN01, AN02 (Bit0,1,2) /* 配置组A的触发源为GPT定时器触发等... */ // ADC12.ADSTRGR.BIT.TRSA 0x0A; // 例如选择GPT0比较匹配A触发 /* 4. 配置组B低优先级通道 */ ADC12.ADANSB0.WORD 0x3C00; // AN10, AN11, AN12, AN13 (Bit10,11,12,13) /* 配置组B的触发源为软件触发或低速定时器... */ // ADC12.ADSTRGR.BIT.TRSB 0x00; // 软件触发 /* 5. 配置组扫描优先级控制寄存器 */ ADC12.ADGSPCR.BIT.PGS 1; // 使能组优先级操作 ADC12.ADGSPCR.BIT.GBRSCN 1; // 低优先级组被中断后允许重新扫描 ADC12.ADGSPCR.BIT.LGRRS 1; // 重新扫描时从未完成的通道开始继续 ADC12.ADGSPCR.BIT.GBRP 0; // 不使用低优先级组连续单次扫描 /* 6. 配置其他参数转换时间、中断等 */ ADC12.ADADC.BIT.ADC 0; // 12位精度 // ... 其他通用配置 /* 7. 启动ADC通常由高优先级组的硬件触发自动启动 */ // 对于组扫描通常设置ADST1后等待触发信号。 // ADC12.ADCSR.BIT.ADST 1; } /** * brief 启动低优先级组B的扫描软件触发示例 */ void ADC_StartLowPriorityGroupScan(void) { /* 在组扫描模式下对低优先级组使用软件触发 */ ADC12.ADCSR.BIT.TRGE 1; // 使能触发启动 ADC12.ADCSR.BIT.TRGE 0; // 对于软件触发此位由硬件清零或通过特定操作触发 /* 实际中软件触发可能通过向ADSTRGR寄存器写入特定值实现具体请参考手册 */ }4. 高级功能实战故障诊断与动态重配置4.1 断线检测辅助功能ADDISCR的应用ADDISCR寄存器用于启用断线检测辅助功能。当模拟输入通道断开开路时采样电容可能无法正常充电导致转换结果漂移或不确定。此功能通过在进行正式转换前对输入引脚进行一段时间的预充电PCHG1或放电PCHG0可以更可靠地检测出这种开路状态。配置要点禁用场景当使用温度传感器、内部参考电压或自诊断功能时必须将此功能禁用ADNDIS[3:0]0000b。配置时机同样需要在ADST0时配置。周期设置ADNDIS[3:0]设置预充电/放电的周期长度。需要根据外部电路的时间常数来调整。设置过短可能效果不佳设置过长会增加转换周期。通常需要实验确定。/* 启用断线检测辅助功能预充电周期设为8个状态时间 */ ADC12.ADDISCR.BIT.PCHG 1; // 选择预充电模式 ADC12.ADDISCR.BIT.ADNDIS 0x8; // 设置周期非0非1的值即可启用4.2 比较参考值的动态更新与风险规避ADCMPDR0/1和ADWINLLB/ULB寄存器即使在ADC转换过程中ADST1也可以写入。这允许我们动态调整比较阈值实现自适应控制。但手册中图39.5和图39.6警告了一个潜在风险在同时更新上下限值时如果更新发生在两次转换之间可能会出现短暂的“新旧值混合”比较期导致一次错误的比较判断。安全更新策略理想情况在ADST0且比较窗口禁用CMPAE/CMPBE0时更新这是最安全的方式。动态更新如果必须在运行时更新建议采取以下步骤如果可能短暂停止对该通道的转换。更新两个参考值寄存器。重新启用转换。或者确保应用程序逻辑能容忍极个别由更新瞬间导致的误判。4.3 组优先级与中断协同工作当高优先级组打断低优先级组时除了扫描序列被调度中断也需要妥善管理。每个组A/B有自己独立的扫描结束中断ADC12i_ADI。在使能了组优先级功能后中断服务程序ISR需要能区分是哪个组完成了转换。建议做法在ISR中读取ADCSR寄存器的GBADST位或其他状态标志具体请参考手册中断章节来判断当前是哪个组触发了中断。根据不同的组从对应的数据寄存器组ADDRAn或ADDRBn中读取数据。如果使用了GBRSCN1低优先级组完成恢复扫描后也会触发中断ISR应能正确处理这种“继续完成”的中断并将其与一次完整的扫描区分开可能需要结合软件状态机。5. 常见问题排查与调试技巧即使理解了所有寄存器在实际调试中依然会遇到各种问题。以下是一些常见坑点及排查思路。5.1 功能不生效的通用排查清单检查ADC状态在配置任何高级功能寄存器ADSHMSR,ADCMPCR,ADGSPCR,ADDISCR等前百分之百确认ADCSR.ADST位为0。这是最常见的问题根源。检查模式依赖组优先级功能ADGSPCR必须在组扫描模式ADCSR.ADCS01b下设置。窗口复合条件CMPAB仅在单次扫描模式下有效。连续采样SHMD依赖于ADSHCR.SHANS选择了有效的、支持专用采样保持电路的通道。检查寄存器写入顺序对于比较功能正确的顺序是先停止ADC并禁用比较CMPAE/BE0 - 配置参考值、通道选择、条件寄存器 - 最后使能比较CMPAE/BE1和窗口功能WCMPE。检查中断与标志如果比较中断不触发检查CMPAIE/BIE是否使能NVIC是否配置以及状态标志CMPSTCHAxx是否被正确清除写0清除。如果组扫描中断行为异常检查是哪个组产生的中断并确认GBRSCN和LGRRS的设置是否符合预期。5.2 采样保持与连续采样相关异常问题启用连续采样SHMD1后转换结果反而出现较大误差或噪声。排查等待时间不足确认在设置SHMD1后等待了足够的时间400ns才启动转换。用示波器测量采样保持引脚电压看是否已稳定。信号源阻抗过高连续采样模式对信号源驱动能力要求更高。如果源阻抗过大采样电容无法在空闲期间跟踪信号变化。考虑增加电压跟随器运放缓冲。通道选择错误确认ADSHCR.SHANS选择的通道号确实是你想连续采样的那个物理通道。5.3 窗口比较功能异常问题信号明明超出范围却没有触发比较中断。排查参考值格式ADCMPDR0/1和ADWINnLB的有效位取决于ADC数据格式和加法模式如果你配置为左对齐flush-left、12位、非加法模式那么有效位是[15:4]。如果你错误地将12位数据写入[11:0]实际参考值会非常小。务必根据ADADC.ADC和ADADC.ADRFMT位的设置计算正确的写入值。窗口模式混淆检查WCMPE位。如果你期望的是“区间内”报警但WCMPE0且CMPLCHA1那实际是“大于下限”报警逻辑完全不同。通道未使能比较确认在ADCMPANSR0/1寄存器中对应通道的CMPCHAn位已被置1。5.4 组优先级调度行为不符合预期问题高优先级组触发后低优先级组的数据出现混乱或丢失。排查LGRRS位的影响如果LGRRS0每次高优先级组打断后低优先级组都会从头开始扫描。这可能导致某些通道的数据被重复采集而另一些通道的数据被跳过。根据你的应用需求选择LGRRS1继续或0重启。数据寄存器索引在组扫描模式下组A和组B的转换结果存放在不同的寄存器集合中通常是ADDR0~ADDRn和ADDR16~ADDR16n。在中断中读取数据时必须根据触发中断的组别访问正确的数据寄存器。GBRP模式冲突如果GBRP1低优先级组连续单次扫描那么GBRSCN的设置将被忽略。低优先级组会持续运行高优先级组可以抢占但低优先级组会在每次单次扫描完成后立即重启这可能不是你想要的“被中断后恢复”的行为。调试这些复杂功能时逻辑分析仪或带高级触发功能的示波器是必不可少的。你可以捕获ADC的转换开始ADST信号、各个通道的采样触发信号、以及比较中断输出信号直观地看到调度序列和事件触发的时间关系从而快速定位是配置错误、时序问题还是逻辑理解有偏差。