練習:
中斷實驗
main.c
#include "key.h"
int main()
{//初始化rcc gpiohal_key_rcc_gpio_init();//初始化extihal_key_exti_init();//初始化gichal_key_gic_init();while(1){}return 0;
}
key.c
#include "key.h"//GPIOF初始化
void hal_key_rcc_gpio_init(){//1.rcc初始化使能GPIOF控制器RCC->MP_AHB4ENSETR |= (0x1<<5);//2.GPIO模式設置//將PF9引腳設置為輸入模式GPIOF->MODER &= ~(0x3<<18);//將PF7引腳設置為輸入模式GPIOF->MODER &= ~(0x3<<14);//將PF8引腳設置為輸入模式GPIOF->MODER &= ~(0x3<<16);
}//EXTI初始化
void hal_key_exti_init(){//PF9//1.設置PF9外部中斷選擇寄存器進行連接EXTI->EXTICR3 &= ~(0xff<<8);EXTI->EXTICR3 |= (0x05<<8);//2.設置PF9對應EXTI編號下降沿觸發EXTI->FTSR1 |= (0x1<<9);//3.設置PF9對應EXTI層中斷不屏蔽EXTI->C1EMR1 |= (0x1<<9);//PF7//1.設置PF7外部中斷選擇寄存器進行連接EXTI->EXTICR2 &= ~(0xff<<24);EXTI->EXTICR2 |= (0x05<<24);//2.設置PF7對應EXTI編號下降沿觸發EXTI->FTSR1 |= (0x1<<7);//3.設置PF7對應EXTI層中斷不屏蔽EXTI->C1EMR1 |= (0x1<<7);//PF8//1.設置PF8外部中斷選擇寄存器進行連接EXTI->EXTICR3 &= ~(0xff);EXTI->EXTICR3 |= (0x05);//2.設置PF8對應EXTI編號下降沿觸發EXTI->FTSR1 |= (0x1<<8);//3.設置PF8對應EXTI層中斷不屏蔽EXTI->C1EMR1 |= (0x1<<8);
}//GIC初始化
void hal_key_gic_init(){//1.使能GICD組0GICD->CTRL |= 0x1;//PF9//GICD//1.設置PF9對應中斷號99使能GICD->ISENABLER[3] |= (0x1<<3);//2.設置GICD層中斷優先級GICD->IPRIORITYR[24] &= ~(0x1f<<27);//GICD->IPRIORITYR[24] |= (0x1<<27);//3.設置GICD層中斷分配GICD->ITARGETSR[24] &= ~(0x3<<24);GICD->ITARGETSR[24] |= (0x1<<24);//PF7//GICD//1.設置PF7對應中斷號97使能GICD->ISENABLER[3] |= (0x1<<1);//2.設置GICD層中斷優先級GICD->IPRIORITYR[24] &= ~(0x1f<<11);//GICD->IPRIORITYR[24] |= (0x1<<11);//3.設置GICD層中斷分配GICD->ITARGETSR[24] &= ~(0x3<<8);GICD->ITARGETSR[24] |= (0x1<<8);//PF8//GICD//1.設置PF8對應中斷號98使能GICD->ISENABLER[3] |= (0x1<<2);//2.設置GICD層中斷優先級GICD->IPRIORITYR[24] &= ~(0x1f<<19);//GICD->IPRIORITYR[24] |= (0x1<<19);//3.設置GICD層中斷分配GICD->ITARGETSR[24] &= ~(0x3<<16);GICD->ITARGETSR[24] |= (0x1<<16);//2.設置GICC層組0使能GICC->CTRL |= 0x1;//3.設置GICC層中斷優先級GICC->PMR |= (0xf<<3);
}
key.h
#ifndef __KEY_H__
#define __KEY_H__
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"
extern void do_irq(void);
// GPIOF初始化
void hal_key_rcc_gpio_init();
// EXTI初始化
void hal_key_exti_init();
// GIC初始化
void hal_key_gic_init();#endif