⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 基于DSP2000的例程
💻 ASM
字号:
***************************************************************************************
***
***                			Realtime.asm
***					Code for real time tutorial
***					Platform: F240 EVM, F243 EVM, or F2407A DSK
***
***************************************************************************************
; Main program:  Initialize F240, F243, or F2407A
;                Initialize timer 1 to start underflow interrupt
;                Enable interrupt and Call Real Time monitor
;                Infinite loop. In this loop, main_counter is incremented

; Timer 1 interrupt: Save context
;                    Increment a counter (ISR_counter)
;                    Clear interrupt flag
;                    Restore context	
;                    Return to main
***************************************************************************************    
; Include header file:
            .include "X24x.h"

; Step 1: Global declaration:
            .global    _c_int0, T1_ISR, PHANTOM, NMI_ISR
            .global    MON_RT_CNFG

; Variables declaration:
            .bss    test,1 
            .bss    Isr_counter,1  
            .bss    Isr_step,1
            .bss    Main_counter,1
            .bss    GPR0,1

******************************************************************
******
******                		MAIN
******
******************************************************************
        	.text
_c_int0:            
_main:
; Disable interrupts, Clear SXM, OVM and CNF bits       
            POINT_PG0
            SETC    INTM            ; Disable interrupts
            SPLK    #0h, IMR        ; Mask all Ints
            SPLK    #0FFh, IFR      ; Clear all Int Flags
            CLRC    SXM             ; Clear Sign Extension Mode
            CLRC    OVM             ; Reset Overflow Mode
            CLRC    CNF             ; Config Block B0 to Data mem.

; Initialize device: Set PLL, watchdog, wait state generator
; and reset EV registers
; If you use the F240 EVM, CALL INIT_240
; If you use the F243 EVM, CALL INIT_243
; If you use the F2407A DSK, CALL INIT_2407

;           CALL    INIT_240        ; Init 240 Evm
;       	CALL    INIT_243        ; Init 243 Evm
            CALL    INIT_2407       ; Init 2407 Dsk

; Initialize and start Timer 1:
            SPLK    #2000, T1PER    ; Set T1 period
            SPLK    #0, T1CNT       ; Initialize T1 counter
            SPLK    #0A840h, T1CON  ; Enable Timer 1 
                                    ; Cont Up/Down Mode

; Step 2: Load auxilary register AR7, stack pointer:
            LAR     AR7, #310h      ; Point to B1 for Stack

; Variables initialization
            POINT_B0                ; Control variable page
            SPLK    #1, Isr_step    ; Step for isr_counter
            SPLK    #0h, Isr_counter 
            SPLK    #0h, Main_counter

; Clear Event Manager IFR registers: 
            LDP     #DP_EV
            SPLK    #0FFFFh,IFRA
            SPLK    #0FFFFh,IFRB
            SPLK    #0FFFFh,IFRC

; Unmask T1 Underflow Interrupt:
            SPLK    #0200h,IMRA
            SPLK    #0000h,IMRB
            SPLK    #0000h,IMRC
                           
; Step 3: Initialize real-time monitor
            CALL    MON_RT_CNFG     ; Call real time monitor routine

; Step 4: Unmask interrupt 
            LDP     #0h   
            SPLK    #01000010b, IMR ; Unmask interrupt level 2 for PWM interrupt
                                    ; and interrupt level 7 for Real time interrupt

; Clear interrupt flags and enable interrupts:		
            SPLK    #0FFFFh, IFR    ; Clear interrupt flags
            CLRC    INTM            ; Enable interrupts

; Infinite loop:
LOOP
            POINT_B0
            LACC    Main_counter    
            ADD     #1
            SACL    Main_counter    ; Main_counter = Main_counter+1
            B       LOOP

**********************************************************
*                 	PHANTOM ISR                      *
**********************************************************
PHANTOM:
            RET                     ; return to main

**********************************************************
*                 	NMI ISR                          *
**********************************************************
NMI_ISR:
            CLRC INTM         ; re-enable maskable interrupts
            RET               ; return to main

***********************************************************
* 				T1 ISR                            * 
*									    *
* Called each Timer 1 underflow interrupt   		    *
***********************************************************
T1_ISR: 

; Step 5: Context saving.
            POINT_PG0
            MAR     *, AR7      ; AR7 is stack pointer
            MAR     *+          ; skip one position
            SST     #1, *+      ; save ST1
            SST     #0, *+      ; save ST0
            SACH    *+          ; save acc high
            SACL    *           ; save acc low

; Isr_counter increment:
            POINT_B0            ; Control variable page 
            LACC    Isr_counter
            ADD     Isr_step
            SACL    Isr_counter ; Isr_counter = Isr_counter + Isr_step

; Clear interrupt flag
            POINT_EV
            SPLK    #0FFFFh, IFRA ; Clear all Group A interrupt flags

; Step 6: Context restore
            POINT_PG0
            MAR     *, AR7        ; make stack pointer active
	  	LACL    *-            ; Restore Acc low
	  	ADDH    *-            ; Restore Acc high
	  	LST     #0, *-        ; load ST0
	  	LST     #1, *-        ; load ST1

; Enable interrupt and return:
            CLRC    INTM          ; Enable interrupt
            RET                   ; Return to main

