当前位置: 首页 > news >正文

ARM的三个按键实验

main.c

#include "key_inc.h"//封装延时函数void delay(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();while(1){printf("in main pro\n");delay(1000);}return 0;}

src/do_irq.c

#include "stm32mp1xx_gic.h"
#include "stm32mp1xx_exti.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{//irq中断处理代码unsigned int irqno = GICC->IAR&0x3ff;switch(irqno){case 99:printf("key1_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<3);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<9);break;case 98:printf("key2_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<2);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<8);break;case 97:printf("key2_intc\n");//清除GICD中断排队标志GICD->ICPENDR[3] |= (0X1<<1);//清除EXTI中断触发标志EXTI->FPR1 |= (0X1<<7);break;default:break;}//清除IAR寄存器中的中断号GICC->EOIR |= irqno;
}

src/key_inc.c

#include "key_inc.h"void key1_it_config()
{//使能GPIOF的外设时钟RCC->MP_AHB4ENSETR |=(0X1<<5);//PF9设置为输入模式GPIOF->MODER &=(~(0x3<<18));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0xff<<8));EXTI->EXTICR3 |= (0X05<<8);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0X1<<9);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0X1<<9);//设置EXTI9中断全局使能GICD->ISENABLER[3] |=(0X1<<3);//设置中断优先级GICD->IPRIORITYR[24] |= (~(0x1f<<27));//设置CPUO处理当前中断GICD->ITARGETSR[24] |= (0X1<<24);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0x1f<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0X1;
}void key2_it_config()
{//使能GPIOF的外设时钟RCC->MP_AHB4ENSETR |=(0X1<<5);//PF9设置为输入模式GPIOF->MODER &=(~(0x3<<14));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0xff<<24));EXTI->EXTICR3 |= (0X05<<24);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0X1<<7);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0X1<<7);//设置EXTI9中断全局使能GICD->ISENABLER[3] |=(0X1<<1);//设置中断优先级GICD->IPRIORITYR[24] |= (~(0x1f<<11));//设置CPUO处理当前中断GICD->ITARGETSR[24] |= (0X1<<8);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0x1f<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0X1;
}void key3_it_config()
{//使能GPIOF的外设时钟RCC->MP_AHB4ENSETR |=(0X1<<5);//PF9设置为输入模式GPIOF->MODER &=(~(0x3<<16));//设置由PF9管脚产生EXTI9事件EXTI->EXTICR3 &= (~(0XFF<<0));EXTI->EXTICR3 |= (0X05<<0);//通过下降沿检测EXTI9事件是否产生EXTI->FTSR1 |= (0X1<<8);//取消EXTI9中断屏蔽EXTI->C1IMR1 |= (0X1<<8);//设置EXTI9中断全局使能GICD->ISENABLER[3] |=(0X1<<2);//设置中断优先级GICD->IPRIORITYR[24] |= (~(0x1f<<19));//设置CPUO处理当前中断GICD->ITARGETSR[24] |= (0X1<<16);//设置组0中断可以被转发到GICC层GICD->CTRL |=0X1;//设置中断优先级掩码GICC->PMR |= (0X1F<<3);//设置组0中断交给指定处理器处理GICC->CTRL |= 0X1;
}

include/key_inc.h

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

http://www.lryc.cn/news/324554.html

相关文章:

  • 高架学习笔记之需求工程
  • mysql基础2多表查询
  • Qt 写一个邮件发送程序
  • swagger3快速使用
  • 一键入门Ubuntu22!
  • 阿里云服务器价格购买价格表,2024新版报价查询
  • 实现防抖函数并支持第一次立刻执行(vue3 + ts环境演示)
  • WPF —— DataGrid数据网格
  • 牛客题霸-SQL进阶篇(刷题记录一)
  • 网络安全实训Day12
  • 对话Midjourney创始人:图片仅是起步,人工智能将全面改变学习、创意和组织。
  • Elasticsearch:将 ILM 管理的数据流迁移到数据流生命周期
  • LeetCode刷题记录——day6
  • C++String类
  • Linux docker7--私有镜像仓库registry和UI搭建及使用
  • IDS入侵检测系统分为两大类。
  • 为什么元素显示的样式跟我设置的不一样?CSS优先级详解
  • C语言动态内存的管理
  • CASIA数据集转png HWDB2.0-2.2
  • 学习或复习电路的game推荐:nandgame(NAND与非门游戏)、Turing_Complete(图灵完备)
  • 前端面试题《react》
  • 快速入门Kotlin③类与对象
  • RUST:Arc (Atomic Reference Counted) 原子引用计数
  • 从0写一个问卷调查APP的第13天-1
  • 20.Python从入门到精通—参数 位置参数 关键字参数 默认参数 匿名函数 return 语句 强制位置参数
  • Python爬虫之requests库
  • 鱼塘钓鱼(多路归并)
  • java每日一题——买啤酒(递归经典问题)
  • 最近接到一个大项目,给公司设计抢商品代金劵业务
  • 防火墙(讲解)