TI F28335 eCAP1 和 eCAP2 中断处理代码解析
这段代码是用来处理 TI F28335 微控制器中 eCAP1 和 eCAP2 的中断的,eCAP 是用来捕获外部信号的模块。
首先定义了两个中断服务子程序:'eCAP1_Isr' 和 'eCAP2_Isr'。
'eCAP1_Isr' 用来处理 eCAP1 的中断,当 eCAP1 的事件 2 发生时,先将 'Teeth_Pulse_Num' 自增 1,然后清除 'CEVT2' 和 'INT' 标志位,重新装载 'ECCTL2' 寄存器并清除 'PIEACK' 寄存器。
'eCAP2_Isr' 用来处理 eCAP2 的中断,当 eCAP2 的事件 2 发生时,先将 'Teeth_Pulse_Num' 清零,然后获取 'ECap2Regs.CAP1' 和 'ECap2Regs.CAP2' 的值,计算得到 'Circle_Pulse_Time',然后根据 'Circle_Pulse_Time' 计算 'temp_temp' 和 'period_period',再根据 'period_period' 计算 'Velo_Mche'。最后清除 'CEVT2' 和 'INT' 标志位,重新装载 'ECCTL2' 寄存器并清除 'PIEACK' 寄存器。
代码中涉及到的主要变量和操作解释如下:
- 'Teeth_Pulse_Num': 计数外部信号脉冲的变量,在 'eCAP1_Isr' 中自增,在 'eCAP2_Isr' 中清零。
- 'Circle_Pulse_Time': 记录两个连续脉冲之间的时间间隔,由 'ECap2Regs.CAP1' 和 'ECap2Regs.CAP2' 计算得到。
- 'temp_temp': 经过位移和除法操作后的 'Circle_Pulse_Time',用于计算周期。
- 'period_period': 脉冲周期,由 'temp_temp' 计算得到。
- 'Velo_Mche': 速度,由 'period_period' 计算得到。
- 'ECap1Regs.ECCLR.bit.CEVT2': 清除 eCAP1 事件 2 标志位。
- 'ECap1Regs.ECCLR.bit.INT': 清除 eCAP1 中断标志位。
- 'ECap1Regs.ECCTL2.bit.REARM': 重新装载 eCAP1 捕获控制寄存器。
- 'PieCtrlRegs.PIEACK.all': 清除中断处理完成标志位。
这段代码利用 eCAP 模块捕获外部信号,通过中断服务程序计算信号周期和速度,可以用于各种应用场景,例如电机控制、位置测量等。
原文地址: https://www.cveoy.top/t/topic/o78I 著作权归作者所有。请勿转载和采集!