代码
#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void)
{unsigned int irqno=GICC->IAR&0x3ff;switch (irqno){case 99:printf("key1_intc\n");GICD->ICPENDR[3] |= (0X1<<3);EXTI->FPR1 |= (0X1<<9);break;case 97:printf("key2_intc\n");GICD->ICPENDR[3] |= (0X1<<1);EXTI->FPR1 |= (0X1<<7);break;case 98:printf("key3_intc\n");GICD->ICPENDR[3] |= (0X1<<2);EXTI->FPR1 |= (0X1<<8);break;default:break;}GICC->EOIR |= irqno;
}
#include"key_inc.h"void key1_it_config(){RCC->MP_AHB4ENSETR |= (0x1<<5);GPIOF->MODER &= (~(0x3<<18));EXTI->EXTICR3 &= (~(0XFF<<8));EXTI->EXTICR3|= (0X05<<8);EXTI->FTSR1 |= (0x1<<9);EXTI->C1IMR1 |= (0x1<<9);GICD->ISENABLER[3] |= (0x1<<3);GICD->IPRIORITYR[24] &= (~(0x1f<<27));GICD->ITARGETSR[24] |= (0x1<<24);GICD->CTRL |=0X1;GICC->PMR |= (0x1f<<3);GICC->CTRL |= 0x1;}void key2_it_config(){RCC->MP_AHB4ENSETR |= (0x1<<5);GPIOF->MODER &= (~(0x3<<14));EXTI->EXTICR2 &= (~(0XFF<<24));EXTI->EXTICR2|= (0X05<<24);EXTI->FTSR1 |= (0x1<<7);EXTI->C1IMR1 |= (0x1<<7);GICD->ISENABLER[3] |= (0x1<<1);GICD->IPRIORITYR[24] &= (~(0x1f<<11));GICD->ITARGETSR[24] |= (0x1<<8);GICD->CTRL |=0X1;GICC->PMR |= (0x1f<<3);GICC->CTRL |= 0x1;}void key3_it_config(){RCC->MP_AHB4ENSETR |= (0x1<<5);GPIOF->MODER &= (~(0x3<<16));EXTI->EXTICR3 &= (~(0XFF));EXTI->EXTICR3|= (0X05);EXTI->FTSR1 |= (0x1<<8);EXTI->C1IMR1 |= (0x1<<8);GICD->ISENABLER[3] |= (0x1<<2);GICD->IPRIORITYR[24] &= (~(0x1f<<19));GICD->ITARGETSR[24] |= (0x1<<16);GICD->CTRL |=0X1;GICC->PMR |= (0x1f<<3);GICC->CTRL |= 0x1;}
实现结果