arm_按键中断控制LED、蜂鸣器、风扇

arm_按键中断控制LED、蜂鸣器、风扇

功能函数

复制代码
#include "led.h"

void led_set()
{
    // 使能rcc
    RCC->MP_AHB4ENSETR |= (0x01 << 4);
    // 设置输出
    GPIOE->MODER &= (~(0x03 << 20));
    GPIOE->MODER |= (0x1 << 20);

    // 设置推挽输出
    GPIOE->OTYPER &= (~(0x01 << 10));

    // 无上拉下拉
    GPIOE->PUPDR &= (~(0x3 << 20));

    // 设置输出速率 低速
    GPIOE->OSPEEDR &= (~(0x3 << 20));

    GPIOE->ODR ^= (0x1 << 10);
}

// 蜂鸣器
void SPI_set()
{
    RCC->MP_AHB4ENSETR |= (0x01 << 1);
    // 设置输出
    GPIOB->MODER &= (~(0x03 << 12));
    GPIOB->MODER |= (0x1 << 12);

    // 设置推挽输出
    GPIOB->OTYPER &= (~(0x01 << 6));

    // 无上拉下拉
    GPIOB->PUPDR &= (~(0x3 << 12));

    // 设置输出速率
    GPIOB->OSPEEDR |= (0x3 << 12);

    GPIOB->ODR ^= (0x1 << 6);
}


// 风扇 PE9
void FAN_set()
{
    RCC->MP_AHB4ENSETR |= (0x01 << 4);
    // 设置输出
    GPIOE->MODER &= (~(0x03 << 18));
    GPIOE->MODER |= (0x1 << 18);

    // 设置推挽输出
    GPIOE->OTYPER &= (~(0x01 << 9));

    // 无上拉下拉
    GPIOE->PUPDR &= (~(0x3 << 18));

    // 设置输出速率
    GPIOE->OSPEEDR |= (0x3 << 18);

    GPIOE->ODR ^= (0x1 << 9);
}

中断处理函数

复制代码
#include "key_it.h"
#include "led.h"

extern void printf(const char *fmt, ...);
unsigned int i = 0;
void do_irq(void)
{
    int irqno; // 保存中断号
    irqno = GICC->IAR & 0x3FF;
    printf("%d\n", irqno);
    switch (irqno)
    {
    case 97:
        /* key2 */
        printf("key2 INT\n");
        SPI_set();
        GICD->ICPENDR[3] |=(0x1<<1) ;
        EXTI->FPR1 |= (0x1 << 7);
        break;
    case 98:
        /* key3 */
        printf("key3 INT\n");
        FAN_set();
        GICD->ICPENDR[3] |=(0x1<<2) ;
        EXTI->FPR1 |= (0x1 << 8);
        break;
    case 99:
        /* key1  LED1 PE10亮*/
        printf("key1 INT\n");
        led_set();
        GICD->ICPENDR[3] |=(0x1<<3) ;
        EXTI->FPR1 |= (0x1 << 9);
        break;
    }

    // 清除中断
    GICC->EOIR = irqno;
}
相关推荐
济61744 分钟前
ARM Linux 驱动开发篇--嵌入式 Linux LED 驱动开发实验(2)--Linux 下 LED 灯驱动开发代码编写-- Ubuntu20.04
linux·arm开发·驱动开发
还在忙碌的吴小二2 天前
OEC设备刷写飞牛NAS ARM版(RK3566)超详细教程
arm开发
还在忙碌的吴小二2 天前
飞牛NAS ARM版升级全指南+性能深度解析|低成本盘活闲置设备,功耗与体验双突破
arm开发·人工智能
charlie1145141912 天前
SSH X11 转发排查与解决指南(Windows + Xming + Ubuntu)
arm开发·windows·笔记·ubuntu·ssh·个人开发·环境配置
济6172 天前
ARM Linux 驱动开发篇---TFTP挂载内核设备树,NFS挂载文件系统教程--解决高版本 Ubuntu的nfs挂载系统失败-- Ubuntu20.04
linux·arm开发·驱动开发
社会零时工3 天前
机械臂末端2D相机自动对焦应用
arm开发·机器学习
陌上花开缓缓归以3 天前
W25N01KVZEIR flash烧写
arm开发
济6175 天前
ARM Linux 驱动开发篇----字符设备驱动开发(4)--- 编写chrdevbase 字符设备驱动开发实验--- Ubuntu20.04
linux·arm开发·驱动开发
代码游侠5 天前
学习笔记——I2C子系统
linux·arm开发·驱动开发·单片机·嵌入式硬件
陌上花开缓缓归以6 天前
mips架构uboot 启动流程分析
arm开发·架构