RA8D2 ADC16H比较匹配功能详解:硬件阈值监控与低功耗设计
1. 项目概述为什么我们需要ADC的比较匹配功能在嵌入式系统尤其是涉及实时控制、传感器监控或电池管理的项目中模数转换器ADC的角色至关重要。我们通常需要持续采集模拟信号比如电机的电流、电池的电压或者环境温度然后根据这些数据做出决策。一个最直接的想法是让CPU不断地读取ADC的转换结果寄存器然后与软件中设定的阈值进行比较。这听起来简单但实际做起来问题一大堆。想象一下你的系统需要监控一个快速变化的信号比如电机过流保护。如果每次ADC转换完成都需要产生一个中断让CPU跳转去读取数据、做比较判断那么CPU的负载会急剧上升。更糟糕的是如果信号变化很快你可能会错过关键的瞬态事件因为CPU可能正在处理其他任务。这种方案的实时性差功耗高对于电池供电的设备来说简直是灾难。这时ADC内置的比较匹配Compare Match功能就派上用场了。这个功能的本质是在ADC模块内部集成了一个“硬件看门狗”。你只需要提前配置好几个寄存器告诉ADC“当转换结果高于或低于某个值或者落在某个区间时直接给我发个警报中断或事件不用每次都麻烦CPU。” 这样一来CPU可以安心地去处理其他复杂的逻辑运算或进入低功耗睡眠模式只有在真正需要干预的时候才被唤醒。这极大地解放了CPU降低了系统功耗并保证了关键事件的即时响应。瑞萨电子的RA8D2微控制器其内置的16位高精度ADCADC16H就提供了非常灵活且强大的比较匹配功能。它允许你为多达8个独立的比较匹配通道CMP0-CMP7设置阈值和条件甚至可以组合多个条件来触发一个“复合比较匹配中断”。对于从事电机驱动、电源管理、智能传感器等领域的工程师来说吃透这个功能意味着你能设计出更高效、更可靠的系统。今天我就结合手册和实际调试经验带你彻底搞懂RA8D2 ADC16H比较匹配功能的寄存器配置和实战应用。2. 核心概念与寄存器全景解析在深入配置细节之前我们必须先建立起对ADC16H比较匹配系统架构的清晰认知。它不是一个单一的功能开关而是一套由多个寄存器协同工作的精密逻辑电路。理解它们之间的关系是避免后续配置混乱的关键。2.1 比较匹配功能的核心组件ADC16H的比较匹配功能可以抽象为三个层次通道与条件、阈值设定、状态与清除。通道与条件层这一层决定“谁”在“什么情况下”触发。它包括了比较匹配使能寄存器 (ADCMPENR)决定8个比较匹配通道CMP0-CMP7中哪些是激活的。就像你有8个独立的报警器但你可以选择只打开其中几个。比较匹配模式选择寄存器 (ADCMPMDR0/1)为每个激活的比较通道定义触发条件。是高于阈值就报警低于阈值报警还是在一个“窗口”内或外报警这是逻辑判断的核心。复合比较匹配配置寄存器 (ADCCMPCRn)这是一个高级功能。它允许你将多个基础的比较匹配条件来自CMP0-CMP7通过逻辑“或”运算组合起来形成一个更复杂的触发条件。例如你可以设定“当温度过高CMP0触发或电压过低CMP1触发时才产生一个高级别的中断”。阈值设定层这一层定义“跟谁比”。它主要是比较匹配表寄存器 (ADCMPTBRn)。每个表寄存器共8个对应CMP0-CMP7可以独立设置一对16位的阈值高侧电平CMPTBH和低侧电平CMPTBL。手册明确要求CMPTBH CMPTBL。这两个值定义了触发比较的“窗口”边界。具体如何与ADCMPMDR中设置的模式配合我们后面会详细展开。状态与清除层这一层负责报告“发生了什么”以及“清理现场”。它包括状态寄存器 (ADCMPTBSR, ADCMPCHSR0, ADCMPEXSR)用于指示哪个比较表、哪个模拟通道或哪个扩展功能通道发生了匹配事件。你可以通过轮询这些寄存器中的标志位Flag来获知事件。状态清除寄存器 (ADCMPTBSCR, ADCMPCHSCR0, ADCMPEXSCR)用于在CPU处理完事件后手动清除对应的状态标志位。这是一个非常重要的操作不清除旧标志就无法正确识别新的事件。2.2 寄存器地址空间与访问要点从你提供的手册片段可以看到所有ADC相关寄存器的基地址有两种ADC_B (0x4033_8000)和ADC_B_NS (0x5033_8000)。这通常与处理器的内存保护或安全状态Secure/Non-Secure相关。在大多数应用开发中如果你使用的是标准非安全环境的SDK和驱动库通常会使用ADC_B_NS这个地址空间。在直接操作寄存器时务必确认你的工程上下文所使用的地址基址。所有寄存器的偏移地址Offset都是相对于这个基地址的。例如ADCMPENR的偏移是0x400那么它的完整地址就是ADC_B_NS 0x400 0x5033_8400。注意在编写寄存器操作代码时强烈建议使用芯片厂商提供的硬件抽象层HAL库或驱动库。这些库已经为你定义好了寄存器结构体和位域能极大减少地址计算错误和位操作失误的风险。直接裸写寄存器地址是高手的选择但也更容易出错。3. 寄存器配置详解与实战步骤了解了全景我们现在开始“庖丁解牛”逐个拆解关键寄存器的配置方法并串联成一个完整的配置流程。3.1 第一步使能与基础配置任何功能的使用第一步都是打开它的开关。1. 比较匹配使能寄存器 (ADCMPENR)这个寄存器只有低8位bit 0-7有效分别对应比较匹配通道0到7CMPEN0-CMPEN7。位功能写0禁用该通道的比较匹配功能写1启用。配置示例假设我们只需要使用通道0和通道2进行监控。// 假设已定义好寄存器映射指针 adc16h adc16h-ADCMPENR (1 0) | (1 2); // 使能 CMP0 和 CMP2这里(1 n)是标准的位操作将第n位置1。执行后ADCMPENR的值为0x0000_0005二进制...0101。2. 比较匹配模式选择寄存器 (ADCMPMDR0/1)这两个寄存器为每个比较通道定义了4种工作模式。ADCMPMDR0负责通道0-3ADCMPMDR1负责通道4-7。每个通道占用2个比特位CMPMDn[1:0]。模式详解00: 高侧触发。当ADC转换结果对应ADCMPTBRn中设置的高侧电平(CMPTBH)时产生匹配事件。01: 低侧触发。当ADC转换结果对应ADCMPTBRn中设置的低侧电平(CMPTBL)时产生匹配事件。10: 窗口外触发。当ADC转换结果 CMPTBH或 CMPTBL时产生匹配事件。可以理解为“超出安全范围”报警。11: 窗口内触发。当ADC转换结果 CMPTBH且 CMPTBL时产生匹配事件。可以理解为“落在目标区间内”报警。配置示例继续上面的例子我们配置CMP0为高侧触发超过上限报警CMP2为窗口内触发在正常范围内。// 配置 CMP0 模式为 00 (高侧触发) // CMPMD0[1:0] 位于 ADCMPMDR0 的 bit[1:0] adc16h-ADCMPMDR0 ~(0x03 0); // 先清零 bit0, bit1 adc16h-ADCMPMDR0 | (0x00 0); // 设置为00这一步可以省略因为清零后就是00 // 配置 CMP2 模式为 11 (窗口内触发) // CMPMD2[1:0] 位于 ADCMPMDR0 的 bit[17:16] adc16h-ADCMPMDR0 ~(0x03 16); // 先清零 bit16, bit17 adc16h-ADCMPMDR0 | (0x03 16); // 设置为113.2 第二步设定比较阈值阈值是判断的基准需要根据实际模拟信号的量纲和ADC量程来仔细计算。比较匹配表寄存器 (ADCMPTBRn)每个表寄存器n0~7包含两个16位值高16位是CMPTBH低16位是CMPTBL。它们代表的是ADC转换结果的数字量。对于ADC16H的16位分辨率理论范围是0到655350xFFFF。关键约束手册明确要求CMPTBH CMPTBL。如果设置错误比较行为是未定义的。计算阈值这是最容易出错的一步。假设我们监控一个3.3V的电源电压ADC参考电压Vref也是3.3V。我们想设置CMP0的高侧阈值为3.0V超过3.0V报警CMP2的窗口为2.8V ~ 3.0V在此区间内认为正常。计算公式数字量 (目标电压 / Vref) * 65536。注意对于16位ADC满量程对应65536个码值0~65535。CMP0 (CMPTBH):(3.0V / 3.3V) * 65536 ≈ 59578。转换为十六进制0xE8BA。CMP2 (CMPTBH 和 CMPTBL):CMPTBH (高侧):(3.0V / 3.3V) * 65536 ≈ 59578- 0xE8BA。CMPTBL (低侧):(2.8V / 3.3V) * 65536 ≈ 55613- 0xD93D。验证0xE8BA (59578) 0xD93D (55613)符合要求。配置示例// 配置 CMP0 的阈值寄存器 ADCMPTBR0 (只有高侧阈值有效因为模式是“高侧触发”) // 低侧阈值 CMPTBL 可以任意设置但为了规范通常设为0。 adc16h-ADCMPTBR0 (0xE8BAUL 16) | 0x0000; // CMPTBH0xE8BA, CMPTBL0 // 配置 CMP2 的阈值寄存器 ADCMPTBR2 (窗口模式高低侧都需有效) adc16h-ADCMPTBR2 (0xE8BAUL 16) | 0xD93DUL; // CMPTBH0xE8BA, CMPTBL0xD93D实操心得在实际项目中我强烈建议将电压阈值转换为数字量的计算过程封装成一个宏或函数。例如#define VOLTAGE_TO_CODE(v) ((uint32_t)((v) / REF_VOLTAGE * 65536.0f))。这样代码意图更清晰也便于修改。同时注意浮点数计算的精度和效率在初始化阶段计算一次并存储为整数即可。3.3 第三步配置中断可选但推荐如果希望匹配事件能主动通知CPU而不是让CPU去轮询就必须配置中断。1. 比较匹配中断使能寄存器 (ADCMPINTCR)这个寄存器的低4位bit 0-3CMPIE0-CMPIE3分别对应复合比较匹配中断0到3。注意这里的中断号不是直接对应CMP0-CMP7而是对应ADCCMPCRn配置的复合中断。位功能写0禁用该复合比较匹配中断写1启用。配置示例如果我们只使用基础的CMP0和CMP2不涉及复合条件通常可以启用一个复合中断比如中断0并将需要的比较通道关联到它。但更简单的做法是如果不使用复合中断可以暂时不启用此寄存器而通过查询状态标志位来工作。如果需要中断则需要继续配置ADCCMPCRn。2. 复合比较匹配配置寄存器 (ADCCMPCRn)这个寄存器用于将多个基础的比较匹配事件CMP0-CMP7组合起来触发一个复合中断n0,1。它有两个关键字段CCMPCND[1:0]: 目前手册只定义了00表示逻辑“或”OR组合。即被选中的任何一个比较表发生匹配都会触发对应的复合中断n。CCMPTBLm (bit 16-23): 这8位分别对应比较表0到7m0~7。某位置1表示将该比较表纳入复合中断n的触发条件中。配置示例我们希望CMP0或CMP2的匹配事件都能触发复合比较匹配中断0。// 配置 ADCCMPCR0 // 1. 设置条件为逻辑或 (CCMPCND 00) adc16h-ADCCMPCR0 ~0x03; // 清零 bit[1:0]即为00 // 2. 将比较表0和比较表2纳入触发条件 (CCMPTBL0 和 CCMPTBL2 置1) // CCMPTBL0 是 bit16, CCMPTBL2 是 bit18 adc16h-ADCCMPCR0 | (1 16) | (1 18); // 使能表0和表2 // 3. 使能复合比较匹配中断0 adc16h-ADCMPINTCR | (1 0); // 使能 CMPIE0完成此配置后当CMP0或CMP2中任意一个条件满足时就会触发“复合比较匹配中断0”。你需要在中断服务程序ISR中进一步查询ADCMPTBSR寄存器来确定具体是哪个表触发了事件。3.4 第四步状态查询与标志清除配置完成后系统开始运行。当ADC转换完成其硬件比较器会自动工作。1. 状态查询比较匹配表状态寄存器 (ADCMPTBSR): 它的低8位CMPTBF0-CMPTBF7直接反映了8个比较表是否发生了匹配事件。这是最直接的状态标志。比较匹配通道状态寄存器 (ADCMPCHSR0): 它的低23位CMPCHF0-CMPCHF22指示了具体的模拟输入通道是否发生了匹配事件。注意一个比较表可能监控多个通道取决于扫描组配置而这个寄存器能告诉你具体是哪个物理通道触发了。扩展模拟状态寄存器 (ADCMPEXSR): 用于监控温度传感器、内部参考电压、DAC输出等内部通道的比较匹配状态。2. 标志清除这是一个至关重要的步骤也是最容易被遗忘的bug来源。在CPU读取状态并处理完事件后必须手动清除相应的标志位否则该标志位将一直为1导致你无法判断下一次事件。清除表标志向ADCMPTBSCR寄存器的对应位CMPTBC0-CMPTBC7写1。清除通道标志向ADCMPCHSCR0寄存器的对应位CMPCHC0-CMPCHC22写1。清除扩展通道标志向ADCMPEXSCR寄存器的对应位写1。操作示例在中断服务程序中:void ADC_COMPARE_IRQHandler(void) { // 1. 读取是哪个表触发了中断 uint32_t table_status adc16h-ADCMPTBSR 0xFF; // 2. 判断并处理 if (table_status (1 0)) { // CMP0 触发处理高侧超限事件 printf(警告电压超过3.0V\n); // 清除CMP0的表标志 adc16h-ADCMPTBSCR (1 0); // 写1清除CMPTBF0 } if (table_status (1 2)) { // CMP2 触发处理窗口内事件 printf(信息电压处于正常范围(2.8V~3.0V)。\n); // 清除CMP2的表标志 adc16h-ADCMPTBSCR (1 2); // 写1清除CMPTBF2 } // 注意ADCMPTBSCR是“写1清除”写0无影响。所以可以直接赋值无需读-改-写。 // 3. 如果需要也可以清除通道标志假设我们知道是通道5触发的 // adc16h-ADCMPCHSCR0 (1 5); // 4. 清除复合中断标志如果有的话通常NVIC或ICU会有相关寄存器 // ... 清除NVIC或ICU中的中断挂起位 ... }避坑指南标志清除寄存器如ADCMPTBSCR通常是“写1清除”而写0无效。这意味着你不能用简单的赋值来同时清除多个位因为这会覆盖其他位。正确做法是adc16h-ADCMPTBSCR (1 0) | (1 2);这样一次性清除位0和位2。如果你先读取寄存器再与操作后写回反而可能出错因为这类寄存器的读取值可能永远是0。最佳实践是直接写入需要清除的位对应的掩码。4. 完整配置流程与代码框架将上述步骤串联起来一个典型的ADC比较匹配功能初始化流程如下/** * brief 初始化ADC16H的比较匹配功能示例 * param None * retval None */ void ADC16H_CompareMatch_Init(void) { // 0. 前提确保ADC单元、时钟、引脚、扫描组等基础配置已完成并处于停止状态。 // 1. 使能所需的比较匹配通道 adc16h-ADCMPENR (1 0) | (1 2); // 使能 CMP0 和 CMP2 // 2. 配置比较匹配模式 adc16h-ADCMPMDR0 0; // 先全部清零 // CMP0: 高侧触发 (00) // CMP2: 窗口内触发 (11) - bit[17:16] 0b11 adc16h-ADCMPMDR0 | (0x03 16); // 设置CMP2模式CMP0保持00 // 3. 设置比较阈值 (假设Vref3.3V) #define VREF 3.3f #define VOLT_TO_CODE(v) ((uint32_t)((v) / VREF * 65536.0f)) uint32_t thresh_high_3v0 VOLT_TO_CODE(3.0f); // 0xE8BA uint32_t thresh_low_2v8 VOLT_TO_CODE(2.8f); // 0xD93D adc16h-ADCMPTBR0 (thresh_high_3v0 16) | 0x0000; // CMP0: 高侧3.0V adc16h-ADCMPTBR2 (thresh_high_3v0 16) | thresh_low_2v8; // CMP2: 窗口 2.8V~3.0V // 4. 配置复合比较中断如果需要 adc16h-ADCCMPCR0 0; // 清零 adc16h-ADCCMPCR0 | (0x00 0); // CCMPCND 00 (OR) adc16h-ADCCMPCR0 | (1 16) | (1 18); // 将表0和表2纳入中断0的触发源 adc16h-ADCMPINTCR | (1 0); // 使能复合比较匹配中断0 // 5. 清除所有可能存在的旧状态标志良好的初始化习惯 adc16h-ADCMPTBSCR 0x000000FF; // 清除所有8个表标志 adc16h-ADCMPCHSCR0 0x007FFFFF; // 清除所有23个通道标志 // 清除扩展通道标志 (根据需要使用ADCMPEXSCR) // 6. 配置NVIC使能ADC比较匹配中断此处需根据具体MCU的ICU/NVIC设置 // NVIC_EnableIRQ(ADC_COMPARE_IRQn); // NVIC_SetPriority(ADC_COMPARE_IRQn, 3); // 7. 启动ADC转换通过ADSTRn或ADSYSTR寄存器 }5. 高级应用复合比较匹配与多通道监控基础的单通道阈值监控已经能满足很多需求。但ADC16H的复合比较匹配功能提供了更强大的逻辑组合能力适合复杂的监控场景。场景举例智能电池管理假设我们监控一个锂电池组需要满足以下条件才认为是“严重故障”需要立即关断任何一节电芯电压低于2.5V欠压。任何一节电芯电压高于4.2V过压。电池总电流大于10A过流。我们可以这样利用硬件资源CMP0, CMP1: 配置为低侧触发分别监控两节电芯的欠压阈值对应ADCMPTBR0/1的CMPTBL。CMP2, CMP3: 配置为高侧触发分别监控两节电芯的过压阈值对应ADCMPTBR2/3的CMPTBH。CMP4: 配置为高侧触发监控电流采样电阻上的电压对应过流阈值。现在我们希望这五个条件中任何一个发生都触发同一个高级别故障中断。配置使用ADCCMPCR0复合中断0。设置CCMPCND[1:0] 00逻辑或。设置CCMPTBL0, CCMPTBL1, CCMPTBL2, CCMPTBL3, CCMPTBL4位为1。使能ADCMPINTCR.CMPIE0。效果只要CMP0到CMP4中任意一个条件满足“复合比较匹配中断0”就会被触发。在中断服务程序中再通过读取ADCMPTBSR和ADCMPCHSR0来精确定位是哪个电芯、哪种故障从而执行相应的保护逻辑如关闭MOSFET、记录故障码。这种方案的巨大优势在于判断逻辑完全由ADC硬件在转换结束时并行完成速度极快纳秒级且不占用任何CPU时间片。CPU只在真正发生故障时才被中断唤醒极大地提高了系统的实时性和能效比。6. 常见问题与调试技巧实录即使理解了原理和配置在实际调试中依然会遇到各种问题。下面是我在多个项目中总结的“踩坑”记录和解决方法。6.1 问题一比较匹配事件始终不触发症状阈值设置看起来没问题ADC也在正常转换但状态标志位ADCMPTBSR永远为0。排查步骤确认ADC转换已启动且完成首先检查ADSR.ADACTx位确认ADC单元正在运行。然后确保你监控的扫描组已经完成至少一次转换可以查询ADSCANENDSR或对应通道的数据寄存器是否更新。检查比较匹配使能再次确认ADCMPENR寄存器中对应通道的位已被设置为1。这是一个非常低级的错误但忙中易乱。验证阈值数据方向仔细核对ADCMPMDRn中设置的模式与ADCMPTBRn中设置的阈值是否匹配。例如如果你设置了“高侧触发”模式00那么你应该关注CMPTBH并且ADC结果需要大于等于它才会触发。确保你的测试信号确实能超过这个阈值。检查阈值数值将你设定的阈值数字量通过(Code / 65536.0) * Vref公式反算回电压值看看是否与你预期的电压一致。特别注意ADC的参考电压Vref是否正确是使用内部参考还是外部参考检查扫描组与通道关联比较匹配功能是与扫描组绑定的而不是直接与物理通道绑定。你需要确保你配置了比较匹配功能的那个“比较表”CMPn被正确地分配给了正在执行转换的扫描组。这通常在扫描组的配置寄存器如ADSSTRn等中完成手册中会有“Compare Table Selection”相关的字段。这是最容易遗漏的关键一步如果扫描组没有选择使用任何比较表那么转换结果永远不会被送到比较器。6.2 问题二中断频繁触发或标志位无法清除症状进入一次中断后即使处理完清除了标志很快又再次进入中断或者标志位读出来总是1。排查步骤确认清除操作正确这是最高频的问题。务必确认你是在向清除寄存器如ADCMPTBSCR的对应位写1而不是向状态寄存器ADCMPTBSR写。向状态寄存器写是无效的。检查清除时机确保在中断服务程序ISR中读取状态后处理事件前或后立即清除标志。如果清除得太晚可能在清除之前同一个条件又被满足例如信号在阈值附近抖动导致标志位再次被置起而你随后清除了它但中断可能已经再次 pending。检查信号抖动如果被测信号在阈值附近频繁波动就会导致比较匹配事件反复发生。解决方法有两种一是软件上在中断处理中增加简单的去抖延时或状态判断二是利用ADC的硬件滤波器功能如果支持对转换结果进行平均滤波后再送比较器。检查中断使能嵌套确保你没有在中断服务程序中不小心又开启了全局中断导致高优先级中断嵌套在复杂的时序下可能引发标志位访问冲突。在清除标志的代码段前后可以考虑临时禁用中断。6.3 问题三使用复合中断时无法区分具体是哪个条件触发症状进入了复合中断0但ADCMPTBSR寄存器里显示有多个标志位或者不清楚该处理哪个。解决方案中断服务程序中的标准流程在复合中断的ISR里第一件事就是读取ADCMPTBSR和ADCMPCHSR0根据这些标志位来判断所有可能触发的事件源。按优先级处理设计一个处理优先级。例如先检查过压、过流等紧急故障再检查一般性警告。一次性清除在处理完所有触发的事件后一次性向ADCMPTBSCR写入所有被置位的标志掩码将它们全部清除。例如adc16h-ADCMPTBSCR table_status 0xFF;。日志记录在调试阶段可以将触发时的ADCMPTBSR、ADCMPCHSR0值以及ADC原始数据记录下来便于分析复杂的触发逻辑。6.4 调试技巧利用调试器实时观察现代IDE如e² studio, Keil, IAR的调试功能非常强大。寄存器窗口将ADC相关的关键寄存器ADCMPENR,ADCMPMDR0/1,ADCMPTBRn,ADCMPTBSR,ADCMPCHSR0添加到观察窗口Watch。在单步或全速运行中可以实时看到它们的变化。内存窗口直接查看ADC结果寄存器的地址确认转换数据是否正常更新并与你设置的阈值进行比较。逻辑分析仪/示波器如果条件允许用示波器测量实际的模拟输入信号同时用调试器设置断点在中断入口。可以直观地看到信号超过阈值的时刻与中断触发时刻是否吻合从而判断硬件响应延迟。软件模拟在初始化完成后可以尝试手动修改ADC数据寄存器的值模拟一个转换结果然后观察ADCMPTBSR标志位是否会按预期置位。这是一个验证比较逻辑是否配置正确的快速方法。7. 性能考量与最佳实践最后分享一些关于如何用好此功能以发挥其最大效能的经验。功耗与响应速度的权衡比较匹配功能的初衷是降低CPU负载。在低功耗应用中可以将CPU设置为睡眠模式仅由ADC比较匹配事件作为唤醒源。此时需仔细配置ADC的转换速率和扫描组在满足监控需求的前提下尽可能降低采样率以节省功耗。阈值滞回Hysteresis对于抗噪声和避免阈值抖动引起的误触发软件实现滞回是一个好方法。例如对于过压保护你可以在中断中检测到超限后不仅执行保护动作还可以动态修改ADCMPTBRn的阈值将其提高一个“滞回电压”。待故障恢复电压下降后再在另一个中断或主循环中将阈值改回原值。这能有效防止在阈值点反复触发。与DMA配合ADC16H通常支持DMA。一种高效的模式是让ADC在后台通过DMA持续将数据搬运到内存中的循环缓冲区。同时使能比较匹配功能。当比较匹配事件触发中断时CPU被唤醒可以立刻从DMA缓冲区中读取事发时刻附近的一系列数据进行分析而不仅仅是单个点。这对于分析故障瞬态过程非常有用。寄存器配置顺序一个稳健的配置顺序是先停止ADC (ADSTOPR)然后配置所有比较匹配相关寄存器最后再启动ADC转换。避免在ADC运行过程中动态修改阈值等关键参数除非你很清楚这期间可能产生的竞争风险。文档与版本始终以你所用芯片型号对应的最新版用户手册为准。不同系列的RA MCU其ADC外设的寄存器细节可能有细微差别。