moved graphops into a dedicated sourcefile.
This commit is contained in:
@@ -156,6 +156,7 @@
|
|||||||
.include "modules/lcd2/ili9341/defs.asm"
|
.include "modules/lcd2/ili9341/defs.asm"
|
||||||
.include "modules/lcd2/ili9341/main.asm"
|
.include "modules/lcd2/ili9341/main.asm"
|
||||||
.include "modules/lcd2/ili9341/io_spi.asm"
|
.include "modules/lcd2/ili9341/io_spi.asm"
|
||||||
|
.include "modules/lcd2/ili9341/graphops.asm"
|
||||||
.include "modules/lcd2/ili9341/text.asm"
|
.include "modules/lcd2/ili9341/text.asm"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
font1_8x8:
|
font1_8x8:
|
||||||
; header
|
; header
|
||||||
rjmp font8x8MonoRenderCharacter ; renderFn
|
.dw font8x8MonoRenderCharacter ; renderFn
|
||||||
.db 128, 0 ; needed buffer size
|
.db 128, 0 ; needed buffer size
|
||||||
.db 8, 8 ; width, height of chars
|
.db 8, 8 ; width, height of chars
|
||||||
.db 32, 64 ; first char, num of chars in font
|
.db 32, 64 ; first char, num of chars in font
|
||||||
|
|||||||
@@ -31,9 +31,6 @@
|
|||||||
font8x8MonoRenderCharacter:
|
font8x8MonoRenderCharacter:
|
||||||
push zl
|
push zl
|
||||||
push zh
|
push zh
|
||||||
lsl zl
|
|
||||||
rol zh
|
|
||||||
|
|
||||||
rcall font8x8GetCharPosInFont8x8 ; (r17, r24, r25, z)
|
rcall font8x8GetCharPosInFont8x8 ; (r17, r24, r25, z)
|
||||||
ldi r25, 8 ; 8 bytes
|
ldi r25, 8 ; 8 bytes
|
||||||
font8x8MonoRenderCharacter_loop1:
|
font8x8MonoRenderCharacter_loop1:
|
||||||
|
|||||||
337
avr/modules/lcd2/ili9341/graphops.asm
Normal file
337
avr/modules/lcd2/ili9341/graphops.asm
Normal file
@@ -0,0 +1,337 @@
|
|||||||
|
; ***************************************************************************
|
||||||
|
; copyright : (C) 2025 by Martin Preuss
|
||||||
|
; email : martin@libchipcard.de
|
||||||
|
;
|
||||||
|
; ***************************************************************************
|
||||||
|
; * This file is part of the project "AqHome". *
|
||||||
|
; * Please see toplevel file COPYING of that project for license details. *
|
||||||
|
; ***************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine ili9341SetAddressWindow
|
||||||
|
;
|
||||||
|
; @param r5:r4 X0
|
||||||
|
; @param r7:r6 Y0
|
||||||
|
; @param r9:r8 W
|
||||||
|
; @param r11:r10 H
|
||||||
|
; @clobbers R16, r20, r21
|
||||||
|
|
||||||
|
ili9341SetAddressWindow:
|
||||||
|
; calc XEnd (=X+W-1)
|
||||||
|
mov r20, r8
|
||||||
|
mov r21, r9
|
||||||
|
add r20, r4
|
||||||
|
adc r21, r5
|
||||||
|
subi r20, 1
|
||||||
|
sbci r21, 0
|
||||||
|
|
||||||
|
; send column address
|
||||||
|
ldi r16, ILI9341_CMD_CASET
|
||||||
|
rcall ili9341SendCommand
|
||||||
|
; X0
|
||||||
|
mov r16, r5
|
||||||
|
rcall ili9341SendData
|
||||||
|
mov r16, r4
|
||||||
|
rcall ili9341SendData
|
||||||
|
; X1
|
||||||
|
mov r16, r21
|
||||||
|
rcall ili9341SendData
|
||||||
|
mov r16, r20
|
||||||
|
rcall ili9341SendData
|
||||||
|
|
||||||
|
; calc YEnd (=Y+H-1)
|
||||||
|
mov r20, r10
|
||||||
|
mov r21, r11
|
||||||
|
add r20, r6
|
||||||
|
adc r21, r7
|
||||||
|
subi r20, 1
|
||||||
|
sbci r21, 0
|
||||||
|
|
||||||
|
; send row address
|
||||||
|
ldi r16, ILI9341_CMD_PASET
|
||||||
|
rcall ili9341SendCommand
|
||||||
|
; Y0
|
||||||
|
mov r16, r7
|
||||||
|
rcall ili9341SendData
|
||||||
|
mov r16, r6
|
||||||
|
rcall ili9341SendData
|
||||||
|
; Y1
|
||||||
|
mov r16, r21
|
||||||
|
rcall ili9341SendData
|
||||||
|
mov r16, r20
|
||||||
|
rcall ili9341SendData
|
||||||
|
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine ILI9341_FillRect
|
||||||
|
; @param r3:r2 color
|
||||||
|
; @param r5:r4 X0
|
||||||
|
; @param r7:r6 Y0
|
||||||
|
; @param r9:r8 X1/W
|
||||||
|
; @param r11:r10 Y1/H
|
||||||
|
|
||||||
|
ILI9341_FillRect:
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
|
||||||
|
rcall ili9341BeginSpi ; (R16, R17)
|
||||||
|
rcall ili9341SetAddressWindow ; (R16, r20, r21)
|
||||||
|
|
||||||
|
mov r18, r2 ; color
|
||||||
|
mov r19, r3
|
||||||
|
mov r22, r10 ; H low
|
||||||
|
mov r23, r11 ; H high
|
||||||
|
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||||
|
rcall ili9341SendCommand
|
||||||
|
|
||||||
|
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||||
|
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
||||||
|
ILI9341_FillRect_loopH:
|
||||||
|
mov r24, r8 ; W low
|
||||||
|
mov r25, r9 ; W high
|
||||||
|
ILI9341_FillRect_loopW:
|
||||||
|
mov r16, r19
|
||||||
|
rcall SPIHW_MasterTransfer
|
||||||
|
mov r16, r18
|
||||||
|
rcall SPIHW_MasterTransfer
|
||||||
|
sbiw r25:r24, 1
|
||||||
|
brne ILI9341_FillRect_loopW
|
||||||
|
mov r24, r22 ; H low
|
||||||
|
mov r25, r23 ; H high
|
||||||
|
sbiw r25:r24, 1 ; dec
|
||||||
|
mov r22, r24 ; save in r23:r22
|
||||||
|
mov r23, r25
|
||||||
|
brne ILI9341_FillRect_loopH
|
||||||
|
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
||||||
|
rcall ili9341EndSpi
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine ili9341BitBlit
|
||||||
|
|
||||||
|
; @param r5:r4 X (dest)
|
||||||
|
; @param r7:r6 Y (dest)
|
||||||
|
; @param r9:r8 W
|
||||||
|
; @param r11:r10 H
|
||||||
|
; @param X source data pointer (RAM)
|
||||||
|
; @clobbers r16, r22, r23, r24, r25, X (r17, r20, r21)
|
||||||
|
|
||||||
|
ili9341BitBlit:
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
|
||||||
|
rcall ili9341BeginSpi ; (r16, r17)
|
||||||
|
rcall ili9341SetAddressWindow ; (R16, R20, R21)
|
||||||
|
|
||||||
|
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||||
|
rcall ili9341SendCommand
|
||||||
|
|
||||||
|
mov r22, r10
|
||||||
|
mov r23, r11
|
||||||
|
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||||
|
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
||||||
|
ili9341BitBlit_loopH:
|
||||||
|
mov r24, r8
|
||||||
|
mov r25, r9
|
||||||
|
ili9341BitBlit_loopW:
|
||||||
|
ld r18, X+
|
||||||
|
ld r19, X+
|
||||||
|
mov r16, r19
|
||||||
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
|
mov r16, r18
|
||||||
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
|
sbiw r25:r24, 1
|
||||||
|
brne ili9341BitBlit_loopW
|
||||||
|
mov r24, r22
|
||||||
|
mov r25, r23
|
||||||
|
sbiw r25:r24, 1
|
||||||
|
mov r22, r24
|
||||||
|
mov r23, r25
|
||||||
|
brne ili9341BitBlit_loopH
|
||||||
|
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
||||||
|
rcall ili9341EndSpi ; (R16)
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine ili9341BitBlitStretch2
|
||||||
|
|
||||||
|
; @param r5:r4 X (dest)
|
||||||
|
; @param r7:r6 Y (dest)
|
||||||
|
; @param r9:r8 W
|
||||||
|
; @param r11:r10 H
|
||||||
|
; @param X source data pointer (RAM)
|
||||||
|
; @clobbers r16, r22, r23, r24, r25, X (r17, r18, r19, r20, r21)
|
||||||
|
|
||||||
|
ili9341BitBlitStretch2:
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
|
||||||
|
push r8
|
||||||
|
push r9
|
||||||
|
push r10
|
||||||
|
push r11
|
||||||
|
; width
|
||||||
|
lsl r8 ; x2
|
||||||
|
rol r9
|
||||||
|
; height
|
||||||
|
lsl r10 ; x2
|
||||||
|
rol r11
|
||||||
|
|
||||||
|
rcall ili9341BeginSpi ; (r16, r17)
|
||||||
|
rcall ili9341SetAddressWindow ; (R16, R20, R21)
|
||||||
|
pop r11
|
||||||
|
pop r10
|
||||||
|
pop r9
|
||||||
|
pop r8
|
||||||
|
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||||
|
rcall ili9341SendCommand
|
||||||
|
|
||||||
|
mov r22, r10
|
||||||
|
mov r23, r11
|
||||||
|
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||||
|
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
||||||
|
ldi r17, 2
|
||||||
|
ili9341BitBlitStretch2_loopH:
|
||||||
|
mov r20, xl ; preserve for next run
|
||||||
|
mov r21, xh
|
||||||
|
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
||||||
|
mov xl, r20
|
||||||
|
mov xh, r21
|
||||||
|
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
||||||
|
mov r24, r22
|
||||||
|
mov r25, r23
|
||||||
|
sbiw r25:r24, 1
|
||||||
|
mov r22, r24
|
||||||
|
mov r23, r25
|
||||||
|
brne ili9341BitBlitStretch2_loopH
|
||||||
|
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
||||||
|
rcall ili9341EndSpi ; (R16)
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine ili9341BitBlitStretch4
|
||||||
|
|
||||||
|
; @param r5:r4 X (dest)
|
||||||
|
; @param r7:r6 Y (dest)
|
||||||
|
; @param r9:r8 W
|
||||||
|
; @param r11:r10 H
|
||||||
|
; @param X source data pointer (RAM)
|
||||||
|
; @clobbers r16, r22, r23, r24, r25, X (r17, r20, r21)
|
||||||
|
|
||||||
|
ili9341BitBlitStretch4:
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
|
||||||
|
push r8
|
||||||
|
push r9
|
||||||
|
push r10
|
||||||
|
push r11
|
||||||
|
; width
|
||||||
|
lsl r8 ; x2
|
||||||
|
rol r9
|
||||||
|
lsl r8 ; x4
|
||||||
|
rol r9
|
||||||
|
; height
|
||||||
|
lsl r10 ; x2
|
||||||
|
rol r11
|
||||||
|
lsl r10 ; x4
|
||||||
|
rol r11
|
||||||
|
|
||||||
|
rcall ili9341BeginSpi ; (r16, r17)
|
||||||
|
rcall ili9341SetAddressWindow ; (R16, R20, R21)
|
||||||
|
pop r11
|
||||||
|
pop r10
|
||||||
|
pop r9
|
||||||
|
pop r8
|
||||||
|
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||||
|
rcall ili9341SendCommand
|
||||||
|
|
||||||
|
mov r22, r10
|
||||||
|
mov r23, r11
|
||||||
|
ldi r17, 4
|
||||||
|
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||||
|
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
||||||
|
ili9341BitBlitStretch4_loopH:
|
||||||
|
mov r20, xl ; preserve for next run
|
||||||
|
mov r21, xh
|
||||||
|
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
||||||
|
mov xl, r20
|
||||||
|
mov xh, r21
|
||||||
|
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
||||||
|
mov xl, r20
|
||||||
|
mov xh, r21
|
||||||
|
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
||||||
|
mov xl, r20
|
||||||
|
mov xh, r21
|
||||||
|
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
||||||
|
mov r24, r22
|
||||||
|
mov r25, r23
|
||||||
|
sbiw r25:r24, 1
|
||||||
|
mov r22, r24
|
||||||
|
mov r23, r25
|
||||||
|
brne ili9341BitBlitStretch4_loopH
|
||||||
|
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
||||||
|
rcall ili9341EndSpi ; (R16)
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine ili9341BitBlitStretchNWriteLine
|
||||||
|
|
||||||
|
; @param r9:r8 width
|
||||||
|
; @param r17 repeat factor
|
||||||
|
; @param X source position of line
|
||||||
|
; @clobbers r16, r17, r18, r19, r24, r25, X
|
||||||
|
|
||||||
|
ili9341BitBlitStretchNWriteLine:
|
||||||
|
mov r24, r8
|
||||||
|
mov r25, r9
|
||||||
|
ili9341BitBlitStretchNWriteLine_loop1:
|
||||||
|
ld r18, X+
|
||||||
|
ld r19, X+
|
||||||
|
push r17
|
||||||
|
ili9341BitBlitStretchNWriteLine_loop2:
|
||||||
|
mov r16, r19
|
||||||
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
|
mov r16, r18
|
||||||
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
|
dec r17
|
||||||
|
brne ili9341BitBlitStretchNWriteLine_loop2
|
||||||
|
pop r17
|
||||||
|
sbiw r25:r24, 1
|
||||||
|
brne ili9341BitBlitStretchNWriteLine_loop1
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -97,8 +97,8 @@ ILI9341_Init:
|
|||||||
mov r7, r16
|
mov r7, r16
|
||||||
|
|
||||||
; set font pos
|
; set font pos
|
||||||
ldi zl, LOW(font1_8x8)
|
ldi zl, LOW(font1_8x8*2)
|
||||||
ldi zh, HIGH(font1_8x8)
|
ldi zh, HIGH(font1_8x8*2)
|
||||||
|
|
||||||
; set buffer pos
|
; set buffer pos
|
||||||
; ldi xl, LOW(ILI9341_buffer)
|
; ldi xl, LOW(ILI9341_buffer)
|
||||||
@@ -279,328 +279,12 @@ ILI9341_FillScreen:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
|
||||||
; @routine ili9341SetAddressWindow
|
|
||||||
;
|
|
||||||
; @param r5:r4 X0
|
|
||||||
; @param r7:r6 Y0
|
|
||||||
; @param r9:r8 W
|
|
||||||
; @param r11:r10 H
|
|
||||||
; @clobbers R16, r20, r21
|
|
||||||
|
|
||||||
ili9341SetAddressWindow:
|
|
||||||
; calc XEnd (=X+W-1)
|
|
||||||
mov r20, r8
|
|
||||||
mov r21, r9
|
|
||||||
add r20, r4
|
|
||||||
adc r21, r5
|
|
||||||
subi r20, 1
|
|
||||||
sbci r21, 0
|
|
||||||
|
|
||||||
; send column address
|
|
||||||
ldi r16, ILI9341_CMD_CASET
|
|
||||||
rcall ili9341SendCommand
|
|
||||||
; X0
|
|
||||||
mov r16, r5
|
|
||||||
rcall ili9341SendData
|
|
||||||
mov r16, r4
|
|
||||||
rcall ili9341SendData
|
|
||||||
; X1
|
|
||||||
mov r16, r21
|
|
||||||
rcall ili9341SendData
|
|
||||||
mov r16, r20
|
|
||||||
rcall ili9341SendData
|
|
||||||
|
|
||||||
; calc YEnd (=Y+H-1)
|
|
||||||
mov r20, r10
|
|
||||||
mov r21, r11
|
|
||||||
add r20, r6
|
|
||||||
adc r21, r7
|
|
||||||
subi r20, 1
|
|
||||||
sbci r21, 0
|
|
||||||
|
|
||||||
; send row address
|
|
||||||
ldi r16, ILI9341_CMD_PASET
|
|
||||||
rcall ili9341SendCommand
|
|
||||||
; Y0
|
|
||||||
mov r16, r7
|
|
||||||
rcall ili9341SendData
|
|
||||||
mov r16, r6
|
|
||||||
rcall ili9341SendData
|
|
||||||
; Y1
|
|
||||||
mov r16, r21
|
|
||||||
rcall ili9341SendData
|
|
||||||
mov r16, r20
|
|
||||||
rcall ili9341SendData
|
|
||||||
|
|
||||||
ret
|
|
||||||
; @end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
|
||||||
; @routine ILI9341_FillRect
|
|
||||||
; @param r3:r2 color
|
|
||||||
; @param r5:r4 X0
|
|
||||||
; @param r7:r6 Y0
|
|
||||||
; @param r9:r8 X1/W
|
|
||||||
; @param r11:r10 Y1/H
|
|
||||||
|
|
||||||
ILI9341_FillRect:
|
|
||||||
push r15
|
|
||||||
in r15, SREG
|
|
||||||
cli
|
|
||||||
|
|
||||||
rcall ili9341BeginSpi ; (R16, R17)
|
|
||||||
rcall ili9341SetAddressWindow ; (R16, r20, r21)
|
|
||||||
|
|
||||||
mov r18, r2 ; color
|
|
||||||
mov r19, r3
|
|
||||||
mov r22, r10 ; H low
|
|
||||||
mov r23, r11 ; H high
|
|
||||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
|
||||||
rcall ili9341SendCommand
|
|
||||||
|
|
||||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
|
||||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
|
||||||
ILI9341_FillRect_loopH:
|
|
||||||
mov r24, r8 ; W low
|
|
||||||
mov r25, r9 ; W high
|
|
||||||
ILI9341_FillRect_loopW:
|
|
||||||
mov r16, r19
|
|
||||||
rcall SPIHW_MasterTransfer
|
|
||||||
mov r16, r18
|
|
||||||
rcall SPIHW_MasterTransfer
|
|
||||||
sbiw r25:r24, 1
|
|
||||||
brne ILI9341_FillRect_loopW
|
|
||||||
mov r24, r22 ; H low
|
|
||||||
mov r25, r23 ; H high
|
|
||||||
sbiw r25:r24, 1 ; dec
|
|
||||||
mov r22, r24 ; save in r23:r22
|
|
||||||
mov r23, r25
|
|
||||||
brne ILI9341_FillRect_loopH
|
|
||||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
|
||||||
rcall ili9341EndSpi
|
|
||||||
out SREG, r15
|
|
||||||
pop r15
|
|
||||||
ret
|
|
||||||
; @end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
|
||||||
; @routine ili9341BitBlit
|
|
||||||
|
|
||||||
; @param r5:r4 X (dest)
|
|
||||||
; @param r7:r6 Y (dest)
|
|
||||||
; @param r9:r8 W
|
|
||||||
; @param r11:r10 H
|
|
||||||
; @param X source data pointer (RAM)
|
|
||||||
; @clobbers r16, r22, r23, r24, r25, X (r17, r20, r21)
|
|
||||||
|
|
||||||
ili9341BitBlit:
|
|
||||||
push r15
|
|
||||||
in r15, SREG
|
|
||||||
cli
|
|
||||||
|
|
||||||
rcall ili9341BeginSpi ; (r16, r17)
|
|
||||||
rcall ili9341SetAddressWindow ; (R16, R20, R21)
|
|
||||||
|
|
||||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
|
||||||
rcall ili9341SendCommand
|
|
||||||
|
|
||||||
mov r22, r10
|
|
||||||
mov r23, r11
|
|
||||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
|
||||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
|
||||||
ili9341BitBlit_loopH:
|
|
||||||
mov r24, r8
|
|
||||||
mov r25, r9
|
|
||||||
ili9341BitBlit_loopW:
|
|
||||||
ld r18, X+
|
|
||||||
ld r19, X+
|
|
||||||
mov r16, r19
|
|
||||||
rcall SPIHW_MasterTransfer ; (R16)
|
|
||||||
mov r16, r18
|
|
||||||
rcall SPIHW_MasterTransfer ; (R16)
|
|
||||||
sbiw r25:r24, 1
|
|
||||||
brne ili9341BitBlit_loopW
|
|
||||||
mov r24, r22
|
|
||||||
mov r25, r23
|
|
||||||
sbiw r25:r24, 1
|
|
||||||
mov r22, r24
|
|
||||||
mov r23, r25
|
|
||||||
brne ili9341BitBlit_loopH
|
|
||||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
|
||||||
rcall ili9341EndSpi ; (R16)
|
|
||||||
out SREG, r15
|
|
||||||
pop r15
|
|
||||||
ret
|
|
||||||
; @end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
|
||||||
; @routine ili9341BitBlitStretch2
|
|
||||||
|
|
||||||
; @param r5:r4 X (dest)
|
|
||||||
; @param r7:r6 Y (dest)
|
|
||||||
; @param r9:r8 W
|
|
||||||
; @param r11:r10 H
|
|
||||||
; @param X source data pointer (RAM)
|
|
||||||
; @clobbers r16, r22, r23, r24, r25, X (r17, r18, r19, r20, r21)
|
|
||||||
|
|
||||||
ili9341BitBlitStretch2:
|
|
||||||
push r15
|
|
||||||
in r15, SREG
|
|
||||||
cli
|
|
||||||
|
|
||||||
push r8
|
|
||||||
push r9
|
|
||||||
push r10
|
|
||||||
push r11
|
|
||||||
; width
|
|
||||||
lsl r8 ; x2
|
|
||||||
rol r9
|
|
||||||
; height
|
|
||||||
lsl r10 ; x2
|
|
||||||
rol r11
|
|
||||||
|
|
||||||
rcall ili9341BeginSpi ; (r16, r17)
|
|
||||||
rcall ili9341SetAddressWindow ; (R16, R20, R21)
|
|
||||||
pop r11
|
|
||||||
pop r10
|
|
||||||
pop r9
|
|
||||||
pop r8
|
|
||||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
|
||||||
rcall ili9341SendCommand
|
|
||||||
|
|
||||||
mov r22, r10
|
|
||||||
mov r23, r11
|
|
||||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
|
||||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
|
||||||
ldi r17, 2
|
|
||||||
ili9341BitBlitStretch2_loopH:
|
|
||||||
mov r20, xl ; preserve for next run
|
|
||||||
mov r21, xh
|
|
||||||
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
|
||||||
mov xl, r20
|
|
||||||
mov xh, r21
|
|
||||||
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
|
||||||
mov r24, r22
|
|
||||||
mov r25, r23
|
|
||||||
sbiw r25:r24, 1
|
|
||||||
mov r22, r24
|
|
||||||
mov r23, r25
|
|
||||||
brne ili9341BitBlitStretch2_loopH
|
|
||||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
|
||||||
rcall ili9341EndSpi ; (R16)
|
|
||||||
out SREG, r15
|
|
||||||
pop r15
|
|
||||||
ret
|
|
||||||
; @end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
|
||||||
; @routine ili9341BitBlitStretch4
|
|
||||||
|
|
||||||
; @param r5:r4 X (dest)
|
|
||||||
; @param r7:r6 Y (dest)
|
|
||||||
; @param r9:r8 W
|
|
||||||
; @param r11:r10 H
|
|
||||||
; @param X source data pointer (RAM)
|
|
||||||
; @clobbers r16, r22, r23, r24, r25, X (r17, r20, r21)
|
|
||||||
|
|
||||||
ili9341BitBlitStretch4:
|
|
||||||
push r15
|
|
||||||
in r15, SREG
|
|
||||||
cli
|
|
||||||
|
|
||||||
push r8
|
|
||||||
push r9
|
|
||||||
push r10
|
|
||||||
push r11
|
|
||||||
; width
|
|
||||||
lsl r8 ; x2
|
|
||||||
rol r9
|
|
||||||
lsl r8 ; x4
|
|
||||||
rol r9
|
|
||||||
; height
|
|
||||||
lsl r10 ; x2
|
|
||||||
rol r11
|
|
||||||
lsl r10 ; x4
|
|
||||||
rol r11
|
|
||||||
|
|
||||||
rcall ili9341BeginSpi ; (r16, r17)
|
|
||||||
rcall ili9341SetAddressWindow ; (R16, R20, R21)
|
|
||||||
pop r11
|
|
||||||
pop r10
|
|
||||||
pop r9
|
|
||||||
pop r8
|
|
||||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
|
||||||
rcall ili9341SendCommand
|
|
||||||
|
|
||||||
mov r22, r10
|
|
||||||
mov r23, r11
|
|
||||||
ldi r17, 4
|
|
||||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
|
||||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
|
||||||
ili9341BitBlitStretch4_loopH:
|
|
||||||
mov r20, xl ; preserve for next run
|
|
||||||
mov r21, xh
|
|
||||||
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
|
||||||
mov xl, r20
|
|
||||||
mov xh, r21
|
|
||||||
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
|
||||||
mov xl, r20
|
|
||||||
mov xh, r21
|
|
||||||
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
|
||||||
mov xl, r20
|
|
||||||
mov xh, r21
|
|
||||||
rcall ili9341BitBlitStretchNWriteLine ; (r16, r17, r18, r19, r24, r25, X)
|
|
||||||
mov r24, r22
|
|
||||||
mov r25, r23
|
|
||||||
sbiw r25:r24, 1
|
|
||||||
mov r22, r24
|
|
||||||
mov r23, r25
|
|
||||||
brne ili9341BitBlitStretch4_loopH
|
|
||||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
|
||||||
rcall ili9341EndSpi ; (R16)
|
|
||||||
out SREG, r15
|
|
||||||
pop r15
|
|
||||||
ret
|
|
||||||
; @end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
|
||||||
; @routine ili9341BitBlitStretchNWriteLine
|
|
||||||
|
|
||||||
; @param r9:r8 width
|
|
||||||
; @param r17 repeat factor
|
|
||||||
; @param X source position of line
|
|
||||||
; @clobbers r16, r17, r18, r19, r24, r25, X
|
|
||||||
|
|
||||||
ili9341BitBlitStretchNWriteLine:
|
|
||||||
mov r24, r8
|
|
||||||
mov r25, r9
|
|
||||||
ili9341BitBlitStretchNWriteLine_loop1:
|
|
||||||
ld r18, X+
|
|
||||||
ld r19, X+
|
|
||||||
push r17
|
|
||||||
ili9341BitBlitStretchNWriteLine_loop2:
|
|
||||||
mov r16, r19
|
|
||||||
rcall SPIHW_MasterTransfer ; (R16)
|
|
||||||
mov r16, r18
|
|
||||||
rcall SPIHW_MasterTransfer ; (R16)
|
|
||||||
dec r17
|
|
||||||
brne ili9341BitBlitStretchNWriteLine_loop2
|
|
||||||
pop r17
|
|
||||||
sbiw r25:r24, 1
|
|
||||||
brne ili9341BitBlitStretchNWriteLine_loop1
|
|
||||||
ret
|
|
||||||
; @end
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -23,13 +23,13 @@
|
|||||||
; @param r7:r6 Y
|
; @param r7:r6 Y
|
||||||
; @param r1:r0 background color
|
; @param r1:r0 background color
|
||||||
; @param r3:r2 foreground color
|
; @param r3:r2 foreground color
|
||||||
; @param Z pointer to font (word address!)
|
; @param Z pointer to font (byte address for LPM!)
|
||||||
; @param X pointer to RAM to store data to
|
; @param X pointer to RAM to store data to
|
||||||
; @return r5:r4 new X (advanced by character width)
|
; @return r5:r4 new X (advanced by character width)
|
||||||
; @clobbers r16 (r17, r20, r21, r22, r23, r24, r25, X)
|
; @clobbers r16 (r17, r20, r21, r22, r23, r24, r25, X)
|
||||||
|
|
||||||
ili9341_WriteCharacterX1At:
|
ili9341_WriteCharacterX1At:
|
||||||
rcall ili9341PrepareCharFromFont ; (r16, r17, r24, r25, z)
|
rcall ili9341FontRenderChar ; (r16, r17, r24, r25, z)
|
||||||
rcall ili9341BitBlit ; (r16, r17, r20, r21, r22, r23, r24, r25, X)
|
rcall ili9341BitBlit ; (r16, r17, r20, r21, r22, r23, r24, r25, X)
|
||||||
; advance X (add char width to X)
|
; advance X (add char width to X)
|
||||||
add r4, r8
|
add r4, r8
|
||||||
@@ -48,13 +48,13 @@ ili9341_WriteCharacterX1At:
|
|||||||
; @param r7:r6 Y
|
; @param r7:r6 Y
|
||||||
; @param r1:r0 background color
|
; @param r1:r0 background color
|
||||||
; @param r3:r2 foreground color
|
; @param r3:r2 foreground color
|
||||||
; @param Z pointer to font (word address!)
|
; @param Z pointer to font (byte address for LPM!)
|
||||||
; @param X pointer to RAM to store data to
|
; @param X pointer to RAM to store data to
|
||||||
; @return r5:r4 new X (advanced by character width)
|
; @return r5:r4 new X (advanced by character width)
|
||||||
; @clobbers r16 (r17, r18, r19, r20, r21, r22, r23, r24, r25, X)
|
; @clobbers r16 (r17, r18, r19, r20, r21, r22, r23, r24, r25, X)
|
||||||
|
|
||||||
ili9341_WriteCharacterX2At:
|
ili9341_WriteCharacterX2At:
|
||||||
rcall ili9341PrepareCharFromFont ; (r16, r17, r24, r25, z)
|
rcall ili9341FontRenderChar ; (r16, r17, r24, r25, z)
|
||||||
rcall ili9341BitBlitStretch2 ; (r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, X)
|
rcall ili9341BitBlitStretch2 ; (r16, r17, r18, r19, r20, r21, r22, r23, r24, r25, X)
|
||||||
; advance X (add double char width to X)
|
; advance X (add double char width to X)
|
||||||
lsl r8 ; Wx2
|
lsl r8 ; Wx2
|
||||||
@@ -74,13 +74,13 @@ ili9341_WriteCharacterX2At:
|
|||||||
; @param r7:r6 Y
|
; @param r7:r6 Y
|
||||||
; @param r1:r0 background color
|
; @param r1:r0 background color
|
||||||
; @param r3:r2 foreground color
|
; @param r3:r2 foreground color
|
||||||
; @param Z pointer to font (word address!)
|
; @param Z pointer to font (byte address for LPM!)
|
||||||
; @param X pointer to RAM to store data to
|
; @param X pointer to RAM to store data to
|
||||||
; @return r5:r4 new X (advanced by character width)
|
; @return r5:r4 new X (advanced by character width)
|
||||||
; @clobbers r16, r17, r18, r19, r24, r25, x, z
|
; @clobbers r16, r17, r18, r19, r24, r25, x, z
|
||||||
|
|
||||||
ili9341_WriteCharacterX4At:
|
ili9341_WriteCharacterX4At:
|
||||||
rcall ili9341PrepareCharFromFont ; (r16, r17, r24, r25, z)
|
rcall ili9341FontRenderChar ; (r16, r17, r24, r25, z)
|
||||||
rcall ili9341BitBlitStretch4 ; (r16, r17, r20, r21, r22, r23, r24, r25, X)
|
rcall ili9341BitBlitStretch4 ; (r16, r17, r20, r21, r22, r23, r24, r25, X)
|
||||||
; advance X (add quad char width to X)
|
; advance X (add quad char width to X)
|
||||||
lsl r8 ; Wx2
|
lsl r8 ; Wx2
|
||||||
@@ -97,7 +97,7 @@ ili9341_WriteCharacterX4At:
|
|||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine ili9341PrepareCharFromFont
|
; @routine ili9341FontRenderChar
|
||||||
|
|
||||||
; @param R16 character to write
|
; @param R16 character to write
|
||||||
; @param Z pointer to font
|
; @param Z pointer to font
|
||||||
@@ -106,7 +106,7 @@ ili9341_WriteCharacterX4At:
|
|||||||
; @return r11:r10 character height in points
|
; @return r11:r10 character height in points
|
||||||
; @clobbers r16 (r17, r24, r25, z)
|
; @clobbers r16 (r17, r24, r25, z)
|
||||||
|
|
||||||
ili9341PrepareCharFromFont:
|
ili9341FontRenderChar:
|
||||||
; render character
|
; render character
|
||||||
push xl
|
push xl
|
||||||
push xh
|
push xh
|
||||||
@@ -129,9 +129,15 @@ ili9341PrepareCharFromFont:
|
|||||||
; @routine ili9341JumpToFontRenderFn
|
; @routine ili9341JumpToFontRenderFn
|
||||||
;
|
;
|
||||||
; helper function to call function at the beginning of the given font
|
; helper function to call function at the beginning of the given font
|
||||||
|
; @clobbers r17
|
||||||
|
|
||||||
ili9341JumpToFontRenderFn:
|
ili9341JumpToFontRenderFn:
|
||||||
ijmp
|
lpm r17, Z+
|
||||||
|
push r17
|
||||||
|
lpm r17, Z
|
||||||
|
push r17
|
||||||
|
sbiw zh:zl, 1
|
||||||
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user