IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> MSP432E401Y-按键中断点灯 -> 正文阅读

[嵌入式]MSP432E401Y-按键中断点灯

? ? ? ? 承接上一篇文章,这次是用按键触发外部中断,通过LED灯显示

? ? ? ? 这次的实验也是通过对寄存器进行操作来实现相关功能。在进行代码编写之前,先来了解一下关于GPIO寄存器的中断定义解释以及不同赋值下的功能解释。

1.GPIO?-> IS(Interrupt Sense) :触发状态选择寄存器

? ? ? ? 0x00:边缘触发

? ? ? ? 0x01:电平触发

2.GPIO?-> IBE(Interrupt Both Edges):双边触发寄存器

? ? ? ? 0x00:正常触发中断

? ? ? ? 0x01:下降沿上升沿都触发中断

3.GPIO -> IEV(Interrupt Event):触发方式选择寄存器

? ? ? ? 0x00:下降沿触发或者低电平触发

? ? ? ? 0x01:高电平或上升沿触发

4.GPIO->IM(Interrupt Mask):中断屏蔽寄存器

? ? ? ? 0x00:中断屏蔽状态

? ? ? ? 0x01:相应引脚中断发送到中断控制器(说简单点就是不屏蔽那个引脚了)

5.GPIO->RIS(Raw Interrupt Status):原始中断状态寄存器,对于边沿触发,通过向ICR写1来清除RIS标志;对于电平触发,在电平无效的时候会自动清零

? ? ? ? 0x00:相应引脚上没有发生中断

? ? ? ? 0x01:相应引脚上发生了中断

6.GPIO->MIS(Masked Interrupt Status):已屏蔽中断状态寄存器,触发以及清除方式同RIS

? ? ? ? 0x00:相应引脚上中断被屏蔽或者没发生

? ? ? ? 0x01:相应引脚上中断条件出发了中断控制器中断

7.GPIO->ICR(Interruput Clear):中断标志清除寄存器,对于边沿触发,ICR置1会清除相应引脚上的RIS以及MIS的相应位。对于电平检测,这个就没什么用了,因为电平无效的时候RIS和MIS会自动清除。此外,将0写入ICR是无效的,没有任何作用

? ? ? ? 0x00:无效

? ? ? ? 0x01:相应中断被清除

8.GPIO->SI,这个寄存器只在P、Q端口上可用,这里不做介绍

? ? ? ? 关于如何配置相应GPIO口中断,TI手册里也有介绍

? ? ? ? 1. 通过清除 GPIOIM 寄存器中的 IME 字段来屏蔽相应的端口。
????????2. 配置GPIOIS寄存器中的IS字段和GPIOIBE寄存器中的IBE字段。
????????3. 清除 GPIORIS 寄存器。
????????4. 通过设置 GPIOIM 寄存器中的 IME 字段来取消屏蔽端口。?

? ? ? ? 到这里,对于中断的基础配置应该已经是信手拈来了。不过因为已经做过MSP430以及STM32,我知道还有一步非常关键的操作手册里没说,那就是打开总中断!但是我翻了一下午的手册以及其他人的代码我都没找到怎么开总中断,无奈之下只能采取官方封装好的driverlib库里面的函数——MAP_IntEnable(INT_GPIOJ);官方库对于打开每个引脚或者是功能口中断的封装还是很完善的,这里也不继续去挖苦自己了(实在是找不到了)。对于系统功能寄存器里面的IM并不是用来打开总中断的。如果有会写的可以留言或者私信(万分感谢)。

? ? ? ? 按键中断无非就是GPIO设置为输入模式,输出拉高,输入电阻拉高,下降沿触发中断,不过这里并不做消抖工作(偷懒)。不过不消抖的按键是真的不灵敏,也不知道是我配置出问题了还是芯片问题,还是因为没消除抖动。

? ? ? ? 下面附上相关代码

/* DriverLib Includes */
#include <ti/devices/msp432e4/driverlib/driverlib.h>

/* Standard Includes */
#include <stdint.h>
#include <stdbool.h>

void key_init(){
    GPIOJ->DIR&=~(BIT0+BIT1); //set as input
    GPIOJ->PUR|=BIT0+BIT1;  //Input set to pull-up resistor
    GPIOJ->DEN|=BIT0+BIT1;  //Digital enable
    GPIOJ->DATA|=BIT0+BIT1;//Output set as high
}
void key_interrupt_init(){

    GPIOJ->IS &=~BIT1;
    GPIOJ->IBE &=~BIT1;
    GPIOJ->IEV &=~BIT1;//==  MAP_GPIOIntTypeSet(GPIO_PORTJ_BASE, GPIO_PIN_1, GPIO_FALLING_EDGE);
    GPIOJ->IM |=BIT1;//  ==    MAP_GPIOIntEnable(GPIO_PORTJ_BASE, GPIO_INT_PIN_1);
    MAP_IntEnable(INT_GPIOJ);//打开GPIOJ中断,关于总中断的寄存器写法我没有找到,直接用driverlib库里的即可,也挺便捷的。
}
void led_init(){
    GPION->DIR|=BIT1+BIT0;//D1,D2 light on
    GPION->DEN|=BIT1+BIT0;
}

/*
中断函数,J口触发了中断就会进去,固定函数名,其他中断函数可以参考这个命名
*/
void GPIOJ_IRQHandler(void)
{
    if (GPIOJ->RIS & BIT1){//获取中断状态,看看是不是真的触发了
        GPION->DATA ^=BIT1;
    }
    GPION->DATA ^=BIT0;
    GPIOJ->ICR |=BIT1;//清除中断标志位,不清除下次就进不来这个中断了
}

int main(void)
{

    SYSCTL->RCGCGPIO |= SYSCTL_RCGCGPIO_R12+SYSCTL_RCGCGPIO_R8;               // activate clock for Port N,J
    while((SYSCTL->RCGCGPIO & (SYSCTL_PRGPIO_R12+SYSCTL_RCGCGPIO_R8)) == 0){}; // wait for preparation of Port N,J

    key_init();
    key_interrupt_init();
    led_init();
    
    
    while(1){            // if switch is pressed, led light on

        //switch1 -> PJ0 -> control D2->PN0
        if ((GPIOJ->DATA) & BIT0)
            GPION->DATA&=~BIT0;
        else
            GPION->DATA|=BIT0;
    }
}

  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2021-10-04 13:00:11  更:2021-10-04 13:00:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 6:01:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码