2)MK_EXTI.c#include "gpio.h"
/* 回调函数中的 array 的32位每一位代表一个引脚,1为 该脚中断被触发 0代表该脚中断未触发 */
static void GPIO_ISR(uint32_t array)
{
GPIO_ITDMAConfig(HW_GPIOC, 6, kGPIO_IT_FallingEdge, false);
//printf("KEY:0x%X\r\n", array);
if(array & (1 << 6)) /*对应的按键中断 翻转对应的LED电平 */
{
GPIO_ToggleBit(HW_GPIOB, 22);
}
GPIO_ITDMAConfig(HW_GPIOC, 6, kGPIO_IT_FallingEdge, true);
}
void EXTI_Initial()
{
/* 设置GPIO外部引脚中断回调函数 */
GPIO_CallbackInstall(HW_GPIOC, GPIO_ISR);
/* 打开PTE26引脚的中断 上升沿触发 */
GPIO_ITDMAConfig(HW_GPIOC, 6, kGPIO_IT_FallingEdge, true);
}
说明:
void GPIO_CallbackInstall | ( | uint32_t | instance, |
|
| GPIO_CallBackType | AppCBFun |
| )
|
- HW_GPIOA 芯片的PORTA端口中断入口
- HW_GPIOB 芯片的PORTB端口中断入口
- HW_GPIOC 芯片的PORTC端口中断入口
- HW_GPIOD 芯片的PORTD端口中断入口
- HW_GPIOE 芯片的PORTE端口中断入口
这个回调函数使得中断处理函数必须得写在他的前面。
3)main.c#include "gpio.h"
#include "common.h"
#include "MK_GPIO.h"
#include "MK_EXTI.h"
/* CH Kinetis固件库 V2.50 版本 */
/* 修改主频 请修改 CMSIS标准文件 system_MKxxxx.c 中的 CLOCK_SETUP 宏 */
int main(void)
{
/* 初始化Delay */
DelayInit();
GPIO_Initial();
EXTI_Initial();
while(1)
{
// /* 翻转引脚电平 原来是低变成高 原来是高变成低 */
// GPIO_ToggleBit(HW_GPIOE, 6);
/* 另外一种方法 使用位带操作 */
//PEout(6) = !PEout(6);
//DelayMs(500);
}
}
四、实验结果
按SW2,每一个下降沿,PB22电平翻转
|