工具/软件:Code Composer Studio
我正在使用具有CCS的MSP430G2553启动板。 我在端口1引脚3上使用S2导致MCU中断。
我将代码写在下面。
#include "msp430g2231.h"//包含寄存器和内置函数 的所有定义int main(void)//主程序 { WDTCTL = WDTPW + WDTHOLD;//停止看门狗计时器 P1DIR |= BIT0;//将WFP 1.0 设置为输出,并将WFP 1.3 设置为输入方向 P1OUT =~BIT0;//将LED设置为OFF P1IE |= BIT3;//启用WFP 1.3 中断 P1IES = BIT3;//中断由高到低 P1IFG &=~BIT3;//已清除WFP 1.3 中断标志 __bis_sr_register(GIE);//启用所有中断(清除SR中的GIE) 而(1)//永久循环,我们将在中断例程中完成我们的工作... {} #pragma vector=Port1_vector __interrupt void Port_1 (void){ P1OUT ^= BIT0;//切换WFP 1.0 P1IFG &=~BIT3;//已清除WFP 1.3 中断标志 }
此问题的目的是正确理解 #pragma vector=Port1_vector 线
我现在从下面的数据表中粘贴一段摘录,
因此,必须具有ISR地址的位置应为0FFE4H。 但我不会在CCS环境中找到执行此操作的位置。
但是,我注意到,如果我只写2而不是 Port1_vector,我的代码就会正常工作。 下面是Msp430g2553标题的摘录,我在其中查看Port1_vector的内容。 我觉得它的定义有点奇怪,在这个意义上,很难理解。 如果能够更详细地解释以下#defines的用法,我将不胜感激。
我的程序在我只使用#define Port1_vector 2时就能工作。
首先 ,我想知道为什么#define Port1_vector 2 没有写在这里。 我可以观察到".int02"。 可能是整数2? 如果是这样,为什么头文件会以这种方式专门提到#define而不简单地说 #define Port1_vector 2? 我想知道这个原因。 非常感谢您在那里的善意解释。
其次, 与 所有中断源相关的矢量编号列表在哪里? 在这种情况下,端口1的中断值为2,但在该代码的某个位置,必须将ISR的实际内存地址写入内存位置0FFE4H。 否则,当触发中断时,MCU将不会知道将其定向到ISR。 我想在这里看到此代码。 我在头文件中找不到此实现。
衷心感谢您的所有回答和时间。