按键配置
#include "key_it.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_rcc.h"
void key_it_config()
{
RCC->MP_AHB4ENSETR |= (1<<5);
GPIOF->MODER &= (~(0x3 << 14));
GPIOF->MODER &= (~(0x3 << 16));
GPIOF->MODER &= (~(0x3 << 18));
EXTI->EXTICR2 &= ~(0xff<<24);
EXTI->EXTICR2 |= (0x05<<24);
EXTI->EXTICR3 &= ~(0xff);
EXTI->EXTICR3 |= (0x05);
EXTI->EXTICR3 &= ~(0xff<<8);
EXTI->EXTICR3 |= (0x05<<8);
EXTI->FTSR1 |= (1<<7);
EXTI->FTSR1 |= (1<<8);
EXTI->FTSR1 |= (1<<9);
EXTI->C1IMR1 |= (1<<7);
EXTI->C1IMR1 |= (1<<8);
EXTI->C1IMR1 |= (1<<9);
GICD->ISENABLER[3] |= (1<<3);
GICD->ISENABLER[3] |= (1<<2);
GICD->ISENABLER[3] |= (1<<1);
GICD->IPRIORITYR[24] &= ~(0x1f<<27);
GICD->IPRIORITYR[24] &= ~(0x1f<<19);
GICD->IPRIORITYR[24] &= ~(0x1f<<11);
GICD->ITARGETSR[24] &= ~(0x03<<24);
GICD->ITARGETSR[24] |= (0x01<<24);
GICD->ITARGETSR[24] &= ~(0x03<<16);
GICD->ITARGETSR[24] |= (0x01<<16);
GICD->ITARGETSR[24] &= ~(0x03<<8);
GICD->ITARGETSR[24] |= (0x01<<8);
GICD->CTRL |= 0x1;
GICC->PMR |= (0x1f<<3);
GICC->CTRL |= 0x1;
}
中断实现
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
#include "beep.h"
#define EXTI9_IRQ 99
#define EXTI8_IRQ 98
#define EXTI7_IRQ 97
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void)
{
int irqno;
irqno = GICC->IAR & 0x3ff;
if(irqno == EXTI9_IRQ)
{
delay(1000);
if(irqno == EXTI9_IRQ)
{
printf("KEY1 pressed!\n\r");
hal_gpio_write(GPIOB, 6, !hal_gpio_read(GPIOB, 6));
GICD->ICPENDR[3] |= (1<<3);
EXTI->FPR1 |= (1<<9);
}
}
else if(irqno == EXTI8_IRQ)
{
delay(1000);
if(irqno == EXTI8_IRQ)
{
printf("KEY3 pressed!\n\r");
hal_gpio_write(GPIOE, 8, !hal_gpio_read(GPIOE, 8));
GICD->ICPENDR[3] |= (1<<2);
EXTI->FPR1 |= (1<<8);
}
}
else if(irqno == EXTI7_IRQ)
{
delay(1000);
if(irqno == EXTI7_IRQ)
{
printf("KEY2 pressed!\n\r");
hal_gpio_write(GPIOE, 9, !hal_gpio_read(GPIOE, 9));
GICD->ICPENDR[3] |= (1<<1);
EXTI->FPR1 |= (1<<7);
}
}
GICC->EOIR = irqno;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/6f0f812e041ac1f45a67a75b42e84c16.jpeg)