⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f2812_timer.c

📁 本驱动为DSP2812时钟驱动
💻 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 + -