美文网首页
MSP430学习笔记 3.按键中断

MSP430学习笔记 3.按键中断

作者: 浮生一城 | 来源:发表于2017-06-04 16:13 被阅读0次

按键中断的一个小尝试

@Board: MSP-EXP430F5529
@Keys: S1(P1.7) S2(P2.2)
@LEDs: LED2(P8.1) LED3(P8.2)

  1. 电路原理图如下


    image.png
  2. 关于MSP430的GPIO
  • 在所有GPIO中,仅有P1.x和P2.x可以被配置为GPIO中断
  • 所有GPIO均可被独立配置为输出/输入模式,以及高低电平等
  1. 实验中用的硬件配置
  • 若P1.7和P2.2为高电平输出,则按键按下后,其电平瞬间被拉低,可据此检测按键是否按下
  • 中断触发方式可选上升沿触发和下降沿触发,这里选择下降沿触发,即按键按下触发而非按下弹起触发
  • LED2和LED3需要P8.1和P8.2输出高电平才能点亮,故设置P8.x为高电平输出
  1. 中断向量
  • MSP430的所有中断向量均可在"MSP430xxxx.h"中找到,这里使用PORT1_VECTOR和PORT2_VECTOR
  • 当进入中断时,P8.x的输出电平被反转,实现LED的闪动
  1. 中断函数的一般形式和注意事项
//module interrput vector
#pragma vector = xxxx_VECTOR
__interrupt void my_function(void)
{
      //Some operations
      //end
}
  • 进入中断函数后默认关闭总中断,此时可以使用__enable_interrupt()函数再次开启总中断以便进行中断嵌套
  • 中断函数前必须有__interrupt标识,否则会被当成普通函数处理
  • MSP430的中断优先级和中断向量的大小有关
  • 其他模块的中断函数的设置类似于GPIO中断
  • 这里用的中断向量在"msp430f5529.h"头文件中均有定义
  1. 实验代码
#include "driverlib.h"
int main(void)
{
    //Enable all of interrupts
    __enable_interrupt();
    WDTCTL = WDTPW | WDTHOLD;   // Stop watchdog timer
    //Enable the GPIO interrupt
    GPIO_enableInterrupt(GPIO_PORT_P1, GPIO_PIN7);
    GPIO_enableInterrupt(GPIO_PORT_P2, GPIO_PIN2);
    //Set GPIO which keys use as out & high level
    GPIO_setAsOutputPin(GPIO_PORT_P1, GPIO_PIN7);
    GPIO_setAsOutputPin(GPIO_PORT_P2, GPIO_PIN2);  
    GPIO_setOutputHighOnPin(GPIO_PORT_P1, GPIO_PIN7);
    GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN2);
    //Set GPIO which LEDs use as out & high level
    GPIO_setAsOutputPin(GPIO_PORT_P8, GPIO_PIN1 + GPIO_PIN2);
    GPIO_setOutputHighOnPin(GPIO_PORT_P8, GPIO_PIN1 + GPIO_PIN2);  
    //Select interrupt trigger as high level to low level
    GPIO_selectInterruptEdge(GPIO_PORT_P1, GPIO_PIN7, GPIO_HIGH_TO_LOW_TRANSITION);
    GPIO_selectInterruptEdge(GPIO_PORT_P2, GPIO_PIN2, GPIO_HIGH_TO_LOW_TRANSITION);
    //Clear the flag of GPIO interrupt
    GPIO_clearInterrupt(GPIO_PORT_P1, GPIO_PIN7);
    GPIO_clearInterrupt(GPIO_PORT_P2, GPIO_PIN2);
}
/*******************************************************************************************
 * @brief   interrupt(P1.7) for toggle LED(P8.1)
 * @vector  PORT1_VECTOR
 * @func    PORT1()
 * @param   None
 * @return  None
*******************************************************************************************/
#pragma vector = PORT1_VECTOR
__interrupt void PROT1(void)
{
    GPIO_toggleOutputOnPin(GPIO_PORT_P8, GPIO_PIN1);
    GPIO_clearInterrupt(GPIO_PORT_P1, GPIO_PIN7);
}
/*******************************************************************************************
 * @brief   interrupt(P2.2) for toggle LED(P8.2)
 * @vector  PORT2_VECTOR
 * @func    PORT2()
 * @param   None
 * @return  None
*******************************************************************************************/
#pragma vector = PORT2_VECTOR
__interrupt void PORT2(void)
{
    GPIO_toggleOutputOnPin(GPIO_PORT_P8, GPIO_PIN2);
    GPIO_clearInterrupt(GPIO_PORT_P2, GPIO_PIN2);
}

相关文章

  • MSP430学习笔记 3.按键中断

    按键中断的一个小尝试 @Board: MSP-EXP430F5529@Keys: S1(P1.7) S2(P2...

  • FreeRTOS学习笔记(12)——按键中断

    一、简介 在 FreeRTOS 下实现按键中断可以有两种方法: 通过事件的触发和等待:可以实现一对多,多对多的同步...

  • Linux input子系统框架--Apple的学习笔记

    按键中断解决irq_of_parse_and_map返回0的问题--Apple的学习笔记我为了复习相关函数和io模...

  • 按键中断

    看见了EA=1,是不是很熟悉呢?就是8051的核。学习完51单片的同学还挺适合学习这个CC254X,然后可以入门蓝牙。

  • 12/15

    今天学习了用开关2控制蜂鸣器的响声,按键控制蜂鸣器利用中断。中断调用子函数。

  • 按键查询和按键中断

    代码下载地址: https://download.csdn.net/download/qq_31806069/12...

  • 18.1.4

    讲了矩阵按键 中断的方式

  • L17. 按键标准驱动使用实例

    1. 简介 在学习字符驱动的过程中,实现过按键驱动。实现功能:按键在按下时,会触发中断然后给应用层上报按键的状态。...

  • 2017年11月30日学习总结

    今天上午还是继续学习项目中的。按键中断部分,通过按键,进去不同的事件。再通过switch case在不用状态下响应...

  • 按键与中断处理

    NVIC中断工作原理 cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断。stm32中...

网友评论

      本文标题:MSP430学习笔记 3.按键中断

      本文链接:https://www.haomeiwen.com/subject/csnvfxtx.html