MSP430F5529使用库函数后如何编写中断函数
[复制链接]
代码
#include "driverlib.h"
void main (void)
{
//Stop watchdog timer
WDT_A_hold(WDT_A_BASE);
//Set P1.0 to output direction
GPIO_setAsOutputPin(
GPIO_PORT_P1,
GPIO_PIN0
);
//Enable P1.4 internal resistance as pull-Up resistance
GPIO_setAsInputPinWithPullUpResistor(
GPIO_PORT_P1,
GPIO_PIN4
);
//P1.4 interrupt enabled
GPIO_enableInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
//P1.4 Hi/Lo edge
GPIO_selectInterruptEdge(
GPIO_PORT_P1,
GPIO_PIN4,
GPIO_HIGH_TO_LOW_TRANSITION
);
//P1.4 IFG cleared
GPIO_clearInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
//Enter LPM4 w/interrupt
__bis_SR_register(LPM4_bits + GIE);
//For debugger
__no_operation();
}
//******************************************************************************
//
//This is the PORT1_VECTOR interrupt vector service routine
//
//******************************************************************************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT1_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(PORT1_VECTOR)))
#endif
void Port_1 (void)
{
//P1.0 = toggle
GPIO_toggleOutputOnPin(
GPIO_PORT_P1,
GPIO_PIN0
);
//P1.4 IFG cleared
GPIO_clearInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
}
解释
如上,中断函数仍然使用
#pragma vector=PORT1_VECTOR
void Port_1 (void)
{
//P1.0 = toggle
GPIO_toggleOutputOnPin(
GPIO_PORT_P1,
GPIO_PIN0
);
//P1.4 IFG cleared
GPIO_clearInterrupt(
GPIO_PORT_P1,
GPIO_PIN4
);
}
即预处理加上函数定义,但是和寄存器方式编程时的格式有所不同,寄存器方式的中断函数如下
#pragma vector = PORT1_VECTOR
__interrupt void Port_1(void)
{
}
可以看出,使用寄存器进行编程,中断函数要多一个 __interrupt
备注
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT1_VECTOR
__interrupt
#elif defined(__GNUC__)
__attribute__((interrupt(PORT1_VECTOR)))
#endif
这么多的宏定义我目前不知道是干嘛用的,以前是没有这么多的,只有 #pragma vector=PORT1_VECTOR 这一条,现在最好给它加上。
|