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 inputGPIOJ->PUR|=BIT0+BIT1; //Input set to pull-up resistorGPIOJ->DEN|=BIT0+BIT1; //Digital enableGPIOJ->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 onGPION->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,Jwhile((SYSCTL->RCGCGPIO & (SYSCTL_PRGPIO_R12+SYSCTL_RCGCGPIO_R8)) == 0){}; // wait for preparation of Port N,Jkey_init();key_interrupt_init();led_init();while(1){ // if switch is pressed, led light on//switch1 -> PJ0 -> control D2->PN0if ((GPIOJ->DATA) & BIT0)GPION->DATA&=~BIT0;elseGPION->DATA|=BIT0;}
}
MSP432E401Y-按键中断点灯相关推荐
- MSP430-GRACE 实战(二):按键中断
文章目录 MSP430-GRACE 实战(二):按键中断 一.开发平台 1.1 硬件平台 1.2 软件平台 二.原理分析 三.GRACE 配置 3.1 新建工程(通用步骤) 3.2 配置时钟(通用步骤 ...
- hal库开启中断关中断_[STM32]HAL库下GPIO按键中断与去抖问题分析(分析源码解决问题)...
自上篇文章STM32 非阻塞HAL_UART_ReceiveIT解析与实际应用,具体总结了HAL库下套娃函数中如何看清库函数的脉络,更细致的认识调用的过程,以解决潜在的问题.又又又遇到了新的问题(GP ...
- SOPC第四课 按键中断
按键 LED控制 开发板 小梅哥AC620 软件 quartus 13.1 2个按键,当按键0按下时,LED灯开始闪烁:当按键1按下时,LED灯停止闪烁. 使用一个PIO 这个PIO设置为6位(4个L ...
- c语言 执行free函数程序被卡住,FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...
FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法 时间:2019-08-10 14:39:47 来源: 作者: 所属栏目:其他服务端 这里将告诉您FreeRT ...
- Z-Stack通过按键中断实现长按功能
一.功能介绍 项目需要实现长按功能,实现按键有2种方式,一种是通过中断.一种KEY_CHANGE事件轮询的方式.由于中断更加的灵敏,这里选择中断的方式.意外的发现,如果开启了中断,那么按键就不会触发K ...
- 字符设备驱动(四)按键中断
目录 字符设备驱动(四)按键中断 硬件IO 程序设计 中断配置 中断关闭 中断函数 共享中断号 测试 完整的程序 title: 字符设备驱动(四)按键中断 tags: linux date: 2018 ...
- 从ARM裸机看驱动之按键中断方式控制LED(二)
硬件环境:Samsung Cortex-A9 Exynos4412 BSP 软件环境:Linux3.14 =============================================== ...
- 从ARM裸机看驱动之按键中断方式控制LED(一)
硬件环境:Samsung Cortex-A9 Exynos4412 BSP + JTAG ARM 仿真器 软件环境:Eclipse ================================== ...
- 【嵌入式】——串口实验——实现芯片串口收发数据,按键中断串口发送数据,串口接收数据中断来控制LED亮/灭
实验目的: 实现芯片串口收发数据,按键中断串口发送数据:按下按键,向串口发送数据,并通过虚拟终端显示出来: 串口接收数据中断来控制LED亮/灭:通过串口助手向MCU发送数据,"A" ...
- 应广单片机PFS123按键中断控制数码管显示例程
目录 应广单片机PFS123按键中断控制数码管显示视频 led数码管图片 应广单片机PFS123按键中断控制数码管显示代码 应广科技网址,开发工具,PMS123规格书:http://www.padau ...
最新文章
- OVS ofproto(二十三)
- (六)构建Docker私有仓库、Gitlab仓库和持续集成环境
- Js~对数组进行分组户数
- python爬虫学习(二) 简易网页爬取
- 《化工原理》基本知识点
- WPF IP地址输入控件的实现
- javascript 相关小的知识点集合
- java 摸拟qq消息提示_java 仿qq消息提示框
- 售价超16万,全球仅限8台!iPhone 13 Pro冬奥会定制版上架,18K黄金打造
- golang实现四种排序(快速,冒泡,插入,选择)
- 反卷积(Deconvolution)、上采样(UNSampling)与上池化(UnPooling)加入自己的思考(tensorflow函数)(一)
- 中心/设置地图缩放以覆盖所有可见的标记?
- java frameview_Java FrameLayout.removeView方法代码示例
- 编译出错:self-encoder.context-me_method = ME_UMH;
- win7录屏_录屏软件推荐用什么?绝地求生录屏游戏的工具分享
- 使用XPath+Chrome浏览器解析网站的数据
- Pycharm内部打不开生成的词云图,且显示Image not loaded,Try to open it externally to fix format problem,外部文件夹中图片可显示
- Revit建模软件:如何在Revit中准确放置族组件?
- 1.8 信息系统服务管理
- 三观不合,永远不会是一路人!
热门文章
- android 应用程序内存上限,Android APP的最大可用内存
- 【转】RFire系列免杀教程
- 读书笔记-TCP简介
- linux shell if参数---markx
- 用理性决策生活——《长得好看能当饭吃么》
- 【cocos shader 004】 聚光灯 灯光 烘焙 效果
- HDU 6656 Kejin Player (期望DP 逆元)
- 戴尔服务器温度显示器,选择Dell UltraSharp 27的四大理由:有温度的科技更近人心...
- python turtle画房子代码里面的窗子,如何用python画房子_用python画一个小房子
- 【chrome插件开发二】chrome常用语法汇总