cortex-A7 按钮中断实验

实现按下KEY1、2、3键时发送不同数据

.h

#ifndef __UART4_H__
#define __UART4_H__

#include "./stm32mp1xx_exti.h"
#include "./stm32mp1xx_gpio.h"
#include "./stm32mp1xx_rcc.h"
#include "./stm32mp1xx_gic.h"


//初始化函数

void key_exti_init();


void key1_gicd_init();



void key2_gicd_init();


void key3_gicd_init();

void key_gicc_init();

#endif

.c

#include "uart4.h"

//初始化函数
void key_exti_init()
{
 		/******RCC章节初始化*******/
	//1.设置GPIOF时钟使能

	RCC->MP_AHB4ENSETR |= (0X1 << 5);



		/******GPIO章节初始化*******/
	//设置PF7、8、9引脚为输入模式

	GPIOF->MODER &= (~(0X3 << 18));
	GPIOF->MODER &= (~(0X3 << 16));
	GPIOF->MODER &= (~(0X3 << 14));
	/****************EXTI章节***********/
	//1.设置pf7、8、9引脚与EXTI9控制器链接

	EXTI->EXTICR3 &= (~(0xff << 8));
	EXTI->EXTICR3 |= (0X05 << 8);
	EXTI->EXTICR3 &= (~(0xff << 0));
	EXTI->EXTICR3 |= (0X05 << 0);
	EXTI->EXTICR2 &= (~(0xff << 24));
	EXTI->EXTICR2 |= (0X05 << 24);

	//2.设置pf7、8、9下降沿检测

	EXTI->FTSR1 |= (0X1 <<7);
	EXTI->FTSR1 |= (0X1 <<8);
	EXTI->FTSR1 |= (0X1 <<9);
	//3.设置pf7、8、9引脚中断不屏蔽

	EXTI->C1IMR1 |= (0X1 <<7);
	EXTI->C1IMR1 |= (0X1 <<8);
	EXTI->C1IMR1 |= (0X1 <<9);	
}

void key1_gicd_init()
{
	//1.设置GICD全局中断使能

	GICD->CTRL |= (0X1 <<0);
	//2.设置GICD中断使能寄存器(中断号使能)

	GICD->ISENABLER[3] |= (0X1 <<3);	
	//3.设置GICD层中断优先级

	GICD->IPRIORITYR[24] &= (~(0X1F <<27));	
	//4.设置GICD层中断目标分配寄存器
	GICD->ITARGETSR[24] |= (0X1 <<24);


}



void key2_gicd_init()
{
	//1.设置GICD全局中断使能

	GICD->CTRL |= (0X1 <<0);
	//2.设置GICD中断使能寄存器(中断号使能)

	GICD->ISENABLER[3] |= (0X1 <<1);	
	//3.设置GICD层中断优先级

	GICD->IPRIORITYR[24] &= (~(0X1F <<11));	
	//4.设置GICD层中断目标分配寄存器
	GICD->ITARGETSR[24] |= (0X1 <<8);


}



void key3_gicd_init()
{
	//1.设置GICD全局中断使能

	GICD->CTRL |= (0X1 <<0);
	//2.设置GICD中断使能寄存器(中断号使能)

	GICD->ISENABLER[3] |= (0X1 <<2);	
	//3.设置GICD层中断优先级

	GICD->IPRIORITYR[24] &= (~(0X1F <<19));	
	//4.设置GICD层中断目标分配寄存器
	GICD->ITARGETSR[24] |= (0X1 <<16);


}


void key_gicc_init()
{
	//1.设置GICC中断全局寄存器
	GICC->CTRL |= (0X1 <<0);
	//2.设置中断优先级
	GICC->PMR |= (0X3 <<3);

}







main.c

#include "uart4.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()

{

	//1.EXTI初始化

	//2.GICD初始化

	//3.GICC初始化

	key_exti_init();

	key1_gicd_init();
	


	key2_gicd_init();



	key3_gicd_init();

	key_gicc_init();





	while(1)

	{

	}











	return 0;

}

do_irq.c

#include "uart4.h"
extern void printf(const char *fmt, ...);

extern void delay_ms(int ms);

unsigned int i = 0;
void do_irq(void) 
{
	unsigned int num=0;
	//获取中断号
	num=(GICC->IAR & 0X1FF);
	//清除EXTI层中断挂起标志位
	EXTI->FPR1 |= (0x1 <<7);
	EXTI->FPR1 |= (0x1 <<8);
	EXTI->FPR1 |= (0x1 <<9);
	//清除GICD层中断挂起标志位
	
	GICD->ICPENDR[3] |= (0X1 <<3);
	GICD->ICPENDR[3] |= (0X1 <<1);
	GICD->ICPENDR[3] |= (0X1 <<2);
	switch(num)
	{
		case 97:
			delay_ms(500);
			printf("key2 按键已按下\n");		
			break;
		case 98:
			delay_ms(500);
			printf("key3 按键已按下\n");
			break;

		case 99:   //key 1
			delay_ms(500);
			printf("key1 按键已按下\n");
			break;
	
	}
	//清除中断号

	GICC->EOIR |= num;
	



}

使用串口工具测试结果:

已完成需求功能 

印刷电路板(PCB)作为电子元件的关键支撑体,在电子设备中扮演着不可或缺的角色,其市场发展态势备受关注。QYResearch 的调研数据为我们揭示了该市场的全景:2024 年,全球印刷电路板市场规模约达 782.9 亿美元,而展望 2031 年,这一数字有望攀升至 1012.7 亿美元,在 2025 - 2031 期间,年复合增长率(CAGR)预计保持在 3.8%。然而,当前美国 2025 年关税框架的潜在变动,已然在全球市场掀起波澜,对印刷电路板市场的竞争格局、区域经济协同以及供应链体系产生着深远影响。 一、印刷电路板基础概述 印刷电路板,又被称作印制电路板或印刷线路板,常见英文缩写为 PCB(Printed circuit board)或 PWB(Printed wire board)。其内部存在金属导体,承担着连接电子元器件线路的重任。传统电路板主要运用印刷蚀刻阻剂的工艺,以此构建电路的线路与图面,这也是其名称的由来。在现代电子技术领域,PCB 通过电子印刷术制造而成,它成功搭建起电子元器件之间的电气连接桥梁,成为各类电子设备的核心组件。无论是体积小巧的智能穿戴设备,还是大型的服务器系统,只要其中配备集成电路等电子元件,PCB 必然 “参与其中”。 二、市场规模增长引擎 (一)中国主导地位凸显 中国在全球印刷电路板市场中占据着举足轻重的地位。据预测,2025 年中国市场规模有望达到 4333.21 亿元,在全球市场的占比将超过 50%。这一卓越成绩的背后,人工智能(AI)与新能源汽车产业功不可没,二者已成为驱动中国 PCB 市场增长的核心动力。以 AI 产业为例,随着 AI 技术的迅猛发展,对算力的需求呈爆发式增长,这使得 AI 服务器的市场需求大幅提升。而每台 AI 服务器中 PCB 的价值量可达 5000 元,预计到 2025 年,全球 AI 服务器相关的 PC
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值