1 #include "key1.h"2 //封裝EXTI章節函數3 void hal_exti_init(int exti,unsigned int i)4 {5 switch(exti)6 {7 case 9:8 //使能GPIOF外設時鐘9 RCC->MP_AHB4ENSETR |= (0x1<<5);10 //將PF9設置為輸出模式11 GPIOF->MODER &= (~(0x3<<(exti*2)));12 13 //選擇PF9產生EXTI9事件 14 EXTI->EXTICR3 &= (~(0xff<<(exti%4)*8));15 EXTI->EXTICR3 |= (i<<(exti%4)*8);16 //設置下降沿檢測EXTI9事件17 EXTI->FTSR1 |= (0x1<<exti);18 //取消EXTI9事件中斷屏蔽19 EXTI->C1IMR1 |= (0x1<<exti);20 break;21 case 7:22 //使能GPIOF外設時鐘23 RCC->MP_AHB4ENSETR |= (0x1<<5);24 //將PF9設置為輸出模式25 GPIOF->MODER &= (~(0x3<<(exti*2)));26 27 //選擇PF9產生EXTI9事件 28 EXTI->EXTICR2 &= (~(0xff<<(exti%4)*8));29 EXTI->EXTICR2 |= (i<<(exti%4)*8);30 //設置下降沿檢測EXTI9事件31 EXTI->FTSR1 |= (0x1<<exti);32 //取消EXTI9事件中斷屏蔽33 EXTI->C1IMR1 |= (0x1<<exti);34 break; 35 case 8:36 //使能GPIOF外設時鐘37 RCC->MP_AHB4ENSETR |= (0x1<<5);38 //將PF9設置為輸出模式39 GPIOF->MODER &= (~(0x3<<(exti*2)));40 41 //選擇PF9產生EXTI9事件 42 EXTI->EXTICR3 &= (~(0xff<<(exti%4)*8));43 EXTI->EXTICR3 |= (i<<(exti%4)*8);44 //設置下降沿檢測EXTI9事件45 EXTI->FTSR1 |= (0x1<<exti);46 //取消EXTI9事件中斷屏蔽47 EXTI->C1IMR1 |= (0x1<<exti);48 break;49 }50 }51 52 //封裝GIC章節函數53 void hal_gic_init(int uart_num,unsigned int i)54 {55 //使能99號中斷56 GICD->ISENABLER[uart_num/32] |= (0x1<<(uart_num%32));57 //設置99號中斷優先級58 GICD->IPRIORITYR[uart_num/4] &= (~(i<<(uart_num%4*8+3)));59 //設置99號的中斷目標處理器60 GICD->ITARGETSR[uart_num/4] &= (~(0x3<<(uart_num%4*8)));61 GICD->ITARGETSR[uart_num/4] |= (0x1<<(uart_num%4*8));62 63 //全局使能組0中斷被轉發到GICC層64 GICD->CTRL |= 0x1;65 //設置中斷的優先級掩碼66 GICC->PMR |= (0x1f<<3);67 //全局使能組0中斷被轉發到處理器68 GICC->CTRL |= 0x1;69 }
~