*******************  END PWM ISR *******************************    

****************************************************************
;Module: 		240 Initialization
; 
; 		Initialize the PLL, Watchdog, Wait state generator
;		Clear EV registers
***************************************************************
INIT_240:
            POINT_B0
            SPLK    #04h, GPR0    ; Set 0 wait states for XMIF
            OUT     GPR0, WSGR

            POINT_PF1
            SPLK    #00000010b, PLL_CNTL1 ; Disable PLL first.=CPUCLK/2,
            SPLK    #10110001b, PLL_CNTL2 ; CLKIN(XTAL)=10MHz, PLL*2.0=20MHz
            SPLK    #10000011b, PLL_CNTL1 ; CLKMD=PLL Enable,SYSCLK/4=CPUCLK/2,
            SPLK    #40C0h, SYSCR         ; CLKOUT=CPUCLK
 
; Clear all reset variables
            POINT_PF1
            LACC    SYSSR
            AND     #69FFh
            SACL    SYSSR  

; Disable the watchdog timer
            POINT_PF1
            SPLK    #006Fh, WD_CNTL  
            SPLK    #05555h, WD_KEY
            SPLK    #0AAAAh, WD_KEY
            SPLK    #006Fh, WD_CNTL  

; Clear All EV Registers
            ZAC
            LDP     #DP_EV
            SACL    GPTCON
            SACL    T1CNT
            SACL    T1CMP
            SACL    T1PER
            SACL    T1CON
            SACL    T2CNT
            SACL    T2CMP
            SACL    T2PER
            SACL    T2CON 
            SACL    T3CNT
            SACL    T3CMP
            SACL    T3PER
            SACL    T3CON
            SACL    COMCON
            SACL    ACTR  
            SACL    SACTR
            SACL    DBTCON 
            SACL    CMPR1
            SACL    CMPR2
            SACL    CMPR3   
            SACL    SCMPR1
            SACL    SCMPR2
            SACL    SCMPR3
            SACL    CAPCON
            SACL    CAPFIFO
            SACL    FIFO1
            SACL    FIFO2
            SACL    FIFO3 
            SACL    FIFO4  

	  	RET                            ; Return to main
*************    END 240 Initialization     ********************

****************************************************************
;Module: 		243 Initialization
; 
; 		Initialize the PLL, Watchdog and Wait state generator
;		 			Clear EV registers
***************************************************************
            .include "X24x.h" 

INIT_243:
            POINT_B0                       ; Variables data page
            SPLK    #01000000b, GPR0       ; Set 1 wait state for I/O 
            OUT     GPR0, WSGR

	      POINT_PF1                      ; Peripherals first data page
            SPLK    #4000h,SCSR

; Disable the watchdog timer
            POINT_PF1                      ; Peripherals first data page
            SPLK    #006Fh, WD_CNTL  
            SPLK    #05555h, WD_KEY
            SPLK    #0AAAAh, WD_KEY
            SPLK    #006Fh, WD_CNTL

; Clear All EV Registers
            ZAC
            POINT_EV			       ; EV data page
            SACL    GPTCON
            SACL    T1CNT
            SACL    T1CMP
            SACL    T1PER
            SACL    T1CON
            SACL    T2CNT
            SACL    T2CMP
            SACL    T2PER
            SACL    T2CON 
            SACL    COMCON
            SACL    ACTR  
            SACL    DBTCON 
            SACL    CMPR1
            SACL    CMPR2
            SACL    CMPR3   
            SACL    CAPCON
            SACL    CAPFIFO
            SACL    FIFO1
            SACL    FIFO2
            SACL    FIFO3 

	  	RET                            ; Return to main

*************    END 243 Initialization     ********************

****************************************************************
;Module: 		2407 Initialization
; 
; 		Initialize the PLL, Watchdog and Wait state generator
;		 			Clear EV registers
***************************************************************
INIT_2407:
            POINT_B0                       ; Variables data page
            SPLK    #01000000b, GPR0       ; Set 1 wait state for I/O 
            OUT     GPR0, WSGR

            POINT_PF1                      ; Peripherals first data page
            SPLK    #4000h, SCSR

; Disable the watchdog timer
            POINT_PF1                      ; Peripherals first data page
            SPLK    #006Fh, WD_CNTL
            SPLK    #05555h, WD_KEY
            SPLK    #0AAAAh, WD_KEY
            SPLK    #006Fh, WD_CNTL

; Enable EVA peripheral clocks
            SPLK    #4, 7018h	  	

; Clear All EV Registers
            ZAC
            POINT_EV                       ; EV data page
            SACL    GPTCON
            SACL    T1CNT
            SACL    T1CMP
            SACL    T1PER
            SACL    T1CON
            SACL    T2CNT
            SACL    T2CMP
            SACL    T2PER
            SACL    T2CON 
            SACL    COMCON
            SACL    ACTR  
            SACL    DBTCON 
            SACL    CMPR1
            SACL    CMPR2
            SACL    CMPR3   
            SACL    CAPCON
            SACL    CAPFIFO
            SACL    FIFO1
            SACL    FIFO2
            SACL    FIFO3 

	  	RET            			; Return to main

⌨️ 快捷键说明

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