timer.c

来自「在AT91sam7SE上」· C语言 代码 · 共 87 行

C
87
字号
//Main.c

#include	"Preprocess.h"
#include	"Timer.h"



CALL_BACK	g_pTcTaskHandler;



VOID	TimerInit (CALL_BACK pHandler){
    //init the timer interrupt counter

	g_pTcTaskHandler = pHandler;
    AT91F_TC0_CfgPMC() ;

    //* Disable the clock and the interrupts
	AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS ;
	AT91C_BASE_TC0->TC_IDR = 0xFFFFFFFF ;

    TimerClrIf();
    //* Set the uiMode of the Timer Counter
	AT91C_BASE_TC0->TC_CMR = TC_CLKS | AT91C_TC_CPCTRG ;

    //* Open Timer 0 interrupt
	AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC,
		AT91C_ID_TC0,
		TIMER_INTERRUPT_LEVEL,
		//AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
		AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE,
		TimerIrqHandler
	);
	TimerSetFreq(TIMER_INIT_FREQ);
	AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS;  //  IRQ enable CPC
}//VOID	TimerInit (VOID (*pHandler) (VOID) ){





VOID	TimerSetFreq(UINT uiFreq){
	AT91C_BASE_TC0->TC_RC = (UINT)(TCCK / uiFreq);
}//VOID	TimerSetFreq(UINT uiFreq){





VOID	TimerIrqHandler(VOID){
	TimerClrIf();
	if(NULL != g_pTcTaskHandler){
		g_pTcTaskHandler();
	}
}// VOID TimerIrqHandler(VOID)





VOID	TimerPlay(VOID){
	TimerClrIf();

	AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
	AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKEN ;
    AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ;
}//VOID	TimerPlay(VOID){




VOID	TimerStop(VOID){
	AT91C_BASE_TC0->TC_CCR = AT91C_TC_CLKDIS ;
	AT91F_AIC_DisableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
}//VOID	TimerStop(VOID){




VOID	TimerClrIf(VOID){
    UINT uiDummy;
    uiDummy = AT91C_BASE_TC0->TC_SR;
    uiDummy = uiDummy;
}//VOID	TimerClrIf(VOID){


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?