当我使用汇编语言对MSP430FR4133板进行编程以打开LED时,我看到了一些非常奇怪的行为。
运行装配程序时,LED不会亮起。
问题在于,当我运行一个简单的C程序时,LED亮起,它就像我编程一样工作。
现在,如果我回去运行装配程序,LED将会亮起!但如果我停止程序并重新启动程序,LED将不再重新打开。
有什么想法可能会发生这种奇怪的行为吗?
这是我正在使用的汇编代码:
;MSP430 Assembler Code Template for use with TI Code Composer Studio
.cdecls C,LIST,"msp430fr4133.h" ; Include device header file
.def RESET
.text ; Assemble into program memory.
.retain ; Override ELF conditional linking
; and retain current section.
.retainrefs ; And retain any sections that have
; references to current section.
RESET mov.w #__STACK_END,SP ; Initialize stackpointer
StopWDT mov.w #WDTPW|WDTHOLD,&WDTCTL ; Stop watchdog timer
mov.w #0x0001,&P1OUT
mov.b #0x0001,&P1DIR
; Main loop here
InfLoop:
jmp InfLoop
NOP
.global __STACK_END
.sect .stack
; Interrupt Vectors
.sect ".reset" ; MSP430 RESET Vector
.short RESET
这是我在电路板上运行的C代码:
#include <msp430fr4133.h>
int main(void)
{
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode
WDTCTL = WDTPW | WDTHOLD; // Stop the watchdog timer
P1DIR = 0x01;
P4DIR = 0x01;
P1OUT = 0x01;
P4OUT = 0x01;
for(;;)
{
}
return (0);
}
答案 0 :(得分:0)
C代码有:
PM5CTL0 &= ~LOCKLPM5; // Disable the GPIO power-on default high-impedance mode
汇编程序代码中缺少此初始化;没有它,其他任何引脚配置设置都不会生效。
答案 1 :(得分:0)
请参阅LPSP5(低功耗模式)的MSP430用户指南。典型的asm示例:
...
StopWDT mov.w #WDTPW+WDTHOLD,&WDTCTL ; Stop WDT
SetupGPIO bis.b #BIT0,&P1DIR
bis.b #BIT0,&P1OUT
UnlockGPIO bic.w #LOCKLPM5,&PM5CTL0 ; Disable the GPIO power-on default
; high-impedance mode to activate
; previously configured port settings
...