按键配置
#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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
中断实现
#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;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68