📄 tc.c
字号:
#define TC_GLOBALS
#include "tc.h"
#undef TC_GLOBALS
/*------------------------------------------------------------------------------*
*- Function name: TimerInit -*
*- Parameter:TC_pt, 定时器通道寄存器的基地址 -*
*- mode, 定时器的运行模式 -*
*- prio, 定时器中断的优先级 -*
*- Irq_id, 定时器对应的中断号 -*
*- Timer_id, 定时器对应的外设号 -*
*- tick, 传递给定时器的RC比较寄存器的值 -*
*- os_isr, 定时器中断子程序的地址 -*
*- int_type 定时器的中断类型(这里取的是RC比较中断) -*
*- Return value: void -*
*- Brief: Init timer counter -*
*------------------------------------------------------------------------------*/
void TimerInit(AT91PS_TC TC_pt,uint32 Mode,uint32 Prio,uint32 Irq_id,uint32 Timer_id, uint32 int_type, PTCHDLR os_isr)
{
uint32 dummy;
//关闭定时器时钟
TC_pt->TC_CCR = AT91C_TC_CLKDIS ;
//使能定时器对应的外设时钟
AT91F_PS_EnablePeriphClock ( AT91C_BASE_PS, 1<<Timer_id ) ;
//禁止中断
TC_pt->TC_IDR = 0xFFFFFFFF ;
//清除状态位
dummy = TC_pt->TC_SR;
//* Suppress warning variable "dummy" was set but never used
dummy = dummy;
//设置定时器的模式
TC_pt->TC_CMR = Mode ;
//配置中断
AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, // AIC base address
Irq_id, // System peripheral ID
Prio, // Priority
AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, // Level sensitive
os_isr);
//使能定时器时钟
TC_pt->TC_CCR = AT91C_TC_CLKEN;
//使能定时器中断的类型,为RC比较中断
TC_pt->TC_IER = int_type;
//使能定时器0中断
AT91F_AIC_EnableIt(AT91C_BASE_AIC, Irq_id);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -