12.26

这篇具有很好参考价值的文章主要介绍了12.26。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

key_it.c

#include"key_it.h"
void led_init()
{
    // 设置GPIOE/GPIOF时钟使能
    RCC->MP_AHB4ENSETR |= (0x3 << 4);
    // 设置PE10/PE8/PF10为输出模式
    GPIOE->MODER &= (~(0x3 << 20));
    GPIOE->MODER |= (0x1 << 20);
    GPIOE->MODER &= (~(0x3 << 16));
    GPIOE->MODER |= (0x1 << 16);
    GPIOF->MODER &= (~(0x3 << 20));
    GPIOF->MODER |= (0x1 << 20);
    // 设置PE10/PE8/PF10为推挽输出
    GPIOE->OTYPER &= (~(0x1 << 10));
    GPIOE->OTYPER &= (~(0X1 << 8));
    GPIOF->OTYPER &= (~(0x1 << 10));
    // 设置PE10/PE8/PF10输出速度为低速
    GPIOE->OSPEEDR &= (~(0x3 << 20));
    GPIOE->OSPEEDR &= (~(0X3 << 16));
    GPIOF->OSPEEDR &= (~(0x3 << 20));
    // 设置PE10/PE8/PF10无上拉下拉
    GPIOE->PUPDR &= (~(0x3 << 20));
    GPIOE->PUPDR &= (~(0X3 << 16));
    GPIOF->PUPDR &= (~(0X3 << 20));
}

void key1_it_config()
{
    //使能GPIOF时钟
    RCC->MP_AHB4ENSETR |= (0x1<<5);

    //设置PF9管脚为输入
    GPIOF->MODER &= (~(0x3<<18));

    //设置PF9作为EXTI9事件的输入
    EXTI->EXTICR3 &= (~(0x1f<<8));
    EXTI->EXTICR3 |= (0x05<<8);
    
    //设置下降沿使能检测EXTI9事件
    EXTI->FTSR1 |= (0x1<<9);

    //设置EXTI9事件不屏蔽
    EXTI->C1IMR1 |= (0x1<<9);

    //GICD使能EXTI9(99号)中断
    GICD->ISENABLER[3] |= (0x1<<3);

    //GICD 设置99号中断的优先级
    GICD->IPRIORITYR[24] &= (~(0x1f<<27));

    //选择CPU0处理当前中断
    GICD->ITARGETSR[24] |= (0x1<<24);

    //全局使能组0中断被转发到GICC
    GICD->CTRL |= (0X1);

    //设置中断的优先级掩码
    GICC->PMR |= (0x1f<<3);

    //允许组0中断被CPU处理
    GICC->CTRL |= (0x1);
}
void key2_it_config()
{
       //设置PF7管脚为输入
    GPIOF->MODER &= (~(0x3<<14));

    //设置PF7作为EXTI7事件的输入
    EXTI->EXTICR2 &= (~(0x1f<<24));
    EXTI->EXTICR2 |= (0x05<<24);
    
    //设置下降沿使能检测EXTI7事件
    EXTI->FTSR1 |= (0x1<<7);

    //设置EXTI7事件不屏蔽
    EXTI->C1IMR1 |= (0x1<<7);

    //GICD使能EXTI7(97号)中断
    GICD->ISENABLER[3] |= (0x1<<1);

    //GICD 设置97号中断的优先级
    GICD->IPRIORITYR[24] &= (~(0x1f<<11));

    //选择CPU0处理当前中断
    GICD->ITARGETSR[24] |= (0x1<<8);

    //全局使能组0中断被转发到GICC
    GICD->CTRL |= (0X1);

    //设置中断的优先级掩码
    GICC->PMR |= (0x1f<<3);
    
    //允许组0中断被CPU处理
    GICC->CTRL |= (0x1);
}
void key3_it_config()
{
      //设置PF8管脚为输入
    GPIOF->MODER &= (~(0x3<<16));

    //设置PF8作为EXTI8事件的输入
    EXTI->EXTICR3 &= (~0x1f);
    EXTI->EXTICR3 |= (0x05);
    
    //设置下降沿使能检测EXTI8事件
    EXTI->FTSR1 |= (0x1<<8);

    //设置EXTI8事件不屏蔽
    EXTI->C1IMR1 |= (0x1<<8);

    //GICD使能EXTI8(98号)中断
    GICD->ISENABLER[3] |= (0x1<<2);

    //GICD 设置98号中断的优先级
    GICD->IPRIORITYR[24] &= (~(0x1f<<19));

    //选择CPU0处理当前中断
    GICD->ITARGETSR[24] |= (0x1<<16);

    //全局使能组0中断被转发到GICC
    GICD->CTRL |= (0X1);

    //设置中断的优先级掩码
    GICC->PMR |= (0x1f<<3);
    
    //允许组0中断被CPU处理
    GICC->CTRL |= (0x1); 
}

do_irq.c

#include "key_it.h"
extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void) 
{
   int irqno = (GICC->IAR & 0x3ff);
    switch (irqno)
    {
    case 99: // key1
        printf("KEY1_INT\n");
          GPIOE->ODR |= (0x1<<10);
        // 清除GICD的中断排队标志
        GICD->ICPENDR[3] |= (0x1<<3);
        // 清除exti的事件触发标志
        EXTI->FPR1 |= (0x1<<9);
        delay(2000);
         GPIOE->ODR &= (~(0x1<<10));
        break;
    case 97: // KEY2
        printf("KEY2_INT\n");
         GPIOF->ODR |= (0x1<<10);
         // 清除GICD的中断排队标志
        GICD->ICPENDR[3] |= (0x1<<1);
        // 清除exti的事件触发标志
        EXTI->FPR1 |= (0x1<<7);
        delay(2000);
         GPIOF->ODR &= (~(0x1<<10));
        break;
    case 98: // key3
        printf("KEY3_INT\n");
         GPIOE->ODR |= (0x1<<8);
         // 清除GICD的中断排队标志
        GICD->ICPENDR[3] |= (0x1<<2);
        // 清除exti的事件触发标志
        EXTI->FPR1 |= (0x1<<8);
        delay(2000);
         GPIOE->ODR &= (~(0x1<<8));
        break;
    }
    // 清除中断号
    GICC->EOIR = irqno;

}

main.c

#include "key_it.h"

void delay(int ms)

{

  int i,j;

  for(i=0;i<ms;i++)

  {

    for(j=0;j<2000;j++);

  }

}

int main()

{

  led_init();

  key1_it_config();

  key2_it_config();

  key3_it_config();

    while (1)

    {

        printf("do main...\n");

        delay(1000);

    }

    return 0;

}

12.26,linux文章来源地址https://www.toymoban.com/news/detail-772614.html

