TI中文支持网
TI专业的中文技术问题搜集分享网站

MSP430FR6972

我的贴子发出来很久了没有TI的工程师帮我回复解决关于用MSP430FR6972芯片及汇编语言编写程序在调试时遇到的问题,中断程序中无法跳出的问题,不知道怎样才能寻求到TI技术支持?产品延期很久了,因为是为了降低成本从MSP430F423芯片改用芯片FR6972,原来是汇编写的,在原来的基础上不想太多的改动,所以还是用汇编修改的,现在改C语言重写要花费很久时间,不知道咋办?
下面是简单的汇编实例,单步运行可以看到中断时事无法跳出中断程序的?

#include "msp430fr6972.h"
;——————————————————————————-
            RSEG    CSTACK                  ; Define stack segment
;——————————————————————————-
            RSEG    CODE
;——————————————————————————-
RESET         mov.w   #SFE(CSTACK),SP         ; Initialize stackpointer
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
                     mov.w   #CCIE,&TB0CCTL0         ; TBCCR0 interrupt enabled
                     mov.w   #50000,&TB0CCR0
                     mov.w   #TBSSEL__SMCLK+MC__UP,&TB0CTL ; SMCLK, UP mode
                      NOP
                     EINT
           //            bis.w   #LPM0+GIE,SR            ; Enter LPM0 w/ interrupt
                      nop
MAIN:
            CALL        #DELAY_100mS
            JMP         MAIN
;————————————————–           DELAY_100mS:
            MOV       #0100H,R6
DELAY_100mSLoop:                       DEC       R6
            JNZ       DELAY_100mSLoop
            RET           ;——————————————————————————
TIMER0_B0_ISR;    Timer0_B7 CC0 Interrupt Service Routine
;——————————————————————————
            xor.b   #BIT0,&P1OUT
            reti
;——————————————————————————-
            COMMON  INTVEC                  ; Interrupt Vectors
;——————————————————————————-
            ORG     RESET_VECTOR            ; Reset Vector
            DW      RESET
            ORG     TIMER0_B0_VECTOR        ; Timer0_B7 CC0 Interrupt Vector
            DW      TIMER0_B0_ISR
            END

灰小子:

不是ti的工程师,对汇编表示无能为力。

建议先找一个官网的例程运行下,应该可以看到中间生成的汇编代码,你可以参考下

user3883938:

回复 灰小子:

谢谢你的回复,附加的例程就是TI官网的例子,只是修改了下进入中断时不是在睡眠状态。

Susan Yang:

回复 user3883938:

nopMAIN: CALL #DELAY_100mSJMP MAIN

There seems to be a mismatch between naming conventions specifically focusing on nopMAIN and MAIN, since there is no section of the code actually labeled MAIN I imagine that the JMP MAIN command fails to successfully loop as desired therefore the interrupt does not return where expected.

user3883938:

回复 Susan Yang:

Susan Yang,

   谢谢你的回复,
nopMAIN: 

               CALL #DELAY_100mS               JMP MAIN

这里是我复制错误,我原sourse           #include "msp430fr6972.h"
;——————————————————————————-
            RSEG    CSTACK                  ; Define stack segment
;——————————————————————————-
            RSEG    CODE
;——————————————————————————-
RESET       mov.w   #SFE(CSTACK),SP         ; Initialize stackpointer
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
            mov.w   #CCIE,&TB0CCTL0         ; TBCCR0 interrupt enabled
            mov.w   #50000,&TB0CCR0
            mov.w   #TBSSEL__SMCLK+MC__UP,&TB0CTL ; SMCLK, UP mode
            NOP
            EINT
            nop
//            bis.w   #LPM0+GIE,SR            ; Enter LPM0 w/ interrupt
           
MAIN:
            CALL        #DELAY_100mS
            JMP         MAIN
;————————————————–            
DELAY_100mS:
            MOV       #0100H,R6
DELAY_100mSLoop:            
            DEC       R6
            JNZ       DELAY_100mSLoop
            RET            
;——————————————————————————
TIMER0_B0_ISR;    Timer0_B7 CC0 Interrupt Service Routine
;——————————————————————————
            xor.b   #BIT0,&P1OUT
            reti
;——————————————————————————-
            COMMON  INTVEC                  ; Interrupt Vectors
;——————————————————————————-
            ORG     RESET_VECTOR            ; Reset Vector
            DW      RESET
            ORG     TIMER0_B0_VECTOR        ; Timer0_B7 CC0 Interrupt Vector
            DW      TIMER0_B0_ISR
            END
这例子是演示说明进入TIMER0_B0_ISR中断后就不能出来,我开发的产品程序代码太大,不能复制这里,但是出现问题是一样的进入定时中断里就不能出来。

赞(0)
未经允许不得转载:TI中文支持网 » MSP430FR6972
分享到: 更多 (0)