ili9341: moved io code into own file. changed args to r0-r11.
This commit is contained in:
@@ -155,6 +155,7 @@
|
||||
#ifdef MODULES_ILI9341
|
||||
.include "modules/lcd2/ili9341/defs.asm"
|
||||
.include "modules/lcd2/ili9341/main.asm"
|
||||
.include "modules/lcd2/ili9341/io_spi.asm"
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
112
avr/modules/lcd2/ili9341/io_spi.asm
Normal file
112
avr/modules/lcd2/ili9341/io_spi.asm
Normal file
@@ -0,0 +1,112 @@
|
||||
; ***************************************************************************
|
||||
; 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. *
|
||||
; ***************************************************************************
|
||||
|
||||
; generally we use the following parameters here:
|
||||
; @param r1:r0 background color
|
||||
; @param r3:r2 foreground color
|
||||
; @param r5:r4 X0
|
||||
; @param r7:r6 Y0
|
||||
; @param r9:r8 X1/W
|
||||
; @param r11:r10 Y1/H
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; defines
|
||||
|
||||
.equ ILI9341_SPIMODE = (0<<SPIHW_MODE_SPEED0_BIT) | \
|
||||
(0<<SPIHW_MODE_SPEED1_BIT) | \
|
||||
(1<<SPIHW_MODE_DOUBLESPEED_BIT) | \
|
||||
(0<<SPIHW_MODE_DATAORDER_BIT) | \
|
||||
(0<<SPIHW_MODE_CPOL_BIT) | \
|
||||
(0<<SPIHW_MODE_CPHA_BIT)
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; code
|
||||
|
||||
.cseg
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ILI9341IoInit @global
|
||||
|
||||
ILI9341IoInit:
|
||||
; setup pins
|
||||
sbi ILI9341_RESET_DDR, ILI9341_RESET_PIN ; RESET= output
|
||||
sbi ILI9341_RESET_OUTPUT, ILI9341_RESET_PIN ; RESET= high
|
||||
sbi ILI9341_DC_DDR, ILI9341_DC_PIN ; DC = output
|
||||
sbi ILI9341_LED_DDR, ILI9341_LED_PIN ; LED = output
|
||||
cbi ILI9341_LED_OUTPUT, ILI9341_LED_PIN ; LED = low
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341BeginSpi
|
||||
;
|
||||
; @clobbers r16, r17
|
||||
|
||||
ili9341BeginSpi:
|
||||
ldi r16, ILI9341_SPIMODE
|
||||
ldi r17, ILI9341_DEVICENUM
|
||||
rjmp SPIHW_MasterStart ; (R18)
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341EndSpi
|
||||
;
|
||||
; @clobbers r16
|
||||
|
||||
ili9341EndSpi:
|
||||
rjmp SPIHW_MasterStop ; (R16)
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
ili9341SendCommand:
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
cbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D low
|
||||
nop
|
||||
rcall SPIHW_MasterTransfer
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
ili9341SendData:
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; @param r19:18 data
|
||||
ili9341Send16BitData:
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high
|
||||
mov r16, r19
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
mov r16, r18
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
@@ -7,16 +7,13 @@
|
||||
; * Please see toplevel file COPYING of that project for license details. *
|
||||
; ***************************************************************************
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; defines
|
||||
|
||||
.equ ILI9341_SPIMODE = (0<<SPIHW_MODE_SPEED0_BIT) | \
|
||||
(0<<SPIHW_MODE_SPEED1_BIT) | \
|
||||
(1<<SPIHW_MODE_DOUBLESPEED_BIT) | \
|
||||
(0<<SPIHW_MODE_DATAORDER_BIT) | \
|
||||
(0<<SPIHW_MODE_CPOL_BIT) | \
|
||||
(0<<SPIHW_MODE_CPHA_BIT)
|
||||
; generally we use the following parameters here:
|
||||
; @param r1:r0 background color
|
||||
; @param r3:r2 foreground color
|
||||
; @param r5:r4 X0
|
||||
; @param r7:r6 Y0
|
||||
; @param r9:r8 X1/W
|
||||
; @param r11:r10 Y1/H
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
@@ -24,8 +21,6 @@
|
||||
|
||||
.dseg
|
||||
|
||||
ILI9341_foregroundColor: .byte 2
|
||||
ILI9341_backgroundColor: .byte 2
|
||||
ILI9341_buffer: .byte 128
|
||||
|
||||
|
||||
@@ -40,12 +35,7 @@ ILI9341_buffer: .byte 128
|
||||
; @routine ILI9341_Init @global
|
||||
|
||||
ILI9341_Init:
|
||||
; setup pins
|
||||
sbi ILI9341_RESET_DDR, ILI9341_RESET_PIN ; RESET= output
|
||||
sbi ILI9341_RESET_OUTPUT, ILI9341_RESET_PIN ; RESET= high
|
||||
sbi ILI9341_DC_DDR, ILI9341_DC_PIN ; DC = output
|
||||
sbi ILI9341_LED_DDR, ILI9341_LED_PIN ; LED = output
|
||||
cbi ILI9341_LED_OUTPUT, ILI9341_LED_PIN ; LED = low
|
||||
rcall ILI9341IoInit
|
||||
|
||||
rcall ILI9341_Reset
|
||||
|
||||
@@ -54,24 +44,33 @@ ILI9341_Init:
|
||||
ldi r16, 0xff
|
||||
rcall ILI9341_SetBacklight
|
||||
|
||||
ldi r17, 0xff
|
||||
|
||||
ldi r16, 0xff
|
||||
mov r3, r16
|
||||
ldi r16, 0xff
|
||||
mov r2, r16
|
||||
rcall ili9341Test5
|
||||
|
||||
; 0bRRRRRGGGGGGBBBBB
|
||||
ldi r17, 0b11111000 ; red
|
||||
|
||||
ldi r16, 0b11111000 ; red
|
||||
mov r3, r16
|
||||
ldi r16, 0b00000000 ; red
|
||||
; rcall ILI9341_FillScreen
|
||||
mov r2, r16
|
||||
rcall ili9341Test2
|
||||
|
||||
; 0bRRRRRGGGGGGBBBBB
|
||||
ldi r17, 0b00000000
|
||||
ldi r16, 0b00000000
|
||||
mov r3, r16
|
||||
ldi r16, 0b00011111 ; blue
|
||||
mov r2, r16
|
||||
rcall ili9341Test3
|
||||
|
||||
; 0bRRRRRGGGGGGBBBBB
|
||||
ldi r17, 0b00000111 ; green
|
||||
ldi r16, 0b00000111 ; green
|
||||
mov r3, r16
|
||||
ldi r16, 0b11100000 ; green
|
||||
mov r2, r16
|
||||
rcall ili9341Test4
|
||||
|
||||
; set foreground color
|
||||
@@ -86,12 +85,16 @@ ILI9341_Init:
|
||||
mov r1, r16
|
||||
|
||||
; set Xpos
|
||||
ldi r18, LOW(100)
|
||||
ldi r19, LOW(100)
|
||||
ldi r16, LOW(100)
|
||||
mov r4, r16
|
||||
ldi r16, HIGH(100)
|
||||
mov r5, r16
|
||||
|
||||
; setYpos
|
||||
ldi r20, LOW(150)
|
||||
ldi r21, HIGH(150)
|
||||
ldi r16, LOW(150)
|
||||
mov r6, r16
|
||||
ldi r16, HIGH(150)
|
||||
mov r7, r16
|
||||
|
||||
; set font pos
|
||||
ldi zl, LOW(font8x8*2)
|
||||
@@ -122,6 +125,41 @@ ILI9341_Fini:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341_SendCommands
|
||||
;
|
||||
; @clobbers r16
|
||||
|
||||
; Z=byte pointer to command list (as for LPM)
|
||||
|
||||
ili9341SendCommands:
|
||||
rcall ili9341BeginSpi
|
||||
ili9341SendCommands_loop1:
|
||||
lpm r16, Z+ ; read command
|
||||
lpm r18, Z+ ; read number of args
|
||||
cpi r18, 0xff ; end?
|
||||
breq ili9341SendCommands_end
|
||||
rcall ili9341SendCommand
|
||||
mov r19, r18
|
||||
andi r19, 1 ; if 1: need to skip filler byte
|
||||
tst r18
|
||||
breq ili9341SendCommands_loop1 ; no args, next command
|
||||
ili9341SendCommands_loop2:
|
||||
lpm r16, Z+
|
||||
rcall ili9341SendData ; (R16)
|
||||
dec r18
|
||||
brne ili9341SendCommands_loop2
|
||||
add zl, r19 ; possibly skip filler byte
|
||||
adc zh, r19
|
||||
sub zh, r19
|
||||
rjmp ili9341SendCommands_loop1
|
||||
ili9341SendCommands_end:
|
||||
rcall ili9341EndSpi ; (R16)
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ILI9341_Reset @global
|
||||
|
||||
@@ -215,42 +253,7 @@ ILI9341_LeaveSleepMode:
|
||||
; @param r17:r16 color
|
||||
|
||||
ILI9341_FillScreen:
|
||||
push r16
|
||||
push r17
|
||||
rcall ili9341BeginSpi ; (R16, R17)
|
||||
clr r18
|
||||
clr r19
|
||||
clr r20
|
||||
clr r21
|
||||
ldi r22, LOW(ILI9341_DSP_WIDTH-1)
|
||||
ldi r23, HIGH(ILI9341_DSP_WIDTH-1)
|
||||
ldi r24, LOW(ILI9341_DSP_HEIGHT-1)
|
||||
ldi r25, HIGH(ILI9341_DSP_HEIGHT-1)
|
||||
rcall ili9341SetAddressWindow ; (R16)
|
||||
pop r19 ; color high
|
||||
pop r18 ; color low
|
||||
|
||||
; start RAM write
|
||||
ldi r16, ILI9341_CMD_RAMWR
|
||||
rcall ili9341SendCommand
|
||||
|
||||
ldi r24, LOW(ILI9341_DSP_HEIGHT-1)
|
||||
ldi r25, HIGH(ILI9341_DSP_HEIGHT-1)
|
||||
ILI9341_FillScreen_loopH:
|
||||
push r24
|
||||
push r25
|
||||
ldi r24, LOW(ILI9341_DSP_WIDTH)
|
||||
ldi r25, HIGH(ILI9341_DSP_WIDTH)
|
||||
ILI9341_FillScreen_loopW:
|
||||
rcall ili9341Send16BitData
|
||||
sbiw r25:r24, 1
|
||||
brne ILI9341_FillScreen_loopW
|
||||
pop r25
|
||||
pop r24
|
||||
sbiw r25:r24, 1
|
||||
brne ILI9341_FillScreen_loopH
|
||||
|
||||
rcall ili9341EndSpi
|
||||
; TODO
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -258,57 +261,55 @@ ILI9341_FillScreen_loopW:
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ILI9341_FillRect
|
||||
; @param r17:r16 color
|
||||
; @param r19:r18 X
|
||||
; @param r21:r20 Y
|
||||
; @param r23:r22 W
|
||||
; @param r25:r24 H
|
||||
; @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 r16
|
||||
push r17
|
||||
rcall ili9341BeginSpi ; (R16, R17)
|
||||
ldi r16, 1
|
||||
push r22
|
||||
push r23
|
||||
push r24
|
||||
push r25
|
||||
sub r22, r16 ; X1=X+W-1
|
||||
sbc r23, r16
|
||||
add r23, r16
|
||||
add r22, r18
|
||||
adc r23, r19
|
||||
|
||||
sub r24, r16 ; Y1=Y+H-1
|
||||
sbc r25, r16
|
||||
add r25, r16
|
||||
add r24, r20
|
||||
adc r25, r21
|
||||
rcall ili9341SetAddressWindow ; (R16)
|
||||
pop r25
|
||||
pop r24
|
||||
pop r23
|
||||
pop r22
|
||||
pop r19 ; color high (pop from r17)
|
||||
pop r18 ; color low (pop from r16)
|
||||
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (send data)
|
||||
rcall ili9341BeginSpi ; (R16, R17)
|
||||
push r8 ; W
|
||||
push r9
|
||||
push r10
|
||||
push r11
|
||||
ldi r16, 1
|
||||
|
||||
sub r8, r16 ; X1=X+W-1
|
||||
sbc r9, r16
|
||||
add r9, r16
|
||||
add r8, r4
|
||||
adc r9, r5
|
||||
|
||||
sub r10, r16 ; Y1=Y+H-1
|
||||
sbc r11, r16
|
||||
add r11, r16
|
||||
add r10, r6
|
||||
adc r11, r7
|
||||
rcall ili9341SetAddressWindow ; (R16)
|
||||
pop r11
|
||||
pop r10
|
||||
pop r9
|
||||
pop r8
|
||||
|
||||
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
|
||||
ILI9341_FillRect_loopH:
|
||||
push r24
|
||||
push r25
|
||||
mov r24, r22 ; W low
|
||||
mov r25, r23 ; W high
|
||||
mov r24, r8 ; W low
|
||||
mov r25, r9 ; W high
|
||||
ILI9341_FillRect_loopW:
|
||||
mov r16, r19 ; color high
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
mov r16, r18 ; color high
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbiw r25:r24, 1
|
||||
brne ILI9341_FillRect_loopW
|
||||
pop r25
|
||||
pop r24
|
||||
sbiw r25:r24, 1
|
||||
rcall ili9341Send16BitData ; send r19:r18
|
||||
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
|
||||
rcall ili9341EndSpi
|
||||
ret
|
||||
@@ -319,10 +320,10 @@ ILI9341_FillRect_loopW:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341SetAddressWindow
|
||||
;
|
||||
; @param r19:r18 X0
|
||||
; @param r21:r20 Y0
|
||||
; @param r23:r22 X1
|
||||
; @param r25:r24 Y1
|
||||
; @param r5:r4 X0
|
||||
; @param r7:r6 Y0
|
||||
; @param r9:r8 X1
|
||||
; @param r11:r10 Y1
|
||||
; @clobbers R16
|
||||
|
||||
ili9341SetAddressWindow:
|
||||
@@ -330,28 +331,28 @@ ili9341SetAddressWindow:
|
||||
ldi r16, ILI9341_CMD_CASET
|
||||
rcall ili9341SendCommand
|
||||
; X0
|
||||
mov r16, r19
|
||||
mov r16, r5
|
||||
rcall ili9341SendData
|
||||
mov r16, r18
|
||||
mov r16, r4
|
||||
rcall ili9341SendData
|
||||
; X1
|
||||
mov r16, r23
|
||||
mov r16, r9
|
||||
rcall ili9341SendData
|
||||
mov r16, r22
|
||||
mov r16, r8
|
||||
rcall ili9341SendData
|
||||
|
||||
; send row address
|
||||
ldi r16, ILI9341_CMD_PASET
|
||||
rcall ili9341SendCommand
|
||||
; Y0
|
||||
mov r16, r21
|
||||
mov r16, r7
|
||||
rcall ili9341SendData
|
||||
mov r16, r20
|
||||
mov r16, r6
|
||||
rcall ili9341SendData
|
||||
; Y1
|
||||
mov r16, r25
|
||||
mov r16, r11
|
||||
rcall ili9341SendData
|
||||
mov r16, r24
|
||||
mov r16, r10
|
||||
rcall ili9341SendData
|
||||
|
||||
ret
|
||||
@@ -359,36 +360,18 @@ ili9341SetAddressWindow:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341_WriteStringX1At
|
||||
|
||||
; @param R16 character to write
|
||||
; @param r19:r18 X pos
|
||||
; @param r21:r20 Y pos
|
||||
; @param R01:R00 background color
|
||||
; @param R03:R02 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param Y pointer to RAM to store data to
|
||||
; @clobbers
|
||||
|
||||
ili9341_WriteStringX1At:
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341_WriteCharacterX1At
|
||||
|
||||
; @param R16 character to write
|
||||
; @param r19:r18 X pos
|
||||
; @param r21:r20 Y pos
|
||||
; @param R01:R00 background color
|
||||
; @param R03:R02 foreground color
|
||||
; @param X pointer to font
|
||||
; @param Y pointer to RAM to store data to
|
||||
; @clobbers
|
||||
; @param R16 character to write
|
||||
; @param r5:r4 X
|
||||
; @param r7:r6 Y
|
||||
; @param r1:r0 background color
|
||||
; @param r3:r2 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @return r5:r4 new X (advanced by character width)
|
||||
; @clobbers r16, r17, r18, r19, r24, r25, x, z
|
||||
|
||||
ili9341_WriteCharacterX1At:
|
||||
push xl
|
||||
@@ -399,20 +382,25 @@ ili9341_WriteCharacterX1At:
|
||||
ldi r17, 7
|
||||
|
||||
; calc X1
|
||||
mov r22, r18
|
||||
mov r23, r19
|
||||
add r22, r17
|
||||
adc r23, r17
|
||||
sub r23, r17
|
||||
mov r8, r4
|
||||
mov r9, r5
|
||||
add r8, r17
|
||||
adc r9, r17
|
||||
sub r9, r17
|
||||
; calc Y1
|
||||
mov r24, r20
|
||||
mov r25, r21
|
||||
add r24, r17
|
||||
adc r25, r17
|
||||
sub r25, r17
|
||||
mov r10, r6
|
||||
mov r11, r7
|
||||
add r10, r17
|
||||
adc r11, r17
|
||||
sub r11, r17
|
||||
|
||||
rcall ili9341BeginSpi ; (r16, r17)
|
||||
rcall ili9341SetAddressWindow ; (R16)
|
||||
ldi r16, 8 ; increment X pos for next char
|
||||
add r4, r16
|
||||
adc r5, r16
|
||||
sub r5, r16
|
||||
|
||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||
rcall ili9341SendCommand
|
||||
ldi r17, 64 ; 8x8
|
||||
@@ -431,14 +419,14 @@ ili9341_WriteCharacterX1At_loop:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341_WriteCharacterX2At
|
||||
|
||||
; @param R16 character to write
|
||||
; @param r19:r18 X pos
|
||||
; @param r21:r20 Y pos
|
||||
; @param R01:R00 background color
|
||||
; @param R03:R02 foreground color
|
||||
; @param X pointer to font
|
||||
; @param Y pointer to RAM to store data to
|
||||
; @clobbers
|
||||
; @param R16 character to write
|
||||
; @param r5:r4 X
|
||||
; @param r7:r6 Y
|
||||
; @param r1:r0 background color
|
||||
; @param r3:r2 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @clobbers r16, r17, r18, r19, r24, r25, x, z
|
||||
|
||||
ili9341_WriteCharacterX2At:
|
||||
push xl
|
||||
@@ -449,20 +437,24 @@ ili9341_WriteCharacterX2At:
|
||||
ldi r17, 15
|
||||
|
||||
; calc X1
|
||||
mov r22, r18
|
||||
mov r23, r19
|
||||
add r22, r17
|
||||
adc r23, r17
|
||||
sub r23, r17
|
||||
mov r8, r4
|
||||
mov r9, r5
|
||||
add r8, r17
|
||||
adc r9, r17
|
||||
sub r9, r17
|
||||
; calc Y1
|
||||
mov r24, r20
|
||||
mov r25, r21
|
||||
add r24, r17
|
||||
adc r25, r17
|
||||
sub r25, r17
|
||||
mov r10, r6
|
||||
mov r11, r7
|
||||
add r10, r17
|
||||
adc r11, r17
|
||||
sub r11, r17
|
||||
|
||||
rcall ili9341BeginSpi ; (r16, r17)
|
||||
rcall ili9341SetAddressWindow ; (R16)
|
||||
ldi r16, 16 ; increment X pos for next char
|
||||
add r4, r16
|
||||
adc r5, r16
|
||||
sub r5, r16
|
||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||
rcall ili9341SendCommand
|
||||
ldi r17, 0 ; 256 bytes
|
||||
@@ -481,11 +473,11 @@ ili9341_WriteCharacterX2At_loop:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341WriteCharacterFromFont8x8x1
|
||||
|
||||
; @param R16 character to write
|
||||
; @param R01:R00 background color
|
||||
; @param R03:R02 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @param R16 character to write
|
||||
; @param R1:R0 background color
|
||||
; @param R3:R2 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @clobbers r17, r24, r25, x, z
|
||||
|
||||
ili9341WriteCharacterFromFont8x8x1:
|
||||
@@ -516,11 +508,11 @@ ili9341WriteCharacterFromFont8x8x1_loop2end:
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341WriteCharacterFromFont8x8x2
|
||||
|
||||
; @param R16 character to write
|
||||
; @param R01:R00 background color
|
||||
; @param R03:R02 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @param R16 character to write
|
||||
; @param R1:R0 background color
|
||||
; @param R3:R2 foreground color
|
||||
; @param Z pointer to font
|
||||
; @param X pointer to RAM to store data to
|
||||
; @clobbers r17, r22, r23, r24, r25, x, z
|
||||
|
||||
ili9341WriteCharacterFromFont8x8x2:
|
||||
@@ -594,100 +586,6 @@ ili9341WriteCharacterFromFont8x8_gotPos:
|
||||
|
||||
|
||||
|
||||
ili9341SendCommand:
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
cbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D low
|
||||
nop
|
||||
rcall SPIHW_MasterTransfer
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
ili9341SendData:
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; @param r19:18 data
|
||||
ili9341Send16BitData:
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high
|
||||
mov r16, r19
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
mov r16, r18
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341BeginSpi
|
||||
;
|
||||
; @clobbers r16, r17
|
||||
|
||||
ili9341BeginSpi:
|
||||
ldi r16, ILI9341_SPIMODE
|
||||
ldi r17, ILI9341_DEVICENUM
|
||||
rjmp SPIHW_MasterStart ; (R18)
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341EndSpi
|
||||
;
|
||||
; @clobbers r16
|
||||
|
||||
ili9341EndSpi:
|
||||
rjmp SPIHW_MasterStop ; (R16)
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine ili9341SendCommands
|
||||
;
|
||||
; @clobbers r16
|
||||
|
||||
; Z=byte pointer to command list (as for LPM)
|
||||
|
||||
ili9341SendCommands:
|
||||
rcall ili9341BeginSpi
|
||||
ili9341SendCommands_loop1:
|
||||
lpm r16, Z+ ; read command
|
||||
lpm r18, Z+ ; read number of args
|
||||
cpi r18, 0xff ; end?
|
||||
breq ili9341SendCommands_end
|
||||
rcall ili9341SendCommand
|
||||
mov r19, r18
|
||||
andi r19, 1 ; if 1: need to skip filler byte
|
||||
tst r18
|
||||
breq ili9341SendCommands_loop1 ; no args, next command
|
||||
ili9341SendCommands_loop2:
|
||||
lpm r16, Z+
|
||||
rcall ili9341SendData ; (R16)
|
||||
dec r18
|
||||
brne ili9341SendCommands_loop2
|
||||
add zl, r19 ; possibly skip filler byte
|
||||
adc zh, r19
|
||||
sub zh, r19
|
||||
rjmp ili9341SendCommands_loop1
|
||||
ili9341SendCommands_end:
|
||||
rcall ili9341EndSpi ; (R16)
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
ili9341Test1:
|
||||
rcall ili9341BeginSpi
|
||||
ldi r16, 0x04
|
||||
@@ -713,64 +611,33 @@ ili9341Test1:
|
||||
; @param %2 W
|
||||
; @param %3 H
|
||||
.macro M_ILI9341_FILL_RECT
|
||||
push r16
|
||||
push r17
|
||||
rcall ili9341BeginSpi ; (R16, R17)
|
||||
ldi r18, LOW(@0) ; X0
|
||||
ldi r19, HIGH(@0)
|
||||
ldi r20, LOW(@1) ; Y0
|
||||
ldi r21, HIGH(@1)
|
||||
ldi r22, LOW(@0+@2-1) ; X1
|
||||
ldi r23, HIGH(@0+@2-1)
|
||||
ldi r24, LOW(@1+@3-1) ; y1
|
||||
ldi r25, HIGH(@1+@3-1) ; y1
|
||||
rcall ili9341SetAddressWindow ; (R16)
|
||||
pop r19 ; color high
|
||||
pop r18 ; color low
|
||||
ldi r16, LOW(@0) ; X0
|
||||
mov r4, r16
|
||||
ldi r16, HIGH(@0)
|
||||
mov r5, r16
|
||||
|
||||
ldi r16, LOW(@1) ; Y0
|
||||
mov r6, r16
|
||||
ldi r16, HIGH(@1)
|
||||
mov r7, r16
|
||||
|
||||
ldi r16, LOW(@2) ; W
|
||||
mov r8, r16
|
||||
ldi r16, HIGH(@2)
|
||||
mov r9, r16
|
||||
|
||||
; start RAM write
|
||||
ldi r16, ILI9341_CMD_RAMWR
|
||||
rcall ili9341SendCommand
|
||||
ldi r16, LOW(@3) ; H
|
||||
mov r10, r16
|
||||
ldi r16, HIGH(@3)
|
||||
mov r11, r16
|
||||
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high
|
||||
|
||||
ldi r24, LOW(@3) ; height
|
||||
ldi r25, HIGH(@3)
|
||||
l_loopH_%:
|
||||
push r24
|
||||
push r25
|
||||
ldi r24, LOW(@2) ; width
|
||||
ldi r25, HIGH(@2)
|
||||
l_loopW_%:
|
||||
M_IO_WRITE SPDR, r19
|
||||
rcall SPIHW_WaitForTransferComplete ; (R16)
|
||||
M_IO_WRITE SPDR, r18
|
||||
rcall SPIHW_WaitForTransferComplete ; (R16)
|
||||
sbiw r25:r24, 1
|
||||
brne l_loopW_%
|
||||
pop r25
|
||||
pop r24
|
||||
sbiw r25:r24, 1
|
||||
brne l_loopH_%
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
|
||||
rcall ili9341EndSpi
|
||||
rcall ILI9341_FillRect
|
||||
.endmacro
|
||||
|
||||
|
||||
|
||||
ili9341Test2:
|
||||
M_ILI9341_FILL_RECT 10, 20, 70, 100
|
||||
ldi r18, LOW(10) ; X
|
||||
ldi r19, HIGH(10)
|
||||
ldi r20, LOW(20) ; Y
|
||||
ldi r21, HIGH(20)
|
||||
ldi r22, LOW(70) ; W
|
||||
ldi r23, HIGH(70)
|
||||
ldi r24, LOW(100) ; H
|
||||
ldi r25, HIGH(100)
|
||||
rjmp ILI9341_FillRect
|
||||
ret
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user