2023/12/26中断作业

成果图:

代码:

函数层

key_it.c

#include "key_init.h"
void key1_it_config()
{   //RCC时钟
    RCC->MP_AHB4ENSETR |=(0X1<<5);
     //设置PF9管脚为输入
     GPIOF->MODER &=(~(0x3<<18));
     //设置PF9管脚为exti9输入
     EXTI->EXTICR3 &=(~0x1f<<8);
      EXTI->EXTICR3 |=(0x05<<8);
      //设置下降沿使能检测exti9
      EXTI->FTSR1|=(0x1<<9);
      //设置exti9事件不屏蔽
      EXTI->C1IMR1|=(0x1<<9);
      
      //GICD
      //GICD使能EXTI9(99号)中断
      GICD->ISENABLER[3]|=(0x1<<3);
      //GICD设置99号中断的优先级
      GICD->IPRIORITYR[24]&=(~(0x1f<<27));
      //选择CPU0处理当前中断
      GICD->ITARGETSR[24]|=(0x1<<24);
      //全局使能组0中断被转发到GICC
      GICD->CTRL|=(0x1);

       //GICC
      //设置中断的优先级掩码
      GICC->PMR |=(0x1f<<3);
      //允许组0中断被cpu处理
      GICC->CTRL |=(0x1);
      

}
void key2_it_config(){
    //RCC时钟
    RCC->MP_AHB4ENSETR |=(0X1<<5);
     //设置PF7管脚为输入
     GPIOF->MODER &=(~(0x3<<14));
     //设置PF7管脚为exti7输入
     EXTI->EXTICR2 &=(~0x1f<<24);
      EXTI->EXTICR2 |=(0x05<<24);
      //设置下降沿使能检测exti7
      EXTI->FTSR1|=(0x1<<7);
      //设置exti7事件不屏蔽
      EXTI->C1IMR1|=(0x1<<7);
      
      //GICD
      //GICD使能EXTI9(97号)中断
      GICD->ISENABLER[3]|=(0x1<<1);
      //GICD设置97号中断的优先级
      GICD->IPRIORITYR[24]&=(~(0x1f<<11));
      //选择CPU0处理当前中断
      GICD->ITARGETSR[24]|=(0x1<<8);
      //全局使能组0中断被转发到GICC
      GICD->CTRL|=(0x1);

       //GICC
      //设置中断的优先级掩码
      GICC->PMR |=(0x1f<<3);
      //允许组0中断被cpu处理
      GICC->CTRL |=(0x1);
    
}
void key3_it_config(){
     //RCC时钟
    RCC->MP_AHB4ENSETR |=(0X1<<5);
     //设置PF8管脚为输入
     GPIOF->MODER &=(~(0x3<<16));
     //设置PF8管脚为exti8输入
     EXTI->EXTICR3 &=(~0x1f<<0);
      EXTI->EXTICR3 |=(0x05<<0);
      //设置下降沿使能检测exti8
      EXTI->FTSR1|=(0x1<<8);
      //设置exti8事件不屏蔽
      EXTI->C1IMR1|=(0x1<<8);
      
      //GICD
      //GICD使能EXTI8(98号)中断
      GICD->ISENABLER[3]|=(0x1<<2);
      //GICD设置98号中断的优先级
      GICD->IPRIORITYR[24]&=(~(0x1f<<19));
      //选择CPU0处理当前中断
      GICD->ITARGETSR[24]|=(0x1<<16);
      //全局使能组0中断被转发到GICC
      GICD->CTRL|=(0x1);

       //GICC
      //设置中断的优先级掩码
      GICC->PMR |=(0x1f<<3);
      //允许组0中断被cpu处理
      GICC->CTRL |=(0x1);
  
}

led.c

#include"led.h"



void led_inti()
{
    //LED 1 PE10或风扇 PE9
    RCC->MP_AHB4ENSETR |=(0x3<<4) ;
    //LED 2 PF10
    RCC->MP_AHB4ENSETR |=(0x3<<5) ;
    //LED1 PE10
    GPIOE->MODER &=(~(0x3)<<20);
    GPIOE->MODER |=((0x1)<<20);

    GPIOE->OTYPER &=(~(0x1<<10));

    GPIOE->OSPEEDR &=(~(0x3)<<20);

    GPIOE->PUPDR &=(~(0x3)<<20);
    //LED2 PF10
    GPIOF->MODER &=(~(0x3)<<20);
    GPIOF->MODER |=(0x1)<<20;

    GPIOF->OTYPER &=(~(0x1<<10));

    GPIOF->OSPEEDR &=(~(0x3)<<20);

    GPIOF->PUPDR &=(~(0x3)<<20);
    //风扇 PE9
    GPIOE->MODER &=(~(0x3)<<18);
    GPIOE->MODER |=((0x1)<<18);

    GPIOE->OTYPER &=(~(0x1<<9));

    GPIOE->OSPEEDR &=(~(0x3)<<18);

    GPIOE->PUPDR &=(~(0x3)<<18);    
}
//PE10
void led_1_on(){
    
GPIOE->ODR |=((0x1)<<10);
}
void led_1_off(){
GPIOE->ODR &=(~(0x1<<10));
}
//PF10
void led_2_on(){
GPIOF->ODR |=((0x1)<<10);
}
void led_2_off(){
GPIOF->ODR &=(~(0x1<<10));
}
//PE9
void staff_on(){
GPIOE->ODR |=((0x1)<<9);
}
void staff_off(){
GPIOE->ODR &=(~(0x1<<9));

}

