1. 项目概述与LGPT模块定位在嵌入式开发尤其是电机控制、电源管理和精密传感领域一个灵活且功能强大的定时器外设往往是项目成败的关键。TI CC27xx系列无线MCU内置的通用定时器模块通常被称为LGPT正是这样一个集多功能于一身的“瑞士军刀”。它远不止是一个简单的计数器而是一个集成了PWM生成、输入捕获、正交解码、死区控制、故障保护乃至红外编码生成等高级功能的综合定时系统。我在多个无刷直流电机和步进电机控制项目中深度使用了这个模块发现其设计非常巧妙。与许多MCU上功能割裂的定时器不同LGPT通过一套统一的寄存器架构和灵活的事件动作系统将多种看似独立的功能有机整合。例如你可以用同一个定时器通道通过不同的配置一会儿输出PWM驱动电机一会儿又切换成输入捕获模式测量传感器脉冲甚至可以在运行中动态改变模式这种灵活性在资源受限的嵌入式场景中价值巨大。理解LGPT的核心在于抓住其“以计数器为中心以通道为执行单元”的架构思想。一个核心计数器CNTR在可配置的时钟源驱动下工作多个独立的通道C0, C1, C2...可以配置为“比较”或“捕获”模式并与计数器的值进行互动。比较模式下当CNTR的值与通道比较寄存器CnCC的值匹配时会触发预先定义的动作如置高/置低/翻转某个输出引脚这正是PWM生成的基础。捕获模式下当外部输入引脚发生指定边沿事件时CNTR的当前值会被瞬间“捕捉”到捕获寄存器中从而实现对脉冲宽度或周期的精确测量。而正交解码、死区插入、多定时器同步等高级功能则是基于这套核心机制通过额外的逻辑电路和寄存器配置层实现的“组合技”。本文将带你深入LGPT的每一个角落从寄存器配置的微观操作到PWM生成、QDEC应用、故障保护等宏观场景的实现并结合我实际调试中踩过的“坑”分享最实用的配置经验和避坑指南。2. LGPT核心架构与寄存器精解要驾驭LGPT必须先吃透它的寄存器地图。CC27xx的LGPT模块寄存器数量虽多但逻辑清晰主要分为几大类控制与状态类、计数器与预分频类、通道配置类、中断与DMA类以及高级功能类。盲目地对着手册配置寄存器是低效的理解每类寄存器的设计意图和联动关系才能做到心中有数调试时游刃有余。2.1 核心控制寄存器CTL与PRECFGCTL寄存器是LGPT的大脑其MODE字段决定了定时器的根本行为模式。这里有几个关键模式需要特别注意MODE1 (UP_ONCE)单次向上计数。计数器从0计数到TGT值后停止。这常用于产生单脉冲或精确延时。MODE2 (UP_PER)周期性向上计数。这是生成边沿对齐PWM的经典模式。计数器从0到TGT循环周期为(TGT1) * 定时器时钟周期。MODE3 (UPDWN_PER)周期性向上向下计数。这是生成中心对齐PWM的模式。计数器从0到TGT再到0循环周期为(TGT*2) * 定时器时钟周期。中心对齐PWM的谐波特性更好常用于电机驱动和音频应用。MODE4 (QDEC)正交解码模式。此模式下计数器会根据外部PHA和PHB引脚的电平变化自动递增或递减无需CPU干预极大减轻了处理编码器信号的负担。MODE5/6/7 (SYNC_*)同步模式。允许LGPT1/2/3与LGPT0同步启动这对于需要多个完全同步的PWM输出的应用如多相电机控制至关重要。PRECFG寄存器负责为计数器提供“心跳”。TICKSRC选择时钟源系统时钟或外部TICKEN信号TICKDIV则是一个8位预分频器。定时器最终的工作时钟频率 TICKSRC频率 / (TICKDIV 1)。例如系统时钟48MHz若TICKDIV设为23则定时器时钟为48MHz / 24 2MHz周期为0.5us。这个计算是配置任何定时器应用的第一步。实操心得在电机控制等对时序精度要求高的场合TICKDIV的选取需要仔细权衡。分频系数过小时钟频率太高可能导致计数器溢出过快限制了最大周期分频系数过大则定时器分辨率下降PWM占空比调节精度变差。一个实用的技巧是先确定你需要的PWM频率和分辨率反推出合适的TGT值和TICKDIV值。例如需要20kHz的PWM且希望占空比分辨率至少为1/1000。假设系统时钟48MHz若TICKDIV0不分频则定时器时钟为48MHz周期为20.83ns。要达到20kHzTGT需设置为(48MHz/20kHz)-1 2399。此时占空比分辨率约为1/2400满足要求。但如果TICKDIV设为1二分频定时器时钟变为24MHz要达到同样频率TGT1199分辨率降为1/1200。2.2 通道配置寄存器CnCFG的精髓每个通道C0CFG, C1CFG, C2CFG都是LGPT功能多样性的体现。其核心是CCACT字段它定义了该通道在“比较事件”CNTRCnCC或“捕获事件”外部输入边沿发生时要执行什么动作。比较模式下的关键CCACT值0xB (SET_ON_ZERO_TOGGLE_ON_CMP_REPEAT)这是生成边沿对齐PWM的标准配置。动作序列是计数器归零时设置输出为高计数器值等于C0CC时翻转输出为低。如此循环产生一个在计数器周期开始时为高在C0CC时刻变低的PWM波。占空比 C0CC / (TGT 1)。0xA (CLEAR_ON_ZERO_TOGGLE_ON_CMP_REPEAT)这是生成中心对齐PWM的标准配置。动作序列是计数器归零时清除输出为低计数器值等于C0CC时翻转输出为高计数器从TGT向下计数到C0CC时再次翻转输出为低。占空比 1 - (C0CC / TGT)(当C0CC TGT时)。0xD (SET_ON_CMP_REPEAT)和0xC (CLEAR_ON_CMP_REPEAT)用于在特定时刻产生单个脉冲或复杂波形。捕获模式下的关键CCACT值0x8 (PER_PULSE_WIDTH_MEAS)周期与脉宽测量模式。这是LGPT一个非常强大的功能。配置在此模式下通道会自动连续测量输入信号的周期和脉宽。信号的完整周期值被捕获到CnCC寄存器而高电平或低电平的脉宽取决于EDGE配置被捕获到PCnCC寄存器。这个模式省去了软件在中断中记录两次捕获值并相减的繁琐操作也避免了因中断响应延迟带来的测量误差。INPUT和EDGE字段则决定了捕获信号的来源和有效边沿。INPUT选择信号是来自I/O控制器物理引脚还是事件 fabric内部事件。EDGE选择在上升沿、下降沿或双边沿触发捕获。注意事项手册中特别警告了在定时器运行中(CTL.MODE ! DIS)重新配置CCACT可能导致虚假捕获事件的问题。其根本原因是通道内部的边沿检测电路可能存有旧的信号样本。安全的做法是先设置EDGE NONE再配置CCACT等待至少3个系统时钟周期最后再设置EDGE为所需边沿。最好的实践是在启动定时器前CTL.MODE DIS就完成所有通道的配置。2.3 关键数值寄存器TGT, CnCC, PCnCC及其“NC”变体这是最容易混淆但也最能体现LGPT设计精巧之处的一组寄存器。TGT目标值寄存器。决定了计数器的计数上限直接影响PWM周期或定时周期。CnCC通道比较/捕获寄存器。在比较模式下存放与CNTR比较的值在捕获模式下存放捕获到的CNTR值。PCnCC管道比较/捕获寄存器。这是实现“无抖动PWM”的关键。在比较模式下你对PCnCC的写入不会立即生效而是被缓存起来只在下一个计数器周期开始CNTR归零时才从PCnCC加载到CnCC。这确保了在一个PWM周期内占空比参数是稳定的避免了在周期中间修改比较值可能导致的脉冲宽度异常。TGTNC,CnCCNC,PCnCCNC这些是“No Clear”版本。它们的功能与普通版本完全一样唯一的区别是读写它们不会自动清除对应的中断标志。为什么要设计NC版本考虑一个场景你使用DMA在RIS.ZERO中断时自动更新PTGT和PC0CC以改变下一个PWM周期的参数。同时CPU也需要响应RIS.ZERO中断做一些其他处理。如果DMA写入的是普通的PTGT寄存器这个写操作会清除RIS.ZERO中断标志可能导致CPU永远等不到这个中断。此时就应该配置DMA写入PTGTNC而由CPU在中断服务程序中手动清除RIS.ZERO标志。这是一个在实现复杂实时系统时必须注意的细节。2.4 中断与事件系统RIS, IMASK, ICLRLGPT的中断系统非常标准。RIS是原始中断状态寄存器任何中断事件都会置位对应的位。IMASK是中断掩码寄存器只有被IMASK允许的中断才会传递到MIS寄存器并可能向CPU产生中断请求。RIS.TGT和RIS.ZERO分别在计数器等于TGT和0时置位。它们是PWM周期控制的核心事件。RIS.CnCC通道比较/捕获事件中断。RIS.DBLTRANS,RIS.CNTRCHNG,RIS.DIRCHNG正交解码模式下的专用中断分别表示双次变换采样率不足、计数器变化和方向变化。RIS.FAULT故障输入触发的中断。ICLR寄存器用于软件清除中断标志。这里有一个重要特性读写TGT或CnCC寄存器也会自动清除对应的RIS位。这有时很方便但有时就是上面提到的“坑”。务必根据你的应用场景是否有DMA中断处理逻辑如何决定是使用普通寄存器还是NC寄存器。ADCTRG和DMA寄存器则允许将上述内部事件直接映射为ADC触发信号或DMA请求实现纯硬件级的数据采集与搬运极大解放CPU。3. PWM生成从基础到高级应用PWM是LGPT最基础也最常用的功能。CC27xx的LGPT在PWM生成上提供了极大的灵活性支持边沿对齐和中心对齐两种模式并且通过管道寄存器实现了无抖动更新。3.1 边沿对齐PWM配置详解边沿对齐PWM的波形特点是所有脉冲的起始边沿通常是上升沿都与计数器周期起点对齐。配置步骤如下确定PWM参数假设我们需要一个频率为10kHz占空比为30%的PWM使用系统时钟48MHz。计算定时器参数定时器时钟频率 48MHz / (TICKDIV 1)。为了获得较好的分辨率我们选择TICKDIV 0即定时器时钟为48MHz周期约20.83ns。计数器周期数TGT (定时器时钟频率 / PWM频率) - 1 (48MHz / 10kHz) - 1 4799。比较值C0CC 占空比 * (TGT 1) 0.3 * 4800 1440。配置寄存器// 1. 停止定时器进行安全配置 LGPT0-CTL.MODE 0; // DISABLE mode // 2. 配置预分频器使用系统时钟不分频 LGPT0-PRECFG.TICKSRC 0; // System clock LGPT0-PRECFG.TICKDIV 0; // Divide by 1 // 3. 配置周期和初始占空比使用管道寄存器以实现无抖动更新 LGPT0-PTGT.VAL 4799; // PWM Period (47991)/48MHz 100us (10kHz) LGPT0-PC0CC.VAL 1440; // Duty Cycle 1440/4800 30% // 4. 配置通道0为边沿对齐PWM模式并控制输出0 LGPT0-C0CFG.CCACT 0xB; // SET_ON_ZERO_TOGGLE_ON_CMP_REPEAT LGPT0-C0CFG.OUT0 1; // 通道0控制输出0 // 5. 启动定时器为周期性向上计数模式 LGPT0-CTL.MODE 2; // UP_PER mode执行上述代码后对应的IO引脚就会输出10kHz占空比30%的PWM波。关键点在于第4步的CCACT选择0xB它定义了“在零时置高在比较时翻转”的动作序列完美契合边沿对齐PWM。3.2 中心对齐PWM与死区插入中心对齐PWM的脉冲中心对齐常用于电机驱动和全桥变换器可以减少谐波。配置上只需将定时器模式改为UPDWN_PER通道动作改为CLEAR_ON_ZERO_TOGGLE_ON_CMP_REPEAT (0xA)。然而在驱动半桥或全桥电路时为了防止上下管同时导通直通短路必须在互补的PWM信号之间插入一段两者都为低电平的“死区时间”。LGPT的死区插入功能可以硬件自动完成这个任务。假设我们用通道0生成原始的PWM信号IO[0]并希望生成它的互补信号IO_C[0]且在两者切换时插入死区。首先像上面一样配置通道0生成PWM例如中心对齐模式。确保DESCEX.HDBF位为1表示该LGPT实例支持死区功能。配置DBDLY寄存器设置上升沿延迟RISEDLY和下降沿延迟FALLDLY。死区时间 (RISEDLY 1) 或 (FALLDLY 1) 个系统时钟周期。通常两者设为相同值。使能通道0的死区功能LGPT0-DBCTL.IO0 1。完成配置后IO[0]输出原始PWMIO_C[0]输出插入死区后的互补PWM。硬件会自动处理时序确保在状态切换时IO[0]和IO_C[0]不会同时为高。避坑指南死区时间的设置必须合理。如果RISEDLY设置得大于或等于参考信号原始PWM高电平的脉宽会导致IO[0]输出恒低。同样FALLDLY过大也会导致IO_C[0]恒低。在计算死区时间时需要根据功率器件的开关特性开通延迟、关断延迟来设定通常为几百纳秒到几微秒。例如系统时钟48MHz一个时钟周期约20.83ns。若要插入500ns的死区可设置RISEDLY FALLDLY 500ns / 20.83ns - 1 ≈ 23。3.3 多通道PWM与同步一个LGPT模块有多个通道CC27xx通常是3个可以独立生成不同占空比的PWM但它们共享同一个计数器因此所有通道的PWM频率必然相同。这对于控制三相电机非常方便三个通道可以分别驱动三相。如果需要生成不同频率的PWM或者需要更多路PWM就需要使用多个LGPT模块如LGPT0, LGPT1。这时同步功能就派上用场了。通过配置STARTCFG寄存器可以让LGPT1/2/3工作在同步模式CTL.MODE 5/6/7当LGPT0启动时它们会自动同步启动确保多个定时器的计数器相位完全对齐这对于多相交错并联的电源拓扑至关重要。4. 正交解码器模式深度解析正交解码是LGPT的另一大亮点它直接将增量式编码器的A/B相PHA/PHB信号转换为位置计数极大简化了电机位置/速度反馈的软件设计。4.1 QDEC工作原理与配置增量式编码器输出两路相位差90度的方波PHA和PHB。LGPT在QDEC模式下内部逻辑会根据这两路信号的边沿顺序自动判断旋转方向并对计数器进行递增或递减。配置步骤引脚映射将编码器的A相、B相接至LGPT的通道0和通道1的输入引脚通常是固定映射。输入配置LGPT0-C0CFG.INPUT 1; // 通道0输入来自IOC (PHA) LGPT0-C0CFG.EDGE 3; // 双边沿触发 LGPT0-C1CFG.INPUT 1; // 通道1输入来自IOC (PHB) LGPT0-C1CFG.EDGE 3; // 双边沿触发 // 如果使用索引信号Z相配置通道2 // LGPT0-C2CFG.INPUT 1; LGPT0-C2CFG.EDGE 1; // 上升沿触发配置采样率通过PRECFG.TICKDIV和TICKSRC设置QDEC逻辑的采样时钟。采样频率必须远高于编码器信号的最大变化频率通常至少是预期最高频率的4-10倍以防止漏掉计数。例如编码器最高转速对应100kHz的边沿频率则采样时钟最好在1MHz以上。可选配置通道滤波器编码器信号可能存在抖动使用CHFILT滤波器可以要求输入信号在LOAD1个连续采样周期内保持稳定才被确认有效滤除毛刺。启动QDEC模式LGPT0-CTL.MODE 4; // QDEC mode。启动后CNTR寄存器的值就会实时反映编码器的相对位置。QDECSTAT.QDIR位指示当前计数方向0向上1向下。4.2 提高鲁棒性滤波器与中断的应用在实际电机环境中编码器信号容易受到噪声干扰。CHFILT滤波器是第一道防线。其工作原理是一个“一致性”滤波器内部有一个递减计数器初始值为LOAD。当连续两个输入采样值相等时计数器减1如果不相等计数器重载为LOAD。只有当计数器减到0时输入信号的变化才被传递给边沿检测逻辑。因此滤波器引入的延迟至少是(LOAD 1) * 滤波器时钟周期。滤波器时钟由CHFILT.MODE选择可以是系统时钟、定时器时钟等。中断的合理使用可以高效处理编码器数据IMASK.CNTRCHNG计数器变化中断。每次计数变化都触发适用于需要实时跟踪每一个最小位置增量的场景但中断频率可能很高。IMASK.DIRCHNG方向变化中断。只在旋转方向改变时触发用于处理换向。IMASK.DBLTRANS双次变换中断。这是一个重要的错误指示。当PHA和PHB在一个采样周期内都发生变化时例如从00-11说明采样率相对于信号变化太慢了可能丢失了计数。触发此中断后软件应报警或采取纠错措施。IMASK.IDX索引信号中断。用于寻找编码器的机械零点。经验分享在高速编码器应用中频繁的中断会消耗大量CPU资源。一个更优的方案是使能CNTRCHNG中断但在中断服务程序中不直接处理数据而是设置一个标志位。在主循环或低优先级任务中定期例如每1ms读取一次CNTR值并与上次值做差计算出这段时间内的位移和平均速度。这样既获得了速度信息又避免了高频中断的负担。对于绝对位置可以使用一个32位或64位的软件计数器在CNTR溢出中断RIS.ZERO或RIS.TGT取决于计数器位数和方向中进行扩展。5. 高级功能与综合应用实例5.1 故障保护与安全关断在电机驱动等强电应用中硬件级的故障保护Fault是必须的。LGPT的故障功能允许一个外部引脚通常映射到通道0输入在发生异常如过流、过热时立即或安全地停止PWM输出。故障模式配置连接故障源将故障信号通常为高有效连接到LGPT的通道0输入引脚。配置故障输入LGPT0-C0CFG.INPUT 1; // 输入来自IOC LGPT0-C0CFG.EDGE 1; // 上升沿触发假设故障信号高有效配置故障响应模式FAULT.CTLIMMEDIATE故障信号有效时硬件立即将CTL.MODE设为DIS停止计数器。响应最快但可能停在任意计数点导致输出波形不完整。ZEROCOND故障信号有效后计数器继续运行但会在下一次CNTR归零时自动停止。这保证了PWM周期完整性后再关断更为安全。停止后需要软件清除RIS.FAULT标志才能重新启动。IRQ仅触发中断不停止定时器。由软件决定如何处理。可选配置停车状态PARK寄存器可以设置在故障触发后各个输出引脚被强制驱动的电平状态。例如在电机驱动中故障时通常需要将所有PWM输出置为固定状态如全低以确保功率管关断。安全注意事项启用故障功能后务必同时使能IMASK.FAULT中断以便CPU能及时获知故障发生进行日志记录、状态恢复等操作。故障处理路径的代码应尽可能简洁高效。5.2 红外编码生成LGPT甚至能协作生成红外遥控信号如NEC协议。其原理是利用两个LGPT一个产生38kHz的载波LGPT0另一个用这个载波作为时钟源对载波进行调制生成数据帧LGPT1。配置概要载波生成LGPT0配置为UP_PER模式计算TGT和C0CC生成38kHz、50%占空比的方波从IO[0]输出。关键是将C0CFG.CCACT设为TGL_ON_CMP比较时翻转。连接与使能IR生成通过事件 fabric将LGPT0的IO[0]输出连接到LGPT1的TICKEN输入。设置LGPT0-IRGEN.CTL 1使能内部与门将LGPT0的载波和LGPT1的调制信号进行逻辑与最终输出调制后的红外信号。调制信号生成LGPT1设置PRECFG.TICKSRC FALL_TICK以上述载波的下降沿作为时钟。LGPT1根据要发送的NEC协议数据引导码、地址、命令等动态更新其PTGT脉冲周期和PC0CC脉冲宽度生成调制波形。这个例子展示了LGPT如何利用事件 fabric和灵活的时钟源实现复杂的外设间协作几乎不占用CPU时间。5.3 无刷直流电机控制实战这是LGPT功能集大成者的应用。以一个三相BLDC电机为例需要6路PWM驱动三个半桥。通常需要一个LGPT的三个通道产生三路PWM并利用其互补输出和死区功能直接生成6路带死区的驱动信号。软件控制流程初始化配置LGPT为中心对齐PWM模式UPDWN_PER启用三个通道并配置好死区时间。设置一个合适的PWM频率如16kHz和初始占空比0%。换相逻辑BLDC电机需要按顺序导通不同的两相。这需要根据转子位置来自霍尔传感器或编码器QDEC来切换PWM输出到哪两个半桥上。这可以通过在RIS.ZERO中断中更新IOCTL寄存器来实现。IOCTL可以覆盖通道的自动输出强制将某个IO输出设为高、低或反相。速度控制在速度环控制中根据速度误差计算出的新占空比通过写入PCnCC寄存器来更新实现平滑调速。集成故障保护将电流采样比较器的过流信号连接到故障输入引脚配置为ZEROCOND模式实现硬件级的安全关断。一个典型的换相阶段代码片段假设Phase 1驱动A相高侧和B相低侧// 在ZERO中断服务程序中 if(current_phase 1) { // 强制A相上管(PWM0)输出由通道0产生的PWMA相下管(PWM1)输出其反相 LGPT0-IOCTL.OUT0 0; // PWM0: Normal output (from Ch0) LGPT0-IOCTL.COUT0 3; // PWM1: Inverted value (互补输出由死区逻辑进一步处理) // 强制B相上管(PWM2)关闭B相下管(PWM3)开启低电平有效 LGPT0-IOCTL.OUT1 1; // PWM2: Driven low LGPT0-IOCTL.COUT1 1; // PWM3: Driven low (互补输出也为低) // C相上下管均关闭 LGPT0-IOCTL.OUT2 1; // PWM4: Driven low LGPT0-IOCTL.COUT2 1; // PWM5: Driven low // 计算并更新下一个换相点例如通过捕获霍尔信号或定时 schedule_next_commutation(); }通过结合PWM生成、死区、故障保护和灵活的IO覆盖控制LGPT能够构建一个非常稳健的BLDC电机驱动基础CPU只需负责高层换相逻辑和速度环计算。6. 调试技巧与常见问题排查即使理解了所有寄存器实际调试中依然会遇到各种问题。以下是我总结的一些常见坑点和排查思路。问题1PWM没有输出。检查顺序确认配置顺序是CTL.MODEDIS- 配置其他所有寄存器 -CTL.MODE目标模式。在定时器运行时修改某些配置可能无效。检查IO复用确认用于PWM输出的GPIO引脚已正确配置为外设功能而非普通GPIO。检查输出使能确认CnCFG.OUTx位已置1使能了通道对相应输出的控制。检查IOCTL覆盖IOCTL寄存器的优先级高于通道自动输出。如果IOCTL将输出强制驱动为高或低PWM将无法显现。调试初期可将IOCTL相关字段设为0Normal output。问题2PWM占空比不对或频率不对。计算错误重新核算TGT、CnCC、PRECFG.TICKDIV的值。牢记公式定时器时钟 源时钟 / (TICKDIV1)PWM周期 (TGT1) * 定时器时钟周期边沿对齐模式。寄存器混淆确认你更新的是管道寄存器PCnCC还是当前寄存器CnCC如果你在周期中间更新CnCC可能会导致当前周期脉宽异常。动态更新占空比务必使用PCnCC。模式错误检查CTL.MODE是UP_PER边沿对齐还是UPDWN_PER中心对齐以及CCACT是否与之匹配。两者的占空比计算公式不同。问题3正交解码计数不准有漏码或跳码。采样率不足这是最常见原因。检查PRECFG为QDEC逻辑提供的采样时钟频率。采样频率必须高于编码器A/B相信号可能出现的最高边沿频率的2倍奈奎斯特定律建议4-10倍以上。用示波器测量编码器信号最高频率然后计算并调整TICKDIV。信号抖动启用CHFILT滤波器。从较小的LOAD值开始尝试如3或7观察效果。注意滤波会引入延迟。中断丢失如果使用CNTRCHNG中断来计数在高速下可能因为中断处理不过来而丢失。考虑改用定期查询CNTR值的方式或者使用DMA在CNTRCHNG事件时将计数值搬运到内存缓冲区。问题4故障保护功能不动作。输入极性检查C0CFG.EDGE配置是否与故障信号的有效极性匹配。滤波器干扰如果启用了通道0的滤波器CHFILT故障信号需要稳定LOAD1个采样周期才会被确认。在需要快速关断的场合可以考虑禁用滤波器或者使用IMMEDIATE模式并接受其可能中断不完整周期。中断未清除在ZEROCOND模式下定时器在CNTR0停止后需要软件清除RIS.FAULT标志才能再次启动。检查你的故障恢复流程中是否包含了这一步。问题5使用DMA更新PWM参数时CPU收不到中断。NC寄存器使用错误如果DMA配置为在RIS.ZERO时触发并写入PTGT和PC0CC那么这个写操作会清除RIS.ZERO标志。如果CPU也在等待这个中断就会错过。解决方案是DMA写入PTGTNC和PC0CCNC而CPU在中断服务程序中手动清除RIS.ZERO。调试LGPT这类复杂外设逻辑分析仪和示波器是必不可少的。用逻辑分析仪同时抓取PWM输出、编码器输入、故障输入等信号可以清晰地看到时序关系快速定位是配置问题、信号质量问题还是软件逻辑问题。善用芯片的寄存器实时查看功能在调试器中观察关键寄存器如CNTR,RIS的变化也能极大提升效率。