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

📄 start91270.asm

📁 scmRTOS is real-time preemptive operating system and supports up to 31 user processes (and one syste
💻 ASM
📖 第 1 页 / 共 4 页
字号:
;==============================================================================
#if (CS0)
        LDI             #0x0640, R1             ; area select reg asr0
        LDI             #AREASEL0, R0           ; Start address of CS0 area 
        STH             R0, @R1                 ; set register
        LDI             #0x642, R1              ; area control reg ACR0
        LDI             #CONFIGCS0, R2          ; load settings
        STH             R2, @R1                 ; set register
        LDI             #0x660, R1              ; area wait register awr0
        LDI             #WAITREG0, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;==============================================================================
;6.2.2  Set CS1  
;==============================================================================
#if CS1
        LDI             #0x0644, R1             ; area select reg asr1
        LDI             #AREASEL1, R0           ; Start address of CS1 area 
        STH             R0, @R1                 ; set register
        LDI             #0x646, R1              ; area control reg ACR1
        LDI             #CONFIGCS1, R2          ; load settings
        STH             R2, @R1                 ; set register
        LDI             #0x662, R1              ; area wait register awr1
        LDI             #WAITREG1, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;==============================================================================
;6.2.3  Set CS2  
;==============================================================================
#if CS2
        LDI             #0x0648, R1             ; area select reg asr2
        LDI             #AREASEL2, R0           ; Start address of CS2 area 
        STH             R0, @R1                 ; set register
        LDI             #0x64A, R1              ; area control reg ACR2
        LDI             #CONFIGCS2, R2          ; load settings
        STH             R2, @R1                 ; set register
        LDI             #0x664, R1              ; area wait register awr2
        LDI             #WAITREG2, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;==============================================================================
;6.2.4  Set CS3  
;==============================================================================
#if CS3
        LDI             #0x064C, R1             ; area select reg asr3
        LDI             #AREASEL3, R0           ; Start address of CS3 area 
        STH             R0, @R1                 ; set register
        LDI             #0x64E, R1              ; area mode reg ACR3
        LDI             #CONFIGCS3, R2          ; load settings
        STH             R2, @R1                 ; set register
        LDI             #0x666, R1              ; area wait register awr3
        LDI             #WAITREG3, R2           ; wait settings
        STH             R2, @R1                 ; set register
#endif
;
;==============================================================================
;6.2.5   set Port Function Register
;==============================================================================    
;==============================================================================
;6.2.5.1   set EPFR2 Register. External bus mode (Addr[16-23]) or General purpose port
;==============================================================================    
        LDI             #0x0602, R1             ; Port Function Register 0, (PFR00)
        LDI             #EPFUNC2, R0            ; load port settings 
        STB             R0, @R1                 ; set register    
;==============================================================================
;6.2.5.2   set EPFRE Register. External bus mode (Addr[0-7]) or General purpose port
;==============================================================================      
        LDI             #0x060E, R1             ; Port Function Register 1, (PFR01)
        LDI             #EPFUNCE, R0            ; load port settings 
        STB             R0, @R1                 ; set register 
;==============================================================================
;6.2.5.3   set EPFRF Register. External bus mode (Addr[8-15]) or General purpose port
;==============================================================================      
        LDI             #0x060F, R1             ; Port Function Register 2, (PFR02)
        LDI             #EPFUNCF, R0            ; load port settings 
        STB             R0, @R1                 ; set register
;==============================================================================
;6.2.5.4   set EPFR3 Register. External bus mode (Control Signals) or General purpose port
;==============================================================================      
        LDI             #0x0603, R1             ; Port Function Register 8, (PFR08)
        LDI             #EPFUNC3, R0            ; load port settings 
        STB             R0, @R1                 ; set register 
;==============================================================================
;6.2.5.5   set EPFR9 Register. External bus mode (Control Signals) or General purpose port
;==============================================================================      
        LDI             #0x0609, R1             ; Port Function Register 9, (PFR09)
        LDI             #EPFUNC9, R0            ; load port settings 
        STB             R0, @R1                 ; set register 
;
;==============================================================================
;6.2.6  Enable used CS
;==============================================================================
        LDI             #0x0680, R1             ; chip select enable register CSER
        LDI             #CSENABLE, R0           ; load enable settings
        STB             R0, @R1                 ; set register
#endif  /* #endif busmode */
;==============================================================================
; 6.2.7   Set Flash wait cycles
;==============================================================================

#if  FLASH_READ_ONLY == ON              
        
        LDI     #0x7004,R0              ; Set FLWC (flash memory wait register)
        LDI     #0x01,R1                ; Set 1 wait cylce
        STB     R1,@R0
          
 #else 
        LDI     #0x7004,R0              ; Set FLWC (flash memory wait register)
        LDI     #0x03,R1                ; Set 3 wait cylces
        STB     R1,@R0 
 #endif 


;==============================================================================
; Standard C startup
;==============================================================================
;==============================================================================
;6.3  initialise Stack Pointer and Table Base register
;==============================================================================       
#if STACKUSE == SYSSTACK       
        ldi             #__systemstack_top, sp   ; initialize SP
#endif
#if STACKUSE == USRSTACK
        ldi             #__userstack_top, sp     ; initialize SP
#endif

        ldi             #INTVECT, R0             ; set Table Base
        mov             r0, tbr
;==============================================================================
;6.4  Clear data 
;==============================================================================
;       clear DATA section
; According to ANSI, the DATA section must be cleared during start-up

        ldi:8           #0, r0
        ldi             #sizeof DATA &~0x3, r1
        ldi             #DATA, r13
        cmp             #0, r1
        beq             data_clr1
data_clr0:
        add2            #-4, r1
        bne:d           data_clr0
        st              r0, @(r13, r1)
data_clr1:
        ldi:8           #sizeof DATA & 0x3, r1
        ldi             #DATA + (sizeof DATA & ~0x3), r13

        cmp             #0, r1
        beq             data_clr_end
data_clr2:
        add2            #-1, r1
        bne:d           data_clr2
        stb             r0, @(r13, r1)
data_clr_end:
;==============================================================================
;6.5  Copy Init section from ROM to RAM
;==============================================================================
; copy rom
; All initialised data's (e.g. int i=1) must be stored in ROM/FLASH area. 
; (start value)
; The Application must copy the Section (Init) into the RAM area.
        ldi             #_RAM_INIT, r0
        ldi             #_ROM_INIT, r1
        ldi             #sizeof(INIT), r2
        cmp             #0, r2
        beq:d           copy_rom_end
        ldi             #3, r12
        and             r2, r12
        beq:d           copy_rom2
        mov             r2, r13
        mov             r2, r3
        sub             r12, r3
copy_rom1:
        add             #-1, r13
        ldub            @(r13, r1), r12
        cmp             r3, r13
        bhi:d           copy_rom1
        stb             r12, @(r13, r0)
        cmp             #0, r3
        beq:d           copy_rom_end
copy_rom2:
        add             #-4, r13
        ld              @(r13, r1), r12
        bgt:d           copy_rom2
        st              r12, @(r13, r0)
copy_rom_end:

;==============================================================================
;6.6 C library initialization
;==============================================================================
#if CLIBINIT == ON
       call32          __stream_init, r12         ; initialise library 
#endif
;==============================================================================
;6.7  call C++ constructors
;==============================================================================
#if CPLUSPLUS == ON
       ldi              #___call_dtors, r4
       call32           _atexit, r12

       ldi              #EXT_CTOR_DTOR, r8
       ldi              #EXT_CTOR_DTOR + sizeof(EXT_CTOR_DTOR), r9
       cmp              r9, r8
       beq              L1
L0:
       ld               @r8, r10
       call:d           @r10
       add              #4, r8
       cmp              r9, r8
       bc               L0
L1:
#endif

start_main:
;==============================================================================
;6.8 call main routine
;==============================================================================
       ldi:8            #0, r4                    ; Set the 1st parameter for main to 0.
       call32:d         _main, r12
       nop
#if CLIBINIT == ON
       ldi:8            #0, r5                    ; Set the 2nd parameter for main to NULL.
       call32           _exit, r12
       __exit:
#endif

#if CPLUSPLUS == ON
       __abort:
#endif


;==============================================================================
;6.9   Return from main function
;==============================================================================
end: 
        bra             end  
        .end            __start

⌨️ 快捷键说明

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