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

按下按键之后,打印一句话------>三个按键需要实现

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(){  

 //key1键盘  

 //EXIT控制器初始化  

 void PF9_exti_init();  

 //GICD控制器初始化 

  void PF9_gicd_init();  

 //gicc控制器初始化 

  void PF9_gicc_init(); 

   //key2键盘  

 //EXIT控制器初始化  

 void PF7_exti_init();  

 //GICD控制器初始化

    void PF7_gicd_init(); 

   //gicc控制器初始化  

 void PF7_gicc_init();    

//key3键盘  

 //EXIT控制器初始化 

   void PF8_exti_init(); 

   //GICD控制器初始化  

 void PF8_gicd_init();  

 //gicc控制器初始化  

 void PH8_gicc_init();  

 while(1)    { 

   }  

 return 0;

}

key.h:

#ifndef __KEY_h__

#define __KEY_h__

#include "stm32mp1xx_gpio.h"

#include "stm32mp1xx_exti.h"

#include "stm32mp1xx_rcc.h"

#include "stm32mp1xx_gic.h"

 

//key1键盘

//EXIT控制器初始化

void PF9_exti_init();

//GICD控制器初始化

void PF9_gicd_init();

//gicc控制器初始化

void PF9_gicc_init();

 

//key2键盘

//EXIT控制器初始化

void PF7_exti_init();

//GICD控制器初始化

void PF7_gicd_init();

//gicc控制器初始化

void PF7_gicc_init();

 

//key3键盘

//EXIT控制器初始化

void PF8_exti_init();

//GICD控制器初始化

void PF8_gicd_init();

//gicc控制器初始化

void PH8_gicc_init();

 

#endif

key.c:

#include "key.h"


//EXIT控制器初始化
void PF9_exit_init()
{
    //------RCC章节-----------
    RCC->MP_AHB4ENSETR |=0x01 << 5;
    //-------输入模式--------------
    //key1
    GPIOF->MODER |=(~(0x03 << 18));

    //初始化EXIT
    EXTI->EXTICR3 &=(~(0xff << 8));
    EXTI->EXTICR3 |=(0x05 << 8);
    //编写事件
    EXTI->FTSR1 |= 0x01 << 9;
    EXTI->C1IMR1 |= 0x01 << 9;
}

void PF7_exit_init()
{
    //------RCC章节-----------
    RCC->MP_AHB4ENSETR |=0x01 << 5;
    //-------输入模式--------------
    //key1
    GPIOF->MODER |=(~(0x03 << 14));

    //初始化EXIT
    EXTI->EXTICR3 &=(~(0xff << 24));
    EXTI->EXTICR3 |=(0x05 << 24);
    //编写事件
    EXTI->FTSR1 |= 0x01 << 7;
    EXTI->C1IMR1 |= 0x01 << 7;
}
void PF8_exit_init()
{
    //------RCC章节-----------
    RCC->MP_AHB4ENSETR |=0x01 << 5;
    //-------输入模式--------------
    //key1
    GPIOF->MODER |=(~(0x03 << 16));

    //初始化EXIT
    EXTI->EXTICR3 |=(0x05 << 0);
    //编写事件
    EXTI->FTSR1 |= 0x01 << 8;
    EXTI->C1IMR1 |= 0x01 << 8;
}

//GICD控制器初始化
void PF9_gicd_init()
{
    GICD->CTRL |=0x01 << 0;

    GICD->ISENABLER[3] |=0x01 << 3;

    GICD->IPRIORITYR[24] &= (~(0x1f << 27));

    GICD->ITARGETSR[24] &= (~(0x3 << 24));
    GICD->ITARGETSR[24] |= 0x1 << 24;
}

//GICD控制器初始化
void PF7_gicd_init()
{
    GICD->CTRL |=0x01 << 0;

    GICD->ISENABLER[3] |=0x01 << 3;

    GICD->IPRIORITYR[24] |= (0x1f << 11);

    GICD->ITARGETSR[24] |= 0x1 << 8;
}

//GICD控制器初始化
void PF8_gicd_init()
{
    GICD->CTRL |=0x01 << 0;

    GICD->ISENABLER[3] |=0x01 << 2;

    GICD->IPRIORITYR[24] |= (0x1f << 19);

    GICD->ITARGETSR[24] |= 0x1 << 16;
}

//GICC控制器初始化
void PF9_gicc_init()
{

    GICC->CTRL |=0x01 << 0;

    GICC->PMR &=(~(0x1f << 3));

    GICC->PMR |=(0x1f << 3);
}


//GICC控制器初始化
void PF7_gicc_init()
{

    GICC->CTRL |=0x01 << 0;

    GICC->PMR |=(0x02 << 2);
}


//GICC控制器初始化
void PF8_gicc_init()
{

    GICC->CTRL |=0x01 << 0;

    GICC->PMR |=(0x02 << 2);
}

do_irq:

#include "key.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;
    //判断终端的好坏
    switch(num)
    {
        //99:key1键盘按下
    case 99:
        delay_ms(500);
        printf("key1---------");

        EXTI->FPR1 |= (0X1<<9);

        GICD->ICPENDR[3] |=(0x01 << 3);
        break;

        //97:key2键盘按下
    case 97:
        delay_ms(500);
        printf("key2---------");

        EXTI->FPR1 |= (0X1<<7);

        GICD->ICPENDR[3] |=(0x01 << 1);
        break;
        //98:key3键盘按下
    case 98:
        delay_ms(500);
        printf("key3---------");

        EXTI->FPR1 |= (0X1<<8);

        GICD->ICPENDR[3] |=(0x01 << 2);
        break;
        
    default:
        delay_ms(500);
        printf("输入错误,请重新输入!---------");

    }
    //清楚中断状态位
    GICC->EOIR &= (~(0x3ff << 0));
    GICC->EOIR |=num;
}

 

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

相关文章:

  • Mac配置VScode
  • MAC地址IP地址 端口
  • 关于虚拟数字人你想知道的都在这里
  • 分布式任务调度处理方案(无代码)
  • 2023年博管办香江学者计划、澳门青年学者开始申报
  • (二十一)、实现评论功能(1)【uniapp+uinicloud多用户社区博客实战项目(完整开发文档-从零到完整项目)】
  • 【Docker】初识Dcoker以及镜像操作(一)
  • (1)C#传智:在vs2022中基本了解(第一天)
  • 【数据结构与算法】算法的时间复杂度和空间复杂度
  • 不使用contab -e的方式,添加计划任务
  • sentry2摄像头之blink篇
  • springboot集成PDF导出
  • Podman 创建持久 MySQL 数据库容器
  • Java-反射
  • 构造agent类型的内存马(内存马系列篇十三)
  • JavaEE简单示例——<select>中的查询参数传递和结果集封装自动映射关系
  • 信息安全圈都在谈论CISP,CISSP,这两者有什么区别呢?
  • 浅谈Redisson实现分布式锁的原理
  • UVM实战(张强)-- UVM中的寄存器模型
  • 什么是 CSAT?这份客户满意度流程指南请查收
  • AD域备份和恢复工具
  • 老学长的浙大MPA现场复试经验分享
  • 制作证书链并进行验证
  • 基于python多光谱遥感数据处理、图像分类、定量评估及机器学习方法应用
  • 初识 git--本地仓库
  • Redis学习之持久化(六)
  • C++11 之 auto decltype
  • 论文笔记:How transferable are features in deep neural networks? 2014年NIP文章
  • python基于flask共享单车系统vue
  • C++11 之模板改进