flash_to_page: @ scene number in R0, page number in R1
PUSH {R4-R5,LR}
BICS R4,R0,#0xFC00 @ remove CSP header
MOVS R5,R1
LDR R3,=LPC_SPI0_BASE
MOVS R2,#clockspeed/5000000
STR R2,[R3,SPIDIV]
BL e2busy
MOVS R2,#0x03000000 @ read command
ADDS R2,R2,R4,LSL #6
BL waitspitx
LSRS R0,R2,#16
MOVT R0,#0xF4D @ 16 bit, ignore rx, eeprom cs
STR R0,[R3,SPITXDATCTL]
BL waitspitx
UXTH R0,R2
MOVT R0,#0xF6D
STR R0,[R3,SPITXDATCTL]
LDR R4,=PAGELEVELS
MOVS R2,#0
ADDS R4,R4,R5,LSL #4
fetchlevel: BL waitspitx
LDR R0,=0xF2D0000
STR R0,[R3,SPITXDATCTL]
BL waitspirx
LDR R0,[R3,SPIRXDAT]
STRH R0,[R4],#2
ADDS R2,#2
CMP R2,#16
BLO.n fetchlevel
LDR R4,=PAGEALLOCS
MOVS R2,#0
ADDS R4,R4,R5,LSL #5
fetchalloc: BL waitspitx
LDR R0,=0xF2D0000
STR R0,[R3,SPITXDATCTL]
BL waitspirx
LDR R0,[R3,SPIRXDAT]
STRH R0,[R4],#2
ADDS R2,#1
CMP R2,#16
BLO.n fetchalloc
MOVS R0,#0x80
STR R0,[R3,SPISTAT] @ force EOT
POP {R4-R5,PC} |
waitspirx: LDR R0,[R3,SPISTAT] @ R3 points to SPI LSRS R0,R0,#1 BCC.n waitspirx BX LR waitspitx: LDR R0,[R3,SPISTAT] @ R3 points to SPI LSRS R0,R0,#2 BCC.n waitspitx BX LR |
e2busy: PUSH {LR}
LDR R3,=LPC_SPI0_BASE
BL waitspitx
MOVS R0,#5
MOVT R0,#0x74D @ 8 bit write, ignore RX, EEPROM cs
STR R0,[R3,SPITXDATCTL]
writecomplete: BL waitspitx
MOVT R0,0x70D @ 8 bit write, EEPROM cs
STR R0,[R3,SPITXDATCTL]
BL waitspirx
LDR R0,[R3,SPIRXDAT] @ keep reading status register until ready
LSRS R0,R0,#1
BCS.n writecomplete
MOVS R0,#0x80
STR R0,[R3,SPISTAT] @ end transmission
POP {PC} |
Hi there,
How can i wait until the tx buffer is done.
I know that TFE bit of status register indicates that tx buffer is empty but how can i wait until tx buffer is empty if i dont force tx buff to empty?
Can you share some code or make any suggestion of what the meaning of waiting until tx buf is empty?