TMS320F2812方波频率检测程序
时间: 2023-12-18 13:03:17 浏览: 207
TMS320F2812程序模板
3星 · 编辑精心推荐
以下是TMS320F2812的方波频率检测程序的参考代码:
```c
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"
// 定义计数器的计数值
#define COUNT_VALUE 37500
// 定义计数器的计数时间
#define COUNT_TIME 0.001
// 定义计数器的计数器号码
#define TIMER_NUM 2
// 定义计数器的计数器中断号码
#define TIMER_INT_NUM 14
// 定义方波输入的GPIO口
#define INPUT_GPIO GPIO0
// 定义方波输入的GPIO口中断号码
#define INPUT_INT_NUM 6
// 定义方波输入的GPIO口的边沿触发类型
#define INPUT_INT_TYPE RISING_EDGE_INT
// 定义计数器计数的次数
volatile Uint16 count = 0;
// 定义方波的频率
volatile float freq = 0.0;
// 定义计时器是否溢出的标志
volatile bool isTimerOverflow = false;
// 定义GPIO口是否有边沿触发的标志
volatile bool isGpioEdgeTriggered = false;
// 定义计时器中断处理函数
__interrupt void timer_isr(void)
{
// 清除计数器中断标志
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
// 计数器计数+1
count++;
// 如果计数器计数达到了计数器的计数值
if (count >= COUNT_VALUE)
{
// 停止计数器
CpuTimer2Regs.TCR.bit.TSS = 1;
// 计算方波的频率
freq = count / COUNT_TIME;
// 计数器计数清零
count = 0;
// 标志计时器已经溢出
isTimerOverflow = true;
}
}
// 定义GPIO口中断处理函数
__interrupt void gpio_isr(void)
{
// 清除GPIO口中断标志
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
// 如果GPIO口有边沿触发
if (isGpioEdgeTriggered)
{
// 启动计数器
CpuTimer2Regs.TCR.bit.TSS = 0;
}
}
void main(void)
{
// 初始化DSP
InitSysCtrl();
// 初始化GPIO口
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0;
GpioCtrlRegs.GPADIR.bit.GPIO0 = 0;
GpioCtrlRegs.GPIOXINT1SEL.bit.GPIOSEL = INPUT_GPIO;
GpioCtrlRegs.GPIOPOLARITY.bit.GPIO0 = INPUT_INT_TYPE;
EDIS;
// 初始化计数器
InitCpuTimers();
ConfigCpuTimer(&CpuTimer2, 150, COUNT_TIME * COUNT_VALUE);
// 注册计数器中断处理函数
EALLOW;
PieVectTable.TINT2 = &timer_isr;
PieCtrlRegs.PIEIER1.bit.INTx2 = 1;
EDIS;
// 注册GPIO口中断处理函数
EALLOW;
PieVectTable.XINT1 = &gpio_isr;
PieCtrlRegs.PIEIER1.bit.INTx4 = 1;
EDIS;
// 使能全局中断
EnableInterrupts();
// 启动GPIO口中断
isGpioEdgeTriggered = true;
XIntruptRegs.XINT1CR.bit.ENABLE = 1;
// 循环等待计时器溢出
while (!isTimerOverflow);
// 停止GPIO口中断
XIntruptRegs.XINT1CR.bit.ENABLE = 0;
// 输出方波的频率
printf("The frequency of the square wave is %.2f Hz.\n", freq);
}
```
该程序通过TMS320F2812的计数器和GPIO口实现了方波的频率检测功能。程序首先设置了计数器的计数值和计数时间,然后初始化了计数器和GPIO口,并注册了计数器中断处理函数和GPIO口中断处理函数。程序启动GPIO口中断,并循环等待计时器溢出后,停止GPIO口中断,并输出方波的频率。在程序中,我们可以根据实际情况修改计数器的计数值、计数时间、GPIO口和中断号码等参数。
阅读全文