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

📄 start.ms

📁 瑞萨公司M32R单片机的启动代码start.ms
💻 MS
字号:
;****************************************************************************
; COPYRIGHT(C) 2003 RENESAS TECHNOLOGY CORPORATION AND RENESAS SOLUTIONS
; CORPORATION ALL RIGHTS RESERVED
;
; start.ms : cc32R startup and low-level-sample program
;
;    [ Contents ]
;        (1) Sample startup routine.
;        (2) Stack memory area
;        (3) Sample low-level routine.
;        (4) Reset vector area
;
;    [ NOTES ]
;      * This startup sample never set addresses for all sections,
;        expect RI (Reset Vector Table) section, then you have to
;        set address by -SEC option by lnk32R (M32R linker) .
;
;****************************************************************************
;----------------------------------------------------------------------------
;                HEAPSIZE definition
;----------------------------------------------------------------------------
                .MACRO          HEAPSIZE_DEF
HEAPSIZE        .EQU            \&__HEAPSIZE__
                .ENDM
                HEAPSIZE_DEF

;----------------------------------------------------------------------------
;                STACKSIZE definition
;----------------------------------------------------------------------------
                .MACRO          STACKSIZE_DEF
USTACKSIZE      .EQU            \&__USTACKSIZE__
ISTACKSIZE      .EQU            \&__ISTACKSIZE__
                .ENDM
                STACKSIZE_DEF

;----------------------------------------------------------------------------
;                STANDARDLIB definition
;----------------------------------------------------------------------------
                .MACRO          STANDARDLIB_DEF
STANDARDLIB     .ASSIGNC        "\&__STANDARD_IO__"
                .ENDM
                STANDARDLIB_DEF

;----------------------------------------------------------------------------
; (1) Startup routine
;----------------------------------------------------------------------------
                .export         STARTUP
                .export         HALT
                .import         $_c_main
                .import         $main
                .section        P,code,align=4
                ;
                ; Initialize PSW control-register.
                ;
STARTUP:        LDI             R0, #128
                MVTC            R0, PSW
                ;
                ; Setting the user and interrupt stack.
                ;
                SETH            R0, #HIGH(USTACK_BOTTOM)
                OR3             R0, R0, #LOW(USTACK_BOTTOM)
                MVTC            R0, SPU
                SETH            R0, #HIGH(ISTACK_BOTTOM)
                OR3             R0, R0, #LOW(ISTACK_BOTTOM)
                MVTC            R0, SPI
                ;
                ; Clear the B section to zero.
                ;
                SETH            R1, #HIGH(B)
                OR3             R1, R1, #LOW(B)
                SETH            R2, #HIGH(sizeof(B))
                OR3             R2, R2, #LOW(sizeof(B))
                BLEZ            R2, SKIP1
                LDI             R0, #0
LOOP1:          STB             R0, @R1
                ADDI            R1, #1
                ADDI            R2, #-1
                BGTZ            R2, LOOP1
SKIP1:
                ;
                ; Transfer the data in the ROM_D section in ROM area
                ; to the RAM area.
                ;
                SETH            R1, #HIGH(ROM_D)
                OR3             R1, R1, #LOW(ROM_D)
                SETH            R2, #HIGH(D)
                OR3             R2, R2, #LOW(D)
                SETH            R3, #HIGH(sizeof(ROM_D))
                OR3             R3, R3, #LOW(sizeof(ROM_D))
                BLEZ            R3, SKIP2
LOOP2:          LDB             R0, @R1
                STB             R0, @R2
                ADDI            R1, #1
                ADDI            R2, #1
                ADDI            R3, #-1
                BGTZ            R3, LOOP2
SKIP2:
                
				;
				;Register definition		yudongliu
				;

			

				;
                ; Call initialize standard library routine or
                ; main function.
                ;
                .AIF            \&STANDARDLIB
                SETH            R0, #HIGH($_c_main)
                OR3             R0, R0, #LOW($_c_main)
                JL              R0
                .AELSE
                SETH            R0, #HIGH($main)
                OR3             R0, R0, #LOW($main)
                JL              R0
                .AENDI

HALT:           BRA             HALT        ; inifinity loop

;----------------------------------------------------------------------------
; (2) Stack memory area
;----------------------------------------------------------------------------
                .section        B,data,align=4
                .RES.B          USTACKSIZE
                .align          4
USTACK_BOTTOM:
                .RES.B          ISTACKSIZE
                .align          4
ISTACK_BOTTOM:

;----------------------------------------------------------------------------
; (3) Sample low-level routine.
;----------------------------------------------------------------------------
                .AIF            \&STANDARDLIB
                .export         $_exit
                .export         $_get_core
                .export         $write
                .export         $_rel_core
                .export         $_strerror
                .export         $close
                .export         $getuniqnum
                .export         $lseek
                .export         $open
                .export         $read
                .export         $getenv
                .export         $raise
                .export         $remove
                .section        P,code,align=4
                ;
                ; Terminate the program run.
                ;
$_exit:         BRA             HALT
                ;
                ; Get the heap memory routine.
                ;
$_get_core:     MV              R1, R4
                SETH            R2, #HIGH(HEAP_POINTER)
                OR3             R2, R2, #LOW(HEAP_POINTER)
                LD              R0, @R2
                ADD             R1, R0
                ST              R1, @R2
                JMP             R14
                ;
                ; Write data to memory buffer routine.
                ;
$write:         LDI             R3, #0
                BRA             SKIP3
LOOP3:          SETH            R1, #HIGH(WRITE_POINTER)
                OR3                R1, R1, #LOW(WRITE_POINTER)
                LD              R2, @R1
                ADD3            R0, R2, #1
                ST              R0, @R1
                MV              R1, R5
                LDI             R0, #H'3FF
                ADD             R1, R3
                REM             R2, R0
                SETH                R0, #HIGH(WRITE_BUFFER)
                OR3                R0, R0, #LOW(WRITE_BUFFER)
                ADDI            R3, #1
                ADD             R2, R0
                LDB             R1, @R1
                STB             R1, @R2
SKIP3:          LD              R0, @R15
                CMP             R3, R0
                BC              LOOP3
                LD              R0, @R15
                JMP             R14
                ;
                ; ( Not implemented routine )
                ;
$_rel_core:
$_strerror:
$close:
$getuniqnum:
$lseek:
$open:
$read:
$getenv:
$raise:
$remove:        LDI             R0, #0
                JMP             R14
                ;
                ; low-level routines use area.
                ;
                .export         WRITE_BUFFER
                .section        D,data,align=4
HEAP_POINTER:   .DATA.W         HEAP_TOP
WRITE_POINTER:  .DATA.W         0
WRITE_BUFFER:   .RES.B          H'400
                .section        B,data,align=4
HEAP_TOP:        .RES.B         HEAPSIZE

                .AENDI

;----------------------------------------------------------------------------
; (4) Reset vector area
;----------------------------------------------------------------------------
                .section        RI,code,locate=h'00000000
                SETH            R0, #HIGH(STARTUP)
                OR3             R0, R0, #LOW(STARTUP)
                JMP             R0

                .section        C,data,align=4
                .section        D,data,align=4
                .section        ROM_D,data,align=4
                .end            STARTUP

;****************************************************************************
; COPYRIGHT(C) 2003 RENESAS TECHNOLOGY CORPORATION AND RENESAS SOLUTIONS
; CORPORATION ALL RIGHTS RESERVED
;****************************************************************************

⌨️ 快捷键说明

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