遇到需要调试uboot的时候,比如,进入睡眠后不能唤醒,或者压根就不能启动的时候,就需要在底层调试:如果你没有jtag调试工具。而且即使有了,有时候未必能用。
1. 闪烁LCD背光,通过数出闪烁数目,知道停在什么地方
led_flash:
mov r3,#0x01
mov r1, r0
100: subs r1, r1, #1
@delay loop
mov r2, #0xf00000
101: subs r2, r2, #1
bne 101b
@flash the led
ldr r0, =rGPBDAT
eor r3,r3,#0x20 @gpb5
str r3,[r0]
teq r1,#0
bne 100b
mov pc,lr
2.
----------------------
.macro addruart, rx
mrc p15, 0, \rx, c1, c0
tst \rx, #1
ldreq \rx, = S3C2440_PA_UART
ldrne \rx, = S3C2440_VA_UART
#if CONFIG_DEBUG_S3C2440_UART != 0
add \rx, \rx, #(S3C2440_UART1_OFF * CONFIG_DEBUG_S3C2440_UART)
#endif
.endm
.macro senduart,rd,rx
str \rd, [\rx, # S3C2440_UTXH ]
.endm
------------------
.macro busyuart, rd, rx
ldr \rd, [ \rx, # S3C2440_UFCON ]
tst \rd, #S3C2440_UFCON_FIFOMODE @ fifo enabled?
beq 1001f @
@ FIFO enabled...
1003:
mrc p15, 0, \rd, c1, c0
tst \rd, #1
addeq \rd, \rx, #(S3C2440_PA_GPIO - S3C2440_PA_UART)
addne \rd, \rx, #(S3C2440_VA_GPIO - S3C2440_VA_UART)
bic \rd, \rd, #0xff000
ldr \rd, [ \rd, # S3C2440_GSTATUS1 - S3C2440_GPIOREG(0) ]
and \rd, \rd, #0x00ff0000
teq \rd, #0x00440000 @ is it 2440?
ldr \rd, [ \rx, # S3C2440_UFSTAT ]
moveq \rd, \rd, lsr #SHIFT_2440TXF
tst \rd, #S3C2440_UFSTAT_TXFULL
bne 1003b
b 1002f
1001:
@ busy waiting for non fifo
ldr \rd, [ \rx, # S3C2440_UTRSTAT ]
tst \rd, #S3C2440_UTRSTAT_TXFE
beq 1001b
1002: @ exit busyuart
.endm
---------------------
.macro waituart,rd,rx
ldr \rd, [ \rx, # S3C2440_UFCON ]
tst \rd, #S3C2440_UFCON_FIFOMODE @ fifo enabled?
beq 1001f @
@ FIFO enabled...
1003:
mrc p15, 0, \rd, c1, c0
tst \rd, #1
addeq \rd, \rx, #(S3C2440_PA_GPIO - S3C2440_PA_UART)
addne \rd, \rx, #(S3C2440_VA_GPIO - S3C2440_VA_UART)
bic \rd, \rd, #0xff000
ldr \rd, [ \rd, # S3C2440_GSTATUS1 - S3C2440_GPIOREG(0) ]
and \rd, \rd, #0x00ff0000
teq \rd, #0x00440000 @ is it 2440?
ldr \rd, [ \rx, # S3C2440_UFSTAT ]
andne \rd, \rd, #S3C2440_UFSTAT_TXMASK
andeq \rd, \rd, #S3C2440_UFSTAT_TXMASK
teq \rd, #0
bne 1003b
b 1002f
1001:
@ idle waiting for non fifo
ldr \rd, [ \rx, # S3C2440_UTRSTAT ]
tst \rd, #S3C2440_UTRSTAT_TXFE
beq 1001b
1002: @ exit busyuart
.endm
-----
ENTRY(printascii)
addruart r3
b 2f
1: waituart r2, r3
senduart r1, r3
busyuart r2, r3
teq r1, #'\n'
moveq r1, #'\r'
beq 1b
2: teq r0, #0
ldrneb r1, [r0], #1
teqne r1, #0
bne 1b
mov pc, lr