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

ARM中断实验

设置按键中断,按键1按下,LED亮,再按一次,灭

按键2按下,蜂鸣器响。再按一次,不响

按键3按下,风扇转,再按一次,风扇停

main.c

#include "uart1.h"
#include "key_it.h"
int main()
{uart4_init();//串口初始化//中断初始化key_it_config();key3_it_config();gpio_start();while(1){//保证主程序不结束}return 0;
}

do_irp.c

#include "key_it.h"
#include "uart1.h"extern void printf(const char *fmt, ...);
unsigned int i = 0;
unsigned int num1=0,num2=0,num3=0;
void do_irq(void) 
{int irqno;//保存中断号irqno = GICC->IAR&0X3FF;switch(irqno){case 99://key1//按键1中断处理printf("KEY1 INT\n");//灯亮if(num1 == 0){//PF10GPIOF->ODR |= (0x1<<10);//PE10 PE8GPIOE->ODR |= (0x5<<8);num1++;}//灯灭else if(num1 > 0){//PF10GPIOF->ODR &= ~(0x1<<10);//PE10 PE8GPIOE->ODR &= ~(0x5<<8);num1 = 0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<3);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<9);break;case 97://key2//按键2中断处理printf("KEY2 INT\n");//蜂鸣器转if(num2 == 0){//PB6GPIOB->ODR |= (0x1<<6);num2++;}//蜂鸣器停else if(num2 > 0){//PB6GPIOB->ODR &= ~(0x1<<6);num2 = 0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<1);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<7);break;case 98://key3//按键3中断处理printf("KEY3 INT\n");//风扇转if(num3 == 0){//PE9GPIOE->ODR |= (0x1<<9);num3++;}//风扇停else if(num3 > 0){//PE9GPIOE->ODR &= ~(0x1<<9);num3 = 0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<2);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<8);break;}//清除处理完的中断号GICC_EOIRGICC->EOIR=irqno;
}

key_it.c

#include "key_it.h"
#include "uart1.h"extern void printf(const char *fmt, ...);
unsigned int i = 0;
unsigned int num1=0,num2=0,num3=0;
void do_irq(void) 
{int irqno;//保存中断号irqno = GICC->IAR&0X3FF;switch(irqno){case 99://key1//按键1中断处理printf("KEY1 INT\n");//灯亮if(num1 == 0){//PF10GPIOF->ODR |= (0x1<<10);//PE10 PE8GPIOE->ODR |= (0x5<<8);num1++;}//灯灭else if(num1 > 0){//PF10GPIOF->ODR &= ~(0x1<<10);//PE10 PE8GPIOE->ODR &= ~(0x5<<8);num1 = 0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<3);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<9);break;case 97://key2//按键2中断处理printf("KEY2 INT\n");//蜂鸣器转if(num2 == 0){//PB6GPIOB->ODR |= (0x1<<6);num2++;}//蜂鸣器停else if(num2 > 0){//PB6GPIOB->ODR &= ~(0x1<<6);num2 = 0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<1);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<7);break;case 98://key3//按键3中断处理printf("KEY3 INT\n");//风扇转if(num3 == 0){//PE9GPIOE->ODR |= (0x1<<9);num3++;}//风扇停else if(num3 > 0){//PE9GPIOE->ODR &= ~(0x1<<9);num3 = 0;}//清除挂起中断标志位GICD_ICPENDRxGICD->ICPENDR[3] |= (0x1<<2);//清除中断触发标志位EXTI_FRR1EXTI->FPR1 |= (0x1<<8);break;}//清除处理完的中断号GICC_EOIRGICC->EOIR=irqno;
}

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

相关文章:

  • Vue条件渲染
  • k8s中如何使用gpu、gpu资源讲解、nvidia gpu驱动安装
  • VRRP 虚拟路由器冗余协议的解析和配置
  • 旅游网站HTML
  • Unity - Normal mapping - Reoriented normal mapping - 重定向法线、混合法线
  • CSS 常用样式background背景属性
  • Java开发利器,让你事半功倍!
  • Redis面临的挑战
  • 10月12日
  • Windows 下 Qt 可执行程序添加默认管理员权限启动(QMAKE、MinGW MSVC)
  • 深度思考面试常考sql题
  • 使用springboot服务端远程调试? 试试HTTP实现服务监听
  • CSS图文悬停翻转效果完整源码附注释
  • MQTT C库下载
  • android U广播详解(一)
  • input标签的23种type类型
  • 分类预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入分类预测
  • 解决echarts配置滚动(dataZoom)后导出图片数据不全问题
  • 【vue3+ts】项目初始化
  • c++视觉图像----扩充边界
  • 邮政编码,格式校验:@ZipCode(自定义注解)
  • Appium自动化测试框架:关键字驱动+数据驱动
  • 简单多状态dp【动态规划】
  • OpenCV中initUndistortRectifyMap ()函数与十四讲中去畸变公式的区别探究
  • 【C++】C++11——智能指针、内存泄漏、智能指针的使用和原理、RAII、auto_ptr、unique_ptr、shared_ptr、weak_ptr
  • EDUSRC-记某擎未授权与sql注入
  • 1688拍立淘API接口分享
  • 昇腾910使用记录
  • 从一部iPhone手机看芯片的分类
  • arm day 7