xpt2046 now basically works.
This commit is contained in:
@@ -260,7 +260,7 @@ test:
|
|||||||
.include "modules/lcd2/ili9341/font12x20_1.asm"
|
.include "modules/lcd2/ili9341/font12x20_1.asm"
|
||||||
;.include "common/list_t.asm"
|
;.include "common/list_t.asm"
|
||||||
;.include "common/tree_t.asm"
|
;.include "common/tree_t.asm"
|
||||||
;.include "common/divide.asm"
|
.include "common/divide.asm"
|
||||||
|
|
||||||
.include "modules/lcd2/gui/style.asm"
|
.include "modules/lcd2/gui/style.asm"
|
||||||
.include "win_netstats.asm"
|
.include "win_netstats.asm"
|
||||||
|
|||||||
@@ -56,19 +56,20 @@ WinNetStats_Init:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
; @param @0 Y
|
; @param @0 X
|
||||||
; @param @1 data address
|
; @param @1 Y
|
||||||
|
; @param @2 data address
|
||||||
|
|
||||||
.macro WINNETSTATS_PRINTDATA
|
.macro WINNETSTATS_PRINTDATA
|
||||||
ldi r16, 160 ; X
|
ldi r16, @0 ; X
|
||||||
mov r4, r16
|
mov r4, r16
|
||||||
clr r5
|
clr r5
|
||||||
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@0) ; Y
|
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@1) ; Y
|
||||||
mov r6, r16
|
mov r6, r16
|
||||||
ldi r16, HIGH(@0)
|
ldi r16, HIGH(@1)
|
||||||
mov r7, r16
|
mov r7, r16
|
||||||
lds r16, @1 ; data
|
lds r16, @2 ; data
|
||||||
lds r17, @1+1
|
lds r17, @2+1
|
||||||
bigcall Window_WriteHexWordAt
|
bigcall Window_WriteHexWordAt
|
||||||
.endmacro
|
.endmacro
|
||||||
|
|
||||||
@@ -120,24 +121,26 @@ WinNetStats_Update:
|
|||||||
ldi yh, HIGH(winNetstats)
|
ldi yh, HIGH(winNetstats)
|
||||||
|
|
||||||
; packets in
|
; packets in
|
||||||
WINNETSTATS_PRINTDATA 2, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW
|
WINNETSTATS_PRINTDATA 160, 2, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW
|
||||||
; packets out
|
; packets out
|
||||||
WINNETSTATS_PRINTDATA 24, netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW
|
WINNETSTATS_PRINTDATA 160, 24, netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW
|
||||||
; eContent
|
; eContent
|
||||||
WINNETSTATS_PRINTDATA 46, netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW
|
WINNETSTATS_PRINTDATA 160, 46, netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW
|
||||||
; eIO
|
; eIO
|
||||||
WINNETSTATS_PRINTDATA 68, netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW
|
WINNETSTATS_PRINTDATA 160, 68, netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW
|
||||||
; eMsgSize
|
; eMsgSize
|
||||||
WINNETSTATS_PRINTDATA 90, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
|
WINNETSTATS_PRINTDATA 160, 90, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
|
||||||
|
|
||||||
; X
|
; X
|
||||||
WINNETSTATS_PRINTDATA 112, xpt2046CurrentX
|
WINNETSTATS_PRINTDATA 160, 112, xpt2046CurrentX
|
||||||
|
WINNETSTATS_PRINTDATA 240, 112, xpt2046RawX
|
||||||
; Y
|
; Y
|
||||||
WINNETSTATS_PRINTDATA 134, xpt2046CurrentY
|
WINNETSTATS_PRINTDATA 160, 134, xpt2046CurrentY
|
||||||
|
WINNETSTATS_PRINTDATA 240, 134, xpt2046RawY
|
||||||
; Z
|
; Z
|
||||||
WINNETSTATS_PRINTDATA 156, xpt2046CurrentZ
|
WINNETSTATS_PRINTDATA 160, 156, xpt2046CurrentZ
|
||||||
; update num
|
; update num
|
||||||
WINNETSTATS_PRINTDATA 178, winNetstatsUpdateNum
|
WINNETSTATS_PRINTDATA 160, 178, winNetstatsUpdateNum
|
||||||
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|||||||
@@ -37,6 +37,11 @@
|
|||||||
.equ XPT2046_FLAGS_CHGCOORD_BIT = 6
|
.equ XPT2046_FLAGS_CHGCOORD_BIT = 6
|
||||||
.equ XPT2046_FLAGS_CHGPRESS_BIT = 5
|
.equ XPT2046_FLAGS_CHGPRESS_BIT = 5
|
||||||
|
|
||||||
|
.equ XPT2046_CALIB_XLEFT = 0x0c0
|
||||||
|
.equ XPT2046_CALIB_XRIGHT = 0x780
|
||||||
|
|
||||||
|
.equ XPT2046_CALIB_YTOP = 0x0c0
|
||||||
|
.equ XPT2046_CALIB_YBOTTOM = 0x7a0
|
||||||
|
|
||||||
|
|
||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
@@ -45,12 +50,19 @@
|
|||||||
.dseg
|
.dseg
|
||||||
|
|
||||||
xpt2046ValueBuffer: .byte (XPT2046_AVERAGE*2)
|
xpt2046ValueBuffer: .byte (XPT2046_AVERAGE*2)
|
||||||
|
xpt2046RawX: .byte 2
|
||||||
|
xpt2046RawY: .byte 2
|
||||||
xpt2046CurrentX: .byte 2
|
xpt2046CurrentX: .byte 2
|
||||||
xpt2046CurrentY: .byte 2
|
xpt2046CurrentY: .byte 2
|
||||||
xpt2046CurrentZ: .byte 2
|
xpt2046CurrentZ: .byte 2
|
||||||
xpt2046Flags: .byte 1
|
xpt2046Flags: .byte 1
|
||||||
xpt2046Timer: .byte 1
|
xpt2046Timer: .byte 1
|
||||||
|
|
||||||
|
xpt2046LeftX: .byte 2
|
||||||
|
xpt2046FactorX: .byte 2
|
||||||
|
|
||||||
|
xpt2046TopY: .byte 2
|
||||||
|
xpt2046FactorY: .byte 2
|
||||||
|
|
||||||
|
|
||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
@@ -76,6 +88,8 @@ XPT2046_Init:
|
|||||||
|
|
||||||
sts xpt2046Timer, r16
|
sts xpt2046Timer, r16
|
||||||
|
|
||||||
|
rcall xpt2046CalcCalibration
|
||||||
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -116,6 +130,95 @@ XPT2046_GetFlagsResetChg:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046CalcCalibration
|
||||||
|
;
|
||||||
|
xpt2046CalcCalibration:
|
||||||
|
; calibrate X (hardcoded for now)
|
||||||
|
ldi r18, LOW(XPT2046_CALIB_XLEFT)
|
||||||
|
ldi r19, HIGH(XPT2046_CALIB_XLEFT)
|
||||||
|
ldi r20, LOW(XPT2046_CALIB_XRIGHT)
|
||||||
|
ldi r21, HIGH(XPT2046_CALIB_XRIGHT)
|
||||||
|
ldi r22, LOW(DISPLAY_HEIGHT)
|
||||||
|
ldi r23, HIGH(DISPLAY_HEIGHT)
|
||||||
|
rcall xpt2046CalcCalibX
|
||||||
|
|
||||||
|
; calibrate Y (hardcoded for now)
|
||||||
|
ldi r18, LOW(XPT2046_CALIB_YTOP)
|
||||||
|
ldi r19, HIGH(XPT2046_CALIB_YTOP)
|
||||||
|
ldi r20, LOW(XPT2046_CALIB_YBOTTOM)
|
||||||
|
ldi r21, HIGH(XPT2046_CALIB_YBOTTOM)
|
||||||
|
ldi r22, LOW(DISPLAY_WIDTH)
|
||||||
|
ldi r23, HIGH(DISPLAY_WIDTH)
|
||||||
|
rcall xpt2046CalcCalibY
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046CalcCalibX
|
||||||
|
;
|
||||||
|
; @param r19:r18: xLeft
|
||||||
|
; @param r21:r20 xRight
|
||||||
|
; @param r23:r22 display hardware width
|
||||||
|
|
||||||
|
xpt2046CalcCalibX:
|
||||||
|
sts xpt2046LeftX, r18
|
||||||
|
sts xpt2046LeftX+1, r19
|
||||||
|
|
||||||
|
mov r24, r20
|
||||||
|
mov r25, r21
|
||||||
|
sub r24, r18
|
||||||
|
sbc r25, r19
|
||||||
|
lsl r24 ; *2
|
||||||
|
rol r25
|
||||||
|
lsl r24 ; *4
|
||||||
|
rol r25
|
||||||
|
lsl r24 ; *8
|
||||||
|
rol r25
|
||||||
|
mov r20, r24
|
||||||
|
mov r21, r25
|
||||||
|
bigcall Utils_Divu16_16_16 ; R17:R16=result
|
||||||
|
sts xpt2046FactorX, r16
|
||||||
|
sts xpt2046FactorX+1, r17
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046CalcCalibY
|
||||||
|
;
|
||||||
|
; @param r19:r18: yTop
|
||||||
|
; @param r21:r20 yBottom
|
||||||
|
; @param r23:r22 display hardware height
|
||||||
|
|
||||||
|
xpt2046CalcCalibY:
|
||||||
|
sts xpt2046TopY, r18
|
||||||
|
sts xpt2046TopY+1, r19
|
||||||
|
|
||||||
|
mov r24, r20
|
||||||
|
mov r25, r21
|
||||||
|
sub r24, r18
|
||||||
|
sbc r25, r19
|
||||||
|
lsl r24 ; *2
|
||||||
|
rol r25
|
||||||
|
lsl r24 ; *4
|
||||||
|
rol r25
|
||||||
|
lsl r24 ; *8
|
||||||
|
rol r25
|
||||||
|
mov r20, r24
|
||||||
|
mov r21, r25
|
||||||
|
bigcall Utils_Divu16_16_16 ; R17:R16=result
|
||||||
|
sts xpt2046FactorY, r16
|
||||||
|
sts xpt2046FactorY+1, r17
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine xpt2046UpdateValues
|
; @routine xpt2046UpdateValues
|
||||||
|
|
||||||
@@ -127,33 +230,17 @@ xpt2046UpdateValues:
|
|||||||
lds r23, xpt2046Flags
|
lds r23, xpt2046Flags
|
||||||
rcall xpt2046BeginSpi ; (R16, R17)
|
rcall xpt2046BeginSpi ; (R16, R17)
|
||||||
|
|
||||||
; rcall xpt2046UpdateZ
|
rcall xpt2046UpdateZ
|
||||||
|
|
||||||
ldi r16, XPT2046_CMD_READ_Z1
|
|
||||||
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
|
||||||
sts xpt2046CurrentZ, r18
|
|
||||||
sts xpt2046CurrentZ+1, r19
|
|
||||||
ldi r16, LOW(XPT2046_Z_THRESHOLD)
|
|
||||||
ldi r17, HIGH(XPT2046_Z_THRESHOLD)
|
|
||||||
sub r18, r16
|
|
||||||
sbc r19, r17
|
|
||||||
brcc xpt2046UpdateValues_aboveThreshold
|
|
||||||
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
|
||||||
rjmp xpt2046UpdateValues_checkPressChg
|
|
||||||
xpt2046UpdateValues_aboveThreshold:
|
|
||||||
ori r23, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
|
||||||
xpt2046UpdateValues_checkPressChg:
|
|
||||||
eor r16, r23
|
|
||||||
andi r16, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
|
||||||
breq xpt2046UpdateValues_checkPress
|
|
||||||
ori r23, (1<<XPT2046_FLAGS_CHGPRESS_BIT)
|
|
||||||
xpt2046UpdateValues_checkPress:
|
|
||||||
mov r16, r23
|
mov r16, r23
|
||||||
andi r16, (1<<XPT2046_FLAGS_PRESSED_BIT) ; only read coords if pressed
|
andi r16, (1<<XPT2046_FLAGS_PRESSED_BIT) ; only read coords if pressed
|
||||||
breq xpt2046UpdateValues_storeFlags
|
breq xpt2046UpdateValues_storeFlags
|
||||||
|
|
||||||
rcall xpt2046UpdateX
|
rcall xpt2046UpdateRawX
|
||||||
rcall xpt2046UpdateY
|
rcall xpt2046UpdateRawY
|
||||||
|
|
||||||
|
rcall xpt2046CalcX
|
||||||
|
rcall xpt2046CalcY
|
||||||
|
|
||||||
xpt2046UpdateValues_storeFlags:
|
xpt2046UpdateValues_storeFlags:
|
||||||
sts xpt2046Flags, r23
|
sts xpt2046Flags, r23
|
||||||
@@ -167,53 +254,123 @@ xpt2046UpdateValues_storeFlags:
|
|||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine xpt2046UpdateX
|
; @routine xpt2046CalcX
|
||||||
;
|
;
|
||||||
; @param r23 current xpt2046Flag (modified by routine)
|
; @param r23 current xpt2046Flag (modified by routine)
|
||||||
; @clobbers (r16, r18, r19, r20, r21)
|
; @clobbers (r16, r17, r18, r19, r20, r21, r22)
|
||||||
|
|
||||||
xpt2046UpdateX:
|
xpt2046CalcX:
|
||||||
; dummy read
|
push r23
|
||||||
ldi r16, XPT2046_CMD_READ_X
|
lds r20, xpt2046RawY
|
||||||
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
lds r21, xpt2046RawY+1
|
||||||
|
lds r16, xpt2046TopY
|
||||||
ldi r16, XPT2046_CMD_READ_X
|
lds r17, xpt2046TopY+1
|
||||||
rcall xpt2046ReadAvgValues ; (r16, r18, r19, r20, r21)
|
sub r20, r16
|
||||||
rcall xpt2046AverageValues ; (r16, r17, r21)
|
sbc r21, r17
|
||||||
lds r16, xpt2046CurrentX
|
brcc xpt2046CalcX_trans
|
||||||
lds r17, xpt2046CurrentX+1
|
clr r20
|
||||||
sts xpt2046CurrentX, r18
|
clr r21
|
||||||
sts xpt2046CurrentX+1, r19
|
xpt2046CalcX_trans:
|
||||||
|
lsl r20 ; *2
|
||||||
|
rol r21
|
||||||
|
lsl r20 ; *4
|
||||||
|
rol r21
|
||||||
|
lsl r20 ; *8
|
||||||
|
rol r21
|
||||||
|
lds r22, xpt2046FactorY
|
||||||
|
lds r23, xpt2046FactorY+1
|
||||||
|
bigcall Utils_Divu16_16_16
|
||||||
|
lds r18, xpt2046CurrentX
|
||||||
|
lds r19, xpt2046CurrentX+1
|
||||||
|
sts xpt2046CurrentX, r16
|
||||||
|
sts xpt2046CurrentX+1, r17
|
||||||
|
pop r23
|
||||||
sub r16, r18
|
sub r16, r18
|
||||||
sbc r17, r19
|
sbc r17, r19
|
||||||
breq xpt2046UpdateX_ret
|
breq xpt2046CalcX_ret
|
||||||
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
||||||
xpt2046UpdateX_ret:
|
xpt2046CalcX_ret:
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
; ---------------------------------------------------------------------------
|
; ---------------------------------------------------------------------------
|
||||||
; @routine xpt2046UpdateY
|
; @routine xpt2046CalcY
|
||||||
|
;
|
||||||
|
; @param r23 current xpt2046Flag (modified by routine)
|
||||||
|
; @clobbers (r16, r17, r18, r19, r20, r21, r22)
|
||||||
|
|
||||||
|
xpt2046CalcY:
|
||||||
|
push r23
|
||||||
|
lds r20, xpt2046RawX
|
||||||
|
lds r21, xpt2046RawX+1
|
||||||
|
lds r16, xpt2046LeftX
|
||||||
|
lds r17, xpt2046LeftX+1
|
||||||
|
sub r20, r16
|
||||||
|
sbc r21, r17
|
||||||
|
brcc xpt2046CalcY_trans
|
||||||
|
clr r20
|
||||||
|
clr r21
|
||||||
|
xpt2046CalcY_trans:
|
||||||
|
lsl r20 ; *2
|
||||||
|
rol r21
|
||||||
|
lsl r20 ; *4
|
||||||
|
rol r21
|
||||||
|
lsl r20 ; *8
|
||||||
|
rol r21
|
||||||
|
lds r22, xpt2046FactorX
|
||||||
|
lds r23, xpt2046FactorX+1
|
||||||
|
bigcall Utils_Divu16_16_16
|
||||||
|
lds r18, xpt2046CurrentY
|
||||||
|
lds r19, xpt2046CurrentY+1
|
||||||
|
sts xpt2046CurrentY, r16
|
||||||
|
sts xpt2046CurrentY+1, r17
|
||||||
|
pop r23
|
||||||
|
sub r16, r18
|
||||||
|
sbc r17, r19
|
||||||
|
breq xpt2046CalcY_ret
|
||||||
|
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
||||||
|
xpt2046CalcY_ret:
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046UpdateRawX
|
||||||
|
;
|
||||||
|
; @clobbers (r16, r17, r18, r19, r20, r21)
|
||||||
|
|
||||||
|
xpt2046UpdateRawX:
|
||||||
|
; dummy read
|
||||||
|
ldi r16, XPT2046_CMD_READ_X
|
||||||
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
|
|
||||||
|
ldi r16, XPT2046_CMD_READ_X
|
||||||
|
rcall xpt2046ReadAvgValues ; (r16, r18, r19, r20, r21)
|
||||||
|
rcall xpt2046AverageValues ; (r16, r17, r21)
|
||||||
|
|
||||||
|
sts xpt2046RawX, r18
|
||||||
|
sts xpt2046RawX+1, r19
|
||||||
|
ret
|
||||||
|
; @end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; @routine xpt2046UpdateRawY
|
||||||
;
|
;
|
||||||
; @param r23 current xpt2046Flag (modified by routine)
|
; @param r23 current xpt2046Flag (modified by routine)
|
||||||
; @clobbers (r16, r18, r19, r20, r21)
|
; @clobbers (r16, r18, r19, r20, r21)
|
||||||
|
|
||||||
xpt2046UpdateY:
|
xpt2046UpdateRawY:
|
||||||
; read Y
|
; read Y
|
||||||
ldi r16, XPT2046_CMD_READ_Y
|
ldi r16, XPT2046_CMD_READ_Y
|
||||||
rcall xpt2046ReadAvgValues ; (r16, r18, r19, r20, r21)
|
rcall xpt2046ReadAvgValues ; (r16, r18, r19, r20, r21)
|
||||||
rcall xpt2046AverageValues ; (r16, r17, r21)
|
rcall xpt2046AverageValues ; (r16, r17, r21)
|
||||||
lds r16, xpt2046CurrentY
|
sts xpt2046RawY, r18
|
||||||
lds r17, xpt2046CurrentY+1
|
sts xpt2046RawY+1, r19
|
||||||
sts xpt2046CurrentY, r18
|
|
||||||
sts xpt2046CurrentY+1, r19
|
|
||||||
sub r16, r18
|
|
||||||
sbc r17, r19
|
|
||||||
breq xpt2046UpdateY_ret
|
|
||||||
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
|
||||||
xpt2046UpdateY_ret:
|
|
||||||
ret
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
@@ -236,10 +393,10 @@ xpt2046UpdateZ:
|
|||||||
sub r18, r16
|
sub r18, r16
|
||||||
sbc r19, r17
|
sbc r19, r17
|
||||||
mov r16, r23
|
mov r16, r23
|
||||||
brcs xpt2046UpdateZ_overThreshold
|
brcc xpt2046UpdateZ_aboveThreshold
|
||||||
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
||||||
rjmp xpt2046UpdateZ_checkPressChg
|
rjmp xpt2046UpdateZ_checkPressChg
|
||||||
xpt2046UpdateZ_overThreshold:
|
xpt2046UpdateZ_aboveThreshold:
|
||||||
ori r23, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
ori r23, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
||||||
xpt2046UpdateZ_checkPressChg:
|
xpt2046UpdateZ_checkPressChg:
|
||||||
eor r16, r23
|
eor r16, r23
|
||||||
|
|||||||
Reference in New Issue
Block a user