do_irq.c

#include"key_init.h"
#include"led.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{
    int irqno=(GICC->IAR &0x3ff);
    switch (irqno)
    {
    case 97:
        printf("KEY2_INT\n");
        led_2_on();
        //清除GICD的中断排队标志
        GICD->ICPENDR[1]|=(0x1<<1);
        //清除exti的事件触发标志
        EXTI->FPR1 |=(0X1<<7);
        break;
    case 98:
        printf("KEY3_INT\n");
        staff_on();
        //清除GICD的中断排队标志
        GICD->ICPENDR[3]|=(0x1<<2);
        //清除exti的事件触发标志
        EXTI->FPR1 |=(0X1<<8);
        break;
    case 99:
        printf("KEY1_INT\n");
        led_1_on();
        //清除GICD的中断排队标志
        GICD->ICPENDR[3]|=(0x1<<3);
        //清除exti的事件触发标志
        EXTI->FPR1 |=(0X1<<9);
        break;
         
    }
    //清除中断信号
    GICC->EOIR=irqno;
}

头文件

led.h

#ifndef __LED_HEAD__
#define __LED_HEAD__
#include"stm32mp1xx_rcc.h"
#include"stm32mp1xx_gpio.h"
void led_inti();
void led_1_on();
void led_1_off();
void led_2_on();
void led_2_off();
void staff_on();
void staff_off();


#endif

key_init.h

#ifndef __key_init_HEAD__
#define __key_init_HEAD__
#include"stm32mp1xx_gpio.h"
#include"stm32mp1xx_gic.h"
#include"stm32mp1xx_rcc.h"
#include"stm32mp1xx_exti.h"
void key1_it_config();
void key2_it_config();
void key3_it_config();

#endif

主函数

main.c

#include "gpio.h"
#include "key_init.h"
#include"led.h"
void daley(int ms)
{  
   int i,j;
   for(i=0;i<ms;i++)
   {
	for(j=0;j<2000;j++);
   }

}

