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

day62:ARMday9,I2c总线通信

作业:按键中断实现LED1、蜂鸣器、风扇

key_in.c:

#include "key_in.h"void gpio_init()
{//RCC使能//GPIOERCC->MP_AHB4ENSETR |= (0x1<<4);//GPIOBRCC->MP_AHB4ENSETR |= (0x1<<1);//PE10、PB6、PE9输出模式GPIOE->MODER &= ~(0x3<<20);GPIOE->MODER |= (0x1<<20);GPIOB->MODER &= ~(0x3<<12);GPIOB->MODER |= (0x1<<12);GPIOE->MODER &= ~(0x3<<18);GPIOE->MODER |= (0x1<<18);//推挽模式GPIOE->OTYPER &= ~(0x1<<10);GPIOB->OTYPER &= ~(0x1<<6);GPIOE->OTYPER &= ~(0x1<<9);//速度设置为低速GPIOE->OSPEEDR &= ~(0x3<<20);GPIOB->OSPEEDR &= ~(0x3<<12);GPIOE->OSPEEDR &= ~(0x3<<18);//设置为无上拉下拉电阻GPIOE->PUPDR &= ~(0x3<<20);GPIOB->PUPDR &= ~(0x3<<12);GPIOE->PUPDR &= ~(0x3<<18);}
void key_in_config()
{//RCC使能GPIOF时钟RCC->MP_AHB4ENSETR |= (0x1<<5);//设置PF9 PF7 PF8管脚为输入模式GPIOF->MODER &= ~(0x3f<<14);//设置PF9 PF7 PF8发生EXTI事件 EXTI->EXTICR3 &= ~(0xff<<8);EXTI->EXTICR3 |= (0x05<<8);EXTI->EXTICR2 &= ~(0xff<<24);EXTI->EXTICR2 |= (0x05<<24);EXTI->EXTICR3 &= ~(0xff);EXTI->EXTICR3 |= (0x05);//设置EXTI中断触发模式为下降沿模式EXTI->FTSR1 |= (0x7<<7);//设置EXTI事件触发为不屏蔽EXTI->C1IMR1 |= (0x7<<7);//使能组0GICD->CTRL |= 0x1;//中断使能,使其可以传到CPUGICD->ISENABLER[3] |= (0x1<<3);GICD->ISENABLER[3] |= (0x1<<1);GICD->ISENABLER[3] |= (0x1<<2);//设置中断优先级GICD->IPRIORITYR[24] &= ~(0x1f<<27);GICD->IPRIORITYR[24] &= ~(0x1f<<11);GICD->IPRIORITYR[24] &= ~(0x1f<<19);//选择CPU处理中断GICD->ITARGETSR[24] &= ~(0x3<<24);GICD->ITARGETSR[24] |= (0x1<<24);GICD->ITARGETSR[24] &= ~(0x3<<8);GICD->ITARGETSR[24] |= (0x1<<8);GICD->ITARGETSR[24] &= ~(0x3<<16);GICD->ITARGETSR[24] |= (0x1<<16);//使能CPU处理转发的中断GICC->CTRL |= 0x1;//设置中断掩码GICC->PMR &= ~(0x1f<<3);GICC->PMR |= (0x5<<3);}

do_irq.c:

#include "key_in.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;void do_irq(void) 
{int irqno;static int i1=0,i2=0,i3=0;irqno = GICC->IAR & 0x3ff;switch(irqno){case 99:printf("KEY1 %d\n",irqno);i1++;//key1中断处理,LED1if(i1%2==1)GPIOE->ODR |= (0x1<<10);elseGPIOE->ODR &= ~(0x1<<10);//清除挂起中断标识位GICD->ICPENDR[3] |= (0x1<<3);//清除事情挂起标识位EXTI->FPR1 |= (0x1<<9);break;case 97:printf("KEY2 %d\n",irqno);i2++;//key2中断处理,蜂鸣器if(i2%2==1)GPIOB->ODR |= (0x1<<6);elseGPIOB->ODR &= ~(0x1<<6);//清除挂起中断标识位GICD->ICPENDR[3] |= (0x1<<1);//清除事情挂起标识位EXTI->FPR1 |= (0x1<<7);break;case 98:printf("KEY3 %d\n",irqno);i3++;//key3中断处理,风扇if(i3%2==1)GPIOE->ODR |= (0x1<<9);elseGPIOE->ODR &= ~(0x1<<9);//清除挂起中断标识位GICD->ICPENDR[3] |= (0x1<<2);//清除事情挂起标识位EXTI->FPR1 |= (0x1<<8);break;}//清除处理完的中断IAR到EOIRGICC->EOIR=irqno;
}

key_in.h:

#ifndef __KEY_IN_H__
#define __KEY_IN_H__
#include "stm32mp1xx_rcc.h"
#include "stm32mp1xx_gpio.h"
#include "stm32mp1xx_exti.h"
#include "stm32mp1xx_gic.h"void gpio_init();
void key_in_config();
#endif

main.c:

#include "key_in.h"int main()
{gpio_init();key_in_config();while(1){}return 0;
}

现象:

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

相关文章:

  • 【Python学习笔记】类型/运算/变量/注释
  • 国内常用源开发环境换源(flutter换源,python换源,Linux换源,npm换源)
  • 关于一篇什么是JWT的原理与实际应用
  • 【Method】把 arXiv论文 转换为 HTML5 网页
  • 每日一题AC
  • 后端:推荐 2 个 .NET 操作的 Redis 客户端类库
  • 华泰证券:京东营收增长或短期承压
  • Java从resources文件下载文档,文档没有后缀名
  • 【动手学深度学习-Pytorch版】BERT预测系列——BERTModel
  • Python之元组、字典和集合练习
  • 【数据结构】归并排序和计数排序(排序的总结)
  • 某医疗机构:建立S-SDLC安全开发流程,保障医疗前沿科技应用高质量发展
  • 验证二叉搜索树的后序遍历序列
  • 第三章 内存管理 一、内存的基础知识
  • 【Java学习之道】Java常用集合框架
  • logicFlow 流程图编辑工具使用及开源地址
  • ATF(TF-A)/OPTEE之动态代码分析汇总
  • 10-11 周三 shell xargs tr curl 做大事情
  • 1.1 向量与线性组合
  • django: You may need to add ‘localhost‘ to ALLOWED_HOSTS
  • 网络安全(黑客技术)—自学手册
  • 【Vue】之Vuex的入门使用,取值,修改值,同异步请求处理---保姆级别教学
  • ubuntu20.04 nerf Instant-ngp (下) 复现,自建数据集,导出mesh
  • 【常见错误】SVN提交项目时,出现了这样的提示:“XXX“ is scheduled for addition, but is missing。
  • 深度学习基础知识 给模型的不同层 设置不同学习率
  • 【Python 零基础入门】 Numpy
  • 1600*C. Circle of Monsters(贪心)
  • 国外互联网巨头常用的项目管理工具揭秘
  • sql 注入(4), 盲注
  • 【string题解 C++】字符串相乘 | 翻转字符串III:翻转单词