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} |