深入解析NXP LPC2930:ARM9内核高集成MCU在汽车与工业控制中的应用 1. 项目概述与芯片定位在嵌入式系统开发尤其是汽车电子和工业控制领域选对一颗“主心骨”级别的微控制器往往意味着项目成功了一半。这颗芯片不仅要算力足够能实时处理复杂的控制算法和通信协议还得是个“多面手”能把CAN、LIN、USB这些关键的总线接口以及ADC、PWM等模拟和定时外设都集成进去这样才能在有限的PCB空间和成本预算内构建出稳定可靠的系统。今天要深入聊的这颗NXP的LPC2930就是这样一个在十多年前发布但设计理念至今仍不过时的经典方案。LPC2930的核心是一颗运行频率最高可达125MHz的ARM968E-S处理器属于ARM9家族。可能现在大家更熟悉Cortex-M系列但在那个时代ARM9内核凭借其五级流水线和高效的存储器架构在需要较高处理性能且兼顾实时性的应用中非常吃香。这颗芯片的独特之处在于它不仅仅是一颗高速的CPU更是一个高度集成的片上系统SoC。它把两个32KB的紧耦合存储器TCM、56KB的通用SRAM、一个支持8个存储区的外部存储器控制器EMC、全速USB 2.0 Host/OTG/Device控制器、双通道CAN控制器、双路LIN主控制器、多达3个10位ADC、4组带捕获/比较功能的32位定时器、4组六通道PWM以及多个SPI、I2C、UART接口全部塞进了一个208引脚LQFP的封装里。这种高集成度带来的直接好处就是系统设计的极大简化。想象一下如果你要为一个车载车身控制模块BCM选型需要连接CAN网络与整车通信用LIN总线控制车窗、后视镜等执行器还需要一个USB接口用于诊断或软件升级同时要采集多路传感器信号并输出PWM控制电机。如果分开选型你需要CPU、CAN收发器、LIN收发器、USB PHY、ADC、PWM驱动等一堆芯片布板复杂成本也高。而LPC2930一颗芯片就能搞定所有数字和混合信号核心功能外围只需搭配必要的收发器、电平转换和电源芯片即可BOM成本和PCB面积都能得到有效控制。它的目标市场非常明确消费电子、工业自动化和通信设备。但在实际项目中尤其是在我经历过的早期新能源车VCU整车控制器原型、工业网关和高端PLC项目中这类接口齐全、主频够用的ARM9芯片往往是性价比最高的选择。虽然它没有内置Flash需要外挂存储器但这反而给了设计者更大的灵活性可以根据代码量选择不同容量的NOR Flash或SDRAM。2. 核心架构与性能深度解析2.1 ARM968E-S处理器与TCM内存架构LPC2930的算力基石是ARM968E-S CPU。与更常见的ARM7TDMI相比ARM9系列最大的架构升级是采用了哈佛总线结构和五级流水线取指、译码、执行、存储/数据缓存、写回。这意味着指令和数据总线是分开的可以同时访问从而显著提高了指令吞吐率。ARM968E-S还支持ARMv5TE指令集包含了增强的DSP指令和16位与32位混合的Thumb指令集。这里重点要提的是它的紧耦合存储器。LPC2930包含两个独立的32KB TCM指令TCMITCM和数据TCMDTCM。TCM是直接挂在处理器内核总线上的SRAM其访问延迟是确定且极低的通常只需一个时钟周期这与通过AHB总线矩阵访问的片上通用SRAM或外部存储器有本质区别。在实时性要求苛刻的场合比如中断服务程序ISR或关键的控制循环代码将其放在ITCM中可以保证最坏情况下的执行时间WCET是可预测的不受总线仲裁或外部存储器访问延迟的影响。同样将频繁访问的全局变量、堆栈或数据缓冲区放在DTCM中能极大提升数据存取速度。在实际编程中我们需要通过链接脚本Linker Script将特定的代码段和数据段明确分配到TCM地址空间ITCM: 0x0000 0000 – 0x0000 7FFF, DTCM: 0x2000 0000 – 0x2000 7FFF。除了TCM芯片还有56KB的通用片上SRAM32KB16KB8KB ETB SRAM可以通过多层AHB总线被CPU和DMA访问。多层AHB总线是另一个提升系统性能的关键设计。传统的单层AHB总线在某一时刻只能有一个主设备如CPU或DMA访问总线其他主设备必须等待。而LPC2930的四层AHB矩阵允许最多四个主设备如CPU、DMA控制器、USB DMA、外部存储器接口同时访问不同的从设备如SRAM、外设只要它们的访问路径不冲突。这大大减少了总线竞争提升了多任务并行处理和数据吞吐能力对于需要USB高速数据传输和CAN/LIN通信同时进行的系统尤为重要。2.2 丰富的通信接口集成策略LPC2930的通信外设阵容堪称豪华我们逐一拆解其设计用意双通道CAN控制器支持CAN 2.0B标准包含完整的验收过滤器和接收FIFO。在汽车和工业网络中CAN总线是骨干。双通道设计允许芯片同时接入两个独立的CAN网络例如一个用于高速的动力总成网络500kbps另一个用于低速的车身舒适网络125kbps或者一个连接主控制器另一个作为冗余备份。其全局验收过滤器可以减轻CPU负担只有通过过滤的报文才会产生中断。双路LIN主控制器LIN是用于汽车中低端子网络的低成本串行总线。LPC2930的LIN控制器硬件上完整支持LIN 2.0协议包括自动波特率检测、帧头生成与校验、从机应答处理等。一个很实用的设计是当不需要LIN功能时这两个控制器可以配置为额外的标准UART使用相当于多了两个串口提升了资源利用率。全速USB 2.0控制器这是一个真正的亮点它同时支持Host、Device和OTGOn-The-Go模式并集成了USB PHY。这意味着同一颗芯片通过软件配置既可以作为USB主机去读取U盘、连接USB设备也可以作为USB从设备被电脑识别还可以在OTG模式下实现两个设备间的点对点通信如手机连接。内置PHY省去了外部的USB收发器芯片。这对于需要数据导出、固件升级或人机交互连接USB键盘、鼠标的设备来说极大地简化了设计。其他串行接口包括2个带FIFO和Modem控制信号的UART支持RS-485、3个Q-SPI支持4个从设备选择适合连接多个Flash或ADC、2个I2C总线。这些接口覆盖了与大多数传感器、存储器、显示模块或另一颗微控制器的通信需求。2.3 模拟与定时控制外设三路10位ADC这是模拟信号采集的核心。其中一路ADC0测量范围是0-5V另外两路ADC1和ADC2是0-3.3V。总共提供了88824个模拟输入通道。每通道转换时间最快可达2.44μs约400ksps的采样率。对于电机控制中的电流采样、工业中的温度压力检测这个精度和速度基本够用。ADC支持多种触发启动方式定时器、PWM、外部信号等便于实现与PWM输出的精确同步采样这在电机FOC控制中至关重要。四组六通道PWM脉冲宽度调制器PWM是驱动电机、LED调光、开关电源的核心。LPC2930的PWM模块功能强大每个PWM单元有6个输出支持中心对齐和边沿对齐模式带有死区时间插入功能防止电机驱动桥的上下管直通以及捕获和陷阱Trip功能。陷阱功能可以在故障信号如过流发生时立即将PWM输出强制为安全状态如全部拉低实现硬件级的快速保护。四个32位通用定时器每个定时器有4个捕获/比较通道可以用于输入脉冲测量、输出精确脉冲、或作为系统时基。此外还有两个专用的32位定时器用于调度和同步PWM与ADC的触发这为构建复杂的数字电源或伺服驱动循环提供了硬件基础。正交编码器接口QEI可以直接连接光电或磁编码器用于测量电机转速和位置是闭环运动控制不可或缺的部分。2.4 灵活的时钟与电源管理时钟生成单元CGU这是LPC2930低功耗设计的精髓。它包含一个主PLL可以将外部10-25MHz的晶振倍频到最高125MHz的CPU时钟。更重要的是它可以生成多达11路基础时钟并通过7个分频器为不同的外设提供独立的时钟源。这意味着你可以让不工作的外设时钟完全停止时钟门控或者让正在工作的外设运行在较低的频率下从而精细地控制系统功耗。例如在系统待机时可以让CPU进入低速模式关闭USB、CAN等高速外设的时钟只保留RTC和唤醒源如外部中断、CAN/LIN活动的时钟。电源管理单元PMU与CGU配合提供多种功耗模式如运行、睡眠、深度睡眠、掉电等。在掉电模式下功耗可以降到极低仅靠内部极低功耗的环形振荡器LP_OSC400kHz维持唤醒逻辑此时可以通过外部中断引脚、CAN或LIN总线上的活动来唤醒整个系统非常适合电池供电的远程终端设备。复位生成单元RGU可以对各个模块进行单独的复位控制这在系统调试和故障恢复时非常有用。比如某个外设如SPI挂死了你可以通过RGU只复位这个外设模块而不影响CPU和其他正在运行的任务。3. 系统设计与硬件实战要点3.1 最小系统与电源设计LPC2930采用双电源供电内核电压VDD(CORE)为1.8V ±5%I/O电压VDD(IO)为2.7V至3.6V。这是经典的低内核电压、高I/O电压设计旨在降低芯片动态功耗的同时保持与外部3.3V器件的兼容性。I/O引脚可耐受5V输入这在与一些老式5V器件接口时提供了便利。电源设计注意事项电源时序虽然数据手册没有严格要求严格的上电顺序但良好的实践是保证VDD(CORE)1.8V先于或至少与VDD(IO)3.3V同时上电。避免I/O电压先于内核电压建立可能导致I/O引脚上的电流倒灌进未上电的内核。可以使用带有使能序控的电源芯片或者简单的RC延迟电路来实现。去耦电容必须在每个VDD(CORE)和VDD(IO)引脚附近最好是芯片背面放置一个100nF的陶瓷电容用于滤除高频噪声。同时在电源入口处放置一个10μF左右的钽电容或电解电容用于缓冲低频波动。对于给ADC供电的模拟电源VDDA(ADC5V0)和VDDA(ADC3V3)去耦要求更严格建议使用串联磁珠或0Ω电阻将其与数字电源隔离并采用高质量的电容。ADC参考电压ADC0需要外部提供VREFP高参考电压和VREFN低参考电压通常接地。为了获得最佳精度VREFP应使用一个低噪声、高稳定性的基准源如REF5025并做好退耦。ADC1和ADC2则使用VDDA(ADC3V3)作为参考。时钟电路主时钟通常使用一个12MHz或25MHz的无源晶振连接在XIN_OSC和XOUT_OSC引脚之间并搭配两个20pF左右的负载电容。如果对时钟精度和稳定性要求极高如作为USB时钟源可以考虑使用有源晶振或时钟发生器。复位电路RST引脚低电平有效内部有上拉电阻。通常的做法是外接一个简单的RC电路如10kΩ电阻到VDD(IO)100nF电容到地实现上电复位并可以增加一个手动复位按钮。确保复位低电平脉冲宽度大于芯片要求的最小值详见数据手册电气特性章节。3.2 引脚复用与配置策略LPC2930有多达152个GPIO引脚但几乎所有引脚都复用了2到4种功能。例如引脚P0[24]的默认功能是GPIO但可以通过系统控制单元SCU中的引脚功能选择寄存器SFSP将其配置为UART1的TXD、CAN1的TXD或SPI2的片选0。配置流程与心得规划先行在画原理图之前必须根据你的外设需求列出一个详细的引脚功能分配表。优先分配那些功能唯一或复用选项少的关键引脚如USB_DP/DM、ADC输入、特定定时器的捕获输入等。注意冲突仔细检查同一外设的不同信号是否被分配到了有冲突的引脚上。例如SPI0需要SCK、MISO、MOSI和至少一个CS引脚确保这四个信号都能被配置到对应的引脚上且这些引脚在物理布局上相对集中。上电默认状态芯片复位后所有引脚默认为GPIO输入模式且内部上拉电阻可能未启用。对于关键的控制信号如电机使能、继电器控制如果希望系统上电瞬间处于安全状态需要在硬件上增加下拉电阻或者在软件初始化早期尽快配置这些引脚为输出并设置为安全电平。SCU配置在软件初始化中配置引脚功能是第一步。通过写SCU_SFSPx寄存器组来完成。务必在使能相关外设时钟之前完成引脚功能配置。3.3 外部存储器接口EMC与启动配置LPC2930没有内部Flash因此程序必须存储在外部存储器中。它提供了一个32位数据总线、24位地址总线的外部静态存储器控制器SMC支持8个存储区Bank可以连接异步SRAM、ROM、NOR Flash甚至通过总线转换连接一些慢速的器件。启动过程芯片上电复位后会从外部存储器的Bank0地址0x8000 0000开始取指执行。启动时存储器的数据宽度8位、16位或32位由两个专用的引导引脚BOOT0对应P2[6]和BOOT1对应P2[7]在上电复位时的电平状态决定。通常我们使用32位宽的NOR Flash将BOOT0和BOOT1通过下拉电阻置为低电平选择32位总线宽度。硬件连接要点数据线连接对于32位Flash将D[31:0]直接连接。地址线连接注意LPC2930的地址线A[0]对应存储器的A[0]。如果你的Flash是16位或32位宽的芯片的A[0]或A[1]可能不直接连接到存储器而是用于生成字节使能信号BLS[3:0]。SMC的BLS字节通道选择引脚在访问不同宽度的存储器时会自动产生正确的控制信号。控制信号OE输出使能、WE写使能、CS片选必须正确连接。对于NOR Flash可能还需要连接RP复位/写保护信号。等特周期在SMC的存储区配置寄存器中需要根据你所连接存储器的读写时序正确设置建立Setup、脉冲Strobe和保持Hold周期的时钟数。这些参数需要查阅你的存储器数据手册来计算。设置过短会导致读写错误设置过长会影响访问速度。软件镜像准备编译器生成的二进制文件通常是.bin或.hex需要烧录到外部Flash的起始位置。烧录可以通过JTAG接口在板调试时进行也可以先通过编程器烧写好Flash再焊接到板子上。4. 软件开发环境搭建与基础驱动4.1 开发工具链选择对于ARM9这类较早期的内核主流的开发环境有Keil MDK-ARM经典易用对NXP芯片支持良好有完善的设备支持包DFP包含启动代码、外设寄存器定义和驱动库。对于快速原型开发非常友好。IAR Embedded Workbench同样是非常专业的嵌入式IDE以代码优化效率高著称。GCC Eclipse开源免费方案。你可以使用ARM官方提供的GNU Arm Embedded Toolchain配合Eclipse CDT和GDB进行开发。这种方式更灵活但对开发者的工具链配置能力要求较高。我个人在早期的LPC2930项目中使用Keil较多因为它提供的标准外设库虽然可能不是官方CMSIS风格但类似和丰富的例程能极大加速开发进程。对于学习或资源受限的项目GCC方案是完全可行的。4.2 启动代码与内存布局启动代码Startup Code是芯片上电后运行的第一段程序通常用汇编语言编写主要完成以下几件事设置异常向量表中断向量表。初始化堆栈指针SP为C语言运行环境做准备。如果有必要进行芯片级别的初始化如关闭看门狗。将存储在Flash中的初始化数据.data段复制到RAM中。将未初始化的数据段.bss段清零。跳转到C语言的main()函数。链接脚本Linker Script是关键。它告诉链接器如何将代码.text、只读数据.rodata、已初始化数据.data、未初始化数据.bss等段放置到物理内存地址中。一个典型的LPC2930链接脚本内存区域定义如下MEMORY { ITCM (rwx) : ORIGIN 0x00000000, LENGTH 32K DTCM (rwx) : ORIGIN 0x20000000, LENGTH 32K SRAM32 (rwx) : ORIGIN 0x40000000, LENGTH 32K SRAM16 (rwx) : ORIGIN 0x41000000, LENGTH 16K FLASH (rx) : ORIGIN 0x80000000, LENGTH 512K /* 假设外接512K Flash */ }然后在SECTIONS命令中你可以将中断服务程序、关键实时循环代码指定到ITCM段将高频访问的全局变量、堆栈指定到DTCM段将其他代码和数据放到SRAM或直接映射到FLASH中执行XIP Execute In Place。4.3 关键外设驱动开发要点1. 时钟系统初始化 这是所有外设工作的前提。流程通常是使能外部晶振等待其稳定。配置主PLL的倍频和分频参数将时钟升频到目标频率如125MHz。等待PLL锁定。将系统时钟源切换到PLL输出。使用CGU中的分频器为各个外设总线如APB和外设模块如UART、SPI配置合适的分频比。切记在修改某个模块的时钟源或分频器之前先将其时钟门控关闭配置完成后再打开时钟门控。这是防止配置过程中产生毛刺导致外设行为异常的标准操作。2. GPIO驱动 除了基本的输入输出配置要善用引脚功能选择寄存器SCU_SFSPx。配置引脚时不仅要设置功能模式还要配置上下拉电阻、斜率控制等。对于输出引脚斜率控制可以设置为快速或慢速快速斜率适合高速信号但会产生更多EMI慢速斜率有助于减少过冲和振铃改善信号完整性。3. 中断控制器VIC配置 LPC2930的向量中断控制器支持16个优先级。配置中断的步骤在VIC中使能特定中断源如UART0接收中断。设置该中断的优先级。将你自己编写的中断服务程序ISR的地址赋值给对应的向量地址寄存器VICVectAddr。在C代码中需要编写一个裸函数使用__irq或__attribute__((interrupt))关键字修饰并在函数末尾手动清除外设的中断挂起标志并写0到VICVectAddr寄存器以通知VIC中断处理结束。4. 定时器/PWM驱动 以PWM为例配置一个带死区的互补PWM输出大致流程配置相关引脚为PWM输出功能。使能PWM模块时钟。设置PWM计数器频率预分频和周期值。配置每个通道的占空比。使能死区发生器设置死区时间。设置输出极性高电平有效或低电平有效。使能PWM输出。如果需要与ADC同步触发采样则配置ADC的触发源为该PWM的特定事件如周期匹配。5. ADC驱动 ADC配置相对直接但要注意配置采样时间和转换时钟分频。选择触发模式软件触发、定时器触发或PWM触发。如果是序列转换配置通道序列。使能中断或使用DMA来搬运转换结果避免CPU轮询等待。重要ADC的参考电压和模拟电源必须稳定、干净。转换结果可以通过校准来消除零点偏移和增益误差。5. 典型应用场景与调试心得5.1 汽车车身控制模块BCM原型在这个场景中LPC2930的多总线集成能力得到充分发挥。CAN通道0连接至整车高速CAN网络用于接收车速、车门状态等信号发送控制指令。CAN通道1作为诊断CAN连接OBD-II接口用于故障诊断和参数标定。LIN通道0和1分别控制左前车门和右前车门模块驱动车窗、门锁、后视镜。GPIO直接读取开关信号如阅读灯开关控制继电器如车灯、雨刮。ADC采集电池电压、车内温度传感器信号。PWM用于控制车内氛围灯的亮度。USB Device用于通过USB线连接笔记本电脑进行更深层次的诊断和固件刷新。调试心得CAN总线终端电阻必须在CAN_H和CAN_L之间连接一个120Ω的终端电阻且网络两端各一个。忘记接终端电阻是导致CAN通信失败或不稳定的最常见原因。LIN总线波形LIN是单线总线电压在电池电压12V和地之间摆动。LPC2930的LIN引脚是3.3V电平必须通过一个LIN收发器芯片如TJA1020进行电平转换。调试时用示波器看LIN波形确保显性电平Dominant和隐性电平Recessive清晰边沿干净。电源完整性车身电子环境恶劣存在抛负载等高压脉冲。LPC2930的电源输入端必须要有TVS管和足够的滤波电容I/O线与外部连接器之间最好串接电阻或磁珠以提高抗干扰能力。5.2 工业多轴运动控制卡在这个场景中LPC2930的高性能计算和精密定时能力是关键。PWM与QEI4组PWM输出用于控制4个伺服电机的驱动器。正交编码器接口QEI连接电机的编码器反馈实现位置和速度闭环。定时器用于生成精确的插补周期中断在中断服务程序放在ITCM中确保实时性中运行位置环、速度环PID算法。ADC用于采集电机相电流通过霍尔传感器或采样电阻实现电流环控制FOC算法的一部分。CANopen利用CAN控制器实现基于CANopen协议的分布式运动控制网络与上位机或其他驱动单元通信。UART/RS-485连接HMI触摸屏或作为备用调试接口。调试心得中断优先级与延迟运动控制对实时性要求极高。必须合理设置中断优先级确保PWM周期中断和ADC采样完成中断拥有最高优先级。将关键ISR和核心控制算法放入TCM中执行能显著减少中断响应时间的抖动。PWM死区时间驱动电机H桥时死区时间设置至关重要。时间太短可能导致上下管直通烧毁MOSFET时间太长会降低输出电压利用率。需要根据所使用的MOSFET或IGBT的开关特性开通/关断延迟来精确计算和设置。ADC采样同步为了准确计算电机电流ADC采样必须与PWM中心点对齐对于中心对齐PWM模式。这需要精确配置PWM的触发输出事件与ADC的触发启动输入。利用LPC2930的专用定时器来同步PWM和ADC可以简化软件设计提高同步精度。5.3 常见问题排查速查表在实际开发中踩坑是难免的。下面是一些常见问题及排查思路的汇总问题现象可能原因排查步骤与解决方法程序无法启动连接仿真器后PC指针在奇怪的位置1. 启动模式BOOT[1:0]引脚配置错误。2. 外部存储器时序配置不当。3. 时钟未正确初始化。1. 检查BOOT0/BOOT1引脚的上拉/下拉电阻确保选择正确的总线宽度如32位Flash应为00。2. 使用仿真器单步调试启动代码检查SMC存储区配置寄存器的值建立、脉冲、保持周期参照Flash数据手册调整。3. 检查晶振是否起振PLL是否锁定。可以先尝试以内部环形振荡器LP_OSC低速运行排除时钟问题。GPIO输出无反应或电平不对1. 引脚功能未配置为GPIO输出模式。2. 端口时钟未使能。3. 引脚被其他功能占用复用了。4. 外部负载过重。1. 检查SCU中对应引脚的SFSP寄存器确保功能选择正确Function 0通常是GPIO。2. 检查CGU中对应GPIO端口的时钟门控是否打开。3. 检查整个系统的引脚分配表确认无冲突。4. 测量引脚驱动电流是否足够必要时增加外部驱动电路如三极管、MOS管。UART能发送不能接收或反之1. 收发引脚配置反了TX接TXRX接RX是常见错误。2. 波特率、数据位、停止位、校验位设置与对端不匹配。3. 中断或DMA未正确使能/处理。1. 交叉连接TX和RX再试。2. 用示波器测量波形计算实际波特率并与设置值对比。检查双方通信格式是否一致。3. 检查UART控制寄存器中的接收使能位、FIFO设置。如果是中断方式检查VIC配置和ISR中的清中断标志操作。CAN总线通信错误帧频发1. 波特率设置错误。2. 终端电阻缺失或阻值不对。3. 总线物理层问题线缆过长、干扰。4. 验收过滤器设置过于严格拒绝了所有报文。1. 使用CAN分析仪或另一个已知正常的节点对比测试确认波特率。2. 测量CAN_H和CAN_L之间的电阻在总线两端应为60Ω左右。3. 用示波器观察CAN差分信号波形看是否变形严重检查布线。4. 暂时将验收过滤器设置为接收所有报文屏蔽码设为0验收码设为0测试通信是否恢复。ADC采样值跳动大不准1. 模拟电源VDDA和参考电压VREFP噪声大。2. 采样时间设置太短电容未充分充电。3. 信号源内阻过大。4. 未进行软件校准。1. 检查模拟电源的退耦电容确保VREFP稳定。可以用示波器交流耦合档观察其噪声。2. 增加ADC控制寄存器中的采样周期数SAMPLE bits。3. 对于高内阻信号源前端应增加电压跟随器运放进行缓冲。4. 在代码中实现两点校准测量一个已知的零点如接地和一个已知的满量程电压计算偏移和增益误差进行补偿。系统运行一段时间后死机1. 堆栈溢出。2. 中断服务程序执行时间过长导致其他中断丢失或看门狗复位。3. 电源电压跌落或毛刺。4. 芯片温度过高。1. 在链接脚本中增大堆栈Stack和堆Heap的大小。在调试时可以填充特定的魔数如0xDEADBEEF到堆栈区域定期检查是否被改写。2. 优化ISR代码只做最紧急的处理将非实时任务放到主循环中。确保看门狗被正确喂狗。3. 监测电源电压尤其在有大电流负载切换时。加强电源滤波。4. 检查芯片功耗如果发热严重考虑降低主频或优化软件降低功耗必要时增加散热措施。6. 低功耗设计与项目总结LPC2930的灵活时钟和电源管理单元为电池供电设备提供了强大的支持。实现低功耗的关键在于理解并利用好不同的功耗模式运行模式所有模块全速运行功耗最高。通过CGU动态关闭未使用外设的时钟可以降低动态功耗。睡眠模式CPU时钟停止但外设时钟可以继续运行。可以由中断唤醒。这是降低功耗的常用手段适合需要周期性工作的设备。深度睡眠模式主振荡器和PLL关闭系统使用内部低功耗环形振荡器LP_OSC运行。功耗进一步降低。掉电模式几乎所有内部电路都关闭仅保留极少数唤醒逻辑和部分SRAM内容如果选择保持。功耗最低只能通过特定的唤醒源如外部中断、RTC报警、CAN/LIN活动唤醒。设计建议在软件架构上采用“事件驱动低功耗休眠”的模式。主循环完成必要任务后立即进入睡眠或深度睡眠模式。所有工作都由外部事件定时器中断、通信中断、IO变化来触发。在进入低功耗模式前务必妥善保存外设状态并在唤醒后恢复。回顾LPC2930它是一颗在特定历史时期为复杂嵌入式应用而生的“瑞士军刀”式芯片。虽然以今天的眼光看它的主频和内存容量可能不算突出但其高度集成的外设、灵活的时钟功耗管理以及稳健的实时性能使得它在许多对成本敏感、对接口种类要求多、对实时性有要求的工业与汽车领域项目中依然是一个经得起考验的选择。开发这类芯片硬件上要特别注意电源、时钟和信号完整性的设计软件上则要深入理解其内存架构、中断系统和外设寄存器善用TCM和DMA来提升性能。把数据手册当成最重要的参考资料勤用示波器和逻辑分析仪观察实际信号是搞定这类项目的关键。