📄 asm_scatter.s
字号:
GET ASM_MACRO.H
EXPORT CopyLoadToExecutionRegion
AREA SCATTER_LOAD_AREA, CODE, READONLY
CODE32
ALIGN
;---------------------------------------------------------------
; BOOLEAN DownloadFirmwareToDRAM (void)
; Flash --> DRAM
;
;---------------------------------------------------------------
CopyLoadToExecutionRegion
STMFD SP!, {LR}
MACRO_RORegionInit EXEC2
MACRO_RORegionInit SDRAM
MACRO_ZIRegionInit SDRAM
LDMFD SP!, {PC}
;---------------------------------------------------------------
; R0 In Destination Address
; R1 In Source Address
; R2 In Size
;---------------------------------------------------------------
DataCopy
IF {TRUE}
STMFD SP!, {R4-R10,R14}
MOVS R3, R2, LSR #5
BEQ %f10
81 LDMIA R1!, {R4-R10,R14} ;Transfer per 8*32-bit
STMIA R0!, {R4-R10,R14}
SUBS R3, R3, #1
BGT %b81
10 MOV R3, R2, LSR #2
ANDS R3, R3, #0x07 ;Transfer per 32-bit
BEQ %f10
81 LDR R4, [R1],#1<<2
STR R4, [R0],#1<<2
SUBS R3, R3, #1
BGT %b81
10 ANDS R3, R2, #0x03 ;Transfer per 8-bit
BEQ %f20
81 LDRB R4, [R1],#1
STRB R4, [R0],#1
SUBS R3, R3, #1
BGT %b81
20 LDMFD SP!, {R4-R10,PC}
ELSE
STMFD SP!, {R4-R10,R14}
MOVS R3, R2, LSR #5
BEQ %f10
LDR R4, =0x880004
LDR R5, [R4]
ORR R5, R5, #(1<<11)
STR R5, [R4]
MOV R3, R3, LSL #3
LDR R4, =0x870100
STR R3, [R4, #0x88] ;MCU_REG_RW_GDMA_TRANS_COUNT
STR R1, [R4, #0x78] ;MCU_REG_RW_GDMA_SRC_ADDR
STR R0, [R4, #0x7C] ;MCU_REG_RW_GDMA_DES_ADDR
LDR R5, =0x1831
STR R5, [R4, #0x74] ;MCU_REG_RW_GDMA_CTRL
81 MOV R5, #10
80 SUBS R5, R5, #1
BGT %b80
LDR R5, [R4, #0x74]
TST R5, #2
BNE %b81
ADD R1, R1, R3, LSL #2
ADD R0, R0, R3, LSL #2
10 MOV R3, R2, LSR #2
ANDS R3, R3, #0x07 ;Transfer per 32-bit
BEQ %f10
81 LDR R4, [R1],#1<<2
STR R4, [R0],#1<<2
SUBS R3, R3, #1
BGT %b81
10 ANDS R3, R2, #0x03 ;Transfer per 8-bit
BEQ %f20
81 LDRB R4, [R1],#1
STRB R4, [R0],#1
SUBS R3, R3, #1
BGT %b81
20 LDMFD SP!, {R4-R10,PC}
ENDIF
;---------------------------------------------------------------
; R0 In Destination Address
; R1 In Size
;---------------------------------------------------------------
ZeroInit
MOV R3, #0x00
MOVS R2, R1, LSR #2 ;Transfer per 32-bit
BEQ %f10
81 STR R3, [R0],#1<<2
SUBS R2, R2, #1
BGT %b81
10 ANDS R2, R1, #0x03 ;Transfer per 8-bit
BEQ %f20
81 STRB R3, [R0],#1
SUBS R2, R2, #1
BGT %b81
20 MOV PC, LR
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -