TMS320F2837xD外部中断与同步触发寄存器实战解析

TMS320F2837xD外部中断与同步触发寄存器实战解析
1. 项目概述与核心价值在电机控制、数字电源或者任何对时序有苛刻要求的实时嵌入式系统里外部中断和硬件同步触发机制就像是系统的“神经末梢”和“指挥中枢”。它们负责捕捉外部世界的瞬时变化比如过流信号、编码器脉冲并协调内部各个功能模块如PWM、ADC步调一致地工作。我接触过不少项目初期因为中断配置不当要么响应不及时导致控制环路崩溃要么误触发造成系统紊乱调试起来非常头疼。TMS320F2837xD作为TI C2000系列中的高性能双核MCU其强大之处不仅在于主频和算力更在于它提供了一套极其灵活和精细的中断与同步触发管理系统。XINT_REGS和SYNC_SOC_REGS这两组寄存器就是直接操控这套系统的“开关”和“路由表”。仅仅知道某个寄存器位是“使能”远远不够在实际项目中你需要理解为什么选择边沿触发而非电平触发如何避免中断嵌套导致的时序错乱多个PWM模块之间如何实现纳秒级的精确同步这些问题的答案都藏在寄存器的配置细节和它们相互配合的逻辑里。本文将从一个实际开发者的视角彻底拆解F2837xD的外部中断和同步触发寄存器。我不会只翻译数据手册而是结合我在多个电机驱动和电源项目中的踩坑经验告诉你每个配置项背后的设计意图、常见的配置陷阱以及如何通过代码实现稳定可靠的实时响应。无论你是正在评估F2837xD还是已经深陷调试泥潭希望这些内容能帮你理清思路把芯片的这部分能力真正用起来。2. 外部中断XINT寄存器组深度解析外部中断是MCU响应异步事件最直接的方式。F2837xD提供了最多5个独立的外部中断XINT1-XINT5每个都有独立的配置寄存器和计数器这为多事件源管理和诊断提供了便利。2.1 XINT配置寄存器XINTxCR的位域精讲每个XINTxCR寄存器虽然只有16位宽但真正需要关注的只有最低4位。数据手册的图表很清晰但我们得理解每个选项的实战意义。位0 - ENABLE中断使能开关这是最基础的开关。但有一个关键细节常被忽略在使能中断前必须先配置好极性POLARITY和清除可能存在的悬挂中断标志。如果先使能再配置一个不合预期的边沿信号比如默认的低电平可能会立即触发一个中断导致程序跑飞。安全的初始化顺序应是1. 禁用中断ENABLE02. 配置极性3. 清除对应PIE组中的中断标志位4. 最后使能中断。位[3:2] - POLARITY触发边沿选择这个2位字段定义了何种信号变化能引起中断00下降沿触发。这是最常用的配置之一适用于按键按下通常外部上拉、某些传感器从高到低的跳变等场景。01上升沿触发。同样常见适用于捕获脉冲信号的开始。10再次定义为下降沿触发。为什么会有两个值代表同一种模式这通常是为了硬件设计的灵活性和未来扩展预留的目前功能与00相同。11双边沿触发。信号的任何跳变上升或下降都会产生中断。这个模式要慎用它会把中断频率提高一倍如果信号有抖动比如机械开关的弹跳会导致中断风暴瞬间耗尽CPU资源。如果必须使用一定要在硬件如RC滤波或软件如延时去抖上做好防抖措施。注意POLARITY的配置必须在中断禁用ENABLE0时进行。如果在中断使能状态下修改可能会因为读写时序问题导致在修改过程中检测到一个错误的边沿而触发中断。2.2 XINT计数器寄存器XINTxCTR的妙用这是F2837xD外部中断模块一个非常实用的诊断和调试功能。XINTxCTR是一个16位、只读、自由运行的向上计数器时钟源是系统时钟SYSCLKOUT。它的工作流程是这样的计数器始终在运行只要对应XINT模块被使能从0开始累加。当检测到一次有效的、符合POLARITY设置的边沿时计数器会自动复位到0x0000。然后继续从0开始计数直到下一个有效边沿到来再次清零如此循环。这个机制在工程上有两个核心用途第一测量中断间隔时间。这是最直接的应用。假设你的SYSCLKOUT是200MHz那么每个计数周期就是5ns。如果某次中断发生时你读取计数器值为40000那么从上一次中断到这一次中断的间隔就是 40000 * 5ns 200us。这对于评估系统的事件频率、检查外部信号是否丢失计数器值异常增大或过于频繁计数器值异常减小非常有帮助。你可以在中断服务函数ISR的开头读取这个值并记录下来。第二辅助调试中断误触发或丢失。如果你怀疑中断被意外触发可以在一个低优先级的后台任务中定期读取XINTxCTR的值。如果发现它的值很小比如只有几百而你认为此时不应该有中断那就很可能存在噪声毛刺触发了中断。相反如果应该定期到来的中断迟迟不来计数器值会一直累加到溢出0xFFFF后归零通过监控这个溢出事件你可以诊断出信号丢失的问题。// 示例在XINT1中断服务函数中计算并记录中断间隔 interrupt void xint1_isr(void) { // 读取中断发生时的计数器值 Uint16 current_count Xint1Regs.XINT1CTR.bit.INTCTR; // 计算时间间隔 (假设SysClkOut 200MHz, 周期T5ns) float time_interval_us (float)current_count * 5.0f / 1000.0f; // 转换为微秒 // 将时间间隔存入全局变量或缓冲区供主循环分析 g_xint1_last_interval time_interval_us; // ... 执行其他中断处理任务 ... // 清除PIE中断标志位非常重要 PieCtrlRegs.PIEACK.all PIEACK_GROUP1; }实操心得在调试初期我强烈建议在每个XINT的ISR中都加入读取XINTxCTR的代码并将时间间隔通过串口打印或存入全局数组。这能帮你直观地验证中断是否按预期频率触发是排查硬件连接问题、软件配置错误的第一手证据。2.3 外部中断的完整配置流程与代码示例理解了寄存器位域我们来看一个完整的配置流程。假设我们需要配置XINT2响应一个来自光耦隔离的过流信号的下降沿并测量其触发间隔。步骤一引脚功能映射首先XINT1-5的中断输入信号并非固定引脚需要通过GPIO多路复用器MUX映射到具体的物理引脚上。例如XINT2可能可以映射到GPIO0或GPIO16等。这需要在GPIO_setPinConfig函数中配置。这是第一个容易出错的地方忘记配置GPIO为外设功能导致信号无法进入XINT模块。步骤二配置XINT控制寄存器按照前面提到的安全顺序进行配置。步骤三配置PIE向量表F2837xD使用外设中断扩展PIE模块管理大量中断源。XINT1-5通常对应PIE的特定组和中断号例如XINT1对应INT1.4 XINT2对应INT1.5等。你需要将自定义的中断服务函数ISR地址填入PIE向量表对应的位置。步骤四使能PIE级和CPU级中断最后需要层层使能使能PIE组内的这个中断如PieCtrlRegs.PIEIER1.bit.INTx5 1;然后使能CPU级的这个INT1中断线IER | M_INT1;最后全局使能中断EINT;。下面是一个具体的代码示例// 步骤1: 配置GPIO0为XINT2输入功能 (假设GPIO0复用为XINT2) GPIO_setPinConfig(GPIO_0_XINT2); GPIO_setDirectionMode(0, GPIO_DIR_MODE_IN); // 设为输入 GPIO_setQualificationMode(0, GPIO_QUAL_SYNC); // 可选同步采样抗毛刺 // 步骤2: 配置XINT2控制寄存器 Xint2Regs.XINT2CR.bit.ENABLE 0; // 先禁用 Xint2Regs.XINT2CR.bit.POLARITY 0; // 设置为下降沿触发 (00) // 注意这里没有直接清除中断标志的位标志在PIE模块中 DelayUs(10); // 短暂延时确保配置稳定 Xint2Regs.XINT2CR.bit.ENABLE 1; // 最后使能 // 步骤3: 关联中断服务函数到PIE向量表 EALLOW; // 解除对PIE向量表的写保护 PieVectTable.XINT2_INT xint2_isr_function; // 将你的ISR函数地址填入 EDIS; // 恢复写保护 // 步骤4: 使能PIE和CPU级中断 PieCtrlRegs.PIEIER1.bit.INTx5 1; // 使能PIE组1的第5个中断即XINT2 IER | M_INT1; // 使能CPU级的INT1中断线 EINT; // 全局使能中断3. 同步与ADC启动SYNC_SOC寄存器组实战指南在复杂的控制系统中经常需要多个外设协同工作。例如你希望EPWM1模块产生一个PWM波形并在其周期匹配的瞬间精确地触发ADC开始采样。这种硬件级别的、无需CPU干预的同步就是SYNC_SOC_REGS寄存器组要管理的核心事务。3.1 SYNCSELECT寄存器同步信号的路由器可以把SYNCSELECT寄存器想象成一个高度可配置的同步信号交叉开关。它决定了芯片内部产生的同步输出信号SYNCOUT从哪里来以及外部的同步输入信号SYNCIN被分配到哪个外设模块。SYNCOUT源选择位[28:27]这个字段选择哪个EPWM模块的SYNCOUT信号被引到芯片的同步输出引脚可能是GPIO上的一个特定功能引脚。选项有EPWM1, 4, 7, 10。为什么是这几个因为F2837xD的EPWM模块是分组的这些通常是每组的第一个模块作为组内的同步主设备。选择哪个取决于你的系统设计里谁作为整个同步链的“时钟源”。例如如果你用EPWM1产生系统的主时基就选择它作为SYNCOUT源。同步输入源选择位[14:0]这是更复杂的部分它包含了多个字段ECAP4SYNCIN, ECAP1SYNCIN, EPWM10SYNCIN, EPWM7SYNCIN, EPWM4SYNCIN每个字段3位用于配置对应外设模块的同步输入信号来源。000-011选择其他EPWM模块的SYNCOUT作为输入。这用于构建EPWM模块之间的主从同步链例如让EPWM4同步于EPWM1实现多个PWM通道的相位对齐。101-110选择外部同步输入引脚EXTSYNCIN1, EXTSYNCIN2。这允许用一个外部信号比如来自另一个芯片或FPGA的脉冲来同步整个片上的时基在多芯片系统中至关重要。100或111保留或特殊配置通常不使用。配置示例假设我们有一个三相交错并联的电源系统需要三个EPWM模块EPWM1, EPWM4, EPWM7产生相位互差120度的PWM。我们可以这样配置设置SYNCOUT源为EPWM1SYNCSELECT.bit.SYNCOUT 0。设置EPWM4的同步输入源为EPWM1的SYNCOUTSYNCSELECT.bit.EPWM4SYNCIN 0。设置EPWM7的同步输入源也为EPWM1的SYNCOUTSYNCSELECT.bit.EPWM7SYNCIN 0。在软件中分别配置EPWM4和EPWM7为“从”模式使其在接收到同步信号时复位自己的时基计数器。这样EPWM1每次周期结束时发出同步脉冲EPWM4和EPWM7同时复位但通过设置不同的相位偏移值TBPRD的偏移就能轻松实现严格的相位差控制。3.2 ADCSOCOUTSELECT寄存器ADC触发信号的多路复用器这个寄存器功能非常直接但极其强大。它管理着多达12个EPWM模块PWM1-PWM12的SOCA和SOCB触发信号如何连接到两个外部ADC启动信号ADCSOCAO和ADCSOCBO上。寄存器结构低16位位[15:0]控制ADCSOCAO的信号源。每一位对应一个EPWM模块的SOCA触发输出。例如PWM1SOCAEN1表示EPWM1的SOCA事件会驱动ADCSOCAO信号有效。高16位位[31:16]控制ADCSOCBO的信号源。每一位对应一个EPWM模块的SOCB触发输出。关键特性这是一个“或”逻辑。你可以同时使能多个位。例如如果你设置PWM1SOCAEN1且PWM2SOCAEN1那么EPWM1的SOCA事件或EPWM2的SOCA事件任何一个发生都会拉低ADCSOCAO信号。这允许你用多个、不同时刻的PWM事件去触发同一个ADC转换非常灵活。实战应用在移相全桥或LLC谐振变换器中我们常常需要在不同开关管开通或关断的时刻进行ADC采样以实现电流或电压的精确控制。假设我们需要在EPWM1的A路上升沿和EPWM3的B路下降沿进行采样。我们可以配置EPWM1使其在CTR0或某个值时产生SOCA触发脉冲。配置EPWM3使其在CTRPRD或某个值时产生SOCB触发脉冲。设置ADCSOCOUTSELECT.bit.PWM1SOCAEN 1。设置ADCSOCOUTSELECT.bit.PWM3SOCBEN 1。将外部ADC的转换启动引脚连接到ADCSOCAO信号上。这样两个不同时刻的PWM事件都能独立地触发ADC转换而CPU无需参与实现了极高精度的采样定时。3.3 SYNCSOCLOCK寄存器配置锁定的守护者这是一个安全特性寄存器。它的两个低位SYNCSELECT和ADCSOCOUTSELECT是“一次性写入”锁。一旦你将其中任意一个位置1对应的配置寄存器SYNCSELECT或ADCSOCOUTSELECT就被永久锁定直到下一次系统复位SYSRSn发生。设计意图防止在程序运行时关键的系统同步和触发配置被意外修改例如由于程序跑飞、指针错误等导致整个控制系统时序混乱可能引发灾难性后果如电源炸机、电机飞车。使用策略在系统初始化末期进行锁定。在所有同步和ADC触发路径都正确配置完成后再执行锁定操作。锁定操作不可逆。务必确认配置无误后再锁定。锁定后读取操作仍然有效只是不能写入。你可以随时读取这些寄存器来验证配置。// 配置并锁定同步与ADC触发选择寄存器 EALLOW; // 必须进入EALLOW保护模式才能写这些寄存器 // 1. 配置同步路由 SysCtrlRegs.SYNCSELECT.bit.SYNCOUT 0; // EPWM1作为同步主站 SysCtrlRegs.SYNCSELECT.bit.EPWM4SYNCIN 0; // EPWM4同步于EPWM1 SysCtrlRegs.SYNCSELECT.bit.EPWM7SYNCIN 0; // EPWM7同步于EPWM1 // 2. 配置ADC触发源 SysCtrlRegs.ADCSOCOUTSELECT.bit.PWM1SOCAEN 1; // EPWM1 SOCA触发ADCSOCAO SysCtrlRegs.ADCSOCOUTSELECT.bit.PWM3SOCBEN 1; // EPWM3 SOCB也触发ADCSOCAO // 3. 锁定配置写入后不可更改除非复位 SysCtrlRegs.SYNCSOCLOCK.bit.SYNCSELECT 1; SysCtrlRegs.SYNCSOCLOCK.bit.ADCSOCOUTSELECT 1; EDIS; // 退出EALLOW模式重要警告SYNCSOCLOCK寄存器本身也是“一次性写入”的。这意味着你只能将它的位从0写成1而不能从1写回0。错误的锁定顺序或重复锁定操作虽然不会改变已锁定的状态但最好在代码中保持清晰的逻辑只执行一次锁定。4. DMA与CLA触发源选择寄存器组简介在F2837xD这样的高性能MCU中直接存储器访问DMA和控制律加速器CLA是解放CPU负载、实现高吞吐量并行处理的关键。而DMA_CLA_SRC_SEL_REGS寄存器组就是为DMA通道和CLA任务分派“工作指令”的来源。4.1 发源选择寄存器CLA1TASKSRCSELx, DMACHSRCSELx这两组寄存器CLA1TASKSRCSEL1/2和DMACHSRCSEL1/2的结构非常相似。它们本质上是一个个的8位字段每个字段对应一个CLA任务TASK1-TASK8或一个DMA通道CH1-CH6。工作原理每个8字段的值是一个编码号指向一个特定的硬件事件源。这个事件源列表非常长可能包括ADC序列转换完成ADCINT1/2...EPWM的SOCA/SOCB事件SPI/UART的发送/接收完成外部中断XINT定时器中断等等...例如你可以将CLA1TASKSRCSEL1.bit.TASK1设置为对应ADC1序列1转换完成事件的编码值。这样每当ADC1完成一次指定的转换序列就会自动触发CLA的TASK1开始执行。CLA会独立地从指定内存地址读取ADC结果执行PID计算等控制算法再将结果写回全程无需CPU干预。配置流程确定触发源明确你希望用哪个硬件事件来启动DMA传输或CLA任务。查找编码在数据手册的“Interrupts and Triggers”章节或这些寄存器的描述中找到该事件对应的特定编码值。这是一个需要仔细核对的关键步骤编码错误会导致触发完全失效。写入配置在EALLOW保护下将编码值写入对应的字段。可选锁定使用CLA1TASKSRCSELLOCK和DMACHSRCSELLOCK寄存器锁定配置防止被意外修改原理与SYNCSOCLOCK相同。4.2 在电机控制中的典型应用场景假设我们构建一个基于F2837xD的双电机矢量控制系统CPU1负责电机1CLA负责电机2的电流环计算。场景一ADC触发CLA任务配置ADC模块使其在EPWM1的SOCA事件触发下对电机2的三相电流进行同步采样。配置CLA1TASKSRCSEL1.bit.TASK1的触发源为“ADCINT1”假设ADC序列1完成中断对应此编码。在CLA的TASK1代码中直接读取ADC结果寄存器进行Clarke/Park变换和PI调节计算出新的PWM占空比并写入对应的CMPA寄存器影子。这样每次ADC采样结束CLA自动开始计算实现了与PWM周期严格同步、且确定性的电流环控制CPU1则完全不用管电机2的电流环。场景二DMA搬运ADC数据CPU需要记录电机1的电流波形进行分析。配置DMACHSRCSEL1.bit.CH1的触发源为“ADCINT2”ADC序列2完成。配置DMA通道1源地址为ADC结果寄存器目标地址为一段内存数组传输数据量为3三相电流。每次ADC序列2完成DMA自动将三个电流值搬运到内存中。当搬运够一定次数比如1000个点后DMA产生一个中断给CPUCPU再对这批数据进行处理如FFT分析。这避免了CPU频繁进入ADC中断搬运数据极大地提高了效率。5. 常见问题排查与实战技巧即使理解了所有寄存器实际调试中依然会遇到各种问题。下面是我总结的一些典型故障现象和排查思路。5.1 外部中断不触发或误触发现象程序似乎进不了中断服务函数或者莫名其妙地频繁进入。排查清单GPIO配置检查首先用万用表或示波器确认物理信号是否到达芯片引脚。然后检查GPIO的MUX配置是否正确设置为XINT功能而非普通的数字输入。一个低级但常见的错误是配置了GPIO方向但忘了设置复用功能。输入信号质量用示波器观察中断输入引脚上的信号。是否有毛刺边沿是否陡峭如果信号缓慢上升/下降可能需要在GPIO配置中启用输入量化器Qualification例如设置为采样窗模式以过滤噪声。XINT本身没有硬件滤波抗噪依赖外部电路或GPIO量化器。中断使能顺序回顾2.3节的配置流程。确保是“先配置后使能”。检查PIE向量表是否正确关联PIE组中断和CPU级中断是否都已使能。中断标志位在使能中断前是否清除了该中断在PIE模块中的悬挂标志PIEIFR一个已有的悬挂标志会使能后立即进入中断。在ISR结束时是否清除了PIE组应答位PIEACK如果不清除该组的所有后续中断都会被阻塞。中断嵌套与优先级检查是否在其他地方全局禁用了中断DINT或者有更高优先级的中断长时间执行导致本中断无法得到响应使用XINT计数器XINTxCTR可以帮助判断如果计数器值正常累加并在信号边沿清零说明硬件检测到了信号问题可能在软件使能或响应环节如果计数器不变化问题可能在信号路径或配置。5.2 同步触发与ADC采样不同步现象配置了EPWM触发ADC但ADC采样时刻看起来是随机的或者与PWM边沿有偏差。排查清单信号路由确认这是最复杂的环节。逐级检查EPWM模块的SOCA/SOCB触发是否已使能SOCx的触发事件CTR0, CTRPRD, CTRCMPA等配置是否正确ADCSOCOUTSELECT寄存器中对应EPWM模块的SOCxEN位是否置1锁相环与时钟检查系统时钟SYSCLKOUT、外设时钟HSPCLK/LSPCLK是否稳定分频配置是否正确。所有同步逻辑都基于SYSCLKOUT时钟不稳一切皆空。ADC启动延迟即使硬件触发信号准时到达ADC模块ADC从接收到触发信号到真正开始采样也存在固定的硬件延迟几个SYSCLK周期。在计算采样窗口时需要考虑这个延迟。数据手册会给出这个参数。使用示波器交叉验证这是最直接的调试方法。将EPWM的SOCA输出映射到一个GPIO引脚通过EPWM_setSOCAPulseSrc等函数。将ADCSOCAO也映射到一个GPIO引脚。用双通道示波器同时观察这两个信号和实际的PWM波形。你应该能看到SOCA脉冲、紧随其后的ADCSOCAO脉冲低电平32个SYSCLK周期以及ADC转换完成后产生的中断信号如果使能了。通过测量它们之间的延时可以精确验证硬件链路是否工作。5.3 DMA/CLA触发不工作现象配置了事件触发DMA或CLA但数据传输或任务没有执行。排查清单触发源编码反复核对CLA1TASKSRCSELx或DMACHSRCSELx寄存器中填入的8位编码是否与你期望的硬件事件完全匹配。这是最容易出错的一步编码表可能分散在数据手册的不同章节。DMA/CLA模块使能触发源配置只是“接线”DMA通道或CLA任务本身是否已正确初始化并使能例如DMA需要配置传输模式单次、连续、源/目标地址、数据大小等CLA需要加载代码到其专属RAM并启动。事件是否真实发生你期望的触发事件如ADCINT是否真的发生了可以通过先使能该事件的CPU中断来验证。如果CPU能进入中断说明事件产生了问题在触发路由或DMA/CLA配置如果CPU也进不去问题在事件源本身。资源冲突与仲裁DMA和CLA访问共享资源如某些内存总线、外设寄存器时可能存在冲突。确保你的DMA/CLA访问的内存区域是它们被允许访问的例如CLA通常只能访问特定的RAM块。检查是否有更高优先级的DMA通道或CLA任务占用了总线。5.4 寄存器配置锁定的注意事项现象在调试阶段尝试修改SYNCSELECT或ADCSOCOUTSELECT寄存器但写入操作无效。排查思路首先检查是否执行了EALLOW指令。这些寄存器通常受EALLOW保护。如果已执行EALLOW但仍无法写入检查SYNCSOCLOCK寄存器对应的锁定位是否已被置1。如果已被锁定那么在下次芯片复位前你无法修改配置。调试策略在项目开发早期先不要锁定这些寄存器。在系统初始化函数中将锁定操作注释掉。待所有功能调试稳定经过长时间测试无误后再将锁定指令加上作为产品固件的最终步骤。6. 一个完整的系统配置案例交错并联Buck变换器为了将上述所有知识点串联起来我们考虑一个具体的应用个两相交错并联的同步Buck变换器用于服务器电源模块。系统需求两路PWMEPWM1A/B, EPWM2A/B驱动两个相位开关频率500kHz相位差180度。需要精确采样两路电感电流和输出电压。电流采样必须在对应下管开通的中点时刻进行以获取平均电流。电压采样在PWM周期开始时进行。使用CLA执行两路的平均电流模式控制Average Current Mode Control, ACMC算法。使用CPU处理电压环、保护、通信等任务。硬件配置与寄存器操作步骤1PWM同步配置配置EPWM1为主模块产生500kHz的时基。配置EPWM2为从模块同步于EPWM1。在SYNCSELECT寄存器中设置SYNCOUT源为EPWM1设置EPWM2SYNCIN源为EPWM1的SYNCOUT假设EPWM2对应EPWM4SYNCIN或类似字段需查表确认。在EPWM2的配置中设置时基为“从”模式并在同步信号到来时复位计数器。设置其相位偏移寄存器TBPHS为EPWM1周期值的一半实现180度移相。步骤2ADC触发配置配置EPWM1在其计数器等于某个值对应下管开通中点时产生SOCA触发。配置EPWM1在其计数器等于0周期开始时产生SOCB触发。在ADCSOCOUTSELECT寄存器中使能PWM1SOCAEN和PWM1SOCBEN。将外部ADC或片内ADC的启动信号连接到ADCSOCAO。这样一个PWM周期内会产生两个触发信号一个在周期开始用于电压采样一个在下管开通中点用于电流采样。步骤3CLA任务触发配置配置ADC模块使其在SOCA和SOCB触发下完成转换后分别产生ADCINT1和ADCINT2中断。在CLA1TASKSRCSEL1寄存器中将TASK1的触发源设置为ADCINT1TASK2的触发源设置为ADCINT2。编写CLA的TASK1代码读取电流ADC值执行电流环PI计算更新PWM占空比。编写CLA的TASK2代码读取电压ADC值执行电压环PI计算更新电流环的给定值。步骤4保护与监控将过流比较器的输出连接到XINT1配置为上升沿触发。在XINT1的中断服务函数中执行紧急关断PWMTrip Zone和故障记录。在XINT1的ISR中读取XINT1CTR寄存器可以监控过流事件的间隔用于分析故障是单次事件还是持续过载。通过这样的配置我们利用XINT实现了快速硬件保护利用SYNC_SOC实现了PWM的精确同步和ADC的定时触发再利用DMA/CLA触发将ADC数据自动送给协处理器计算最终构建了一个高实时性、高可靠性、CPU负载低的数字电源控制系统。整个过程中对相关寄存器的深刻理解和正确配置是这一切得以实现的基础。

最新新闻

日新闻

周新闻

月新闻