📄 use.c
字号:
#include "DSP28_Device.h"
/*#include "DSP28_CpuTimers.h"
#include "DSP28_Ev.h"
#include "DSP28_Gpio.h"
#include "DSP28_PieCtrl.h"
#include "DSP28_PieVect.h"
#include "DSP28_SysCtrl.h"*/
void InitSysCtrl(void);
void InitGpio(void);
void InitPieCtrl(void);
void InitPieVectTable(void);
void InitCpuTimers(void);
void ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period);
interrupt void cpu_timer0_isr(void);
void main(void)
{
unsigned int i=0;
unsigned long time_stamp=0;
int freq[8]={2219,1973,1776,1665,1480,1332,1184,1110};
// 清楚CPU中断
DINT;
IER=0x0000;
IFR=0x0000;
// 系统初始化
InitSysCtrl();
// 通用输入输出接口GPIO配置
InitGpio();
// 初始化PIE
InitPieCtrl();
// 初始化中断向量表
InitPieVectTable();
// 定时器Timer0的中断入口向量重新映射
EALLOW;
PieVectTable.TINT0=&cpu_timer0_isr;
EDIS;
// 初始化定时器Timer0
InitCputimers();
// 设置定时器0周期寄存器的值
ConfigCpuTimer(&CpuTimer0,150,50000);
IER=0x0001; // 使能中断组1
EINT; // 使能全局中断
ERTM; // 使能实时调试中断(优先级高)
// 配置事件管理器EVA,由定时器1/定时器2的逻辑来驱动T1PWM/T2PWM
EvaRegs.GPTCONA.bit.TCOMPOE=1;
EvaRegs.GPTCONA.bit.T1PIN=1; // 将通用定时器1的比较输出设置为低有效
EvaRegs.T1CON.all=0x1702; // 采用连续增计数模式,输入时钟预定标为x/128,采用内部时钟源
// 使能定时器比较功能
CpuTimer0Regs.TCR.bit.TSS=0; // 启动定时器
while(1)
{
if((CpuTimer0.InterruptCount-time_stamp)>10)
{
time_stamp=CpuTimer0.InterruptCount;
for(i=0;i<14;i++)
{
if(i<7) EvaRegs.T1PR=freq[i];
else EvaRegs.T1PR=freq[14-i];
}
EvaRegs.T1CMPR=EvaRegs.T1PR/2;
EvaRegs.T1CON.bit.TENABLE=1;
// if(i>=14)
// i=0;
}
i=0;
}
}
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount++;
PieCtrl.PIEACK.all=PIEACK_GROUP1; // 清楚PIE分组1的中断响应位
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -