Assembly 看门狗中断在汇编中如何工作

Assembly 看门狗中断在汇编中如何工作,assembly,watchdog,Assembly,Watchdog,我试图解释下面TI MSP 430的汇编代码。当我在我的调试器中一步一步地通过这些行时,子例程“beep02”继续循环一段时间,我不知道它的起源,然后它突然跳入“WDT_ISR”子例程 我的假设是,看门狗中断服务在“狗吠”时被调用,将从循环中正常运行的代码中获取程序,并在WDT_ISR中前进。这是正确的吗 .title "morse.asm" ;*******************************************************************

我试图解释下面TI MSP 430的汇编代码。当我在我的调试器中一步一步地通过这些行时,子例程“beep02”继续循环一段时间,我不知道它的起源,然后它突然跳入“WDT_ISR”子例程

我的假设是,看门狗中断服务在“狗吠”时被调用,将从循环中正常运行的代码中获取程序,并在WDT_ISR中前进。这是正确的吗

        .title  "morse.asm"
;*******************************************************************************
;     Project:  morse.asm
;      Author:  Spencer Gardner
;
; Description:  Outputs a message in Morse Code using a LED and a transducer
;               (speaker).  The watchdog is configured as an interval timer.
;               The watchdog interrupt service routine (ISR) toggles the green
;               LED every second and pulse width modulates (PWM) the speaker
;               such that a tone is produced.
;
;   Revisions:
;
;              RBX430-1                                    eZ430 Rev C
;              OPTION A                                     OPTION B
;           .------------.                               .------------.
;     SW1-->|P1.0^   P3.0|-->LCD_A0         (RED) LED<--|P1.0     P3.0|-->LCD_RST
;     SW2-->|P1.1^   P3.1|<->SDA          (GREEN) LED<--|P1.1     P3.1|<->SDA
;     SW3-->|P1.2^   P3.2|-->SCL                   NC-->|P1.2     P3.2|-->SCL
;     SW4-->|P1.3^   P3.3|-->LCD_RW                NC-->|P1.3     P3.3|-->LED_3 (Y)
;    INT1-->|P1.4    P3.4|-->LED_5 (GREEN)         NC-->|P1.4     P3.4|<--NC
;    INTA-->|P1.5    P3.5|<--RX                    NC-->|P1.5     P3.5|<--NC
;    SVO1<--|P1.6    P3.6|<--RPOT                  NC-->|P1.6     P3.6|<--NC
;    SVO2<--|P1.7    P3.7|<--LPOT                  NC-->|P1.7     P3.7|<--NC
;           |            |                              |             |
;  LCD_D0<->|P2.0    P4.0|-->LED_1 (G)           SW_1-->|P2.0^    P4.0|<--NC
;  LCD_D1<->|P2.1    P4.1|-->LED_2 (O)           SW_2-->|P2.1^    P4.1|<--NC
;  LCD_D2<->|P2.2    P4.2|-->LED_3 (Y)           SW_3-->|P2.2^    P4.2|<--NC
;  LCD_D3<->|P2.3    P4.3|-->LED_4 (R)           SW_4-->|P2.3^    P4.3|<--RPOT
;  LCD_D4<->|P2.4    P4.4|-->LCD_BL            LCD_BL<--|P2.4     P4.4|<--LPOT
;  LCD_D5<->|P2.5    P4.5|-->SPEAKER               NC-->|P2.5     P4.5|-->SPEAKER
;  LCD_D6<->|P2.6    P4.6|-->LED_6 (RED)    (G) LED_1<--|P2.6     P4.6|-->LED_4 (R)
;  LCD_D7<->|P2.7    P4.7|-->LCD_E          (O) LED_2<--|P2.7     P4.7|<--NC
;           .------------.                               .------------.
;
;*******************************************************************************
            .cdecls C,LIST,"msp430.h"       ; include c header

;------------------------------------------------------------------------------
;   System equates
myCLOCK     .equ    1200000                 ; 1.2 Mhz clock
WDT_CTL     .equ    WDT_MDLY_0_5            ; WD configuration (Timer, SMCLK, 0.5 ms)
WDT_CPI     .equ    500                     ; WDT Clocks Per Interrupt (@1 Mhz)
WDT_IPS     .equ    myCLOCK/WDT_CPI         ; WDT Interrupts Per Second
STACK       .equ    0x0600                  ; top of stack

;------------------------------------------------------------------------------
;   External references
            .ref    numbers                 ; codes for 0-9
            .ref    letters                 ; codes for A-Z

;  numbers--->N0$--->DASH,DASH,DASH,DASH,DASH,END      ; 0
;             N1$--->DOT,DASH,DASH,DASH,DASH,END       ; 1
;             ...
;             N9$--->DASH,DASH,DASH,DASH,DOT,END       ; 9
;
;  letters--->A$---->DOT,DASH,END                      ; A
;             B$---->DASH,DOT,DOT,DOT,END              ; B
;             ...
;             Z$---->DASH,DASH,DOT,DOT,END             ; Z

;   Morse code is composed of dashes and dots, or phonetically, "dits" and "dahs".
;   There is no symbol for a space in Morse, though there are rules when writing them.

;   1. One dash is equal to three dots
;   2. The space between parts of the letter is equal to one dot
;   3. The space between two letters is equal to three dots
;   4. The space between two words is equal to seven dots.

;   5 WPM = 60 sec / (5 * 50) elements = 240 milliseconds per element.
;   element = (WDT_IPS * 6 / WPM) / 5

;   Morse Code equates
ELEMENT     .equ    WDT_IPS*240/1000

;------------------------------------------------------------------------------
;   Global variables                        ; RAM section
            .bss    beep_cnt,2              ; beeper flag
            .bss    delay_cnt,2             ; delay flag

;------------------------------------------------------------------------------
;   Program section
            .text                           ; program section
message:    .string "HELLO CS 124 WORLD"                 ; PARIS message
            .byte   0
            .align  2                       ; align on word boundary

RESET:      mov.w   #STACK,SP               ; initialize stack pointer
            mov.w   #WDT_CTL,&WDTCTL        ; set WD timer interval
            mov.b   #WDTIE,&IE1             ; enable WDT interrupt
            bis.b   #0x20,&P4DIR            ; set P4.5 as output (speaker)
            clr.w   beep_cnt                ; clear counters
            clr.w   delay_cnt
            bis.w   #GIE,SR                 ; enable interrupts

;   output 'A' in morse code
loop:       mov.w   #ELEMENT,r15            ; output DOT
            call    #beep
            mov.w   #ELEMENT,r15            ; delay 1 element
            call    #delay

            mov.w   #ELEMENT*3,r15          ; output DASH
            call    #beep
            mov.w   #ELEMENT,r15            ; delay 1 element
            call    #delay

            mov.w   #ELEMENT*3,r15          ; output DASH
            call    #beep
            mov.w   #ELEMENT,r15            ; delay 1 element
            call    #delay

            mov.w   #ELEMENT*7,r15          ; output space
            call    #delay                  ; delay
            jmp     loop                    ; repeat

;   beep r15 ticks of the watchdog timer
beep:       mov.w   r15,beep_cnt            ; start beep

beep02:     tst.w   beep_cnt                ; beep finished?
              jne   beep02                  ; n
            ret                             ; y

;   delay r15 ticks of the watchdog timer
delay:      mov.w   r15,delay_cnt           ; start delay

delay02:    tst.w   delay_cnt               ; delay done?
              jne   delay02                 ; n
            ret                             ; y

;------------------------------------------------------------------------------
;   Watchdog Timer interrupt service routine
;
WDT_ISR:    tst.w   beep_cnt                ; beep on?
              jeq   WDT_02                  ; n
            dec.w   beep_cnt                ; y, decrement count
            xor.b   #0x20,&P4OUT            ; beep using 50% PWM

WDT_02:     tst.w   delay_cnt               ; delay?
              jeq   WDT_10                  ; n
            dec.w   delay_cnt               ; y, decrement count

WDT_10:     reti                            ; return from interrupt

;------------------------------------------------------------------------------
;           Interrupt Vectors
;------------------------------------------------------------------------------
            .sect   ".int10"                ; Watchdog Vector
            .word   WDT_ISR                 ; Watchdog ISR

            .sect   ".reset"                ; PUC Vector
            .word   RESET                   ; RESET ISR
            .end
.title“morse.asm”
;*******************************************************************************
;     项目名称:morse.asm
;      作者:斯宾塞·加德纳
;
; 描述:使用LED和传感器输出莫尔斯电码信息
;               (发言者)。看门狗配置为间隔计时器。
;               看门狗中断服务程序(ISR)切换为绿色
;               LED每秒和脉冲宽度调制(PWM)扬声器
;               这样就产生了一种音调。
;
;   修订:
;
;              RBX430-1 eZ430版本C
;              方案A和方案B
;           .------------.                               .------------.
;     SW1-->P1.0^P3.0-->LCD|A0(红色)LED LCD|RST
;     SW2-->P1.1^P3.1 | SDA(绿色)LED | P1.2^P3.2 |-->SCL NC-->P1.2 P3.2 |-->SCL
;     SW4-->P1.3^P3.3-->LCD|RW NC-->P1.3 P3.3-->LED|3(Y)
;    INT1-->| P1.4 P3.4 |-->LED|U 5(绿色)NC-->| P1.4 P3.4 | P1.5 P3.5 | P1.5 P3.5 | P2.3 ^ P4.3 | LCD | U BL LCD | P2.5 P4 5 |-->扬声器
;  LCD|D6 | P2.6 P4.6 |-->LED|6(红色)(G)LED|1LED|4(R)
;  LCD|D7 | P2.7 P4.7 |-->LCD|E(O)LED|u 2DASH,破折号,破折号,破折号,破折号,结束;0
;             N1$-->点,破折号,破折号,破折号,破折号,结束;1.
;             ...
;             N9$-->破折号,破折号,破折号,破折号,点,结束;9
;
;  字母---->A$--->点、破折号、结尾;A.
;             破折号,点,点,点,结束;B
;             ...
;             Z$--->破折号,破折号,圆点,圆点,结束;Z
;   莫尔斯电码由破折号和圆点组成,或者从语音上说是“dits”和“dahs”。
;   莫尔斯电码中没有空格符号,尽管在书写时有规则。
;   1.一个破折号等于三个点
;   2.字母各部分之间的间距等于一个点
;   3.两个字母之间的间距等于三个点
;   4.两个单词之间的空格等于七个点。
;   5 WPM=60秒/(5*50)元素=每个元素240毫秒。
;   元素=(WDT_IPS*6/WPM)/5
;   摩尔斯电码等于
元件。等效WDT_IPS*240/1000
;------------------------------------------------------------------------------
;   全局变量;闸板段
.bss哔哔声,2;寻呼机标志
.bss延迟,2;延迟标志
;------------------------------------------------------------------------------
;   节目组
.文本;节目组
消息:。字符串“HELLO CS 124 WORLD”;巴黎消息
.字节0
.2;在单词边界上对齐
重置:mov.w#堆栈,SP;初始化堆栈指针
电影w#WDT#U CTL和WDTCTL;设置WD定时器间隔
电影b#WDTIE和IE1;启用WDT中断
bis.b#0x20和P4DIR;将P4.5设置为输出(扬声器)
clr.w蜂鸣器;清除计数器
clr.w延迟
之二.w#GIE,SR;启用中断
;   莫尔斯电码输出“A”
回路:mov.w#元素,r15;输出点
呼叫#嘟嘟声
mov.w#元素,r15;延迟1元件
呼叫延迟
mov.w#元素*3,r15;输出短跑
呼叫#嘟嘟声
mov.w#元素,r15;延迟1元件
呼叫延迟
mov.w#元素*3,r15;输出短跑
呼叫#嘟嘟声
mov.w#元素,r15;延迟1元件
呼叫延迟
mov.w#元素*7,r15;输出空间
呼叫延迟;延迟
jmp环;重复
;   看门狗定时器发出r15滴答声
嘟嘟声:移动带r15,嘟嘟声;开始嘟嘟声
beep02:tst.w beep_cnt;嘟嘟声结束了吗?
jne-02;N
ret;Y
;   延迟看门狗定时器的r15滴答声
延迟:mov.w r15,延迟时间;启动延迟
delay02:tst.w delay\u cnt;延迟完成了吗?
jne-delay02;N
ret;Y
;------------------------------------------------------------------------------
;   看门狗定时器中断服务程序
;
WDT_ISR:tst.w beep_cnt;接通?
jeq WDT_02;N
12月w日哔哔声;y、 递减计数
xor.b#0x20,&P4OUT;使用50%PWM发出嘟嘟声
WDT_02:tst.w延迟_cnt;延迟
jeq WDT_10;N
12月w日延迟时间;y、 递减计数
WDT_10:reti;中断返回
;------------------------------------------------------------------------------
;           中断向量
;------------------------------------------------------------------------------
“int10”节;看门狗向量
.单词WDT_ISR;监督机构
.sect“.reset”;PUC向量
沃尔先生