本次按键实验是采用了板载的两个按键分别对应的P1.1与P1.4口,具体迁移到其他IO口的外部中断请移步原理图。
实验现象:按下按键会翻转板载LED灯状态。
key.c
#include "key.h"
void Key_Init(void)
{
/* Configuring P1.1 as an input and enabling interrupts */
/*配置1.1口为上拉输入*/
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
/*清除IO口的中断标志位*/
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
/*使能P1.1的外部中断(这里只是一个引脚)*/
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
/*使能P1端口的中断(这里是一个大端口,包括多个引脚)*/
MAP_Interrupt_enableInterrupt(INT_PORT1);
/* Configuring P1.4 as an input and enabling interrupts */
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN4);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN4);
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN4);
MAP_Interrupt_enableInterrupt(INT_PORT1);
}
/* GPIO ISR */
/*端口1中断处理函数*/
void PORT1_IRQHandler(void)
{
uint32_t status;
status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);
/* Toggling the output on the LED */
/*检测到P1.1产生外部中断的处理*/
if(status & GPIO_PIN1)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
}
if(status & GPIO_PIN4)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
}
}
key.h
#ifndef __KEY_H
#define __KEY_H
/* DriverLib Includes */
#include
void Key_Init(void);
#endif
需要注意的一点是,只有这几个端口能产生外部中断(查阅库函数手册)
本次按键实验是采用了板载的两个按键分别对应的P1.1与P1.4口,具体迁移到其他IO口的外部中断请移步原理图。
实验现象:按下按键会翻转板载LED灯状态。
key.c
#include "key.h"
void Key_Init(void)
{
/* Configuring P1.1 as an input and enabling interrupts */
/*配置1.1口为上拉输入*/
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN1);
/*清除IO口的中断标志位*/
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN1);
/*使能P1.1的外部中断(这里只是一个引脚)*/
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN1);
/*使能P1端口的中断(这里是一个大端口,包括多个引脚)*/
MAP_Interrupt_enableInterrupt(INT_PORT1);
/* Configuring P1.4 as an input and enabling interrupts */
MAP_GPIO_setAsInputPinWithPullUpResistor(GPIO_PORT_P1, GPIO_PIN4);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, GPIO_PIN4);
MAP_GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN4);
MAP_Interrupt_enableInterrupt(INT_PORT1);
}
/* GPIO ISR */
/*端口1中断处理函数*/
void PORT1_IRQHandler(void)
{
uint32_t status;
status = MAP_GPIO_getEnabledInterruptStatus(GPIO_PORT_P1);
MAP_GPIO_clearInterruptFlag(GPIO_PORT_P1, status);
/* Toggling the output on the LED */
/*检测到P1.1产生外部中断的处理*/
if(status & GPIO_PIN1)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
}
if(status & GPIO_PIN4)
{
MAP_GPIO_toggleOutputOnPin(GPIO_PORT_P1, GPIO_PIN0);
}
}
key.h
#ifndef __KEY_H
#define __KEY_H
/* DriverLib Includes */
#include
void Key_Init(void);
#endif
需要注意的一点是,只有这几个端口能产生外部中断(查阅库函数手册)
举报