This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/MSP430F5529:基本程序集中断服务例程未执行,系统暂停

Guru**** 2587365 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/620762/ccs-msp430f5529-basic-assembly-interrupt-service-routine-not-getting-executed-and-system-halts

部件号:MSP430F5529

工具/软件:Code Composer Studio

我正在尝试使用C代码来为中断服务例程使用实例代码。 我正在尝试非常基本的例子,但我无法让它们发挥作用。

这个例子只要1.1 按下了WFP针脚的按钮,就会调用中断,在ISR中,我只需要切换WFP针1.0 脚的LED。

我运行编译并运行此代码,我得到以下情况:

1) C程序执行并在无限的while循环中循环-正如预期的那样。

2)按下按钮时,程序跳转至某个位置。 指示灯未切换,拆卸时显示其当前位于地址0x44,并且正在执行的命令是JMP 0x0044。 因此,在按下按钮后,它不会恢复。

这是最基本的例子,我无法让它发挥作用。

我不知道您是否必须以某种方式告诉链接器存在interrupT.asm文件。 我刚刚创建了一个新的文件I代码编写器工作室。

为什么会发生这种情况?

感谢你的帮助。

下面是C代码:(main.c)

#include <MSP430-h>

int main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗计时器
P1DIR || BIT0; //将WFP 1.0 设置为输出方向-> LED
P1REN |= BIT1; //启用WFP 1.1 内部电阻
P1OUT |= BIT1; //将WFP 1.1 设置为防拉电阻
P1IES |= BIT1; // WFP 1.1 Hi-Lo edge
P1IFG &=~BIT1; //粮农组织1.1 IFG已清除
P1IE |= BIT1; //已启用WFP 1.1 中断

__bis_sr_register (GIE); //启用中断
While (1);
} 

下面是组件:(interrup.asm-)

		.cdecls C,list,"msp430f5529.h"

			.text
Port_1		XOR.b #001h,P1OUT
			mov.b #0h,P1IFG

			.sect		.int47
			.short		Port_1

		.end 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Arijan,

    请尝试在您的主要功能中添加"__set_sp_register"吗?

    此致
    KC
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    编译器自动生成要从函数返回的代码。 汇编程序不能。

    中断处理程序缺少RETI指令。