成都的網(wǎng)站建設(shè)公司哪家好百度網(wǎng)站禁止訪問怎么解除
設(shè)置按鍵中斷,按鍵1按下,LED亮,再按一次,滅
按鍵2按下,蜂鳴器響。再按一次,不響
按鍵3按下,風(fēng)扇轉(zhuǎn),再按一次,風(fēng)扇停
src/do_irq.c
#include "key_it.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void)
{int irqno;//保存中斷號(hào)printf("%d\n",irqno);irqno = GICC->IAR&0x3ff;switch(irqno){case 99://key1//按鍵1中斷處理printf("KEY1 燈亮滅\n");if(GPIOE->ODR & (0X1<<10)){GPIOE->ODR &= (~(0X1<<10));}else{GPIOE->ODR |= (0X1<<10);}//清除掛起中斷標(biāo)志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0X1<<3);//清除中斷觸發(fā)標(biāo)志位EXTI_FPR1EXTI->FPR1 |= (0X1<<9);break;case 97://key2//按鍵2中斷處理printf("KEY2 蜂鳴器\n");if(GPIOB->ODR & (0X1<<6)){GPIOB->ODR &= (~(0X1<<6));}else{GPIOB->ODR |= (0X1<<6);}//清除掛起中斷標(biāo)志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0X1<<1);//清除中斷觸發(fā)標(biāo)志位EXTI_FPR1EXTI->FPR1 |= (0X1<<7);break;case 98://key3//按鍵3中斷處理printf("KEY3 風(fēng)扇\n");if(GPIOE->ODR & (0X1<<9)){GPIOE->ODR &= (~(0X1<<9));}else{GPIOE->ODR |= (0X1<<9);}//清除掛起中斷標(biāo)志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0X1<<2);//清除中斷觸發(fā)標(biāo)志位EXTI_FPR1EXTI->FPR1 |= (0X1<<8);break;}//清除處理完的中斷號(hào)GICC_EOTRGICC->EOIR = irqno;
}
src/key_it.c
#include"key_it.h"void key3_it_config()
{//RCC使能GPIOF時(shí)鐘RCC->MP_AHB4ENSETR |= (0x1<<5);GPIOF->MODER &= (~(0x3<<16));EXTI->EXTICR3 &=(~(0xFF<<0));EXTI->EXTICR3 |= (0x5<<0);EXTI->FTSR1 |= (0x1<<8);EXTI->C1IMR1 |= (0x1<<8);GICD->ISENABLER[3] |= (0X1<<2); GICD->IPRIORITYR[24] &= (~(0X1F<<19)); GICD->ITARGETSR[24] &= (~(0X3<<16));GICD->ITARGETSR[24] |= (0X1<<16);
}
void key_it_config()
{//RCC使能GPIOF時(shí)鐘RCC->MP_AHB4ENSETR |= (0x1<<5);//設(shè)置PF9 PF7 PF8GPIO輸入//PF9GPIOF->MODER &= (~(0x3<<18));//PF8// GPIOF->MODER &= (~(0x3<<16));//pf7GPIOF->MODER &= (~(0x3<<14));//設(shè)置PF9 PF7 PF8產(chǎn)生EXTI事件 EXTI_EXTICRx//pf7EXTI->EXTICR2 &=(~(0xFF<<24));EXTI->EXTICR2 |= (0x5<<24);//pf8// EXTI->EXTICR3 &=(~(0xFF<<0));// EXTI->EXTICR3 |= (0x5<<0);//pf9EXTI->EXTICR3 &=(~(0xFF<<8));EXTI->EXTICR3 |= (0x5<<8);//設(shè)置事件觸發(fā)方式為下降沿觸發(fā)EXTI_FTSR1//pf7EXTI->FTSR1 |= (0x1<<7);//pf8// EXTI->FTSR1 |= (0x1<<8);//pf9EXTI->FTSR1 |= (0x1<<9);//設(shè)置EXTI事件觸發(fā)不屏蔽EXTI_IMR1//PF7EXTI->C1IMR1 |= (0x1<<7);//PF8// EXTI->C1IMR1 |= (0x1<<8);//PF9EXTI->C1IMR1 |= (0x1<<9);//使能中斷能轉(zhuǎn)發(fā)到特定的CPU接口層GICD_ISENABLERx//PF7 97號(hào)中斷GICD->ISENABLER[3] |= (0X1<<1); //PF78 98號(hào)中斷// GICD->ISENABLER[3] |= (0X1<<2); //PF9 99號(hào)中斷GICD->ISENABLER[3] |= (0X1<<3); // GICD_ISENABLERx設(shè)置中斷優(yōu)先級(jí)//PF7GICD->IPRIORITYR[24] &= (~(0X1F<<11)); //PF8// GICD->IPRIORITYR[24] &= (~(0X1F<<19)); //PF9GICD->IPRIORITYR[24] &= (~(0X1F<<27)); //設(shè)置當(dāng)前中斷被轉(zhuǎn)發(fā)到哪一個(gè)CPU處理GICD_ITARGETSRx//pf7 97中斷GICD->ITARGETSR[24] &= (~(0X3<<8));GICD->ITARGETSR[24] |= (0X1<<8);//pf8 98中斷// GICD->ITARGETSR[24] &= (~(0X3<<16));// GICD->ITARGETSR[24] |= (0X1<<16);//pf9 99中斷GICD->ITARGETSR[24] &= (~(0X3<<24));GICD->ITARGETSR[24] |= (0X1<<24);//使能組0轉(zhuǎn)發(fā)中斷GICD_CTLRGICD->CTRL |= 0X1;//設(shè)置中斷優(yōu)先級(jí)掩碼GICC_PMRGICC->PMR |= (0x1F<<3);//使能CPU可以處理組0轉(zhuǎn)發(fā)的中斷GICC_CTLRGICC->CTRL |= 0X1;}
//燈1初始化
void led1_init()
{RCC->MP_AHB4ENSETR |= (0x1<<4);GPIOE->MODER &= (~(0X3<<20));GPIOE->MODER |= (0X1<<20);GPIOE->OTYPER &= (~(0X1<<10));GPIOE->OSPEEDR &= (~(0X3<<20));GPIOE->PUPDR &= (~(0X3<<20));}
//蜂鳴器初始化
void tim_init()
{RCC->MP_AHB4ENSETR |= (0x1<<1);GPIOB->MODER &= (~(0X3<<12));GPIOB->MODER |= (0X1<<12);GPIOB->OTYPER &= (~(0X1<<6));GPIOB->OSPEEDR &= (~(0X3<<12));GPIOB->PUPDR &= (~(0X3<<12));}
//風(fēng)扇初始化
void fan_init()
{RCC->MP_AHB4ENSETR |= (0x1<<4);GPIOE->MODER &= (~(0X3<<18));GPIOE->MODER |= (0X1<<18);GPIOE->OTYPER &= (~(0X1<<9));GPIOE->OSPEEDR &= (~(0X3<<18));GPIOE->PUPDR &= (~(0X3<<18));}
測(cè)試結(jié)果