📄 复件initbdi_key.s
字号:
ldr r1,=FLASHROM_addr
ldrb r0,=0xaa
strb r0,[r1,#0x555]
ldrb r0,=0x55
strb r0,[r1,#0x2aa]
ldrb r0,=0x80
strb r0,[r1,#0x555]
ldrb r0,=0xaa
strb r0,[r1,#0x555]
ldrb r0,=0x55
strb r0,[r1,#0x2aa]
cmp r0,#0xFFFFFFFF
beq Chiperase_Am29f040B
ldrb r0,=0x30
strb r0,[r1,r2]
bl delay1s
COM_EraseFlash_END
LDR R5,=0x00000041;"A"
BL sendbyte
LDMFD sp!,{R0-R5,PC};Return
Chiperase_Am29f040B
ldrb r0,=0x80
strb r0,[r1,#0x555]
bl delay8s
B COM_EraseFlash_END
BUF2ROM STMFD sp!,{R1,r2,r5,r6,lr}
;receive buffer to rom
LDR R1,=receive_bufffer
mov r2,r1
add r2,r2,#0x80;128-byte per sector,end of sector
;SUB R1,R1,#1
LDR R5,=addr_download
LDR R6,[R5];start addr in r6
;SUB R6,R6,#1;addr of download_cur
BUFWRI_LOOP
LDRB R5,[R1]
bl wri_byte_Am29F040B
;R5,low 8-bit Value
;r6,addr of program
bne wri_byte_fail
add r1,r1,#1
add r6,r6,#1
CMP R1,R2;RECEIVE_BUFFFER END
BNE BUFWRI_LOOP
LDR R5,=addr_download
STR R6,[R5]
;SECTOR WRITE OK,CAN WAIT 10MS OR NOT
wri_byte_fail
;=addr_download <> endaddr
LDMFD sp!,{R1,r2,r5,r6,PC};Return
;GETCHAR STMFD sp!,{R0-R2,R5,lr}
BL getbyte
SUB R5,R5,#0x20
MOV R5,R5,LSL #16
LDR R1,=0x0000C000;写RAM且地址+1
ADD R2,R2,R1
LDR R0,=LCDparam
STR R2,[R0];param
;BL PR11;
; BL on_p7
LDMFD sp!,{R0-R2,R5,PC};Return
;WRIstring
;正常显示字符串,以0x00结尾
;入口:r6=字符串首地址!
;GETSTRING STMFD sp!,{R0-R2,R5-R6,lr}
LDR R5,=0x00000003;HI!
BL getstring
LDR R1,=receive_bufffer
LDR R0,[R1]
LDR R2,=0xFF000000
BIC R0,R0,R2;
STR R0,[R1]
MOV R6,R1
; BL WRIstring
; BL on_p7
LDMFD sp!,{R0-R2,R5-R6,PC};Return
test_USART0 STMFD sp!,{R0-R1,lr}
bl init_USART0
test_USART0_loop
ldr R5,=0x55
bl sendbyte
b test_USART0_loop
LDMFD sp!,{R0-R1,PC};Return
init_USART0
STMFD sp!,{R0-R1,lr}
LDR R0,=USART0
;BL DISPLAY_R0
; LDR R1,=0x000000C0;Normal mode,1 stop bit,even parity,
;Asynchoronous mode,8-bit,MCKI,
LDR R1,=0x000008C0;Normal mode,1 stop bit,no parity,
;Asynchoronous mode,8-bit,MCKI,
STR R1,[R0,#0x04];US_MR
LDR R1,=0x0000000D;115200 BPS
STR R1,[R0,#0x20];US_BRGR
LDR R1,=0x0
STR R1,[R0,#0x24];US_RTOR Disable Receive Time-out
LDR R1,=0x0
STR R1,[R0,#0x28];US_TTGR Disable Transmitter time-guard
LDR R1,=0x00000004;Reset Receiver
STR R1,[R0];US_CR
LDR R1,=0x00000008;Reset Transmitter
STR R1,[R0];US_CR
LDR R1,=0x00000100;Reset Status bits
STR R1,[R0];US_CR
LDR R1,=0x00000010;Receiver Enable
STR R1,[R0];US_CR
LDR R1,=0x00000040;Transmitter Enable
STR R1,[R0];US_CR
LDR R1,=0xFFFFFE1B;DISENABLE INTERRUPT
STR R1,[R0,#0x0C] ;US_IDR
LDR R1,=0x000001E4;ENABLE INTERRUPT
STR R1,[R0,#0x08] ;US_IER
;PROSESS ERROR IN TRANSMIT & RECEIVE
; BL on_p7
LDMFD sp!,{R0-R1,PC};Return
sendbyte STMFD sp!,{R0-R2,lr}
;R5:low 8-bit
LDR R0,=USART0
sendbytewait LDR R1,[R0,#0x14];US_CSR
LDR R2,=0xFFFFFFFD
BIC R1,R1,R2;TXRDY
CMP R1,#2
BNE sendbytewait
STR R5,[R0,#0x1C];US_THR
LDMFD sp!,{R0-R2,PC};Return
sendstring STMFD sp!,{R0-R2,lr}
;R5:COUNT OF TRANSMIT LOW 16-BIT
;SET R5,BEFORE CALL
LDR R0,=USART0
sendstrwait2 LDR R1,[R0,#0x14];US_CSR
LDR R2,=0xFFFFFFEF
BIC R1,R1,R2;ENDTX
CMP R1,#0
BEQ sendstrwait2
LDR R1,=send_bufffer
STR R1,[R0,#0x38];US_TPR
;ADDR OF TRANSMITTER POIONTER
STR R5,[R0,#0x3C];US_TCR
sendstrwait4 LDR R1,[R0,#0x14];US_CSR
LDR R2,=0xFFFFFFEF
BIC R1,R1,R2;ENDTX
CMP R1,#0
BEQ sendstrwait4
LDMFD sp!,{R0-R2,PC};Return
getbyte STMFD sp!,{R0-R2,lr}
;R5 low 8-bit
LDR R0,=USART0
getbytewait LDR R1,[R0,#0x14];US_CSR
LDR R2,=0xFFFFFFFE
BIC R1,R1,R2;RXRDY
CMP R1,#1
BNE getbytewait
LDR R5,[R0,#0x18];US_RHR
LDMFD sp!,{R0-R2,PC};Return
getstring
STMFD sp!,{R0-R2,lr}
;R5:COUNT OF RECEIVER,LOW 16-BIT
;SET R5,BEFORE CALL
LDR R0,=USART0
LDR R1,=receive_bufffer
STR R1,[R0,#0x30];US_RPR
;ADDR OF RECEIVER POIONTER
STR R5,[R0,#0x34];US_RCR
getstrwait2 LDR R1,[R0,#0x14];US_CSR
LDR R2,=0xFFFFFFF7
BIC R1,R1,R2;ENDRX
CMP R1,#0
BEQ getstrwait2
LDMFD sp!,{R0-R2,PC};Return
;-------------------------------------------------------------------
CPL_P0P7
STMFD sp!,{r0-r3,lr}
;PIO_ODSR EQU 0xFFFF0038
LDR R1,=PIO_BASE
LDR R3,=P0_P7MASK
LDR r0,[r1,#0x38]
MVN r0,r0
MOV R2,R0;backup r0
BIC R2,R2,R3
STR R2,[R1,#0x30];SET OUTPUT DATA REGISTER
MVN R2,R0
BIC R2,R2,R3
STR R2,[R1,#0x34];CLEAR OUTPUT DATA REGISTER
LDMFD sp!,{r0-r3,PC};Return
R0_writeP0_P7
STMFD sp!,{r1-r3,lr}
;R0 LOW 8-BIT => PIO0-PIO7
;SET R0 BEFORE CALL
LDR R1,=PIO_BASE
LDR R3,=P0_P7MASK
MOV R2,R0;backup r0
BIC R2,R2,R3
STR R2,[R1,#0x30];SET OUTPUT DATA REGISTER
MVN R2,R0
BIC R2,R2,R3
STR R2,[R1,#0x34];CLEAR OUTPUT DATA REGISTER
LDMFD sp!,{r1-r3,PC};Return
LIGHTLED STMDB sp!,{R0-R3,lr}
LDR R2,=0x0;COUNT
LDRB R3,=0x04
LIGHTLED_LOOP
bl CPL_P0P7
bl delay1s
ADD R2,R2,#1
CMP R2,R3
BNE LIGHTLED_LOOP
LDMIA sp!,{R0-R3,PC};Return
delay1s
STMFD sp!,{r0,lr}
ldr r0, =0x007c0e21
dly1s
sub r0,r0,#1
CMP R0,#0
bne dly1s
LDMFD sp!,{r0,PC};Return
delay8s
STMFD sp!,{r0,lr}
ldr r0, =0x03e07108
dly8s
sub r0,r0,#1
CMP R0,#0
bne dly8s
LDMFD sp!,{r0,PC};Return
;---------------------------------------------------------
delay7us
;24M
STMFD sp!,{r0,lr}
ldr r0, =0x00000040
dly7us
sub r0,r0,#1
CMP R0,#0
bne dly7us
LDMFD sp!,{r0,PC};Return
delay20ms
;24M
STMFD sp!,{r0,lr}
ldr r0, =0x000208d5
dly20ms
sub r0,r0,#1
CMP R0,#0
bne dly20ms
LDMFD sp!,{r0,PC};Return
delay2ms
STMFD sp!,{r0,lr}
ldr r0, =0x00013880
dly2ms
sub r0,r0,#1
CMP R0,#0
bne dly2ms
LDMFD sp!,{r0,PC};Return
delay1ms
STMFD sp!,{r0,lr}
ldr r0, =0x00000880
dly1ms
sub r0,r0,#1
CMP R0,#0
bne dly1ms
LDMFD sp!,{r0,PC};Return
delay600ns
STMFD sp!,{lr}
;>=600ns is ok
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
;new
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
LDMFD sp!,{PC};Return
R0_readP0_P7
STMFD sp!,{r2,lr}
LDR R2,=PIO_PDSR
LDR R0,[R2]
BIC R0,R0,#0xFFFFFF00
LDMFD sp!,{r2,PC};Return
LCD_CommandWrite
STMFD sp!,{r0-r1,lr}
;写指令,r7
;>=140ns? or delay450ns=>600ns
ldrb r0,=LCD_CW_E
ldr r1,=CS4_addr
strb r0,[R1]
mov r0,r7
bl R0_writeP0_P7
bl delay600ns
;write,close E
ldrb r0,=LCD_CW
strb r0,[R1]
bl delay600ns
LDMFD sp!,{r0-r1,PC};Return
LCD_CommandRead
STMFD sp!,{r0-r1,lr}
;读指令
;读BF到C
;读AC到r6 low 8 bit
;>=140ns? or delay450ns=>600ns
ldrb r0,=LCD_CR_E
ldr r1,=CS4_addr
strb r0,[R1]
bl delay600ns
;read,close E
bl R0_readP0_P7
mov r6,r0
mrs r1,CPSR
bic r1,r1,#0x20000000
msr CPSR,r1;clr C
mov r0,r0,ROR #8;BF to C flag
;???????????????????????????????????????
ldrb r0,=LCD_CR
ldr r1,=CS4_addr
strb r0,[R1]
bl delay600ns
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -