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?