到了这里,关于12.26的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 《Linux从练气到飞升》No.26 Linux中的线程控制

    🕺作者: 主页 我的专栏 C语言从0到1 探秘C++ 数据结构从0到1 探秘Linux 菜鸟刷题集 😘欢迎关注:👍点赞🙌收藏✍️留言 🏇 码字不易,你的👍点赞🙌收藏❤️关注对我真的很重要,有问题可在评论区提出,感谢阅读!!!

    2024年02月05日
    浏览(45)
  • 【Linux系统编程】26.信号、kill、alarm、setitimer

    目录 信号 信号共性 信号特质 产生信号 信号相关概念 默认处理动作 信号4要素 常规信号  ​编辑 注意 kill 参数pid 测试代码1 测试结果 测试代码2 测试结果 alarm 参数seconds 返回值 取消闹钟 测试代码3 测试结果1 测试结果2  ​编辑 setitimer 参数which 参数new_value 参数old_value 测试

    2024年04月28日
    浏览(42)
  • Ubuntu20.04降低linux版本到5.4.0-26-generic

    试用ubuntu20.04安装昇腾的驱动和cann的时,出现如下问题: 大概率是内核版本不对导致。目前昇腾的底层驱动和应用程序的配套如下图所示: 不满足5.4.0-26-generic的要求,如果强行安装驱动,会出现第一步的报错问题。 首先使用如下命令安装内核: 使用命令: dpkg --get-selecti

    2024年02月02日
    浏览(54)
  • 游戏思考26:游戏服务器压力测试文档(新增linux相关命令,02/10未完待续)

    ①流量 ②内存 ③一些主要的功能才做压力测试,比如 同时注册 , 最大在线 , 战斗 , 地图移动 , 数据存取 等。 ④2个压力宏观数据保持不变: a. 各接口的压力比例不变 , 首先从同类型游戏或者本游戏内测阶段,日志插桩,收集各个接口的调用比例;然后,将接口比例

    2024年02月01日
    浏览(48)
  • Linux第26步_在虚拟机中安装stm32wrapper4dbg工具

    在Ubuntu下编译TF-A 或者 Uboot时,我们需要用到ST公司提供的stm32wrapper4dbg工具。stm32wrapper4dbg工具的源码下载地址为: GitHub - STMicroelectronics/stm32wrapper4dbg 记得我们在前面已经创建过的目录如下: 1 )、在根目录下,创建一个“linux”目录 2 )、在“linux” 目录下,创建一个“nfs”的

    2024年01月19日
    浏览(25)
  • 每日一看大模型新闻(12.26下)假扮卧底,骗AI泄露代码拯救人类? 斯坦福小哥用GPT-4开发游戏惊呆网友;上海AI实验室开源医疗大模型群“浦医2.0”;“算命”AI:600万人数据训练,可预测健康

    发布日期 :2023.12.26 假扮卧底,骗AI泄露代码拯救人类? 斯坦福小哥用GPT-4开发游戏惊呆网友 主要内容 :最近,一款名为「Thus Spoke Zaranova」的AI游戏震惊了网友。这款游戏由ChatGPT、DALL·E 3和Midjourney等AI联合开发, 背景设定在一个名为The Nexus的虚拟空间,人类与AI在此发生冲

    2024年02月20日
    浏览(60)
  • 【探索Linux】—— 强大的命令行工具 P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )

    本文将深入探讨使用套接字进行网络通信的基本步骤,包括创建套接字、绑定地址、监听连接(对于服务器端)、连接远程主机(对于客户端)、以及发送和接收数据等操作。套接字编程涉及一系列系统调用和函数,如 socket() 、 bind() 、 listen() 、 connect() 、 send() 、 recv() 等。

    2024年03月10日
    浏览(84)
  • linux0.12-6

    第4章是最难理解的,后面再补 第5章我一下子就看过了,后面再补 [216页] 第6章 引导启动程序 216–6-1-总体功能 218–6-2-bootsect.S程序 218–6-2-1-功能描述 219–6-2-2-代码注释 230–6-2-3-其他信息 231–6-3-setup.S程序 231–6-3-1-功能描述 233–6-3-2-代码注释 249–6-3-3-其他信息 259–6-4-he

    2023年04月27日
    浏览(32)
  • linux0.12-4

    106–4-3-分段机制 106–4-3-1-段的定义 108–4-3-2-段描述符表 110–4-3-3-段选择符 112–4-3-4-段描述符 115–4-3-5-代码和数据段描述符类型 116–4-3-6-系统描述符类型 117–4-4-分页机制 119–4-4-1-页表结构 120–4-4-2-页表项格式 121–4-4-3-虚拟存储 122–4-5-保护 122–4-5-1-段级保护 124–4-5-2

    2023年04月18日
    浏览(39)
  • Linux 学习笔记(12)

    十二、 系统服务 1 、系统服务分类,根据其使用的方法来分,可以被分为三类 a、由 init 控制的服务:基本都是系统级别的服务,运行级别这一章讲的就是这一类的服务 b、由 System V 启动脚本启动的服务:和我们打交道最多的一种服务,服务器基本都是这个类型的服务 c、由

    2024年03月08日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包