我是靠谱客的博主 冷傲唇膏,最近开发中收集的这篇文章主要介绍11.30作业,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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作业所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部