fet140_fll2.s43

来自「基于IAR Workbench for MSP430 的汇编语言例程」· S43 代码 · 共 94 行

S43
94
字号
;******************************************************************************
;   MSP-FET430P140 Demo - BasicClock Implement Continous SW FLL with Auto RSEL   
;
;   Description; Set DCO clock to (Delta)*(4096) using software FLL. DCO clock 
;   is output on P1.4 as SMCLK.  DCO clock, which is the selected SMCLK source 
;   for timer_A is integrated over ACLK/8 (4096) continuously. CCR2 captures 
;   ACLK/8.  To use this SW FLL, Timer_A must be operating in continous mode 
;   with a watch crystal used for ACLK. Delta must be kept in a  range that
;   allows possible DCO speeds.  Minimum Delta must be 64 or greater  to ensure 
;   the AdjDCO ISR can complete. Maximum delta  can be calculated by 
;   f(DCOx7) / 4096.  f(DCOx7) found in device specific datasheet. To measure 
;   SMCLK on P1.4 with the FET, JTAG must be released, and the debugger stopped
;   and re-started to clear breakpoint logic.
;   ACLK = LFXT1/8 = 32768/8, MCLK = SMCLK = DCO = 4096xDelta
;   //*An external watch crystal on XIN XOUT is required for ACLK*//	  
;   
;Delta   equ   977    ; Delta = (target DCO)/(4096) = 4000000
;Delta   equ   900    ; Delta = (target DCO)/(4096) = 3686400
;Delta   equ   600    ; Delta = (target DCO)/(4096) = 2457600
;Delta   equ   256    ; Delta = (target DCO)/(4096) = 1048576
Delta   equ   250    ; Delta = (target DCO)/(4096) = 1024000
;Delta   equ   244    ; Delta = (target DCO)/(4096) = 1000000
;Delta   equ   078    ; Delta = (target DCO)/(4096) =  319488
;Delta   equ   064    ; Delta = (target DCO)/(4096) =  262144
;
;                MSP430F149
;             -----------------
;         /|\|              XIN|-  
;          | |                 | 32k
;          --|RST          XOUT|-
;            |                 |
;            |             P1.4|-->SMCLK
;
;   M.Buccini
;   Texas Instruments, Inc
;   January 2004
;******************************************************************************
#include  "msp430x14x.h"
;------------------------------------------------------------------------------ 
            ORG     01100h                  ; Progam Start 
;------------------------------------------------------------------------------ 
RESET       mov.w   #0A00h,SP               ; Initialize 'x1x9 stackpointer
StopWDT     mov.w   #WDTPW+WDTHOLD,&WDTCTL  ; Stop WDT
SetupP1     bis.b   #010h,&P1DIR            ; P1.4 output
            bis.b   #010h,&P1SEL            ; P1.4 SMCLK output
SetupBC     bis.b   #DIVA_3,&BCSCTL1        ; ACLK = LFXT1CLK/8 
Setup_CC2   mov.w   #CM_1+CCIS_1+CAP+CCIE,&CCTL2   ; CAP,ACLK, with interrupt
Setup_TA    mov.w   #TASSEL_2+MC_2,&TACTL   ; SMCLK, Continous Mode
                                            ;							  
Mainloop    bis.w   #CPUOFF+GIE,SR          ; CPU off, interrupts enabled
            nop                             ; Needed only for debugger
                                            ;
;----------------------------------------------------------------------------- 
TA2_ISR
;----------------------------------------------------------------------------- 
AdjDCO      push.w  &CCR2                   ;
            sub.w   R15,&CCR2               ;
            cmp.w   #Delta,&CCR2            ; Delta = SMCLK/(32768/8)
            pop.w   R15                     ;            
            jlo     IncDCO                  ;
            jeq     DoneDCO                 ;
DecDCO      dec.b   &DCOCTL                 ; Slow DCO with DCO and MOD
            jnz     DoneDCO                 ; Slower?
            cmp.b   #XT2OFF+DIVA_3,&BCSCTL1 ; Can RSEL.x be decremented?
            jz      DoneDCO                 ; jump>DCO at slowest setting
            dec.b   &BCSCTL1                ; Decrement RSEL.x 
            reti                            ; Return from interrrupt
IncDCO      inc.b   &DCOCTL                 ; Speed DCO with DCO and MOD
            jnc     DoneDCO                 ; Faster?
            cmp.b   #XT2OFF+DIVA_3+07h,&BCSCTL1 ; Can RSEL.x be increased?
            jz      DoneDCO                 ; jump> DCO at fastest settting
            inc.b   &BCSCTL1                ; Increment RSEL.x
DoneDCO     reti                            ; Return from interrrupt
                                            ;
;------------------------------------------------------------------------------
TAX_ISR;    Common ISR for CCR1-4 and overflow
;------------------------------------------------------------------------------
            add.w   &TAIV,PC                ; Add Timer_A offset vector
            reti                            ; CCR0 - no source
            reti                            ; CCR1
            jmp     TA2_ISR                 ; CCR2
;            reti                            ; CCR3
;            reti                            ; CCR4
;            reti                            ; Return from overflow ISR		 
                                            ;
;----------------------------------------------------------------------------- 
;           Interrupt Vectors Used MSP430x13x/14x/15x/16x         
;----------------------------------------------------------------------------- 
            ORG     0FFFEh                  ; MSP430 RESET Vector
            DW      RESET                   ; 
            ORG     0FFEAh                  ; Timer_AX Vector
            DW      TAX_ISR                 ; 
            END

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?