概述
1.KEY_1按键中断实验
1.1 源文件
#include "../include/key.h"
void hal_key_init()
{
//使能GPIOF引脚 PF9 ---->key1
RCC->MP_AHB4ENSETR |=0x1<<5;
//设置引脚位输入模式
GPIOF->MODER &=(~(0x3<<18));
//配置EXTI
//与对应事件匹配
EXTI->EXTICR3 &=(~(0xff<<8));
EXTI->EXTICR3 |=(0x5<<8);
//检测下降沿
EXTI->FTSR1 |=(0x1<<9);
// EXTI->FPR1 |=(0x1<<9); //清除挂起标志位,中断运行结束后再置1
//设置屏蔽位,选择不屏蔽
EXTI->C1IMR1 |=0x1<<9;
//使能目标中断号 99/32 ....3
GICD->ISENABLER[3] |=0x1<<3;
//设置优先级 99/4 *8+3
GICD->IPRIORITYR[24] &=(~(0x1f<<27));
//设置优先级为10
GICD->IPRIORITYR[24] |=0x1<<27;
//设置目标处理器 99/4 *8
GICD->ITARGETSR[24] &=(~(0x3<<24));
GICD->ITARGETSR[24] |=0x1<<24;
//清除挂起标志位,后面用
//GICD->ISPENDR[3] |=0x1<<3;
//GICC
//GICD 使能CPU0
GICD->CTRL |=0x1;
//设置屏蔽优先级
GICC->PMR |=0x1f<<3;
//设置使能
GICC->CTRL |=0x1;
}
1.2中断处理文件
#include "../include/key.h"
#include "../include/led.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void)
{
i = GICC->IAR & 0x3ff;
switch (i)
{
case 99:
printf("key=%dn",i);
GPIOE->ODR ^= (0x1 << 10);
EXTI->FPR1 |=(0x1<<9); //清除挂起标志位,中断运行结束后再置1
GICD->ISPENDR[3] |=0x1<<3;
break;
default:
break;
}
GICC->EOIR = i ;
}
最后
以上就是冷傲唇膏为你收集整理的11.30作业的全部内容,希望文章能够帮你解决11.30作业所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复