📄 timer.c
字号:
//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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -