1. 架构概览与设计哲学
MSPM0 C系列微控制器,作为德州仪器(TI)在通用与低功耗市场推出的重要产品线,其架构设计清晰地体现了“平衡”与“可控”的工程哲学。它不是单纯追求极致的性能,而是在32位Arm Cortex-M0+内核提供的足够算力基础上,通过精巧的电源域划分、灵活的总线矩阵以及层次分明的内存映射,为开发者构建了一个既高效又易于管理的硬件平台。这种设计的核心价值在于,它让开发者能够根据应用的实际需求——无论是需要快速响应的电机控制,还是追求极致续航的传感器节点——去精细地调配系统资源,而不是被固定的硬件结构所束缚。
我第一次接触这个系列时,印象最深的就是其文档中反复强调的“平台一致性”。这意味着,尽管该系列下有不同存储容量、外设配置的具体型号,但它们共享同一套顶层架构蓝图。这极大地降低了开发者在不同型号间迁移的学习成本和软件移植的复杂度。你可以将针对某一型号开发的底层驱动和系统初始化代码,几乎无缝地应用到同系列的其他型号上,只需根据数据手册调整引脚映射和少数外设基地址即可。这种一致性,对于需要产品线多元化的项目而言,是一个巨大的优势。
理解MSPM0 C系列架构,就像是拿到了一张精密的城市地图。CPU是市政厅,SRAM和Flash是仓库和图书馆,各种外设是分布在城市各区的功能建筑。而总线组织就是连接它们的道路网,内存映射则是给每栋建筑赋予的唯一门牌号系统。启动配置,则是城市启动时自动执行的一套安全与初始化规程。只有摸清了这张地图,你才能知道数据从哪里来、到哪里去最快,如何避免交通拥堵(总线冲突),以及在系统上电时,哪些关键设施(如安全策略)需要最先被确立。接下来,我们就从这张地图的交通网络——总线系统开始,一步步拆解。
2. 总线组织:数据流通的“高速公路网”
MSPM0 C系列的总线设计,并非一个简单的单一总线,而是一个层次化、分域管理的矩阵系统。这种设计直接服务于其核心目标:在满足CPU和外设数据访问需求的同时,最大化地优化功耗和系统并发性。
2.1 三大电源域:能耗管理的基石
总线组织的基础是电源域划分。MSPM0Cxx器件主要包含三个电源域:
- PD1(电源域1):这是系统的“高性能核心区”。它包含了CPU子系统(Cortex-M0+内核、NVIC等)、内存接口(连接Flash和SRAM的控制器)以及大部分高速外设(如某些定时器、通信接口)。PD1的特点是可以被整体关闭。在STANDBY等低功耗模式下,整个PD1域会被断电,以实现最低的静态电流消耗。唤醒时,PD1再重新上电并初始化。
- PD0(电源域0):这是系统的“常驻值守区”。它包含了低功耗外设,如实时时钟(RTC)、看门狗、部分通用定时器以及关键的模拟模块接口逻辑。只要内核稳压器在工作(即非SHUTDOWN模式),PD0就始终处于供电状态。这使得一些基础功能(如时间保持、安全监控)能在CPU深度睡眠时依然运行。
- VDD供电域:这部分直接由芯片电源引脚供电,主要包括I/O引脚、模拟模块(如ADC、比较器的核心模拟电路)以及少量必须常开的逻辑电路。它独立于PD0和PD1的开关控制。
实操心得:理解电源域对低功耗设计至关重要。在编写低功耗应用时,你需要清楚每个外设属于哪个域。例如,如果你想在STANDBY模式下让一个定时器继续工作以周期性唤醒系统,那么这个定时器必须位于PD0域(如基本的TIMG类型)。如果错误地使用了PD1域的外设,在进入STANDBY前未将其切换到合适的时钟源或处理好状态,可能导致功能失效或唤醒异常。
2.2 四大数据总线:角色与分工
基于电源域的划分,MSPM0Cxx构建了四条主要的数据总线,它们共同构成了AHB总线矩阵的“干道”:
AHB总线矩阵(时钟:MCLK):这是系统的“主干道”,直接连接CPU、DMA控制器与最重要的内存子系统(ROM、SRAM、Flash)。所有对代码和数据的存取请求,都首先通过这条总线。它的带宽和延迟直接影响核心程序的执行效率。
PD1 CPU专用外设总线(时钟:MCLK):这是一条“VIP专用车道”。只有CPU可以访问挂在这条总线上的外设,DMA无权使用。典型的外设是系统控制器(SYSCTL)和Flash控制器(FLASHCTL)的关键配置寄存器。这种设计保证了CPU对系统关键资源的访问具有最高优先级和确定性,不会被DMA传输阻塞。
PD1 CPU/DMA共享外设总线(时钟:MCLK):这是一条“客货混行主干道”。CPU和DMA都可以访问其上的外设,如通用定时器(TIMx)、串口(UART)、SPI、I2C等。总线仲裁器会以轮询(Round-Robin)方式公平地处理CPU和DMA发起的访问请求,避免一方长期独占总线。
PD0外设总线(时钟:ULPCLK):这是一条“低功耗辅路”。它服务于PD0域的外设,如低功耗子系统(LFSS)中的RTC、独立看门狗(IWDT)等。这条总线使用超低功耗时钟(ULPCLK),即使在CPU主频(MCLK)很低或停止时,也能以极低的功耗维持运行。
2.3 特殊外设的“双栖”设计:GPIO与ADC
MSPM0架构中有两个外设的设计尤为巧妙,体现了性能与功耗的折衷:
GPIO:其寄存器接口(数据方向、输出值、输入读取等)挂在PD1共享外设总线上,以确保CPU和DMA(如果支持)能以系统主频(MCLK)的速度快速读写引脚状态,这对于需要快速翻转IO的应用(如软件模拟协议)至关重要。然而,GPIO引脚内部的逻辑电路实际位于PD0域。这意味着,即使PD1域在STANDBY模式下被关闭,只要PD0域还在运行(内核稳压器工作),GPIO仍然可以配置为唤醒源,响应外部中断将系统从低功耗模式唤醒。
ADC:与GPIO类似,其配置寄存器(转换控制、通道选择等)也位于PD1总线上,方便高速配置。但其核心的模数转换逻辑位于PD0域。这带来一个强大的功能:你可以配置一个位于PD0域的定时器(如TIMG),在CPU休眠(PD1关闭)时,周期性地触发ADC进行采样,并通过DMA(如果DMA时钟源来自PD0或特殊机制)将结果直接存入SRAM。整个数据采集链可以在无需CPU干预的情况下自动运行,极大降低了主动测量时的系统功耗。
注意事项:总线访问冲突与性能优化。虽然总线矩阵支持并发访问,但冲突仍会发生。例如,当CPU通过AHB总线矩阵读取Flash中的指令时,如果DMA同时通过PD1总线向同一个外设(如UART发送缓冲区)写入数据,两者互不影响。但如果CPU和DMA同时请求访问SRAM,仲裁就会发生在SRAM控制器入口。频繁的冲突会增加访问延迟。在编写对实时性要求极高的代码(如中断服务程序)时,应尽量避免在ISR中进行大量的、可能与后台DMA冲突的内存拷贝操作。可以考虑使用核心寄存器或TCM(如果支持)来存放关键变量。
3. 平台内存映射:系统的“地址地图”
内存映射为软件提供了访问所有硬件资源的统一视角。MSPM0 C系列遵循Arm Cortex-M的标准内存映射规范,这有利于工具链(编译器、调试器)和操作系统的支持。
3.1 顶层内存区域划分
| 内存区域 | 起始地址 | 结束地址 | 描述 |
|---|---|---|---|
| 代码区 (Code) | 0x0000 0000 | 0x1FFF FFFF | 存放可执行代码,主要映射到内部Flash存储器,也包含ROM(引导代码)。 |
| SRAM区 | 0x2000 0000 | 0x3FFF FFFF | 系统静态随机存取存储器,用于存放变量、堆栈、堆数据。 |
| 外设区 | 0x4000 0000 | 0x5FFF FFFF | 所有外设寄存器的映射地址。 |
| 子系统区 | 0x6000 0000 | 0x7FFF FFFF | CPU子系统相关的私有寄存器(如某些调试、跟踪单元)。 |
| 系统PPB区 | 0xE000 0000 | 0xE00F FFFF | Arm Cortex-M内核的私有外设总线,包括NVIC、SysTick、系统控制块(SCB)等。 |
对于开发者而言,最常打交道的是代码区、SRAM区和外设区。链接器脚本(.cmd文件)正是根据这个映射,来决定将代码的.text段放在哪里(Flash),将已初始化的全局变量.data和未初始化的.bss段放在哪里(SRAM)。
3.2 SRAM区的精妙设计:别名与内存保护
MSPM0 C系列的SRAM区域设计颇具特色,它通过“地址别名”机制,为同一块物理SRAM提供了多种访问“视图”,主要目的是支持内存完整性检查(奇偶校验或ECC)。
物理SRAM被“镜像”到四个不同的子区域:
| 子区域 | 起始地址 | 描述与用途 |
|---|---|---|
| 默认区 | 0x2000 0000 | 推荐常规使用的区域。访问此区域时,系统会自动应用该器件支持的最高级别完整性检查: • 若芯片支持ECC,则启用ECC校验(可纠正单比特错误,检测双比特错误)。 • 若仅支持奇偶校验,则启用奇偶校验(检测单比特错误)。 • 若不支持任何校验,则等同于“非检查区”。 |
| 奇偶校验区 | 0x2010 0000 | 强制以奇偶校验模式访问SRAM。仅当器件支持奇偶校验或ECC时存在。 |
| 非检查区 | 0x2020 0000 | 完全绕过任何完整性检查的访问路径。所有器件均存在此区域。用于追求极致速度或不需要校验的场景,也可用于访问不支持校验的SRAM块。 |
| 校验码区 | 0x2030 0000 | 用于直接读取存储的ECC或奇偶校验码。主要用于高级调试或诊断。 |
关键机制解读:这四个地址区间指向的是同一块物理内存。向0x2000 0100写入一个值,你可以立即从0x2020 0100读取到它。区别在于“访问方式”和伴随的硬件行为。
深度解析:为何需要多种“视图”?
- 安全性与可靠性权衡:对于存储关键数据(如协议栈状态、安全密钥)的SRAM,应链接到“默认区”,利用硬件ECC/奇偶校验防止因宇宙射线、电源毛刺等导致的软错误,提升系统鲁棒性。
- 性能考量:ECC校验在写入时可能需要额外的周期来计算并存储校验码。在对写入速度极其敏感的场景(例如,高频更新的数据缓冲区),可以将其链接到“非检查区”以避免性能损失。但必须清楚,这牺牲了数据完整性保护。
- 兼容性与灵活性:如果芯片的SRAM由多个存储体(Bank)组成,且只有部分Bank支持ECC,那么“非检查区”提供了一个统一的、连续的地址空间来访问所有SRAM,简化了软件管理。
重要警告:
- 避免混合访问模式:绝对不要对同一物理内存位置交替使用不同的别名区域进行写和读操作。例如,通过“奇偶校验区”写入数据,然后通过“默认区”(假设支持ECC)读取,很可能会因为校验码不匹配而触发一个硬件错误(HardFault)。软件设计时应明确划分不同内存区域的用途。
- 初始化的重要性:SRAM在上电或从SHUTDOWN模式唤醒后,其内容通常是随机的。如果程序一开始就去读取一个尚未被写入过的、启用了ECC/奇偶校验的SRAM地址,由于存储的随机校验码与随机数据不匹配,极有可能立即触发一个ECC/奇偶校验错误,导致系统在启动阶段就陷入HardFault。务必在访问任何校验保护的SRAM前,先对其进行初始化(通常写0即可)。这通常是启动代码
startup_*.s或main()函数开头需要完成的工作之一。
3.3 外设区与子系统区
- 外设区 (0x4000.0000 - 0x40FF.FFFF):所有外设(GPIO, UART, SPI, ADC, TIMx等)的寄存器都整齐地排列在这个4GB的地址空间内。TI为每个外设模块分配了固定的地址偏移,这使得不同型号间的驱动代码具有高度可移植性。例如,UART0的基地址可能在所有MSPM0 C系列器件上都是
0x4001 0000。 - 子系统区:包含一些与CPU核心紧密耦合但非全局的寄存器,在标准开发中较少直接操作。
- 系统PPB区:这是Arm Cortex-M架构定义的区域,包含了嵌套向量中断控制器(NVIC)、系统定时器(SysTick)、系统控制块(SCB)等。CMSIS-Core标准库提供了访问这些寄存器的标准化接口。
4. 启动配置与安全基石
MSPM0 C系列的启动过程是一个受控的、可配置的序列,是系统安全的第一道防线。理解这个过程对于产品量产、现场升级和安全部署至关重要。
4.1 启动流程总览
- 上电/复位:器件发生上电复位(POR)或系统复位(BOOTRST)后,硬件逻辑强制CPU从固定的ROM地址开始执行。
- 执行引导配置例程:首先运行的是固化在ROM中的引导配置例程。BCR是芯片出厂时就烧录好的不可更改代码,它的任务是读取用户在Flash特定区域(NONMAIN)配置的“安全策略说明书”,并根据这份说明书来配置芯片的初始安全状态。
- (可选)执行引导加载程序:如果配置允许且满足特定条件(如某个引脚电平),BCR可能会将控制权移交给同样位于ROM中的引导加载程序。BSL通常用于通过UART、I2C等接口进行固件更新。
- 跳转至用户应用:无论BSL是否执行,最终BCR都会完成硬件初始化(如时钟树的基本配置),然后对CPU进行一次复位。复位后,CPU像往常一样,从Flash的
0x0000.0000地址获取主堆栈指针(MSP),从0x0000.0004获取复位向量(即Reset_Handler函数的地址),从而开始执行用户的应用程序。
关键点:用户应用程序的入口被强制锁定在Flash的起始向量表处。这种“单点入口”机制是安全启动的基础,防止恶意代码从其他地址劫持启动流程。
4.2 配置存储器:NONMAIN
NONMAIN是Flash中一个特殊的、受保护的扇区,专门用于存储BCR和BSL的配置数据。它不会被普通的全片擦除命令影响,确保了安全策略的持久性。要修改NONMAIN中的配置,必须专门对这个扇区进行擦除和编程。
NONMAIN中存储的关键配置包括:
- SWD调试接口安全策略:决定调试端口是否开放、是否需要密码等。
- Flash写保护策略:设置哪些Flash扇区在运行时禁止写入。
- 工厂复位使能:是否允许通过调试接口发送命令将器件恢复至出厂状态。
- TI故障分析策略:是否允许TI在返修分析时访问器件。
这些配置数据通常以结构体的形式存储,并附有CRC16校验码。BCR在启动时会计算这些数据的CRC,并与存储的CRC比对,确保配置信息在存储过程中没有发生位翻转,从而保证安全策略的完整性。
4.3 串行线调试安全策略详解
SWD是强大的开发和调试工具,但在量产产品中,它也可能成为安全漏洞。MSPM0提供了三级可配置的安全策略:
Level 0:无限制(出厂默认状态)
- 场景:开发、原型验证、生产烧录。
- 策略:SWD端口完全开放,可进行应用调试、内存读写、擦除、工厂复位等所有操作。
- 警告:切勿用于最终产品!此状态下,攻击者可以轻易读取Flash中的固件和敏感数据。
Level 1:自定义限制(推荐用于多数量产场景)
- 场景:需要平衡安全性与可维护性的量产产品。
- 策略:SWD物理端口保持使能,但可以精细控制其功能:
- 应用调试:可设置为禁用、使能或密码保护使能。
- 批量擦除:可禁用,防止通过调试口意外或恶意擦除固件。
- 工厂复位:可设置为使能或密码保护使能。这是关键的“逃生通道”,允许授权人员(知道密码)或在TI返修流程中将设备恢复至Level 0状态,以便重新编程。
- TI故障分析:可启用或禁用。
- 典型配置示例:
- 现场可调试配置:应用调试(密码保护)、批量擦除(禁用)、工厂复位(使能)、TI FA(使能)。这样,现场工程师可以用密码连接调试器,但无法擦除芯片。若设备“变砖”,可通过工厂复位命令恢复。
- 高安全配置:应用调试(禁用)、批量擦除(禁用)、工厂复位(密码保护)、TI FA(禁用)。完全关闭调试和读取,仅保留一个需要密码的工厂复位后门。
Level 2:完全锁定
- 场景:对安全性要求极高,且无需任何后期维护或回收的场景。
- 策略:直接禁用SWD物理调试端口。一旦配置,所有通过SWD的访问(包括调试、擦除、工厂复位)都将被硬件阻止。
- 后果:这是一个“不可逆”的操作(在物理端口被禁用的情况下,无法再通过SWD发送任何命令来修改配置)。配置为此等级的器件,一旦程序烧录完成,将无法再通过SWD进行更新或调试。使用此等级前务必百分百确认代码无误且无需后期更新。
量产实践指南:
- 开发阶段:始终使用Level 0,享受完整的调试便利。
- 小批量试产/测试:可以开始使用Level 1的“现场可调试配置”,在真实硬件上测试密码调试和工厂复位流程是否工作正常。
- 大规模量产:根据产品需求,采用Level 1的某种配置。强烈建议保留“工厂复位(密码保护)”功能,这为产品在终端用户现场因软件问题“变砖”提供了最后的远程或返厂修复可能性。密码应由公司安全保管。
- 极端安全需求:仅在法律法规或合同有明确要求,且已充分考虑产品生命周期内无更新需求时,才考虑使用Level 2。
4.4 安全启动与内存保护
安全启动流程由BCR固件保障,确保了在用户代码执行前,芯片已处于预设的安全状态。除此之外,架构还通过内存保护单元(MPU,属于Arm Cortex-M0+可选组件,需查阅具体型号数据手册)和Flash写保护机制,在运行时提供额外保护。
- Flash写保护:可以通过NONMAIN配置或运行时寄存器配置,将Flash内存划分为多个区域,并对某些区域(如存储引导程序、加密密钥的区域)施加写保护。即使程序跑飞,也无法意外修改这些关键区域。
- SRAM保护:某些型号可能提供MPU,可以配置SRAM区域的访问权限(如只读、只执行、不可访问等),防止栈溢出或指针错误破坏关键数据或跳转到非法代码区。
5. 核心外设与系统集成要点
理解了总线、内存和启动的宏观框架后,在实际编程中,以下几个核心系统模块的交互需要特别关注。
5.1 系统控制器:SYSCTL
SYSCTL是MCU的“总指挥中心”,负责:
- 复位管理:区分上电复位、看门狗复位、软件复位等,并提供状态寄存器供软件查询复位原因。
- 功耗模式切换:控制芯片在RUN, SLEEP, STOP, STANDBY等模式间切换。特别注意:从STANDBY模式唤醒时,PD1域需要重新上电初始化,唤醒延迟比STOP模式更长。
- 时钟请求与分配:处理外设的异步高速时钟请求,管理时钟树的门控与分频。
- Flash等待状态配置:根据系统主频(MCLK)自动或手动设置Flash访问的等待周期,确保稳定读取。若主频超过Flash额定速度而未正确配置等待状态,会导致取指错误,系统崩溃。
5.2 直接内存访问:DMA
DMA是解放CPU、提高系统效率的关键。在MSPM0架构中:
- 触发源丰富:定时器、ADC转换完成、UART收到数据、GPIO边沿等均可作为DMA传输的触发信号。
- 与事件系统联动:DMA可以与事件(Event)系统无缝连接,实现外设间硬件级别的自动联动,无需CPU介入。例如,ADC转换完成事件直接触发DMA将结果搬移到SRAM,同时触发另一个DMA将之前处理好的数据通过UART发送出去。
- 总线仲裁:如前所述,DMA与CPU共享PD1外设总线和内存总线。合理规划DMA传输的时机和内存区域(如使用非检查区SRAM做DMA缓冲区),可以减少总线冲突,提升整体吞吐量。
5.3 事件系统:硬件级的“触发器网络”
事件系统是MSPM0架构中一个非常高效的特性,它允许外设之间直接发送和接收“事件”信号,完全在硬件层面完成。
- 发布者:能够产生事件的模块,如定时器溢出、ADC转换结束、比较器输出翻转、GPIO输入捕获。
- 订阅者:能够接收事件并触发动作的模块,如启动另一个ADC转换、触发DMA传输、使能定时器计数、甚至直接触发CPU中断。
- 优势:极低的延迟(通常几个时钟周期),且不消耗CPU带宽。用于构建精确定时的控制环路(如电机PWM互补输出与ADC采样同步)或实现超低功耗的传感器轮询(RTC定时事件触发ADC采样)。
6. 常见问题与实战排查技巧
在实际项目开发中,基于MSPM0 C系列架构,常会遇到以下问题:
问题1:程序在STANDBY模式后唤醒,部分外设功能异常。
- 排查思路:
- 确认外设所属电源域:检查异常外设是否位于PD1域(如某些高速定时器)。STANDBY模式下PD1会掉电,其寄存器配置会丢失。
- 检查唤醒后的初始化流程:在系统从STANDBY唤醒的初始化代码中(通常是
Reset_Handler或主函数开始处),是否重新初始化了所有必需的PD1域外设?不能依赖进入低功耗前的状态。 - 检查时钟配置:唤醒后,系统时钟是否已恢复到所需频率?外设的时钟门控是否已重新开启?
问题2:启用ECC/奇偶校验后,系统偶尔发生HardFault。
- 排查思路:
- 检查SRAM初始化:确认在
main()函数或系统初始化早期,是否将所有用于存储数据的SRAM区域(尤其是全局变量、栈区域)进行了清零或初始化。未初始化的SRAM内容随机,首次读取可能触发校验错误。 - 检查链接脚本:确认
.data,.bss段以及堆栈(STACK)是否都链接到了正确的内存区域(通常是默认区0x2000 0000起始)。如果部分数据被链接到了非检查区,而代码却从默认区读取,就会出错。 - 排查内存越界:使用调试器观察HardFault发生时程序计数器(PC)和链接寄存器(LR)的值,结合反汇编,定位崩溃前执行的指令。检查是否数组访问越界、栈溢出破坏了相邻的变量区,导致校验码被篡改。
- 检查SRAM初始化:确认在
问题3:DMA传输与CPU执行频繁冲突,系统性能下降。
- 优化策略:
- 分离数据路径:将CPU频繁访问的“热数据”和DMA批量传输的“流数据”放在SRAM的不同物理存储体(Bank)中(如果器件支持多Bank SRAM),从硬件上避免访问冲突。
- 使用非检查区作为DMA缓冲区:如果DMA传输的数据不需要ECC保护(如音频流、图像缓冲区),可以将其定义在非检查区(
0x2020 0000起始),这样DMA写入时无需计算/存储校验码,速度更快,且不与CPU的ECC校验读操作产生关联冲突。 - 调整DMA优先级和仲裁:虽然通常是轮询,但某些DMA通道可能有优先级设置。确保关键实时数据的DMA通道具有较高优先级。
- 优化CPU访问模式:对于CPU需要处理的DMA数据,考虑使用“双缓冲区”策略。DMA写缓冲区A时,CPU处理缓冲区B,然后交换。减少CPU和DMA对同一块内存的交替访问。
问题4:SWD调试端口在配置安全等级后无法连接。
- 恢复步骤:
- 确认配置:首先确认你配置的是Level 1还是Level 2。如果是Level 2(SWD禁用),则物理连接已断,无法通过SWD恢复,只能通过其他方式(如通过用户代码调用系统复位并重新配置NONMAIN,或使用TI提供的特定恢复流程,如果存在)。
- Level 1密码遗忘:如果启用了密码保护,但忘记了密码,唯一的正规途径是使用你已使能的“工厂复位”功能(如果配置了的话)。通过调试器向芯片的调试邮箱(DSSM)发送工厂复位命令(需要密码,如果设置了的话)。如果工厂复位也设置了密码且遗忘,则器件在软件层面可能无法恢复。因此,密码管理至关重要!
- 检查接线与电压:排除硬件问题,确保调试器与芯片的SWDIO、SWCLK连接正确,电源稳定,复位引脚状态正常。
问题5:使用事件系统时,预期动作未触发。
- 排查清单:
- 事件发布者配置:确认发布者外设(如定时器)是否已正确配置并产生事件(例如,是否使能了定时器溢出事件输出?)。
- 事件订阅者配置:确认订阅者外设(如ADC)是否配置为由事件触发(例如,ADC采样触发源是否选择了外部事件?)。
- 事件路由映射:事件需要通过一个内部的“事件织物”进行路由。检查
SYSCTL->EVTFRC或相关外设的事件控制寄存器,是否正确地将发布者的事件信号映射到了订阅者的事件输入通道。每个型号的具体映射关系需参考数据手册的“Event Routing Map”章节。 - 时钟与电源状态:确保发布者和订阅者外设在当前功耗模式下都处于活动状态,且时钟已使能。例如,在STOP模式下,只有部分运行在ULPCLK下的外设能产生或响应事件。