1. 前言
前面一篇讲了按键中断的循环显示,本来想在那个基础上,加个定时器中断来完善下,
但是出人意料的事,加了定时器中断,不知道为什么,中断都进不去了,
很是纳闷,以为两个中断有什么干扰,
于是就痛心心来采用了按键的查询+定时器,
但还是不行,于是就纳闷了,
最后才发现原来是启动文件里没有加入相应的中断。如下图所示:
需要加入两个地方
2. Timer
定时器常用到的几个库函数
(1) 配置Timer模块的工作模式
TimerConfiguee()
(2) 设置Timer的装载值
TimerLoadSet()
(3) 使能计数
TimerEnable()
(4) 使能Timer的中断
TimerIntEnable()
3. 实现功能
功能其实很简单:主要是为了测试按键查询,不过程序编的很不规范,没有按键去抖,主要为了测试
就是程序下载进去,
程序下载进去,按复位键,
立刻按五向按键,LED不闪烁,
过一段定时时间后,按按键LED开始闪烁
部分程序代码
- void Timer1IntHandler(void)
- {
- ROM_TimerIntClear(TIMER1_BASE, TIMER_TIMA_TIMEOUT); // 清除时钟中断
- HWREGBITW(&g_ulFlags, 1) ^= 1; // 定时器切换标志
- ROM_IntMasterDisable();
- GrStringDraw(&sContext, (HWREGBITW(&g_ulFlags, 1) ? "1" : "0"), -1, 98,
- 46, 1); // 显示屏上的更新中断状态
- keyflag++;
- ROM_IntMasterEnable();
- }
复制代码- void fnKey_Scan(void)
- {
-
- ucVal = GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_0); // 翻转LED
- if(ucVal==0)
- {
- if(keyflag>=10)
- {
- GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, ~ucVal);
- SysCtlDelay(10*(SysCtlClockGet()/ 3000)); // 延时约10ms,消除按键抖动
- GPIOPinWrite(GPIO_PORTC_BASE, GPIO_PIN_7, ucVal);
- }
- }
- }
复制代码