int main()
{ 
   	key1_it_config();
	key2_it_config();
	key3_it_config();
	led_inti();
	while (1)
	{
		printf("login in...\n");
		led_1_off();
		led_2_off();
	
		daley(1000);
	}
	
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/272385.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

减小PAPR——DFT扩频

文章目录 前言一、DFT 扩频原理二、MATLAB 仿真1、核心代码2、仿真结果①、4QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PAPR 性能②、16QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PAPR 性能③、64QAM 调制时 IFDMA、LFDMA 和 OFDMA 的 DFT 扩频技术的 PA…

如何在Photoshop中创建色彩鲜艳的文本效果

如何在 Photoshop 中制作霓虹灯 1. 如何创建背景 步骤 1 学习如何在 Photoshop 中制作霓虹灯文本的第一步是背景。创建一个新的 1160 x 750 像素文档&#xff0c;并将分辨率设置为 300。 转到"文件">"嵌入位置"&#xff0c;然后打开"垃圾灰色砖…

tensorrt环境安装-可用于深度学习模型加速推理

安装python环境 在anaconda的命令行中输入conda create --name py38 python3.8 安装python环境 然后安装深度学习框架pytorch环境 Previous PyTorch Versions | PyTorch 在这里面选择合适的环境 conda install pytorch1.8.0 torchvision0.9.0 torchaudio0.8.0 cudatoolki…

汽车项目管理

项目节点&#xff1a; MR (Management Review)——管理层评审 KO (Kick Off)——项目正式启动 SI (Strategy Intent)——战略意图 SC (Strategy Confirmation)——战略确认 PA (Program Approval)——项目批准 PR (Product Readiness)——产品就绪 VP (Verification Prototype)…

kubernetes -pod 实践

一、资源与对象 1、pod 容器都是由镜像启动的,但在容器外面会包裹通过Pod将容器包裹起来这个是K8s的概念,在这个Pod里面可以有一个或多个容器,那这个Pod的有什么特征呢 Pod里的所有容器都会调度在同一个节点上运行0。Pod中的所有容器会共享同一网络,它们有一个唯一的IP,…

leetcode 75. 颜色分类(medium)(优质解法)

链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 代码&#xff1a; class Solution {public void sortColors(int[] nums) {int left-1,rightnums.length,i0;while(i<right){if(nums[i]0){left;swap(nums,left,i);i;}else if(nums…

大师计划1.0 - log2 CRTO笔记

CRTOⅠ笔记 log2 这个笔记是我在2023年11月23日-12月22日中&#xff0c;学习CRTO所做的一些笔记。 事实上TryHackMe的路径和htb学院包含了许多CRTO的知识并且甚至还超出了CRTO&#xff08;CS除外&#xff09;&#xff0c;所以很多东西在THM和htb学院学过&#xff0c;这次CRTO等…

LLM应用于MPC

现有的基于学习的自动驾驶系统&#xff08;AD&#xff09;在理解高级信息和提供可解释性方面存在挑战。为了解决这些问题&#xff0c;这项工作采用LLM作为复杂AD场景的决策组件。作者设计了认知途径&#xff08;cognitive pathway&#xff09;来实现LLM的综合推理&#xff0c;并…

软件接口测试是什么?怎么测?

软件测试是一条超级长的跑道&#xff0c;最好分阶段来跑&#xff1a;先入行&#xff0c;后精通。网上能看到很多软件测试的帖子&#xff0c;但能够准确分类详细介绍的并不多。正好最近有时间&#xff0c;就把我所了解的软件测试做一个小小总结&#xff0c;对你有帮助的话&#…

【100个Cocos实例】环形ScrollView的实现方法

引言 Cocos中环形ScrollView的实现 大家好&#xff0c;今天是圣诞节&#xff0c;又是寒冷的一天。 在游戏开发中经常需要用到ScrollView去实现滚动的列表。 他通常包括垂直方向和水平方向两个选择。 本文将介绍一下ScrollView环形方向的实现。 本文源工程可在文末阅读原文…

ServletContext对象和ServletConfig对象

Servlet几个重要的类的关系图 ServletContext对象 问题&#xff1a; Request解决了一次请求内的数据共享问题&#xff0c;session解决了用户不同请求的数据共享问题&#xff0c;那么不同的用户的数据共享该怎么办呢&#xff1f; 解决&#xff1a;使用ServletContext对象 作…

关键字:extends关键字

在 Java 中&#xff0c;extends 是一个关键字&#xff0c;用于表示继承关系。当一个类使用 extends 关键字时&#xff0c;它表示该类是一个子类&#xff0c;并且继承了父类的属性和方法。 以下是 extends 关键字的解析&#xff1a; 语法&#xff1a; 描述&#xff1a; ChildC…

二分查找——OJ题(二)

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、点名1、题目讲解2、算法原理3、代码实现 二、搜索旋转排序数组中的最⼩值1、题目讲解2、算…

Unity向Web服务器上传和下载图片

Unity向Web服务器上传和下载图片 如果本片有看不懂的请查看我上篇文章&#xff1a;[Unity与Web服务器Post&#xff0c;Get](https://blog.csdn.net/qq_42194657/article/details/103031573)一、上传和下载图片1.在Unity中创建一个RawImage并在WebManager.cs脚本中添加一个Textu…

石油石化应急三维电子沙盘系统研究分析与业务应用

一、概述 易图讯科技&#xff08;www.3dgis.top&#xff09;以大数据、云计算、虚拟现实、物联网、AI等先进技术为支撑&#xff0c;支持高清卫星影像、DEM高程数据、矢量数据、无人机倾斜摄像、BIM模型、点云、城市白模、等高线、标高点等数据融合和切换&#xff0c;集成油田原…

Unity-Shader-渲染队列

Unity-Shader-渲染队列 渲染简介Unity中的几种渲染队列Background (1000)最早被渲染的物体的队列。Geometry (2000) 不透明物体的渲染队列。大多数物体都应该使用该队列进行渲染&#xff0c;也就是Unity Shader中默认的渲染队列。AlphaTest (2450) 有透明通道&#xff0c;需要进…

巅峰画师Midjourney:新时代的独角兽

介绍 AI绘画领域中&#xff0c;Midjourney处于绝对地位&#xff0c;并且一年时间就登顶。 Midjourney是一家独立的AI研究实验室,探索新的思维媒介,拓展人类的想象力。 它由一个小型的自筹资金团队组成,专注于设计、人类基础设施和AI。 在AI绘画领域,Midjourney取得了非常突出…

SaaS医院信息化云his系统源码带电子病历+LIS系统

一、系统概述 •采用主流成熟技术&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS 应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同&#xff0c;服务可拆分&#xff0c;功能易扩展&#xff1b; •支持多样化灵活配置&#xff0c;提取大量公共参数&am…

P7 RV1126推流项目 —— 写代码前的思路草图

目录 前言 01 项目介绍&#xff1a; 02 项目框图&#xff1a; 03 模块设计思路 3.1.rv1126_ffmpeg_main.cpp(主模块代码): 3.2.rkmedia_assignment_manage.cpp(RKMEDIA 任务管理模块) 3.3. rkmedia_data_process.cpp(RV1126 数据处理模块)&#xff1a; 3.4. rkmedia_…

详解IDEA git 版本回滚

作者简介 目录 1.git分区 2.未commit&#xff0c;进行回滚 3.commit未push&#xff0c;进行回滚 3.1.undo commit 3.2.reset 4.已commit&push&#xff0c;进行回滚 1.git分区 git的版本回滚其实就是回滚不同的分区&#xff0c;所以在聊git回滚之前我们有必要简单了解…