PXD10微控制器RTC与MC_RGM模块深度解析:精准定时与智能复位管理
1. 项目概述与核心价值
在嵌入式系统开发中,尤其是汽车电子、工业控制这类对可靠性和实时性要求极高的领域,微控制器(MCU)内部的“时间管家”和“系统守门员”是两个至关重要的角色。前者负责维持系统的时间基准和精准定时,后者则确保系统在遭遇异常时能有序、可控地恢复。PXD10微控制器中的实时时钟(RTC)模块和复位生成模块(MC_RGM),正是扮演了这两个关键角色。
RTC模块远不止是一个简单的“闹钟”。它内置了一个32位的自由运行计数器,可以灵活选择时钟源并进行分频,从而在1秒到超过1小时(4096秒)的范围内,以1秒的精度产生定时中断。更强大的是其**自主周期中断(API)**功能,它能在不占用CPU资源的情况下,周期性地唤醒系统或触发中断,是实现超低功耗待机、周期性数据采集或看门狗喂狗等功能的基石。理解其状态寄存器(RTCS)中的中断标志(RTCF, APIF, ROVRF)如何被置位和清除,是编写稳定定时程序的第一步。
而MC_RGM模块,则是系统稳定运行的“保险丝”和“调度中心”。它将五花八门的复位源——从最严重的上电复位、电压异常,到相对温和的外部引脚复位、软件看门狗超时——分门别类为“破坏性复位”和“功能性复位”。它的精妙之处在于,并非所有故障都必须导致系统“重启”。通过配置,开发者可以将某些非致命性故障(如外部干扰导致的复位、特定外设错误)从触发全局复位,转换为触发一个安全模式请求或一个核心中断。这允许系统在不停机的情况下,进入一个受限制的安全状态或立即执行错误处理程序,极大地提升了系统的可用性和容错能力。
本文将深入解析PXD10微控制器中这两个模块的工作原理、寄存器配置和实际应用技巧。无论你是正在评估PXD10用于新项目的系统架构师,还是正在调试低功耗定时或系统复位问题的嵌入式软件工程师,理解这些内容都将帮助你更高效、更可靠地驾驭这颗芯片,构建出更健壮的嵌入式系统。
2. RTC模块:精准定时与低功耗唤醒的引擎
RTC模块是许多嵌入式应用实现“心跳”和“闹钟”功能的核心。在PXD10中,它被设计得既灵活又强大,但若配置不当,也容易引入隐蔽的Bug。
2.1 RTC核心架构与工作原理
PXD10的RTC本质上是一个由可配置时钟源驱动的32位向上计数器。其核心架构可以理解为三个部分:时钟树、计数器核心和比较匹配逻辑。
时钟树提供了灵活性。通过RTCC寄存器的CLKSEL字段,你可以从四个时钟源中选择一个:两个16MHz源、一个32kHz源和一个128kHz源。选择何种源,直接决定了定时精度和功耗。例如,在深度睡眠模式下,高速时钟可能被关闭,此时使用32kHz的外部晶体或内部RC振荡器作为RTC时钟源,可以在极低功耗下维持基本计时。选定时钟源后,还可以通过一个由512和32组成的分频器链进行分频,最终目的是为了得到一个周期为1毫秒的计数脉冲。这意味着,无论你选择哪个时钟源,经过分频配置后,RTC计数器每增加1,都代表1毫秒的时间流逝。这是实现“1秒分辨率”定时的基础。
计数器核心即32位的RTCCNT寄存器。它是一个自由运行的计数器,使能后从0开始累加,到达最大值0xFFFF_FFFF后溢出归零,并可以触发溢出中断。这里有一个关键细节:由于RTC计数时钟(rtc_clk)和系统总线时钟(ipg_clk)不同步,你通过软件读取RTCCNT值时,读到的可能不是此刻计数器的精确值,而是一个稍早的、已同步到ipg_clk域的值。手册指出,这两个值最大可能相差6个计数。在编写高精度时间戳代码时,需要意识到这个微小误差的存在。
比较匹配逻辑是产生中断的关键。它包含两个比较器:
- RTC匹配比较器:持续将计数器的高12位(位21:10)与RTCC[RTCVAL]寄存器的12位值进行比较。当匹配时,置位RTCS[RTCF]标志。由于使用高12位,其定时范围是1秒到4096秒,步进为1秒。特别注意:RTCC[RTCVAL]设置为0x000是无效的,不会产生匹配中断。
- API偏移比较器:这是实现周期性中断的“智能”部分。当使能API功能后,模块会以当前的RTCCNT值为基准,加上RTCC[APIVAL]字段的值(再加1),计算出下一个中断触发点。中断触发后,它会自动以触发时刻的计数器值为新的基准,再次加上APIVAL+1,计算下一个触发点,如此循环。这意味着API中断的周期是绝对精准的,不受中断服务程序执行时间的影响。
2.2 关键寄存器详解与配置流程
理解寄存器每一位的含义是正确配置的前提。我们聚焦最核心的几个。
RTC控制寄存器(RTCC):这是RTC的“大脑”。
CNTEN:计数器使能位。黄金法则:在修改CLKSEL(时钟源选择)或RTCVAL/APIVAL(比较值)之前,必须先将CNTEN清零以停止计数器。修改完成后,再将其置1重新使能。否则可能导致不可预测的行为或比较失效。CLKSEL:时钟源选择。根据应用的低功耗需求和可用时钟源来配置。RTCVAL[11:0]:RTC匹配值。设定你需要的秒数(1-4095)。例如,要设置一个5分钟(300秒)的定时,RTCVAL应设置为300。APIVAL[9:0]:API周期值。设定API中断的周期,单位为“RTC计数周期”(通常为1ms)。例如,需要100ms的周期中断,APIVAL应设置为99(因为实际触发点是APIVAL+1)。RTCIE和APIIE:分别是RTC匹配中断和API中断的使能位。需要配合中断控制器(INTC)的配置才能产生CPU中断。ROVREN:溢出中断使能。使能后,当32位计数器从0xFFFF_FFFF翻转到0x0000_0000时,会触发中断。
RTC状态寄存器(RTCS):这是RTC的“状态指示灯”。
RTCF:RTC匹配中断标志。当计数器匹配RTCVAL时,由硬件置1。清除方式为写1清零(w1c)。这是一个关键操作,很多新手会误写0来清除,导致标志位无法清除,中断持续触发。APIF:API中断标志。当计数器达到API偏移计算出的触发点时,由硬件置1。清除方式同样是写1清零。ROVRF:计数器溢出标志。当计数器溢出时置1。清除方式为写1清零。
RTC计数器寄存器(RTCCNT):这是一个只读寄存器,用于获取当前的计数值。如前所述,读取时请注意同步延迟。
一个完整的RTC初始化配置流程通常如下:
- 确保模块时钟已使能(通过系统时钟控制器)。
- 配置RTCC寄存器:先清零
CNTEN和APIEN。 - 配置
CLKSEL选择时钟源。 - 根据需要,配置
RTCVAL或APIVAL。 - 配置中断使能位(
RTCIE,APIIE,ROVREN)。 - 置位
CNTEN使能计数器。 - 如果需要API功能,置位
APIEN。 - 在中断服务程序(ISR)中,读取RTCS寄存器判断中断源,并通过写1到相应标志位来清除标志。
2.3 低功耗模式下的RTC行为
RTC模块在低功耗模式下的行为是其核心价值所在。PXD10的某些低功耗模式(如STOP模式)会关闭大部分模块和系统时钟以节省功耗,但RTC模块通常可以由独立的低功耗时钟源(如32kHz)供电保持运行。
当系统处于低功耗模式,且RTC或API的匹配事件发生时,RTC模块会首先向电源管理模块(MC_ME)发出一个唤醒请求,强制将系统从低功耗模式拉回到运行模式(RUN Mode)。只有在系统回到运行模式后,相应的中断标志(RTCF或APIF)才会被置位。如果中断使能位也已设置,则会产生CPU中断。
这个顺序至关重要:先唤醒,再置标志/中断。这确保了CPU有正确的时钟和环境来处理中断事件。在软件设计时,你的低功耗管理代码需要配合这一硬件行为。
实操心得:在调试低功耗应用的RTC唤醒功能时,一个常见的坑是唤醒后系统运行异常。除了检查RTC配置,一定要确认在进入低功耗模式前,已正确配置了MC_ME模块,允许RTC作为唤醒源,并且系统从低功耗模式唤醒后的时钟初始化流程是正确的。有时唤醒后默认使用的是低速时钟,需要软件重新切换回高速时钟。
3. MC_RGM模块:系统复位的智能管家
如果说RTC是系统的“节拍器”,那么MC_RGM就是系统的“重启管理器”和“故障交警”。它管理着所有可能导致系统复位的源头,并决定每个源头触发何种级别的系统响应。
3.1 复位源分类与复位序列
MC_RGM将十几种复位源清晰地分为两大类,这体现了故障安全设计的层次化思想:
- 破坏性复位:这类复位通常由严重的硬件故障或电源问题引发,例如上电复位(POR)、1.2V/2.7V核心电压低压检测、软件看门狗超时。它们意味着系统状态可能已严重受损或不可信。当发生破坏性复位时,MC_RGM会执行完整的复位序列(从PHASE0开始),对芯片上几乎所有的数字和模拟模块进行彻底复位,确保系统从一个绝对干净、安全的状态启动。
- 功能性复位:这类复位通常由相对“温和”或可预期的错误引发,例如外部复位引脚触发、JTAG调试器发起的复位、软件触发的复位、内核锁步错误(Checkstop)、时钟监控单元(CMU/PLL)故障、Flash致命错误等。当发生功能性复位时,MC_RGM执行部分复位序列(从PHASE1开始)。这意味着一些关键模块(如调试模块、Flash控制器、部分模拟模块)的状态得以保留。这在调试和快速恢复场景中非常有用。
复位序列(PHASE0, PHASE1, PHASE2, PHASE3, IDLE)是MC_RGM内部的一个状态机。每个阶段负责释放特定集合的复位信号。只有当某个阶段的所有复位完成确认(acknowledgement)都收到后,状态机才会进入下一阶段,直到IDLE状态。在IDLE状态,MC_ME模块才会退出复位模式,进入默认的DRUN模式,软件开始执行。理解这个序列有助于你明白为什么有些复位后外设状态还在,而有些则完全清零。
3.2 核心寄存器解析与灵活配置策略
MC_RGM通过一组精密的寄存器,让软件能够洞察复位原因,并定制化复位响应策略。
1. 状态寄存器:诊断复位原因的“黑匣子”
RGM_FES:功能性事件状态寄存器。记录了上一次导致复位的功能性事件是什么。每一位对应一个事件源(如F_EXR-外部复位,F_SOFT-软件复位等)。该寄存器位是写1清零的。上电后,通过读取此寄存器,软件可以判断系统是因为外部干扰(外部复位)、程序跑飞(看门狗)、还是时钟故障等原因导致的复位,从而执行不同的恢复逻辑。RGM_DES:破坏性事件状态寄存器。记录了上一次导致复位的破坏性事件。例如,F_POR位在上电复位后为1。这里有一个极其重要的注意事项:手册特别指出,如果上电过程不单调(电压上升后又跌落至低压检测阈值),F_POR位可能不会被置位,取而代之的是F_LVD12_PD0等低压检测标志被置位。因此,安全的做法是:在启动代码中,如果检测到F_POR、F_LVD12_PD0、F_LVD12_PD1或F_LVD27中任何一个被置位,都应将其视为一次“上电”或“严重电源异常”事件,进行完整的初始化。
2. 复位禁用与请求转换寄存器:化“复位”为“中断”的魔法这是MC_RGM最强大的功能所在。它允许你将特定的复位事件“降级”处理。
RGM_FERD/RGM_DERD:功能性/破坏性事件复位禁用寄存器。将某个事件对应的位设置为1,即可禁用该事件触发的复位序列。RGM_FEAR/RGM_DEAR:功能性/破坏性事件替代请求寄存器。当上述禁用寄存器使某个事件的复位被禁用后,此寄存器决定该事件触发什么:0代表触发安全模式请求(通知MC_ME进入SAFE模式),1代表触发中断请求(向CPU产生一个中断)。
应用场景示例:假设你的产品有一个外部复位按钮,用于用户强制重启。但在某些工业现场,该引脚可能因噪声误触发。你可以通过配置RGM_FERD.D_EXR = 1来禁用外部复位引脚的复位功能,并设置RGM_FEAR.AR_EXR = 1,使其改为触发一个中断。在中断服务程序中,你可以进行滤波判断(如连续检测几次引脚状态),如果确认是用户操作,再通过软件复位指令(触发F_SOFT)安全地重启系统;如果判定是噪声,则记录日志并忽略。这极大地增强了系统的抗干扰能力。
3. 短序列与备用启动寄存器
RGM_FESS:功能性事件短序列寄存器。对于某些功能性复位事件(如软件复位),你可能希望跳过PHASE1和PHASE2(这两个阶段通常包含对Flash等慢速模块的复位),直接从PHASE3开始,以实现更快的复位响应。将此寄存器中对应事件的位设为1即可。RGM_STDBY:待机复位序列寄存器。其中BOOT_FROM_BKP_RAM位允许系统从待机模式唤醒时,不从默认的Flash启动,而是从备份RAM中执行代码。这可用于实现快速启动或恢复特定现场数据。
3.3 复位管理实战配置与避坑指南
在实际项目中配置MC_RGM,通常是在启动代码的早期(在初始化主要外设之前)完成。
标准配置流程:
- 读取状态寄存器:首先读取
RGM_FES和RGM_DES,判断本次启动的复位原因,并可根据原因执行不同的初始化路径(例如,上电复位进行全初始化,外部复位可能跳过部分非易失性外设初始化)。操作后记得写1清零相应标志位。 - 配置替代请求:根据系统需求,规划哪些复位事件需要被“降级”处理。例如,将“Flash致命错误”和“时钟监控失败”配置为触发中断,而不是直接复位,以便软件尝试修复或安全保存数据。
- 写入禁用与替代请求寄存器:按照规划,配置
RGM_FERD/RGM_DERD和RGM_FEAR/RGM_DEAR。请牢记:RGM_FERD和RGM_DERD寄存器在每次上电复位后只能写入一次!这意味着你的配置必须在启动早期确定性地完成,且后续无法更改。错误的配置可能导致系统无法通过特定方式复位。 - 配置短序列:根据对启动速度的要求,配置
RGM_FESS寄存器,决定哪些功能性复位使用短序列。 - 使能中断:如果配置了任何事件产生中断请求,别忘了在中断控制器(INTC)中使能对应的MC_RGM中断源,并编写相应的中断服务程序。
避坑指南与实操心得:
- 一次性写入陷阱:
RGM_FERD和RGM_DERD的“一次性写入”特性是个双刃剑。它防止了运行时恶意或意外修改复位策略,但也要求开发者在产品开发初期就深思熟虑。务必在文档和代码注��中明确记录你的配置策略。调试时,如果错误配置了这些寄存器,只能通过触发一次破坏性复位(如断电)来重置。- 中断服务程序的责任:如果你将某个严重错误(如PLL失效)配置为触发中断而非复位,那么你的中断服务程���必须能够处理该错误,或者最终引导系统进行一个安全的复位。不能让系统停留在一个不稳定的状态。通常,在这种ISR中,应尽可能记录错误信息到非易失存储器,然后触发一个软件复位(
F_SOFT)。- 状态标志的清除时机:
RGM_FES和RGM_DES的标志位是“粘性”的,会保持到被软件清除或发生更高级别的复位。建议在启动代码中,在判断完复位原因后立即将其清除,避免后续软件误判。- 电源非单调上电:对于电池供电或电源环境恶劣的应用,一定要处理好
RGM_DES中关于F_POR标志的说明。你的启动代码不应只检查F_POR,而应检查所有破坏性事件标志,并将其都视为需要完全初始化的“冷启动”场景。
4. 系统集成应用:构建稳健的嵌入式系统
将RTC和MC_RGM的功能结合起来,可以设计出非常稳健的嵌入式系统方案。
场景一:带故障自愈的周期性数据记录仪
- RTC配置:使用32kHz外部晶体作为时钟源,配置API功能每10分钟产生一次中断。
- MC_RGM配置:将“外部复位”、“Flash致命错误”配置为触发中断而非系统复位。
- 工作流程:
- 系统平时处于低功耗睡眠模式,由RTC API中断周期性唤醒。
- 唤醒后,采集传感器数据,写入外部Flash。
- 如果在写Flash时发生“Flash致命错误”,MC_RGM会产生一个中断。
- 在该中断服务程序中,系统将当前数据暂存到备份RAM,标记Flash扇区损坏,并尝试初始化一个备用Flash扇区。处理完成后,触发一次“软件复位”。
- 软件复位后,启动代码通过
RGM_FES发现是“软件复位”且可能伴有错误记录,便从备份RAM恢复数据,继续使用备用扇区进行记录。这样,一次硬件错误没有导致数据丢失或系统变砖,只是引起了一次可控的重启。
场景二:高可靠性的汽车控制器
- RTC配置:作为独立看门狗(如果支持)或任务调度的时间基准。
- MC_RGM配置:将“CMU0时钟频率异常”和“FMPLL0失效”配置为触发安全模式请求。
- 工作流程:
- 当主时钟源(PLL)失效时,MC_RGM会向MC_ME发出安全模式请求。
- MC_ME模块将系统切换到安全模式,在此模式下,可能只启用备份时钟源(如内部RC振荡器)和最关键的外设(如CAN总线用于报告错误)。
- 系统在安全模式下运行一个简化的“跛行回家”程序,通过CAN向整车网络报告故障,并维持最基本的功能(如车灯),同时尝试恢复主时钟或等待维修。这比直接复位导致功能全部丧失要安全得多。
配置代码片段示例(概念性伪代码):
// 系统启动早期,在main()之前或之初的启动代码中 void System_ResetManager_Init(void) { // 1. 读取并判断复位原因 uint16_t fes = READ_REG(RGM_FES); uint16_t des = READ_REG(RGM_DES); if (des & (RGM_DES_F_POR_MASK | RGM_DES_F_LVD27_MASK | ...)) { // 发生破坏性复位或电源异常,执行完整初始化 Perform_Full_Initialization(); } else if (fes & RGM_FES_F_SOFT_MASK) { // 软件复位,可能是主动重启或错误处理后的重启,执行部分初始化 Perform_Partial_Initialization(); Recover_Context_From_BackupRAM(); } // ... 其他复位原因判断 // 2. 清除状态标志 WRITE_REG(RGM_FES, fes); // 写1清零已置位的位 WRITE_REG(RGM_DES, des); // 3. 配置复位策略 (仅能写一次!) // 示例:将外部复位和Flash错误改为触发中断 uint16_t ferd_config = 0; SET_BIT(ferd_config, RGM_FERD_D_EXR_MASK); // 禁用外部复位引脚的复位功能 SET_BIT(ferd_config, RGM_FERD_D_FLASH_MASK); // 禁用Flash致命错误的复位功能 WRITE_REG(RGM_FERD, ferd_config); uint16_t fear_config = 0; SET_BIT(fear_config, RGM_FEAR_AR_EXR_MASK); // 外部复位事件触发中断 SET_BIT(fear_config, RGM_FEAR_AR_FLASH_MASK); // Flash错误事件触发中断 WRITE_REG(RGM_FEAR, fear_config); // 4. 配置短序列 (例如,软件复位用短序列加快重启) uint16_t fess_config = 0; SET_BIT(fess_config, RGM_FESS_SS_SOFT_MASK); WRITE_REG(RGM_FESS, fess_config); // 5. 在中断控制器中使能MC_RGM产生的中断 Enable_IRQ(MC_RGM_IRQn); } // MC_RGM中断服务程序 void MC_RGM_IRQHandler(void) { uint16_t fes = READ_REG(RGM_FES); // 注意:进入ISR时,硬件可能已自动清除某些标志?需查手册。通常需要软件判断并清除。 // 假设需要软件清除 if (fes & RGM_FES_F_EXR_MASK) { // 外部复位引脚触发的中断 Debounce_And_Handle_External_Reset(); WRITE_REG(RGM_FES, RGM_FES_F_EXR_MASK); // 清除标志 } if (fes & RGM_FES_F_FLASH_MASK) { // Flash致命错误 Log_Flash_Error(); Switch_To_Backup_Flash_Sector(); WRITE_REG(RGM_FES, RGM_FES_F_FLASH_MASK); // 清除标志 // 触发一次安全的软件复位以恢复 Trigger_Software_Reset(); } }5. 调试技巧与常见问题排查
在实际开发中,围绕RTC和MC_RGM的调试往往集中在“不中断”、“不复位”或“行为异常”这几个问题上。
5.1 RTC相关调试
问题:RTC中断无法产生。
- 检查清单:
- 时钟与电源:确认RTC模块的时钟源(通过
CLKSEL配置)在目标工作模式下(尤其是低功耗模式)是存在的且已使能。例如,在VLPS模式下,只有某些低功耗时钟源可用。 - 计数器使能:确认
RTCC.CNTEN位已置1。这是一个常见的疏忽点。 - 比较值有效:确认
RTCVAL不为0。确认APIVAL设置正确,中断周期 = (APIVAL+ 1) * RTC时钟周期。 - 中断使能与标志清除:确认
RTCC.RTCIE或APIIE已使能。在中断服务程序中,是否正确地通过写1清除了RTCS.RTCF或APIF标志?错误地写0会导致标志位一直存在,可能只触发一次中断后就不再触发(取决于中断是边沿触发还是电平触发)。 - 中断控制器配置:确认CPU全局中断已开启,且RTC模块的中断请求已在中断控制器(INTC)中正确映射和使能。
- 时钟与电源:确认RTC模块的时钟源(通过
- 调试方法:可以在主循环中轮询读取
RTCS寄存器,看标志位是否按预期置位。如果标志位置位正常但无中断,问题出在中断控制器或CPU中断开关;如果标志位都不置位,问题出在RTC模块本身的配置或时钟。
- 检查清单:
问题:RTC定时不准。
- 检查清单:
- 时钟源精度:检查你选择的RTC时钟源(如32kHz晶体)的精度。外部晶体的负载电容匹配会影响频率。
- 分频配置:确认分频器配置正确,使得最终的计数周期为1ms。计算公式需参考时钟树图。
- 同步误差:理解RTCCNT读取的同步延迟(最大6个计数)。对于极高精度要求,需考虑此误差。
- 低功耗模式影响:在某些低功耗模式下,系统主时钟可能关闭或切换,确保读取RTC时间的代码运行在正确的时钟下。
- 检查清单:
5.2 MC_RGM相关调试
问题:配置了替代请求(中断/安全模式),但事件发生时仍然触发了完全复位。
- 检查清单:
- 写入时机:确认对
RGM_FERD/RGM_DERD的配置是在上电复位后第一次且唯一一次写入。如果之前已有代码(如Bootloader)写过这些寄存器,你的写入将无效。 - 寄存器锁定:有些MCU的此类寄存器在写入后会被锁定,直到下次复位。确认PXD10的该寄存器属性。
- 事件类型:确认你配��的事件确实是“功能性”或“破坏性”复位,并且你修改的是正确的寄存器(FERD对应功能性,DERD对应破坏性)。
- 写入时机:确认对
- 调试方法:在启动后立即读取
RGM_FERD/RGM_DERD寄存器,确认其值是否符合你的预期配置。
- 检查清单:
问题:无法准确判断上次复位原因。
- 检查清单:
- 标志位清除:
RGM_FES和RGM_DES是“写1清零”。你是否在每次读取判断后,清除了对应的位?如果没有,该标志会一直保留,干扰下一次的判断。 - 电源非单调上电:如前所述,不要只依赖
F_POR标志。应检查所有破坏性事件标志(F_POR,F_LVD27,F_LVD12_PD0,F_LVD12_PD1,F_SWT),只要任何一个为1,都应视为冷启动。 - 复位序列覆盖:一次“破坏性复位”会清除所有“功能性复位”的标志。因此,如果系统先发生了一个功能性复位(标志被置位),紧接着又发生了一个破坏性复位(如电压跌落),那么最终你只能从
RGM_DES中看到破坏性复位的标志。
- 标志位清除:
- 检查清单:
问题:短序列复位后外设状态异常。
- 检查清单:
- 理解短序列:短序列(从PHASE3开始)跳过了PHASE1和PHASE2。你需要确认你的应用中外设是否依赖于在PHASE1/2中被初始化的状态。例如,如果Flash控制器在PHASE2被复位,而短序列跳过了它,那么Flash可能处于一个未定义的状态。
- 外设初始化代码:你的软件初始化流程是否假设所有外设都经过了硬件复位?如果使用了短序列,你可能需要在软件中,对某些在跳过的复位阶段中本应被复位的外设,进行显式的软件复位或重新初始化。
- 检查清单:
掌握这些模块的深度配置和调试技巧,意味着你不仅能实现功能,更能构建出适应复杂环境、具备故障自诊断和自恢复能力的高可靠性嵌入式系统。这正是在汽车电子和工业控制等领域,PXD10这类微控制器价值所在。
