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

📄 start8fx.asm

📁 富士通单片机MB98F108 C语言开发例程。有使用说明
💻 ASM
📖 第 1 页 / 共 2 页
字号:
            .RES.B      STACKSIZE
STACK_TOP:
        .RES.B      2
        
;--------------------------------------------------------------------------
; 5.4 Definition to start address of data, const and code section
;--------------------------------------------------------------------------
        .SECTION    DIRDATA,  DIR,      ALIGN=1
DIRDATA_S:
        .SECTION    DIRINIT,  DIR,      ALIGN=1
DIRINIT_S:
        .SECTION    DATA,     DATA,     ALIGN=2
DATA_S:
        .SECTION    INIT,     DATA,     ALIGN=2
INIT_S:

;--------------------------------------------------------------------------
; 5.5 Monitor Debugger configuration data
;--------------------------------------------------------------------------
#ifdef MONITORDEBUGGER_CONFIGURATION

        .SECTION    FGMCFGTBL,  CONST,  LOCATE=0xFFB6
; configuration table        
_FGMTBL_STARTADR:
        .DATA.H     __start         ; Start address of user application

_FGMTBL_STACKTOP:
        .DATA.H     STACK_TOP       ; Stack top 

_FGMTBL_ABOOTADR:
        .DATA.H     _AutoBootCheck  ; Auto-boot address

_FGMTBL_PASSWORD:
        .DATA.L     USER_PASSWORD   ; password (4byte)

; CALLV vector for FGM
        .SECTION    FGMCALLVECT,    CONST,  LOCATE=0xFFC0
    .IMPORT     _FGM_CALL

    .DATA.H     _FGM_CALL       ; CALLV #0
        
#endif

;-----------------------------------------------------------
; 5.6 Define Reset vector and Modebyte
;-----------------------------------------------------------
; The Mode Byte is defined at the beginning of the start.asm

      .SECTION  RESVECT, CONST, LOCATE=H'FFFD
      .DATA.B MODEBYTE
    #ifdef MONITORDEBUGGER_CONFIGURATION
      .IMPORT _FGM_INIT
      .DATA.W _FGM_INIT
    #else            
      .DATA.W __start
    #endif      
      
;-----------------------------------------------------------
; 5.7 Flash Security
;-----------------------------------------------------------
; The Flash of MB95Fxxx can be secured

  #if (MCU_SERIES == MB95130 | MCU_SERIES == MB95140 |MCU_SERIES == MB95150)
  
      .SECTION  SECURITY, CONST, LOCATE=H'8000  
      
  #else
      .SECTION  SECURITY, CONST, LOCATE=H'4000   
        
  #endif

  #if FLASHSECURITY == ON
        .DATA.B 0x01
  #else  
        .DATA.B 0xFF
  #endif
  
;
; 
;====================================================================
; 6  Start-Up Code
;====================================================================  
;
;     
;====================================================================
;   ___  _____   __    ___  _____
;  /       |    /  \  |   \   |                  
;  \___    |   |    | |___/   |   
;      \   |   |----| |  \    |   
;   ___/   |   |    | |   \   |      Begin of actual code section
;====================================================================
            .SECTION    CODE,     CODE,     ALIGN=1
__start:
;
;
;--------------------------------------------------------------------------
; 6.1 Set stack pointer
;--------------------------------------------------------------------------
        MOVW    A, #STACK_TOP
        MOVW    SP, A
;
;
;--------------------------------------------------------------------------
; 6.2 Set Register bank Pointer 0 / set Direct bank Pointer 0 (0x80..0xFF)
;--------------------------------------------------------------------------
;
        MOVW    A, PS
        MOVW    A, #0x00BF     ; RP=0, DP=0, I=0
        ANDW    A
        MOVW    PS, A
;
;--------------------------------------------------------------------------
; 6.3 Set ILM to the lowest level(3)
;--------------------------------------------------------------------------
;
        MOVW    A, PS
        MOVW    A, #0x0030
        ORW A
        MOVW    PS, A
;
;--------------------------------------------------------------------------
; 6.4 Set PLL 
;--------------------------------------------------------------------------
;
; Set Main-PLL clock
;
# if CLOCKMODE != NOCLOCK

        SETB    PLLC:4         ; set PLL stable for simulation 
        
  # if CLOCKSPEED == MAINPLLx1     
        CLRB    PLLC:5
        CLRB    PLLC:6 
        SETB    PLLC:7         ; Main PLL enable
  #endif        
  # if CLOCKSPEED == MAINPLLx2
        SETB    PLLC:5
        CLRB    PLLC:6
        SETB    PLLC:7         ; Main PLL enable
  #endif                 
  # if CLOCKSPEED == MAINPLLx2p5
        CLRB    PLLC:5
        SETB    PLLC:6 
        SETB    PLLC:7         ; Main PLL enable
  #endif
;
; Set Sub-PLL clock
;
  # if SUBCLOCKSPEED == SUBPLLx2
        SETB    PLLC:1
        CLRB    PLLC:2 
        SETB    PLLC:3
  #endif        
  # if SUBCLOCKSPEED == SUBPLLx3
        CLRB    PLLC:1
        SETB    PLLC:2
        SETB    PLLC:3
  #endif                 
  # if SUBCLOCKSPEED == SUBPLLx4
        SETB    PLLC:1
        SETB    PLLC:2 
        SETB    PLLC:3
  #endif

  # if ( (CLOCKMODE == MAIN_PLL) && (CLOCKSPEED != MAINPLL_OFF) )
  WAITMAINPLL:               
          MOV       A,PLLC         ; Waiting Main-PLL stabilization
          AND       A,#0x10
          BNZ       SETCLK
          JMP       WAITMAINPLL
          
  # elif ( (CLOCKMODE == SUB_PLL) && (SUBCLOCKSPEED != SUBPLL_OFF) )
  WAITSUBPLL:                
          MOV       A,PLLC         ; Waiting Sub-PLL stabilization
          AND       A,#0x01
          BNZ       SETCLK
          JMP       WAITSUBPLL
  # endif
#endif      
;
;--------------------------------------------------------------------------
; 6.5 Set System Clock
;--------------------------------------------------------------------------
;
SETCLK:
# if CLOCKMODE != NOCLOCK
        MOV     SYCC,#(CLOCKMODE<<4 + CLOCKDIV)
# endif
;
;
;--------------------------------------------------------------------------
; 6.6 Copy initial value *CONST(ROM) section to *INIT(RAM) section
;--------------------------------------------------------------------------
;
#macro  ICOPY   src_addr, dest_addr, src_segment
        MOVW    EP, #\src_addr
        MOVW    A,  #\dest_addr
        MOVW    A,  #SIZEOF (\src_segment)
        CALL    LMEMTOMEM
#endm

        ICOPY   _ROM_INIT,      _RAM_INIT, INIT
        ICOPY   _ROM_DIRINIT,   _RAM_DIRINIT, DIRINIT
;
;--------------------------------------------------------------------------
; 6.7 Zero clear of *VAR section
;--------------------------------------------------------------------------
;
#macro  FILL0   src_addr, src_segment
        MOVW    A, #\src_addr
        MOVW    A, #SIZEOF (\src_segment)
        CALL    LMEMCLEAR
#endm

        FILL0   DIRDATA_S, DIRDATA
        FILL0   DATA_S,    DATA;
;
;      
;--------------------------------------------------------------------------
; 6.8 call main routine
;--------------------------------------------------------------------------
        CALL    _main
end:        JMP end

        .END    __start

⌨️ 快捷键说明

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