avr: improved modules ILI9341 and XPT2046.
This commit is contained in:
@@ -96,14 +96,28 @@ WinNetStats_Show:
|
||||
; eMsgSize
|
||||
WINNETSTATS_PRINTLABEL 90, winNetstats_lMsgSizeErr
|
||||
|
||||
; draw horizontal line
|
||||
ldi r16, STYLE_WIN_TITLE_HEIGHT+112
|
||||
mov r6, r16
|
||||
clr r7
|
||||
clr r4
|
||||
clr r5
|
||||
ldi r16, LOW(DISPLAY_WIDTH)
|
||||
mov r8, r16
|
||||
ldi r16, HIGH(DISPLAY_WIDTH)
|
||||
mov r9, r16
|
||||
clr r2
|
||||
clr r3
|
||||
bigcall Display_DrawHLine
|
||||
|
||||
; X
|
||||
WINNETSTATS_PRINTLABEL 112, winNetstats_lX
|
||||
WINNETSTATS_PRINTLABEL 114, winNetstats_lX
|
||||
; Y
|
||||
WINNETSTATS_PRINTLABEL 134, winNetstats_lY
|
||||
WINNETSTATS_PRINTLABEL 136, winNetstats_lY
|
||||
; Z
|
||||
WINNETSTATS_PRINTLABEL 156, winNetstats_lZ
|
||||
WINNETSTATS_PRINTLABEL 158, winNetstats_lZ
|
||||
; update num
|
||||
WINNETSTATS_PRINTLABEL 178, winNetstats_lUpdate
|
||||
WINNETSTATS_PRINTLABEL 180, winNetstats_lUpdate
|
||||
|
||||
rcall WinNetStats_Update
|
||||
|
||||
@@ -132,15 +146,15 @@ WinNetStats_Update:
|
||||
WINNETSTATS_PRINTDATA 160, 90, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
|
||||
|
||||
; X
|
||||
WINNETSTATS_PRINTDATA 160, 112, xpt2046CurrentX
|
||||
WINNETSTATS_PRINTDATA 240, 112, xpt2046RawX
|
||||
WINNETSTATS_PRINTDATA 160, 114, xpt2046CurrentX
|
||||
WINNETSTATS_PRINTDATA 240, 114, xpt2046RawX
|
||||
; Y
|
||||
WINNETSTATS_PRINTDATA 160, 134, xpt2046CurrentY
|
||||
WINNETSTATS_PRINTDATA 240, 134, xpt2046RawY
|
||||
WINNETSTATS_PRINTDATA 160, 136, xpt2046CurrentY
|
||||
WINNETSTATS_PRINTDATA 240, 136, xpt2046RawY
|
||||
; Z
|
||||
WINNETSTATS_PRINTDATA 160, 156, xpt2046CurrentZ
|
||||
WINNETSTATS_PRINTDATA 160, 158, xpt2046CurrentZ
|
||||
; update num
|
||||
WINNETSTATS_PRINTDATA 160, 178, winNetstatsUpdateNum
|
||||
WINNETSTATS_PRINTDATA 160, 180, winNetstatsUpdateNum
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -118,6 +118,7 @@ TitleWindow_DrawTitle:
|
||||
ldi r16, HIGH(STYLE_WIN_TITLE_FOREGROUND)
|
||||
mov r3, r16
|
||||
bigcall Window_DrawColorTextFlash
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
@@ -63,6 +63,91 @@ Display_FillRect_loopW:
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Display_DrawHLine @global
|
||||
;
|
||||
; @param r3:r2 color
|
||||
; @param r5:r4 X0
|
||||
; @param r7:r6 Y0
|
||||
; @param r9:r8 W
|
||||
|
||||
Display_DrawHLine:
|
||||
push r15
|
||||
in r15, SREG
|
||||
cli
|
||||
|
||||
ldi r16, 1 ; height is 1
|
||||
mov r10, r16
|
||||
clr r11
|
||||
rcall ili9341BeginSpi ; (R16, R17)
|
||||
rcall ili9341SetAddressWindow ; (R16, r20, r21)
|
||||
|
||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||
rcall ili9341SendCommand ; (R16)
|
||||
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
||||
mov r24, r8 ; W low
|
||||
mov r25, r9 ; W high
|
||||
Display_DrawHLine_loop:
|
||||
mov r16, r3
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
mov r16, r2
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbiw r25:r24, 1
|
||||
brne Display_DrawHLine_loop
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
||||
rcall ili9341EndSpi
|
||||
out SREG, r15
|
||||
pop r15
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Display_DrawVLine @global
|
||||
;
|
||||
; @param r3:r2 color
|
||||
; @param r5:r4 X0
|
||||
; @param r7:r6 Y0
|
||||
; @param r11:r10 H
|
||||
|
||||
Display_DrawVLine:
|
||||
push r15
|
||||
in r15, SREG
|
||||
cli
|
||||
|
||||
ldi r16, 1 ; width is 1
|
||||
mov r8, r16
|
||||
clr r9
|
||||
rcall ili9341BeginSpi ; (R16, R17)
|
||||
rcall ili9341SetAddressWindow ; (R16, r20, r21)
|
||||
|
||||
ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM
|
||||
rcall ili9341SendCommand ; (R16)
|
||||
|
||||
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
|
||||
sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA)
|
||||
mov r24, r10 ; H low
|
||||
mov r25, r11 ; H high
|
||||
Display_DrawVLine_loop:
|
||||
mov r16, r3
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
mov r16, r2
|
||||
rcall SPIHW_MasterTransfer ; (R16)
|
||||
sbiw r25:r24, 1
|
||||
brne Display_DrawVLine_loop
|
||||
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
|
||||
rcall ili9341EndSpi
|
||||
out SREG, r15
|
||||
pop r15
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Display_DrawChar @global
|
||||
|
||||
|
||||
@@ -11,11 +11,35 @@
|
||||
#define AQH_AVR_XPT2046_MAIN_ASM
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; Module implementing DISPLAY_INPUT using displays with XPT2046 touch
|
||||
; controllers.
|
||||
;
|
||||
; Implements:
|
||||
; - Display_InputGetFlagsResetChg
|
||||
; - Display_InputGetCurrentX
|
||||
; - Display_InputGetCurrentY
|
||||
; Defines:
|
||||
; - DISPLAY_IFLAGS_PRESSED_BIT
|
||||
; - DISPLAY_IFLAGS_CHGCOORD_BIT
|
||||
; - DISPLAY_IFLAGS_CHGPRESS_BIT
|
||||
; Needs:
|
||||
; - DISPLAY_WIDTH
|
||||
; - DISPLAY_HEIGHT
|
||||
; ***************************************************************************
|
||||
|
||||
|
||||
|
||||
|
||||
; ***************************************************************************
|
||||
; defines
|
||||
|
||||
.equ DISPLAY_IFLAGS_PRESSED_BIT = 7
|
||||
.equ DISPLAY_IFLAGS_CHGCOORD_BIT = 6
|
||||
.equ DISPLAY_IFLAGS_CHGPRESS_BIT = 5
|
||||
|
||||
|
||||
|
||||
.equ XPT2046_SPIMODE = (0<<SPIHW_MODE_SPEED0_BIT) | \
|
||||
(0<<SPIHW_MODE_SPEED1_BIT) | \
|
||||
(1<<SPIHW_MODE_DOUBLESPEED_BIT) | \
|
||||
@@ -33,10 +57,6 @@
|
||||
.equ XPT2046_Z_THRESHOLD = 50
|
||||
.equ XPT2046_TIMER_VALUE = 3 ; every 300ms
|
||||
|
||||
.equ XPT2046_FLAGS_PRESSED_BIT = 7
|
||||
.equ XPT2046_FLAGS_CHGCOORD_BIT = 6
|
||||
.equ XPT2046_FLAGS_CHGPRESS_BIT = 5
|
||||
|
||||
.equ XPT2046_CALIB_XLEFT = 0x0c0
|
||||
.equ XPT2046_CALIB_XRIGHT = 0x780
|
||||
|
||||
@@ -111,19 +131,46 @@ XPT2046_Every100ms_store:
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine XPT2046_GetFlagsResetChg @global
|
||||
; @routine Display_InputGetCurrentX @global
|
||||
;
|
||||
; Return flags, clear stored flags XPT2046_FLAGS_CHGCOORD_BIT and
|
||||
; XPT2046_FLAGS_CHGPRESS_BIT.
|
||||
; @return r19:r18 current X
|
||||
|
||||
Display_InputGetCurrentX:
|
||||
lds r18, xpt2046CurrentX
|
||||
lds r19, xpt2046CurrentX+1
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Display_InputGetCurrentY @global
|
||||
;
|
||||
; @return r19:r18 current Y
|
||||
|
||||
Display_InputGetCurrentY:
|
||||
lds r18, xpt2046CurrentY
|
||||
lds r19, xpt2046CurrentY+1
|
||||
ret
|
||||
; @end
|
||||
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine Display_InputGetFlagsResetChg @global
|
||||
;
|
||||
; Return flags, clear stored flags DISPLAY_IFLAGS_CHGCOORD_BIT and
|
||||
; DISPLAY_IFLAGS_CHGPRESS_BIT.
|
||||
;
|
||||
; @return r16 flags
|
||||
; @clobbers r17
|
||||
|
||||
XPT2046_GetFlagsResetChg:
|
||||
Display_InputGetFlagsResetChg:
|
||||
lds r16, xpt2046Flags
|
||||
mov r17, r16
|
||||
cbr r17, (1<<XPT2046_FLAGS_CHGCOORD_BIT) | (1<<XPT2046_FLAGS_CHGPRESS_BIT)
|
||||
cbr r17, (1<<DISPLAY_IFLAGS_CHGCOORD_BIT) | (1<<DISPLAY_IFLAGS_CHGPRESS_BIT)
|
||||
sts xpt2046Flags, r17
|
||||
ret
|
||||
; @end
|
||||
@@ -233,7 +280,7 @@ xpt2046UpdateValues:
|
||||
rcall xpt2046UpdateZ
|
||||
|
||||
mov r16, r23
|
||||
andi r16, (1<<XPT2046_FLAGS_PRESSED_BIT) ; only read coords if pressed
|
||||
andi r16, (1<<DISPLAY_IFLAGS_PRESSED_BIT) ; only read coords if pressed
|
||||
breq xpt2046UpdateValues_storeFlags
|
||||
|
||||
rcall xpt2046UpdateRawX
|
||||
@@ -288,7 +335,7 @@ xpt2046CalcX_trans:
|
||||
sub r16, r18
|
||||
sbc r17, r19
|
||||
breq xpt2046CalcX_ret
|
||||
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
||||
ori r23, (1<<DISPLAY_IFLAGS_CHGCOORD_BIT)
|
||||
xpt2046CalcX_ret:
|
||||
ret
|
||||
; @end
|
||||
@@ -330,7 +377,7 @@ xpt2046CalcY_trans:
|
||||
sub r16, r18
|
||||
sbc r17, r19
|
||||
breq xpt2046CalcY_ret
|
||||
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
||||
ori r23, (1<<DISPLAY_IFLAGS_CHGCOORD_BIT)
|
||||
xpt2046CalcY_ret:
|
||||
ret
|
||||
; @end
|
||||
@@ -394,15 +441,15 @@ xpt2046UpdateZ:
|
||||
sbc r19, r17
|
||||
mov r16, r23
|
||||
brcc xpt2046UpdateZ_aboveThreshold
|
||||
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
||||
cbr r23, (1<<DISPLAY_IFLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
||||
rjmp xpt2046UpdateZ_checkPressChg
|
||||
xpt2046UpdateZ_aboveThreshold:
|
||||
ori r23, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
||||
ori r23, (1<<DISPLAY_IFLAGS_PRESSED_BIT)
|
||||
xpt2046UpdateZ_checkPressChg:
|
||||
eor r16, r23
|
||||
andi r16, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
||||
andi r16, (1<<DISPLAY_IFLAGS_PRESSED_BIT)
|
||||
breq xpt2046UpdateZ_ret
|
||||
ori r23, (1<<XPT2046_FLAGS_CHGPRESS_BIT)
|
||||
ori r23, (1<<DISPLAY_IFLAGS_CHGPRESS_BIT)
|
||||
xpt2046UpdateZ_ret:
|
||||
ret
|
||||
; @end
|
||||
|
||||
Reference in New Issue
Block a user