TI微控制器RTI模块:从硬件定时器到看门狗的全方位配置指南

TI微控制器RTI模块:从硬件定时器到看门狗的全方位配置指南
1. RTI模块架构与核心设计思路在嵌入式系统里时间就是一切。无论是汽车ECU里需要毫秒级精度的喷油点火控制还是工业PLC里要求微秒级响应的传感器采样都离不开一个可靠、精准的定时器核心。德州仪器TI在其许多微控制器系列中集成的实时中断RTI模块就是这样一个为硬实时需求而生的“心脏”。它远不止是一个简单的计数器而是一个集成了多级分频、多路比较、捕获以及数字看门狗Digital Watchdog, DWD的复杂定时系统。理解它的架构是进行精准配置和高效应用的前提。RTI模块的核心设计哲学是硬件自治与灵活性。它旨在将软件从繁重的定时任务中解放出来通过硬件自动完成计数、比较和中断触发从而保证时序的绝对确定性不受软件执行流的影响。整个模块可以看作由几个关键部分构成时钟源与分频链、核心计数器、比较匹配逻辑、中断与DMA控制逻辑以及独立的看门狗子系统。时钟源RTICLK是整个模块的脉搏通常来源于系统时钟VCLK或外部时钟。这个基础频率经过预分频计数器Up Counter如RTIUC0/1进行第一次降频。你可以把预分频计数器想象成一个水桶RTICLK每滴答一次就向桶里滴一滴水。当水满到预设的刻度即比较寄存器RTICPUCx的值时桶会自动清空并触发自由运行计数器Free Running Counter如RTIFRC0/1加一。自由运行计数器是一个更高级别的、永不停止的计时器它记录了“满桶”的次数提供了更长的计时周期。比较匹配逻辑是RTI的“闹钟”系统。你可以为自由运行计数器设置多个“闹钟时间”即RTICOMPx寄存器。当自由运行计数器的值达到某个“闹钟时间”时硬件会自动置位对应的中断标志RTIINTFLAG如果中断使能了就会向CPU发出中断请求。更巧妙的是更新比较寄存器RTIUDCPx的存在它允许“闹钟”在每次响铃后自动将下一个闹钟时间向后推迟一个固定间隔即RTIUDCPx的值从而实现完全由硬件驱动的、无需软件干预的周期性中断。这对于需要固定频率执行的任务如电机PWM控制、通信协议帧发送来说是至关重要的特性。数字看门狗DWD则是一个独立的“安全卫士”。它本质上是一个递减计数器从预设值RTIDWDPRLD开始随着RTICLK1一个经过固定分频的时钟递减。软件必须在计数器减到零之前按照严格的“喂狗”序列向RTIWDKEY寄存器依次写入0xE51A和0xA35C来重置计数器。如果软件因跑飞、死循环等原因未能及时喂狗看门狗超时就会根据配置触发系统复位或非屏蔽中断NMI强制系统恢复到一个已知的确定状态。这是保障系统长期可靠运行的最后一道防线。理解这个架构后你就会明白配置RTI不仅仅是写几个寄存器值而是在搭建一个由硬件驱动的、可预测的时序框架。接下来的章节我们将深入每个关键寄存器看看如何将这些硬件特性转化为实际可用的代码逻辑。2. 核心计数器与预分频配置详解RTI模块的计时能力建立在两级计数器链之上预分频计数器Up Counter和自由运行计数器Free Running Counter。这一设计巧妙地平衡了计时精度和计时范围。我们以计数器1Counter 1这一路为例进行拆解计数器0Counter 0的原理与之类似。2.1 RTI Up Counter 1 寄存器 (RTIUC1)这个32位寄存器偏移地址0x34是预分频计数器1的当前值寄存器。它直接对RTICLK时钟进行计数。但它的行为有一个非常关键且容易误解的细节它的更新是受控的。根据手册描述RTIUC1的值只有在读取了自由运行计数器1RTIFRC1之后才会更新。这样设计的目的是为了解决一个在多字节计数器读取时的经典问题读数撕裂。想象一下你想同时读取一个64位计数器高32位是RTIFRC1低32位是RTIUC1的瞬时值。如果你先读RTIUC1再读RTIFRC1在这两次读取之间RTIUC1可能已经溢出并进位到RTIFRC1了导致你读到一个“穿越”的错误值例如低32位是0xFFFFFFFF高32位是0x00000001但实际上低32位溢出时高32位应该已经是0x00000002了。TI的解决方案很巧妙将RTIUC1的更新与读取RTIFRC1的操作绑定。当你读取RTIFRC1时硬件会同时“冻结”或“捕获”此刻RTIUC1的值并将其锁存到RTIUC1寄存器中供你随后读取。这样你通过先读RTIFRC1再读RTIUC1获得的就是一个在读取RTIFRC1那个时钟沿上完全一致的64位计数值保证了数据的原子性和一致性。实操心得读取64位计数器值正确的读取顺序必须是读取RTIFRC1寄存器高32位。读取RTIUC1寄存器低32位。 这个顺序不能颠倒。在代码中通常会将这两步放在一个临界区如关闭中断内连续执行以避免被高优先级中断打断造成两次读取的计数器值不属于同一个“时间点”。向RTIUC1写入则会预设该计数器的值。计数器会从这个写入值开始向上累加。这里有一个重要的注意事项手册明确指出如果需要在计数器运行时修改其预设值必须先在RTIGCTRL寄存器中禁用该计数器。这是为了确保RTIUC1和其对应的RTIFRC1之间的同步关系不被破坏。如果你在计数器运行时直接写入RTIUC1而RTIFRC1可能正在根据旧的比较值递增就会导致两级计数器之间的逻辑关系错乱产生不可预期的计时行为。2.2 RTI Compare Up Counter 1 寄存器 (RTICPUC1)这个32位寄存器偏移地址0x38定义了预分频计数器1的“满桶”刻度。当RTIUC1计数到与RTICPUC1的值相等时会发生三件事RTIUC1被清零重新开始计数。自由运行计数器RTIFRC1加1。产生一个内部信号用于可能的捕获事件。它最核心的功能是定义自由运行计数器RTIFRC1的计数频率。计算公式非常直接如果RTICPUC1 0f_FRC1 RTICLK / (2^32 1)。手册特别指出不推荐设置为0因为这将导致RTIUC1在从0xFFFFFFFF溢出到0后有2个RTICLK周期保持为0。如果RTICPUC1 ≠ 0f_FRC1 RTICLK / (RTICPUC1 1)。举个例子假设你的系统RTICLK 100 MHz (周期10 ns)你希望自由运行计数器RTIFRC1每1毫秒加1即f_FRC1 1 kHz。那么你需要设置RTICPUC1 (RTICLK / f_FRC1) - 1 (100,000,000 / 1,000) - 1 100,000 - 1 99,999(0x1869F)。这意味着RTIUC1会从0计数到99,999每计满100,000个RTICLK周期即1毫秒RTIFRC1就加1。通过这个公式你可以将高频率的RTICLK转换为你所需要的、任何周期的低频时基供自由运行计数器使用从而极大地扩展了可计时范围。3. 比较匹配与自动更新中断机制实现自由运行计数器RTIFRCx提供了一个不断增长的“全局时间戳”。而比较寄存器RTICOMPx和更新比较寄存器RTIUDCPx则是在这个时间轴上设置“闹钟”并让“闹钟”自动重复的工具。这是实现精准周期性中断的核心。3.1 RTI Compare x 寄存器 (RTICOMP0-3)RTI模块提供了多达4个独立的比较寄存器RTICOMP0-3偏移地址0x50,0x58,0x60,0x68。每个都是32位可读写寄存器。它们的功能是持续将自身的值与当前选定的自由运行计数器通过RTI比较控制逻辑选择是RTIFRC0还是RTIFRC1进行比较。当两者匹配时硬件会立即置位对应的中断标志位RTIINTFLAG寄存器中的INT0-INT3。如果该中断在RTISETINTENA寄存器中被使能则会向CPU发出中断请求。此外这个匹配事件还可以触发DMA请求用于不占用CPU时间的数据搬运例如定期将ADC采样结果搬运到内存。配置流程示例假设我们使用RTIFRC1作为时基它每1毫秒加1如上一节配置。现在我们需要一个每10毫秒触发一次的中断。计算比较值RTICOMP0 10 - 1 9。因为RTIFRC1从0开始第一次匹配发生在它等于9时这正好是第10个计数周期即10毫秒。在中断服务程序ISR中必须手动清除中断标志向RTIINTFLAG寄存器的INT0位写1。同时需要手动更新RTICOMP0的值为下一次中断做准备例如RTICOMP0 RTICOMP0 10。这个手动更新步骤既繁琐又容易引入误差。如果ISR被延迟更新操作晚了下一个中断周期就会变长。为了解决这个问题RTI提供了硬件自动更新机制。3.2 RTI Update Compare x 寄存器 (RTIUDCP0-3)这是RTI模块的精髓之一。每个比较寄存器RTICOMPx都配有一个对应的更新比较寄存器RTIUDCPx偏移地址0x54,0x5C,0x64,0x6C。它的工作原理是每当发生一次比较匹配即RTIFRCx RTICOMPx时硬件会自动将RTIUDCPx的值加到当前的RTICOMPx值上生成下一次比较的匹配值。继续上面的例子我们可以这样配置RTICOMP0 9第一次匹配在10毫秒RTIUDCP0 10每次匹配后比较值自动增加10这样中断触发序列将是t10ms: RTIFRC19匹配触发中断。硬件自动计算新 RTICOMP0 9 10 19。t20ms: RTIFRC119匹配触发中断。硬件自动计算新 RTICOMP0 19 10 29。以此类推...这样做带来的巨大优势零软件开销中断周期完全由硬件维护软件无需在ISR中更新比较值消除了因ISR延迟导致的周期抖动Jitter。极高的确定性中断间隔严格等于(RTIUDCPx) * (RTIFRCx的计数周期)。在上例中就是严格的10毫秒。减轻CPU负担特别适合用于产生精确定时的PWM波形、通信波特率时钟或触发周期性的DMA传输。注意事项初始值的设定使用自动更新功能时RTICOMPx的初始值必须仔细计算。它决定了第一次中断触发的时间点。通常如果你希望系统启动后延迟一段时间再产生第一次中断可以设置一个非零的初始值。如果你希望立即开始周期性中断可以将初始值设为0并将RTIUDCPx设为所需周期对应的计数值。同时确保RTIFRCx的初始值为0或小于RTICOMPx初始值否则可能无法触发首次匹配。4. 中断与DMA控制寄存器的实战配置配置好了定时器和比较逻辑下一步就是如何有效地响应这些事件。RTI模块提供了灵活的中断和DMA控制机制让CPU可以高效地处理定时任务或将任务完全下放给DMA。4.1 中断使能设置 (RTISETINTENA / RTICLEARINTENA)这两个寄存器偏移地址0x80和0x84的设计非常贴心它们是为了避免传统的“读-修改-写”操作而存在的。在嵌入式系统中直接操作中断使能寄存器INTENA的某一位通常需要三步读取整个寄存器值、用位操作修改目标位、写回新值。这个过程如果不是原子的在多任务或中断嵌套环境下可能被其他代码打断导致意外修改其他位。RTISETINTENA和RTICLEARINTENA寄存器是“置位”和“清零”专用寄存器。它们的操作是原子性的向RTISETINTENA的某一位写1会置位RTIINTENA寄存器中断使能寄存器的对应位从而使能该中断。向该位写0则无效果。向RTICLEARINTENA的某一位写1会清零RTIINTENA寄存器的对应位从而禁用该中断。向该位写0也无效果。例如要使能比较中断0COMP0和比较DMA请求1DMA1并禁用时间基准中断TBINT可以这样操作假设使用C语言和位域定义// 使能 COMP0 中断和 DMA1 请求 RTI-SETINTENA (1 0) | (1 9); // SETINT0 和 SETDMA1 位 // 禁用时间基准中断 RTI-CLEARINTENA (1 16); // CLEARTBINT 位这种操作是安全的无需担心影响其他中断位的状态。4.2 中断标志管理 (RTIINTFLAG)这个寄存器偏移地址0x88是中断状态的“晴雨表”。当中断条件满足时如比较匹配、计数器溢出对应的标志位会被硬件自动置1。无论该中断是否被使能标志位都会被置位。这提供了一个有用的调试功能即使你关闭了中断也能通过查询这个寄存器知道事件是否发生过。清除中断标志的标准方法是写1清零W1C。在中断服务程序ISR中必须在处理完事务后手动清除对应的标志位否则退出ISR后硬件会认为中断依然 pending导致立即再次进入中断形成“中断风暴”。void RTI_Compare0_ISR(void) { // 1. 处理你的定时任务例如翻转一个GPIO发送一个数据包等。 GPIO_toggle(SomePin); // 2. 清除中断标志位写1清零 RTI-INTFLAG (1 0); // 清除 INT0 标志 // 3. 其他必要的ISR收尾工作... }重要提示在清除标志位之前确保你已经处理了所有与该中断相关的事务。特别是如果ISR中进行了耗时操作或者有更高优先级中断可能抢占更要确保逻辑的完整性。4.3 结合DMA实现无CPU干预的数据传输RTI的比较匹配事件除了产生中断还可以触发DMA请求。这对于高频、规律的数据搬运场景如ADC连续采样、DAC波形输出、串口数据块收发是性能利器。配置流程通常如下配置RTI设置好RTIFRCx的频率以及RTICOMPx/RTIUDCPx确定DMA触发的周期。配置DMA通道设置源地址例如ADC结果寄存器和目的地址例如内存中的缓冲区。设置传输数据量Burst Size或Frame Size。将触发源Trigger Source设置为对应的RTI DMA请求例如DMA_REQ_RTI_COMP0。使能RTI的DMA请求通过RTISETINTENA寄存器使能对应的SETDMAx位。使能DMA通道。一旦配置完成RTI就会按照设定的周期自动触发DMA进行数据传输。CPU可以完全休眠或处理其他任务直到整个缓冲区传输完成DMA再产生一个传输完成中断通知CPU。这极大地提高了系统效率和实时性。5. 数字看门狗定时器的深度配置与安全策略看门狗是嵌入式系统的“生命线”。TI RTI模块中的数字看门狗DWD是一个独立、高可靠性的安全模块。一旦启用除非系统复位否则无法被软件禁用这防止了恶意或错误的代码意外关闭看门狗。5.1 看门狗使能与超时设置RTI Digital Watchdog Control Register (RTIDWDCTRL, 偏移 0x90)这是一个非常严格的寄存器。要使能看门狗必须一次性向其写入特定的密钥值0xA98559DA。写入任何其他值包括分两次写入高低16位都无法使能看门狗。一旦使能该寄存器将变为只读并且看门狗只能通过系统复位上电复位或外部复位来禁用。这种设计彻底杜绝了软件意外失能看门狗的可能性。RTI Digital Watchdog Preload Register (RTIDWDPRLD, 偏移 0x94)这个12位寄存器位[11:0]定义了看门狗的初始超时值。它只能在看门狗被禁用即复位后未向RTIDWDCTRL写入使能密钥时配置。超时时间的计算公式为t_exp (DWDPRLD 1) * 2^13 / RTICLK1这里的RTICLK1是RTICLK经过一个固定13位预分频器2^13后的时钟。假设RTICLK1 RTICLK / 8192。如果RTICLK 100MHz那么RTICLK1 ≈ 12.207 kHz。如果你想设置约1秒的超时时间t_exp ≈ 1s (DWDPRLD 1) * 8192 / 100,000,000DWDPRLD 1 ≈ 1 * 100,000,000 / 8192 ≈ 12207DWDPRLD ≈ 12206 (0x2FAE)配置顺序至关重要系统复位后看门狗默认禁用。配置RTIDWDPRLD寄存器设定超时时间。向RTIDWDCTRL寄存器一次性写入0xA98559DA使能看门狗。此后RTIDWDPRLD将不可写。5.2 喂狗序列与窗口看门狗RTI Watchdog Key Register (RTIWDKEY, 偏移 0x9Ch)喂狗不是简单地向某个寄存器写任意值。它需要遵循一个严格的密钥序列先写0xE51A再写0xA35C。只有按此顺序写入看门狗计数器才会被重置Reload。写入任何其他值或者顺序错误都会立即触发看门狗复位或NMI。手册中的表格清晰地展示了状态机初始状态或写入0xA35C后处于“等待0xE51A”状态。写入0xE51A后进入“已使能”状态此时下一个写操作必须是0xA35C才能成功喂狗。在“已使能”状态下写入0xE51A状态保持不变仍为“已使能”。在任何状态下写入错误密钥非0xE51A或0xA35C立即触发违规反应。窗口看门狗是更高级的功能。普通的看门狗只要求在规定时间内喂狗。窗口看门狗则要求在一个特定的时间窗口内喂狗不能太早也不能太晚。这可以防止因软件卡在某个循环中反复喂狗而其他关键任务已停滞的情况。窗口的开启和关闭由RTITBLCOMP和RTITBHCOMP寄存器相对于RTIUC0计数器定义。RTIWWDRXNCTRL寄存器则定义了违规后的反应触发复位0x5还是产生非屏蔽中断NMI0xA。NMI为调试提供了可能可以在系统复位前捕获错误现场。5.3 看门狗状态与调试RTI Watchdog Status Register (RTIWDSTATUS, 偏移 0x98)这个寄存器记录了看门狗触发的根本原因对于系统故障诊断极其宝贵。其关键状态位包括DWD ST/END TIME VIOL: 看门狗超时未及时喂狗。START TIME VIOL: 窗口看门狗喂狗过早在窗口开启前。KEY ST: 喂狗密钥错误或序列错误。DWWD ST: 窗口看门狗违规包含过早或过晚。这些状态位在触发复位或NMI后依然保持除非被电源复位清除并且可以通过写1来清除。在系统启动的初始化代码中读取并分析这个寄存器的值可以判断上一次复位是否是看门狗触发的以及具体原因从而采取不同的恢复策略。安全编程建议将喂狗操作放在主循环或一个固定的、周期性的高优先级任务/中断中确保即使部分任务阻塞喂狗仍能进行。避免在中断服务程序ISR中喂狗除非你能确保ISR本身不会被长期阻塞。因为ISR可能因更高优先级中断或关中断操作而延迟。在初始化时检查RTIWDSTATUS根据历史状态决定是冷启动还是热恢复流程。对于窗口看门狗仔细计算喂狗窗口确保你的喂狗代码执行时间落在窗口内。这通常需要结合任务调度器来保证。6. 高级功能捕获功能与时间基准除了通用的定时和比较RTI模块还提供了捕获Capture功能和精密的时间基准Timebase逻辑用于处理与外部事件同步或测量外部信号。6.1 输入捕获功能 (RTICAFRC1 / RTICAUC1)捕获功能用于精确记录外部事件发生的时刻。当指定的外部捕获引脚由芯片其他模块配置如eCAP上有事件如上升沿、下降沿发生时硬件会瞬间将此刻两个核心计数器RTIFRC1和RTIUC1的值“冻结”并保存到捕获寄存器中。RTI Capture Free Running Counter 1 Register (RTICAFRC1, 偏移 0x40): 捕获事件发生时RTIFRC1的值。RTI Capture Up Counter 1 Register (RTICAUC1, 偏移 0x44): 捕获事件发生时RTIUC1的值。通过读取这两个寄存器你可以获得一个64位的时间戳精度高达一个RTICLK周期。这对于测量脉冲宽度、频率或事件间隔非常有用。关键操作顺序手册特别强调必须先读取RTICAFRC1再读取RTICAUC1。这是因为硬件设计确保了在读取RTICAFRC1的瞬间会将对应的RTIUC1值锁存到RTICAUC1中。如果顺序颠倒或者在两次读取之间发生了新的捕获事件你读到的两个值可能不属于同一个捕获事件导致时间戳错误。在代码中应将这两次读取放在一个关中断的临界区内。6.2 时间基准与外部时钟监控时间基准功能主要用于检测外部时钟NTU信号是否丢失。它通过两个比较寄存器RTITBLCOMP和RTITBHCOMP在RTIUC0计数器的计数周期内定义一个“窗口期”。RTITBLCOMP: 定义窗口开启的计数值低比较值。RTITBHCOMP: 定义窗口关闭的计数值高比较值。必须小于RTICPUC0预分频比较值因为RTIUC0在达到RTICPUC0后会清零。在这个窗口期内硬件会监控外部NTU时钟的边沿。如果在窗口期内没有检测到预期的边沿TBEXT位会被清零并且可能置位TBINT中断标志。这为系统提供了外部时钟故障检测的能力。应用场景在一些同步系统中主设备依靠外部时钟来同步操作。如果外部时钟失效系统需要及时切换到内部时钟或进入安全状态。时间基准功能为此提供了硬件支持。7. 常见配置问题与调试技巧实录即使理解了所有寄存器在实际配置和调试RTI时依然会遇到不少坑。下面是我在多个项目中总结的一些典型问题和解决方法。7.1 问题排查速查表现象可能原因排查步骤与解决方法中断完全无法触发1. RTI模块全局时钟未使能。2. 对应的计数器RTIFRCx未使能RTIGCTRL。3. 中断未在NVIC中使能。4. 比较值设置错误如小于当前计数器值。1. 检查系统时钟配置确认RTI时钟源RTICLK已激活。2. 检查RTIGCTRL寄存器确保对应计数器CNT1EN等位已置1。3. 检查微控制器的中断控制器如NVIC确认RTI中断通道已使能并设置了正确优先级。4. 在调试器中读取RTIFRCx和RTICOMPx的值确认比较条件能成立。初始化时先设置比较值再使能计数器。中断只触发一次1. 使用了比较中断但未在ISR中清除中断标志。2. 使用了比较中断但未更新比较值未使用RTIUDCPx自动更新。3. ISR中清除了中断标志但未更新比较值且新比较值小于当前计数器值。1. 确认ISR中向RTIINTFLAG对应位写1以清除标志。2. 如果希望周期性中断推荐使用RTIUDCPx自动更新功能。若手动更新需在ISR中计算并写入新的RTICOMPx值。3. 确保新写入的RTICOMPx值大于当前的RTIFRCx值否则需要等待计数器溢出可能很久。中断周期不稳定抖动大1. ISR执行时间过长或被打断导致手动更新比较值的操作延迟。2. RTICLK时钟源本身不稳定。3. 系统中断负载过高导致ISR响应延迟。1.启用RTIUDCPx的自动更新功能这是消除周期抖动的根本方法。2. 优化ISR代码使其尽可能短小精悍。3. 检查时钟树配置确保RTICLK来源如PLL已锁定且稳定。4. 调整中断优先级确保RTI中断能及时响应。看门狗意外复位1. 喂狗间隔大于超时时间。2. 喂狗密钥序列错误。3. 喂狗代码所在的线程或任务被阻塞。4. 窗口看门狗模式下喂狗时间不在允许的窗口内。1. 计算并确保喂狗周期 (DWDPRLD1)*2^13/RTICLK1。2. 仔细检查代码确保喂狗顺序是0xE51A后跟0xA35C且是完整的32位写入操作。3. 将喂狗放在最高优先级的周期任务或主循环中确保其不被死循环、关中断等操作长期阻塞。4. 重新计算窗口时间调整喂狗代码的执行点。读取的64位计数器值不合理读取RTIUCx和RTIFRCx的顺序错误。严格遵守先读RTIFRCx高32位再读RTIUCx低32位的顺序。考虑将这两次读取封装成一个函数并在函数内禁用中断以保证原子性。DMA无法被RTI触发1. RTI的DMA请求未使能RTISETINTENA中的SETDMAx。2. DMA通道的触发源配置错误。3. DMA通道本身未使能。1. 检查并置位RTISETINTENA寄存器中对应的SETDMAx位。2. 在DMA配置中将触发源Trigger Source明确设置为对应的RTI_COMPx事件。3. 确保DMA通道已使能且相关传输参数地址、数据量已正确配置。7.2 调试技巧与实操心得利用仿真器观察寄存器在IDE的调试模式下实时观察RTIFRCx、RTIINTFLAG、RTIWDSTATUS等关键寄存器的变化是最直接的调试手段。你可以单步执行代码看计数器是否在递增中断标志是否在预期时刻被置位。GPIO辅助调试在中断服务程序ISR的开始和结束位置添加GPIO引脚翻转的代码。用示波器或逻辑分析仪测量这个引脚的电平变化可以直观地看到中断是否触发是否有脉冲产生。中断周期是否准确测量脉冲间隔。ISR执行时间脉冲的宽度。中断抖动观察多个脉冲间隔的一致性。渐进式配置不要试图一次性配置所有功能。建议按以下顺序初始化 a.时钟确保RTI模块时钟使能。 b.基础定时配置一个计数器如RTIFRC1和其预分频RTICPUC1先不用中断通过读取计数器值验证其是否在运行。 c.简单中断配置一个比较寄存器RTICOMP0和手动更新使能中断验证能否进入ISR。 d.自动更新启用RTIUDCP0验证周期性中断是否稳定。 e.高级功能最后再配置DMA、捕获或看门狗。看门狗喂狗代码的健壮性将喂狗序列写成一个独立的函数并在函数内进行关键操作。可以考虑使用互斥锁或标志位防止在系统状态异常时如在关键临界区内执行喂狗操作。对于窗口看门狗需要精确计算喂狗任务的执行时间点。理解“特权模式”写入很多RTI寄存器标注为WP需要在CPU处于特权模式下才能写入。在运行操作系统如FreeRTOS时用户任务通常处于非特权模式。配置RTI的初始化代码必须在特权模式下执行如启动阶段、或在特权模式的中断/服务调用中。