做贸易选哪家网站,seo检测优化,会议专题网站建设报价单,网站推广优化建设设置按键中断#xff0c;按键1按下#xff0c;LED亮#xff0c;再按一次#xff0c;灭
按键2按下#xff0c;蜂鸣器响。再按一次#xff0c;不响
按键3按下#xff0c;风扇转#xff0c;再按一次#xff0c;风扇停
src/do_irq.c
#include key_it.h
ex…设置按键中断按键1按下LED亮再按一次灭
按键2按下蜂鸣器响。再按一次不响
按键3按下风扇转再按一次风扇停
src/do_irq.c
#include key_it.h
extern void printf(const char *fmt, ...);
unsigned int i 0;
void do_irq(void)
{int irqno;//保存中断号printf(%d\n,irqno);irqno GICC-IAR0x3ff;switch(irqno){case 99://key1//按键1中断处理printf(KEY1 灯亮灭\n);if(GPIOE-ODR (0X110)){GPIOE-ODR (~(0X110));}else{GPIOE-ODR | (0X110);}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0X13);//清除中断触发标志位EXTI_FPR1EXTI-FPR1 | (0X19);break;case 97://key2//按键2中断处理printf(KEY2 蜂鸣器\n);if(GPIOB-ODR (0X16)){GPIOB-ODR (~(0X16));}else{GPIOB-ODR | (0X16);}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0X11);//清除中断触发标志位EXTI_FPR1EXTI-FPR1 | (0X17);break;case 98://key3//按键3中断处理printf(KEY3 风扇\n);if(GPIOE-ODR (0X19)){GPIOE-ODR (~(0X19));}else{GPIOE-ODR | (0X19);}//清除挂起中断标志位GICD_ICPENDRxGICD-ICPENDR[3] | (0X12);//清除中断触发标志位EXTI_FPR1EXTI-FPR1 | (0X18);break;}//清除处理完的中断号GICC_EOTRGICC-EOIR irqno;
}src/key_it.c
#includekey_it.hvoid key3_it_config()
{//RCC使能GPIOF时钟RCC-MP_AHB4ENSETR | (0x15);GPIOF-MODER (~(0x316));EXTI-EXTICR3 (~(0xFF0));EXTI-EXTICR3 | (0x50);EXTI-FTSR1 | (0x18);EXTI-C1IMR1 | (0x18);GICD-ISENABLER[3] | (0X12); GICD-IPRIORITYR[24] (~(0X1F19)); GICD-ITARGETSR[24] (~(0X316));GICD-ITARGETSR[24] | (0X116);
}
void key_it_config()
{//RCC使能GPIOF时钟RCC-MP_AHB4ENSETR | (0x15);//设置PF9 PF7 PF8GPIO输入//PF9GPIOF-MODER (~(0x318));//PF8// GPIOF-MODER (~(0x316));//pf7GPIOF-MODER (~(0x314));//设置PF9 PF7 PF8产生EXTI事件 EXTI_EXTICRx//pf7EXTI-EXTICR2 (~(0xFF24));EXTI-EXTICR2 | (0x524);//pf8// EXTI-EXTICR3 (~(0xFF0));// EXTI-EXTICR3 | (0x50);//pf9EXTI-EXTICR3 (~(0xFF8));EXTI-EXTICR3 | (0x58);//设置事件触发方式为下降沿触发EXTI_FTSR1//pf7EXTI-FTSR1 | (0x17);//pf8// EXTI-FTSR1 | (0x18);//pf9EXTI-FTSR1 | (0x19);//设置EXTI事件触发不屏蔽EXTI_IMR1//PF7EXTI-C1IMR1 | (0x17);//PF8// EXTI-C1IMR1 | (0x18);//PF9EXTI-C1IMR1 | (0x19);//使能中断能转发到特定的CPU接口层GICD_ISENABLERx//PF7 97号中断GICD-ISENABLER[3] | (0X11); //PF78 98号中断// GICD-ISENABLER[3] | (0X12); //PF9 99号中断GICD-ISENABLER[3] | (0X13); // GICD_ISENABLERx设置中断优先级//PF7GICD-IPRIORITYR[24] (~(0X1F11)); //PF8// GICD-IPRIORITYR[24] (~(0X1F19)); //PF9GICD-IPRIORITYR[24] (~(0X1F27)); //设置当前中断被转发到哪一个CPU处理GICD_ITARGETSRx//pf7 97中断GICD-ITARGETSR[24] (~(0X38));GICD-ITARGETSR[24] | (0X18);//pf8 98中断// GICD-ITARGETSR[24] (~(0X316));// GICD-ITARGETSR[24] | (0X116);//pf9 99中断GICD-ITARGETSR[24] (~(0X324));GICD-ITARGETSR[24] | (0X124);//使能组0转发中断GICD_CTLRGICD-CTRL | 0X1;//设置中断优先级掩码GICC_PMRGICC-PMR | (0x1F3);//使能CPU可以处理组0转发的中断GICC_CTLRGICC-CTRL | 0X1;}
//灯1初始化
void led1_init()
{RCC-MP_AHB4ENSETR | (0x14);GPIOE-MODER (~(0X320));GPIOE-MODER | (0X120);GPIOE-OTYPER (~(0X110));GPIOE-OSPEEDR (~(0X320));GPIOE-PUPDR (~(0X320));}
//蜂鸣器初始化
void tim_init()
{RCC-MP_AHB4ENSETR | (0x11);GPIOB-MODER (~(0X312));GPIOB-MODER | (0X112);GPIOB-OTYPER (~(0X16));GPIOB-OSPEEDR (~(0X312));GPIOB-PUPDR (~(0X312));}
//风扇初始化
void fan_init()
{RCC-MP_AHB4ENSETR | (0x14);GPIOE-MODER (~(0X318));GPIOE-MODER | (0X118);GPIOE-OTYPER (~(0X19));GPIOE-OSPEEDR (~(0X318));GPIOE-PUPDR (~(0X318));}测试结果