tms320f2812测量外部输入的pwm波的频率的代码
时间: 2023-09-16 11:07:32 浏览: 148
以下是使用TMS320F2812测量外部输入PWM波的频率的示例代码:
```
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
#define PWM_PIN GPIO_Number_0
volatile Uint32 pwmFreq = 0;
interrupt void pwmInput_ISR(void)
{
// 清除中断标志位
PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
// 计算PWM脉冲的周期
static Uint32 startTime = 0;
Uint32 endTime = CpuTimer1Regs.TIM.all;
Uint32 period = (endTime - startTime) / 2;
startTime = endTime;
// 计算PWM脉冲的频率
pwmFreq = (Uint32)(1000000.0 / period);
}
void main(void)
{
// 初始化系统时钟
InitSysCtrl();
// 初始化GPIO
InitGpio();
// 配置PWM输入引脚
GpioCtrlRegs.GPAMUX1.bit.PWM_PIN = 1;
GpioCtrlRegs.GPADIR.bit.PWM_PIN = 0;
// 配置定时器1用于捕获PWM输入引脚的信号
CpuTimer1Regs.TCR.bit.TSS = 1;
CpuTimer1Regs.PRD.all = 0xFFFFFFFF;
CpuTimer1Regs.TCR.bit.TRB = 1;
CpuTimer1Regs.TCR.bit.TIE = 1;
CpuTimer1Regs.TCR.bit.TSS = 0;
// 配置PWM输入引脚的中断
PieCtrlRegs.PIEIER3.bit.INTx1 = 1;
IER |= M_INT3;
// 启用全局中断
EINT;
// 主循环
while(1)
{
// 执行其他任务
}
}
```
在上面的代码中,我们首先定义了一个名为`PWM_PIN`的常量,它表示外部输入PWM波的引脚。然后,我们定义了一个名为`pwmFreq`的变量,用于存储测量得到的PWM脉冲的频率。
接下来,我们定义了一个名为`pwmInput_ISR`的中断服务程序,它会在每次捕获到PWM脉冲时被调用。在中断服务程序中,我们首先清除了中断标志位,然后计算了PWM脉冲的周期,并据此计算了PWM脉冲的频率。最后,我们将计算得到的PWM脉冲的频率存储到`pwmFreq`变量中。
在`main`函数中,我们首先初始化了系统时钟和GPIO。然后,我们配置了PWM输入引脚,使用定时器1捕获PWM输入引脚的信号,并启用了PWM输入引脚的中断。最后,我们启用了全局中断,并进入了主循环。
在主循环中,我们可以执行其他任务,同时可以通过访问`pwmFreq`变量来获取测量得到的PWM脉冲的频率。
阅读全文