📄 复件initbdi_key.s
字号:
LDMFD sp!,{r0-r1,PC};Return
LCD_DataRead
STMFD sp!,{r0-r1,lr}
;读数据,R7
;>=140ns? or delay450ns=>600ns
ldrb r0,=LCD_DR_E
ldr r1,=CS4_addr
strb r0,[R1]
bl delay600ns
;read,close E
bl R0_readP0_P7
mov r7,r0
ldrb r0,=LCD_DR
strb r0,[R1]
bl delay2ms
LDMFD sp!,{r0-r1,PC};Return
LCD_DataWrite
STMFD sp!,{r0-r1,lr}
;写数据,r7
;>=140ns? or delay450ns=>600ns
ldrb r0,=LCD_DW_E
ldr r1,=CS4_addr
strb r0,[R1]
mov r0,r7
bl R0_writeP0_P7
bl delay600ns
;write,close E
ldrb r0,=LCD_DW
strb r0,[R1]
bl delay600ns
LDMFD sp!,{r0-r1,PC};Return
PR1 STMFD sp!,{lr}
;写指令
;preset R7
PR11
bl LCD_CommandRead
bcs PR11
bl LCD_CommandWrite
LDMFD sp!,{PC};Return
PR2 STMFD sp!,{lr}
;写显示数据,
;preset r7
PR21
bl LCD_CommandRead
bcs PR21
bl LCD_DataWrite
bl delay1ms
LDMFD sp!,{PC};Return
PR3 STMFD sp!,{lr}
;读显示数据,r7
PR31
bl LCD_CommandRead
bcs PR31
bl LCD_DataRead
LDMFD sp!,{PC};Return
INITLCD STMFD sp!,{R7,lr}
;LCD初始化设置子程序
ldr r7,=0x00000030
bl PR1
bl delay2ms
ldr r7,=0x00000030
bl PR1
bl delay2ms
ldr r7,=0x00000030
bl PR1
bl delay2ms
ldr r7,=0x00000038
bl PR1;设置工作方式8-bit,
bl delay2ms
ldr r7,=0x00000001
bl PR1;清屏
bl delay2ms
ldr r7,=0x00000006
bl PR1;设置输入方式
bl delay2ms
ldr r7,=0x00000000F
bl PR1;设置显示方式
bl delay2ms
LDMFD sp!,{R7,PC};Return
DISPLAY_CHAR STMFD sp!,{r1,R7,lr}
;hex to char
;WRITE R3 LOW 4 BIT BEFORE CALL
;R3 LOW 4-BIT
LDR R1,=hex_to_char_tab;hex->char
LDRB R7,[R1,R3]
bl PR2
LDMFD sp!,{r1,R7,PC};Return
DISPLAY_R0 STMFD sp!,{R1-R3,lr}
;DISPLAY R0
;WRITE R0 BEFORE
LDR R2,=0x1C;右移位数
LDR R1,=0x0FFFFFFF
DIS_R0_LOOP
BIC R3,R0,R1
MOV R3,R3,LSR R2
BL DISPLAY_CHAR;
CMP R2,#0
BEQ DIS_R0_END
MOV R1,R1,ROR #4
SUB R2,R2,#4
B DIS_R0_LOOP
DIS_R0_END
LDMFD sp!,{R1-R3,PC};Return
DISPLAYRAM STMFD sp!,{R0-R2,lr}
;r1 start addr
; LDR R1,=0x02000000;START ADDRESS TO DISPLAY
;以0xFFFFFFFF结尾
SUB R1,R1,#4
LDR R2,=0xFFFFFFFF;END OF DISP
DISPRAMLOOP LDR R0,[R1,#4]!
CMP R0,R2
BEQ DISPRAMEND
BL DISPLAY_R0
B DISPRAMLOOP
DISPRAMEND
LDMFD sp!,{R0-R2,PC};Return
WRIstring STMFD sp!,{r0,r7,lr}
;正常显示字符串,以0x00结尾
;入口:r5=字符串首地址!
LDR R0,=0x0;COUNT
WRIachar LDRB R7,[R5,R0]
CMP R7,#0
BEQ WRIstrend
BL PR2
ADD R0,R0,#1
B WRIachar
WRIstrend LDMFD sp!,{r0,r7,pc};Return
test_DISPLAY_R0
STMFD sp!,{r0,lr}
ldr r0,=0xa5a5a5a5
bl DISPLAY_R0
LDMFD sp!,{r0,pc};Return
lcd_main STMFD sp!,{r5,lr}
BL INITLCD
LDR R5,=my_wel_str
BL WRIstring
LDMFD sp!,{r5,pc};Return
SoftWareINT
; SWI has routine required in bits 8-23 and data (if any) in
; bits 0-7.
; Assumes R13_svc points to a suitable stack
stmfd sp!,{r0-r2,lr,pc}
mov r0,sp
mrs r1,cpsr
mrs r2,spsr
stmfd sp!,{r0-r12}
;current all
;Mode_USR EQU 0x10
;Mode_FIQ EQU 0x11
;Mode_IRQ EQU 0x12
;Mode_SVC EQU 0x13
;Mode_ABT EQU 0x17
;Mode_UND EQU 0x1B
;MOV R0, #Mode_USR:OR:I_Bit:OR:F_Bit ; No interrupts
;MSR CPSR_c, R0
;mov r0,r8
;mov r1,r9
;mov r2,r10
;mov r3,r11
;mov r4,r12
;mov r5,r13
;mov r6,r14
;MOV R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
;MSR CPSR_c, R0
; stmfd sp!,{r0-r6}
MOV R0, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r0,r8
mov r1,r9
mov r2,r10
mov r3,r11
mov r4,r12
mov r5,r13
mov r6,r14
mrs r7,spsr
MOV R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
stmfd sp!,{r0-r7}
MOV R0, #Mode_ABT:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r1,r13
mov r2,r14
mrs r3,spsr
MOV R0, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r4,r13
mov r5,r14
mrs r6,spsr
MOV R0, #Mode_UND:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r7,r13
mov r8,r14
mrs r9,spsr
MOV R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
stmfd sp!,{r1-r9}
mov r0,sp
ldr r1,=debug_SP_End
str r0,[r1]
LDR R5,=0x00000053;"S"software stop
BL sendbyte
SoftWareINT_UART0_debugloop
;all register push into stack
;save SP in :debug_SP
BL getbyte
CMP R5,#0x46;"F" File
bleq COM_download
CMP R5,#0x44;"D" Display
bleq COM_Display
CMP R5,#0x43;"C" Change
bleq COM_Change
CMP R5,#0x45;"E" Erase Flash
bleq COM_EraseFlash
CMP R5,#0x47;"G" Target Go
bleq COM_TargetGo
CMP R5,#0x4E;"N" Go to Next ,out SWI
BEQ SoftWareINT_EDN
B SoftWareINT_UART0_debugloop
SoftWareINT_EDN
ldmfd sp!,{r1-r9}
ldmfd sp!,{r0-r7}
;ldmfd sp!,{r0-r6}
;in SVC_Stack
MOV R0, #Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
ldmfd sp!,{r0-r12}
msr spsr,r2
msr cpsr,r1
ldmfd sp!,{r0-r2}
ldmfd sp!,{r11,r12}
mov pc,r11
FIQ_int
; SWI has routine required in bits 8-23 and data (if any) in
; bits 0-7.
; Assumes R13_svc points to a suitable stack
stmfd sp!,{r0-r2,lr,pc}
mov r0,sp
mrs r1,cpsr
mrs r2,spsr
stmfd sp!,{r0-r12}
;current all
;Mode_USR EQU 0x10
;Mode_FIQ EQU 0x11
;Mode_IRQ EQU 0x12
;Mode_SVC EQU 0x13
;Mode_ABT EQU 0x17
;Mode_UND EQU 0x1B
;MOV R0, #Mode_USR:OR:I_Bit:OR:F_Bit ; No interrupts
;MSR CPSR_c, R0
;mov r0,r8
;mov r1,r9
;mov r2,r10
;mov r3,r11
;mov r4,r12
;mov r5,r13
;mov r6,r14
;MOV R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
;MSR CPSR_c, R0
; stmfd sp!,{r0-r6}
MOV R0, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r0,r8
mov r1,r9
mov r2,r10
mov r3,r11
mov r4,r12
mov r5,r13
mov r6,r14
mrs r7,spsr
MOV R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
stmfd sp!,{r0-r7}
MOV R0, #Mode_ABT:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r1,r13
mov r2,r14
mrs r3,spsr
MOV R0, #Mode_IRQ:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r4,r13
mov r5,r14
mrs r6,spsr
MOV R0, #Mode_UND:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
mov r7,r13
mov r8,r14
mrs r9,spsr
MOV R0,#Mode_SVC:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
stmfd sp!,{r1-r9}
mov r0,sp
ldr r1,=debug_SP_End
str r0,[r1]
LDR R5,=0x00000046;"F"FIQ stop
BL sendbyte
FIQ_int_UART0_debugloop
;all register push into stack
;save SP in :debug_SP
BL getbyte
CMP R5,#0x46;"F" File
bleq COM_download
CMP R5,#0x44;"D" Display
bleq COM_Display
CMP R5,#0x43;"C" Change
bleq COM_Change
CMP R5,#0x45;"E" Erase Flash
bleq COM_EraseFlash
CMP R5,#0x52;"G" Target Go
bleq COM_TargetGo
CMP R5,#0x4E;"N" Go to Next ,out SWI
BEQ FIQ_int_EDN
B FIQ_int_UART0_debugloop
FIQ_int_EDN
ldmfd sp!,{r1-r9}
ldmfd sp!,{r0-r7}
;ldmfd sp!,{r0-r6}
;in FIQ_Stack
MOV R0, #Mode_FIQ:OR:I_Bit:OR:F_Bit ; No interrupts
MSR CPSR_c, R0
ldmfd sp!,{r0-r12}
msr spsr,r2
msr cpsr,r1
ldmfd sp!,{r0-r2,lr}
ldmfd sp!,{r3}
sub pc, lr, #4
my_wel_str
DCB 'W','e','l','c';"Welcome!-Happy Long"
DCB 'o','m','e','!'
DCB '-','H','a','p'
DCB 'p','y',' ','L'
DCB 'o','n','g',' '
DCD 0x00000000;C7D6 NO
hex_to_char_tab
DCB "0","1","2","3"
DCB "4","5","6","7"
DCB "8","9","A","B"
DCB "C","D","E","F"
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -