8.22 作业

news2025/1/15 20:09:34

1. 中断实验

按下key1 led3取反

按下key2 led2取反

按下key3 led1取反

main.c

#include "key.h"
extern void printf(const char *fmt, ...);
void delay_ms(int ms)
{
	int i,j;
	for(i = 0; i < ms;i++)
		for (j = 0; j < 1800; j++);
}

int main()
{
	rcc_init();
	
	led_init(GPIOE,10);
	led_init(GPIOF,10);
	led_init(GPIOE,8);
	
	exti_init(EXTI9,0X05,FALLING);
	exti_init(EXTI8,0X05,FALLING);
	exti_init(EXTI7,0X05,FALLING);

	gic_init(99,0);
	gic_init(98,0);
	gic_init(97,0);

	led_nof(GPIOE,10);
	led_nof(GPIOF,10);
	led_nof(GPIOE,8);
	for(;;);
	return 0;
}

key.h

#ifndef __KEY_H__
#define __KEY_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"
#define EXTI9 9
#define EXTI8 8
#define EXTI7 7
typedef enum{
 	RISING,
	FALLING
}trigger;

//初始化gcc gicdctlr giccctlr
void rcc_init();
//初始化exti 编号 gpio组号 触发方式
void exti_init(int num,unsigned int gid,trigger t);
//初始化 gic 中断号 优先级
void gic_init(int num,unsigned int priority);
//初始化led
void led_init(gpio_t* gpio,int pin);
//开关led
void led_nof(gpio_t* gpio,int pin);
#endif

key.c

#include "key.h"

void rcc_init()
{
	//rcc
	RCC->MP_AHB4ENSETR |= (3<<4);	
	//gicd_ctrl
	GICD->CTRL |= 1;
	//gicc_ctrl
	GICC->CTRL |= 1;
    //gicc_pmr
    GICC->PMR |= (0X1F << 3);	
}

void exti_init(int num,unsigned int gid,trigger t)
{
	GPIOF->MODER &= ~(3 << (num*2));
	if((num/4) == 2)
	{
		EXTI->EXTICR3 &= ~(0XFF << (num%4*8));
		EXTI->EXTICR3 |= (gid << (num%4*8));
	}
	else
	{	
		EXTI->EXTICR2 &= ~(0XFF << (num%4*8));
		EXTI->EXTICR2 |= (gid << (num%4*8));
	}
	//extiftsr1
	if(t == FALLING) 
		EXTI->FTSR1 |= (1 << num);
	//extiimr1
	EXTI->C1IMR1 |= (1 << num);
}

void gic_init(int num,unsigned int priority)
{
	//gicd_isenabler
	GICD->ISENABLER[num/32] |= (1 << (num%32));
	//gicd_ipriorityr
	GICD->IPRIORITYR[num/4] &= ~(0X1F << (num%4*8+3));
	GICD->IPRIORITYR[num/4] |= (priority << (num%4*8+3));
	//GICD_ITARGETSR
	GICD->ITARGETSR[num/4] |= (1 << (num%4*8));	
}

void led_init(gpio_t* gpio,int pin)
{
	//模式设置为输出
	gpio->MODER &= ~(3 << (pin*2));
	gpio->MODER |= (1 << (pin*2));
	
	gpio->OTYPER &= ~(1 << pin);

	gpio->OSPEEDR &= ~(3 << (pin*2));

	gpio->PUPDR &= ~(3 << (pin*2));
}

void led_nof(gpio_t* gpio,int pin)
{
	gpio->ODR ^= (1 << pin);
}

do_irq.c

extern void printf(const char *fmt, ...);
#include "key.h"
void do_irq(void) 
{
	//判断中断号
	unsigned int iar = GICC->IAR;
	unsigned int num = iar & 0x3ff;
	printf("key\n");
	switch(num)
	{
		case 97:
		{
			led_nof(GPIOF,10);
			//清除exti
			EXTI->FPR1 |= (1 << (num-90));
			//gicd_icpendr 清除gicd
			GICD->ICPENDR[num/32] |= (1 << (num%32));
			break;
		}
		case 98:
		{
			led_nof(GPIOE,10);
			//清除exti
			EXTI->FPR1 |= (1 << (num-90));
			//gicd_icpendr 清除gicd
			GICD->ICPENDR[num/32] |= (1 << (num%32));
			break;
		}
		case 99:
		{
			led_nof(GPIOE,8);
			//清除exti
			EXTI->FPR1 |= (1 << (num-90));
			//gicd_icpendr 清除gicd
			GICD->ICPENDR[num/32] |= (1 << (num%32));
			break;
		}
	}
	//清除 GICC
	GICC->EOIR = iar;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pbootcms系统安全防护设置大全

PbootCMS系统简介 PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统&#xff0c;是一套高效、简洁、 强悍的可免费商用的PHP CMS源码&#xff0c;能够满足各类企业网站开发建设的需要。系统采用简单到想哭的模板标签&#xff0c;只要懂HTML就可快速开发企业网站…

java八股文面试[java基础]——final 关键字作用

为什么局部内部类和匿名内部类只能访问final变量&#xff1a; 知识来源 【基础】final_哔哩哔哩_bilibili

Java反编译工具之javap介绍

文章目录 一、反编译定义二、反编译的使用场景1. 代码审查和调试&#xff1a;2. 学习和研究&#xff1a;3. 逆向工程&#xff1a;4. 代码重用&#xff1a; 三、反编译工具之javap1. javap介绍&#xff1a;2. 案例演示&#xff1a; 一、反编译定义 Java反编译是指将已经编译成字…

使用Java开发Jmeter自定义取样器(Sampler)插件

文章目录 1、Jmeter自定义取样器扩展类2、SpringBoot服务器端http测试例子3、自定义取样器实现3.1、默认界面的AbstractJavaSamplerClient扩展实现3.2、自定义界面的AbstractSamplerGui扩展实现 3、自定义取样器运行效果3.1、AbstractJavaSamplerClient运行效果3.2、AbstractSa…

net start Mysql 启动服务时 ,显示“Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误

一、问题 有时候&#xff0c;输入net start Mysql 启动服务时 mysql>net start Mysql 显示 Mysql服务正在启动 Mysql服务无法启动 服务没有报告任何错误 二、原因 由于mysql的默认端口是3306&#xff0c;因此在启动服务的时候&#xff0c;如果此端口被占用&#xff0c;就会出…

Stable Diffusion 系列教程 | 打破模型壁垒

目录 1.模型基本分类 1.1 CheckPoint 大模型/底模型/主模型 1.2 VAE美化模型/变分自编码器 1.3 HyperNetwork 超网络 1.4 embeddings&#xff08;/Textual Inversion&#xff09; 嵌入式向量 1.5 loRa 低秩适应模型 2. 下载途径和渠道 2.1 C站 2.1.1 如何筛选到自己需…

攻防世界-Web_php_include

原题 解题思路 php://被替换了&#xff0c;但是只做了一次比对&#xff0c;改大小写就可以绕过。 用burp抓包&#xff0c;看看有哪些文件 flag明显在第一个PHP文件里&#xff0c;直接看

psycopg2 使用ThreadedConnectionPool 工具封装

psycopg2 介绍 psycopg2库介绍: Psycopg2是一个用于Python编程语言的第三方库&#xff0c;用于访问PostgreSQL数据库系统。它提供了一组工具和方法&#xff0c;可以轻松地在Python程序中进行数据库操作&#xff0c;包括查询、插入、更新、删除等操作。 以下是Psycopg2库的一些…

主程技术分享: 游戏项目帧同步,状态同步如何选

网络游戏开发项目中帧同步,状态同步如何选&#xff1f; 网络游戏的核心技术之一就是玩家的网络同步,主流的网络同步有”帧同步”与”状态同步”。今天我们来分析一下这两种同步模式。同时教大家如何在自己的项目中采用最合适的同步方式。接下来从以下3个方面来阐述: 对啦&…

基于swing的图书借阅管理系统java jsp书馆书籍信息mysql源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 基于swing的图书借阅管理系统 系统有2权限&#xff1…

Qt快速学习(三)--事件,绘图,文件系统

目录 1. Qt消息机制和事件 1.1 事件 1.2 event&#xff08;&#xff09; 1.3 事件过滤器 1.4 总结 2 绘图和绘图设备 2.1 QPainter 2.2 绘图设备 2.2.1 QPixmap、QBitmap、QImage 2.2.2 QPicture 3. 文件系统 3.1 基本文件操作 3.2 二进制文件读写 3.3 文本文件读写…

运维作业7

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1&#xff09;拉取mysql5.6和owncloud镜像 2)登录本机ip地址&#xff0c;输入用户名密码 2、安装搭建私有仓库 Harbor 1)安装docker-compose编排工具 2&#xff09;安装harbor [rootserver ~]# tar xf harbor-…

“石头剪刀布”游戏:while、函数自调用实现循环游戏

if…else实现“石头剪刀布”游戏&#xff0c;while、函数自调用实现循环游戏。 (本笔记适合学过if…else的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《 python 完全自学教程》&#xff0c…

Leetcode刷题笔记--Hot21-30

1--全排列&#xff08;46&#xff09; 主要思路1&#xff1a; 经典全排列&#xff0c;每次枚举每一位时&#xff0c;重头开始枚举&#xff0c;用一个访问数组记录当前已经被访问过的数字&#xff1b; 这道题不包含重复数字&#xff0c;所以不需要进行树层上的剪枝&#xff1b; …

【机器学习】python基础实现线性回归

手写梯度下降的实现ykxb的线性回归 算法步骤&#xff1a; &#xff08;1&#xff09;构造数据&#xff0c;y3*x5; &#xff08;2&#xff09;随机初始化和&#xff0c;任意数值&#xff0c;例如9,10; &#xff08;3&#xff09;计算&#xff0c;,并计算 &#xff08;4&…

Linux基本指令【上】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析3 目录 &#x1f449;&#x1f3fb;浅识操作系统&#x1f449;&#x1f3fb;ls.和. .sta…

【C++】STL——map的介绍和使用、map的构造函数、map的迭代器、map的容量和访问函数、map的增删查改函数

文章目录 1.map的介绍2.map的使用2.1map的构造函数2.2map的迭代器2.3map的容量和访问函数2.4map的增删查改函数 1.map的介绍 map的介绍 &#xff08;1&#xff09;map是关联容器&#xff0c;它按照特定的次序(按照key来比较)存储由键值key和值value组合而成的元素。 &#xff…

WPS右键新建没有docx pptx xlsx 修复

解决wps右键没有新建文档的问题 右键没有新建PPT和Excel 1 wps自带的修复直接修复没有用 以上不管咋修复都没用 2 先编辑注册表 找到 HKEY_CLASSES_ROOT CTRLF搜文件扩展名 pptx docx xlsx 新建字符串 三种扩展名都一样操作 注册表编辑之后再次使用wps修复 注册组件&am…

Docker Desktop 笔记

https://blog.csdn.net/qq_39611230/article/details/108641842 https://blog.csdn.net/KgdYsg/article/details/118213499 1、修改配置 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://…

PHP自己的框架session()使用(完善篇六)

1、PHP自己的框架session() 2、session类&#xff08;SessionBase.php&#xff09; <?php class SessionBase {/*** 设置session*/public static function set($name, $data, $expire600){$session_data array();$session_data[data] $data;$session_data[expire] time…