LM2S6916 Timer0 32位定时器 1S定时测试过程:
这是网上找到的例子!
初始化(32位周期性定时):
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0); /* 使能定时器模块 */
TimerConfigure(TIMER0_BASE , TIMER_CFG_32_BIT_PER); /* 配置定时器为32位周期定时器 */
TimerLoadSet(TIMER0_BASE , TIMER_A , 20000000); /* 设置定时器初值 */
TimerIntEnable(TIMER0_BASE , TIMER_TIMA_TIMEOUT); /* 使能定时器超时中断 */
IntEnable(INT_TIMER0A); /* 使能定时器中断 */
IntMasterEnable(); /* 使能处理器中断 */
TimerEnable(TIMER0_BASE , TIMER_A); /* 使能定时器计数 */
中断服务函数:
void Timer0A_ISR(void)
{
TimerIntClear(TIMER0_BASE , TIMER_TIMA_TIMEOUT); /* 清除定时器超时中断,重要! */
//应用
}
说明:
中断服务函数要在Startup.s中写到__Vectors表上:
在前面加上这个定义 EXTERN Timer0A_ISR
把这行修改一下:DCD IntDefaultHandler ; Timer 0A
DCD Timer0A_ISR ; Timer 0A
关于定时器初值的计算方法:
例子:
SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_6MHZ);
我把系统时钟设定为20HMz(200MHz10分频)
那么计数值1=0.05us(1000000us/20000000hz)
1S=1000000us/0.05us=20000000次(这就是初值)
文章评论(0条评论)
登录后参与讨论