@floatsd
2016-01-02T09:25:22.000000Z
字数 2391
阅读 1002
CM4实验报告
- 了解单片机里中断的概念。
- 懂得声明中断向量,中断函数,改变中断优先级,最终学会使用中断。
"interrupt.h"
。
/*******************************************************************
* 函数: Handler_Init()
* 描述: 开启中断
* 输入值:无
* 返回值:无
*****************************************************************/
void Handler_Init()
{
SysCtlGPIOAHBEnable(SYSCTL_PERIPH_GPIOD);
//矩阵按键第四行
SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
GPIOPinTypeGPIOInput(GPIO_PORTD_BASE,GPIO_PIN_0);
GPIOIntTypeSet(GPIO_PORTD_BASE,GPIO_PIN_0,GPIO_LOW_LEVEL);
GPIOIntEnable(GPIO_PORTD_BASE,GPIO_INT_PIN_0);
//定时器
SysCtlPeripheralEnable(SYSCTL_PERIPH_TIMER0);
TimerConfigure(TIMER0_BASE, TIMER_CFG_SPLIT_PAIR | TIMER_CFG_B_PERIODIC);
TimerIntEnable(TIMER0_BASE, TIMER_TIMB_TIMEOUT);
TimerEnable(TIMER0_BASE, TIMER_B);
TimerLoadSet(TIMER0_BASE, TIMER_B, sysClock_Fr/2000 );
//优先级设置,如下所示,优先级越高数字上越小
IntPrioritySet(INT_GPIOD,0x20);
IntPrioritySet(INT_TIMER0B,0x00);
IntEnable(INT_GPIOD); //开启相应中断向量
/*3.开启总中断*/
IntMasterEnable();
}
/*******************************************************************
* 函数: GPIOD_Handler()
* 描述: 矩阵按键第四行的中断函数
* 输入值:无
* 返回值:无
*****************************************************************/
void GPIOD_Handler()
{
uint32_t Status;
Status=GPIOIntStatus(GPIO_PORTD_BASE,true);
if(Status==GPIO_INT_PIN_0)
{
ledclose();
//ledon(0);
}
GPIOIntClear(GPIO_PORTD_BASE,Status);
}
/*******************************************************************
* 函数: GPIOD_Handler()
* 描述: 利用Timer实现一毫秒扫描一次键盘减轻cpu负担
* 输入值:无
* 返回值:无
*****************************************************************/
void Timer_Handler(){
unsigned long status;
status=TimerIntStatus(TIMER0_BASE,true);
if(status==TIMER_TIMB_TIMEOUT)
{
counter++;
if(counter==10)
{
counter=1;
switch(Row_Scan()){
case 0:{
LED_ON(1);Delay(24); break;
}
case 1:{
LED_ON(2);Delay(24); break;
}
case 2:{
LED_ON(3);Delay(24); break;
}
case 3:{
LED_ON(4);Delay(24); break;
}
default:ledclose(); break;
}
}
TimerIntClear(TIMER0_BASE, TIMER_TIMB_TIMEOUT);
}
}