0703_ARM7

练习:

封装exti,cic初始化函数
 

//EXTI初始化
void hal_key_exti_init(int id,int exticr,int mode){
    //获取偏移地址
    int address_offset = (id%4)*8;
    //获取寄存器编号
    int re_ser = (id/4)+1;
    //
    printf("address_offset=%d,re_ser=%d\n",address_offset,re_ser);
    //1.设置外部中断选择寄存器进行连接
    if(re_ser==1){
        EXTI->EXTICR1 &= ~(0xff<<address_offset);
        EXTI->EXTICR1 |= (exticr<<address_offset);
    }else if(re_ser==2){
        EXTI->EXTICR2 &= ~(0xff<<address_offset);
        EXTI->EXTICR2 |= (exticr<<address_offset);
    }else if(re_ser==3){
        EXTI->EXTICR3 &= ~(0xff<<address_offset);
        EXTI->EXTICR3 |= (exticr<<address_offset);
    }else if(re_ser==4){
        EXTI->EXTICR4 &= ~(0xff<<address_offset);
        EXTI->EXTICR4 |= (exticr<<address_offset);
    }
    //2.设置触发方式
    if(mode==1){
        EXTI->FTSR1 &= ~(0x1<<id);
        EXTI->RTSR1 |= (0x1<<id);
    }else if(mode==0){
        EXTI->RTSR1 &= ~(0x1<<id);
        EXTI->FTSR1 |= (0x1<<id);
    }
    //3.设置EXTI层中断不屏蔽
    EXTI->C1IMR1 |= (0x1<<id);
}

//GIC初始化
void hal_key_gic_init(int id,int interrupt_lv){
    //获取中断id对应使能寄存器偏移量
    int address_offset = id%32;
    //获取中断id对应使能寄存器
    int re_enable = id/32;
    //
     printf("address_offset=%d,re_enable=%d\n",address_offset,re_enable);
    //GICD
    //1.使能GICD组0
    GICD->CTRL |= (0x1<<0);
    //2.设置对应中断号使能
    GICD->ISENABLER[re_enable] |= (0x1<<address_offset);
    //2.设置GICD层中断优先级
    GICD->IPRIORITYR[re_enable*8] &= (~(interrupt_lv<<(address_offset*8+3)));
    //3.设置GICD层中断分配
    GICD->ITARGETSR[re_enable*8] &= (~(0x3<<(address_offset*8)));
    GICD->ITARGETSR[re_enable*8] |= (0x1<<(address_offset*8));
     
    //1.设置GICC层组0使能
    GICC->CTRL |= (0x1<<0);
    //2.设置GICC层中断优先级
     GICC->PMR &= (~(0x1f<<3));
    GICC->PMR |= (0x1f<<3);
}

相关推荐

  1. <span style='color:red;'>0703</span>_<span style='color:red;'>ARM</span><span style='color:red;'>7</span>

    0703_ARM7

    2024-07-09 23:30:05      23 阅读
  2. 0706_ARM8

    2024-07-09 23:30:05       24 阅读
  3. <span style='color:red;'>ARM</span> day<span style='color:red;'>7</span>

    ARM day7

    2024-07-09 23:30:05      54 阅读
  4. <span style='color:red;'>arm</span> day<span style='color:red;'>7</span>

    arm day7

    2024-07-09 23:30:05      49 阅读
  5. day7arm

    2024-07-09 23:30:05       31 阅读
  6. ARM Day7

    2024-07-09 23:30:05       33 阅读
  7. 3.7 GNU ARM汇编语言

    2024-07-09 23:30:05       48 阅读
  8. ARM_day7:按键中断

    2024-07-09 23:30:05       37 阅读
  9. 4.16 day7 ARM

    2024-07-09 23:30:05       35 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 23:30:05       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 23:30:05       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 23:30:05       58 阅读
  4. Python语言-面向对象

    2024-07-09 23:30:05       69 阅读

热门阅读

  1. CI脚本的python基础

    2024-07-09 23:30:05       23 阅读
  2. uni-app + vue3项目引入unocss

    2024-07-09 23:30:05       18 阅读
  3. 深度学习 - 模型的保存与部署方式汇总

    2024-07-09 23:30:05       16 阅读
  4. C++ 算法——二分查找

    2024-07-09 23:30:05       19 阅读
  5. Spring事务

    2024-07-09 23:30:05       19 阅读
  6. c# 基础习题答案 20240709

    2024-07-09 23:30:05       18 阅读
  7. MAC下的PDM工具

    2024-07-09 23:30:05       22 阅读
  8. Dubbo源码解析-过滤器Filter

    2024-07-09 23:30:05       22 阅读
  9. 开源大模型对比

    2024-07-09 23:30:05       27 阅读
  10. Mongodb索引的删除

    2024-07-09 23:30:05       20 阅读
  11. ubuntu minio在线安装、开机启动

    2024-07-09 23:30:05       21 阅读
  12. 正则表达式-使用笔记

    2024-07-09 23:30:05       27 阅读