这一段宏定义位于 msp430f5529.h 的最后面
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define RTC_VECTOR ".int41" /* 0xFFD2 RTC */
#else
#define RTC_VECTOR (41 * 1u) /* 0xFFD2 RTC */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define PORT2_VECTOR ".int42" /* 0xFFD4 Port 2 */
#else
#define PORT2_VECTOR (42 * 1u) /* 0xFFD4 Port 2 */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER2_A1_VECTOR ".int43" /* 0xFFD6 Timer2_A5 CC1-4, TA */
#else
#define TIMER2_A1_VECTOR (43 * 1u) /* 0xFFD6 Timer2_A5 CC1-4, TA */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER2_A0_VECTOR ".int44" /* 0xFFD8 Timer2_A5 CC0 */
#else
#define TIMER2_A0_VECTOR (44 * 1u) /* 0xFFD8 Timer2_A5 CC0 */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define USCI_B1_VECTOR ".int45" /* 0xFFDA USCI B1 Receive/Transmit */
#else
#define USCI_B1_VECTOR (45 * 1u) /* 0xFFDA USCI B1 Receive/Transmit */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define USCI_A1_VECTOR ".int46" /* 0xFFDC USCI A1 Receive/Transmit */
#else
#define USCI_A1_VECTOR (46 * 1u) /* 0xFFDC USCI A1 Receive/Transmit */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define PORT1_VECTOR ".int47" /* 0xFFDE Port 1 */
#else
#define PORT1_VECTOR (47 * 1u) /* 0xFFDE Port 1 */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER1_A1_VECTOR ".int48" /* 0xFFE0 Timer1_A3 CC1-2, TA1 */
#else
#define TIMER1_A1_VECTOR (48 * 1u) /* 0xFFE0 Timer1_A3 CC1-2, TA1 */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER1_A0_VECTOR ".int49" /* 0xFFE2 Timer1_A3 CC0 */
#else
#define TIMER1_A0_VECTOR (49 * 1u) /* 0xFFE2 Timer1_A3 CC0 */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define DMA_VECTOR ".int50" /* 0xFFE4 DMA */
#else
#define DMA_VECTOR (50 * 1u) /* 0xFFE4 DMA */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define USB_UBM_VECTOR ".int51" /* 0xFFE6 USB Timer / cable event / USB reset */
#else
#define USB_UBM_VECTOR (51 * 1u) /* 0xFFE6 USB Timer / cable event / USB reset */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_A1_VECTOR ".int52" /* 0xFFE8 Timer0_A5 CC1-4, TA */
#else
#define TIMER0_A1_VECTOR (52 * 1u) /* 0xFFE8 Timer0_A5 CC1-4, TA */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_A0_VECTOR ".int53" /* 0xFFEA Timer0_A5 CC0 */
#else
#define TIMER0_A0_VECTOR (53 * 1u) /* 0xFFEA Timer0_A5 CC0 */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define ADC12_VECTOR ".int54" /* 0xFFEC ADC */
#else
#define ADC12_VECTOR (54 * 1u) /* 0xFFEC ADC */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define USCI_B0_VECTOR ".int55" /* 0xFFEE USCI B0 Receive/Transmit */
#else
#define USCI_B0_VECTOR (55 * 1u) /* 0xFFEE USCI B0 Receive/Transmit */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define USCI_A0_VECTOR ".int56" /* 0xFFF0 USCI A0 Receive/Transmit */
#else
#define USCI_A0_VECTOR (56 * 1u) /* 0xFFF0 USCI A0 Receive/Transmit */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define WDT_VECTOR ".int57" /* 0xFFF2 Watchdog Timer */
#else
#define WDT_VECTOR (57 * 1u) /* 0xFFF2 Watchdog Timer */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_B1_VECTOR ".int58" /* 0xFFF4 Timer0_B7 CC1-6, TB */
#else
#define TIMER0_B1_VECTOR (58 * 1u) /* 0xFFF4 Timer0_B7 CC1-6, TB */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define TIMER0_B0_VECTOR ".int59" /* 0xFFF6 Timer0_B7 CC0 */
#else
#define TIMER0_B0_VECTOR (59 * 1u) /* 0xFFF6 Timer0_B7 CC0 */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define COMP_B_VECTOR ".int60" /* 0xFFF8 Comparator B */
#else
#define COMP_B_VECTOR (60 * 1u) /* 0xFFF8 Comparator B */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define UNMI_VECTOR ".int61" /* 0xFFFA User Non-maskable */
#else
#define UNMI_VECTOR (61 * 1u) /* 0xFFFA User Non-maskable */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define SYSNMI_VECTOR ".int62" /* 0xFFFC System Non-maskable */
#else
#define SYSNMI_VECTOR (62 * 1u) /* 0xFFFC System Non-maskable */
#endif
#ifdef __ASM_HEADER__ /* Begin #defines for assembler */
#define RESET_VECTOR ".reset" /* 0xFFFE Reset [Highest Priority] */
#else
#define RESET_VECTOR (63 * 1u) /* 0xFFFE Reset [Highest Priority] */
#endif
使用方法
下面的例程是端口2的 P2.1 按键的中断处理函数
#pragma vector = PORT2_VECTOR
__interrupt void Key(void)
{
switch (P2IV)
{
case P2IV_P2IFG1:
{
break;
}
default:
break;
}
return;
}
以下是 PORT2 的中断标志寄存器的宏定义,所有中断源共用一个中断向量 PORT2_VECTOR ,所以要在中断处理函数中读取中断标志寄存器 P2IV 的值来确定是哪个按键引起中断。
//Definitions for P2IV
#define P2IV_NONE (0x0000) /* No Interrupt pending */
#define P2IV_P2IFG0 (0x0002) /* P2IV P2IFG.0 */
#define P2IV_P2IFG1 (0x0004) /* P2IV P2IFG.1 */
#define P2IV_P2IFG2 (0x0006) /* P2IV P2IFG.2 */
#define P2IV_P2IFG3 (0x0008) /* P2IV P2IFG.3 */
#define P2IV_P2IFG4 (0x000A) /* P2IV P2IFG.4 */
#define P2IV_P2IFG5 (0x000C) /* P2IV P2IFG.5 */
#define P2IV_P2IFG6 (0x000E) /* P2IV P2IFG.6 */
#define P2IV_P2IFG7 (0x0010) /* P2IV P2IFG.7 */