📄 f2812_timer.c
字号:
/********************************************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif
#include "DSP281x_Device.h" // DSP281x Headerfile Include File
#include "DSP281x_Examples.h" // DSP281x Examples Include File
#include "F2812_Timer.h" //F2812 Timer Include File
#define NULL ('\0')
struct CPUTIMER_VARS CpuTimer0;
long count;
Uint16 Sec;
//*----------------------------------------------------------------------------
//* \filename: F2812_CpuTimer0Start
//* \brief: start/restart timer0
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0Start(void)
{
CpuTimer0Regs.TCR.bit.TSS = 0;
}
//*----------------------------------------------------------------------------
//* \filename: F2812_CpuTimer0Stop
//* \brief: stop timer0
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0Stop(void)
{
CpuTimer0Regs.TCR.bit.TSS = 1;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0Reload
//* \brief: reload timer0
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0Reload(void)
{
CpuTimer0Regs.TCR.bit.TRB = 1;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0Freeset
//* \brief: set timer0 at FREE model
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0Freeset(void)
{
CpuTimer0Regs.TCR.bit.FREE=1;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0Softset
//* \brief: set timer0 at SOFT model
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0Softset(void)
{
CpuTimer0Regs.TCR.bit.SOFT=1;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimerIntEN
//* \brief: enable timer0 interrupt
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0IntEN(void)
{
CpuTimer0Regs.TCR.bit.TIE=1;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0IntDIS
//* \brief: disable timer0 interrupt
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0IntDIS(void)
{
CpuTimer0Regs.TCR.bit.TIE=0;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0IntFlagClr
//* \brief: clear timer0 interrupt flag
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0IntFlagClr(void)
{
CpuTimer0Regs.TCR.bit.TIF=1;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0IntOpen
//* \brief: Open timer0 interrupt
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0IntOpen(void)
{
PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0IntClose
//* \brief: close timer0 interrupt
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0IntClose(void)
{
PieCtrlRegs.PIEIER1.bit.INTx7 = 0;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimer0PRDset
//* \brief: set PRD of timer0
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0PRDset(uint32 prdnum)
{
CpuTimer0Regs.PRD.all=prdnum;
}
//*----------------------------------------------------------------------------
//* \fn: F2812_CpuTimerTPRset
//* \brief: set TPR of timer0
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0TPRset(uint32 tpdnum)
{
CpuTimer0Regs.TPR.all=tpdnum&&0xFFFF;
CpuTimer0Regs.TPRH.all=tpdnum>>16;
}
//*----------------------------------------------------------------------------
//* \filename: F2812_CpuTimer0Intialize
//* \brief: Initialize timer0
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_CpuTimer0Intialize(void)
{
CpuTimer0Regs.PRD.all = 0xFFFFFFFF;
CpuTimer0Regs.TPR.all = 0;
CpuTimer0Regs.TPRH.all = 0;
F2812_CpuTimer0Stop();
F2812_CpuTimer0IntFlagClr();
F2812_CpuTimer0Reload();
}
//*----------------------------------------------------------------------------
//* \filename: F2812_ConfigCpuTimer
//* \brief: config timer
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_ConfigCpuTimer(struct CPUTIMER_VARS *Timer, float Freq, float Period)
{
Uint32 temp;
// Initialize timer period:
Timer->CPUFreqInMHz = Freq;
Timer->PeriodInUSec = Period;
temp = (long) (Freq * Period);
Timer->RegsAddr->TPR.all = 0;
Timer->RegsAddr->TPRH.all = 0;
Timer->RegsAddr->PRD.all = temp;
// Initialize timer control register:
Timer->RegsAddr->TCR.bit.TSS = 1; // 1 = Stop timer, 0 = Start/Restart Timer
Timer->RegsAddr->TCR.bit.TRB = 1; // 1 = reload timer
Timer->RegsAddr->TCR.bit.SOFT = 0;
Timer->RegsAddr->TCR.bit.FREE = 0; // Timer Free Run
Timer->RegsAddr->TCR.bit.TIE = 1; // 0 = Disable/ 1 = Enable Timer Interrupt
// Reset interrupt counter:
if(Sec<=25)
Timer->InterruptCount = 1;
else
Timer->InterruptCount = (Sec+1);
F2812_CpuTimer0Start();
}
//*----------------------------------------------------------------------------
//* \fn: F2812_Timerdelay
//* \brief: timer delay
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_Timerdelay(F2812TimerPS_Param timerdelay)
{
Uint16 Msec,Usec;
count=0;
Sec=timerdelay->tv_sec;
Msec=timerdelay->tv_msec;
Usec=timerdelay->tv_usec;
if(Sec<=25)
{
count=Sec*1000000+Msec*1000+Usec;
F2812_ConfigCpuTimer(&CpuTimer0, 150, count);
}
else
F2812_ConfigCpuTimer(&CpuTimer0, 150, 1000000);
}
//*----------------------------------------------------------------------------
//* \fn: F2812_PieCpuTimerVectinit
//* \brief: define ISR functions
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
void F2812_PieCpuTimerVectinit(void)
{
EALLOW;
PieVectTable.TINT0 = &cpu_timer0_isr;
EDIS;
}
//*----------------------------------------------------------------------------
//* \fn: cpu_timer0_isr
//* \brief: cpu_timer0 subroution
//* \data: 2009-02-03
//* \write: at office
//*----------------------------------------------------------------------------
interrupt void cpu_timer0_isr(void)
{
CpuTimer0.InterruptCount--;
F2812_CpuTimer0IntFlagClr();
F2812_CpuTimer0Reload();
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
if(CpuTimer0.InterruptCount==0)
F2812_CpuTimer0Stop();
}
#ifdef __cplusplus
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -