MSP430学习笔记 3.按键中断

2017-06-04  本文已影响0人  浮生一城

按键中断的一个小尝试

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

  1. 电路原理图如下


    image.png
  2. 关于MSP430的GPIO
  1. 实验中用的硬件配置
  1. 中断向量
  1. 中断函数的一般形式和注意事项
//module interrput vector
#pragma vector = xxxx_VECTOR
__interrupt void my_function(void)
{
      //Some operations
      //end
}
  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);
}
上一篇下一篇

猜你喜欢

热点阅读