xpt2046 now basically works.
This commit is contained in:
@@ -260,7 +260,7 @@ test:
|
||||
.include "modules/lcd2/ili9341/font12x20_1.asm"
|
||||
;.include "common/list_t.asm"
|
||||
;.include "common/tree_t.asm"
|
||||
;.include "common/divide.asm"
|
||||
.include "common/divide.asm"
|
||||
|
||||
.include "modules/lcd2/gui/style.asm"
|
||||
.include "win_netstats.asm"
|
||||
|
||||
@@ -56,19 +56,20 @@ WinNetStats_Init:
|
||||
|
||||
|
||||
|
||||
; @param @0 Y
|
||||
; @param @1 data address
|
||||
; @param @0 X
|
||||
; @param @1 Y
|
||||
; @param @2 data address
|
||||
|
||||
.macro WINNETSTATS_PRINTDATA
|
||||
ldi r16, 160 ; X
|
||||
ldi r16, @0 ; X
|
||||
mov r4, r16
|
||||
clr r5
|
||||
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@0) ; Y
|
||||
ldi r16, LOW(STYLE_WIN_TITLE_HEIGHT+@1) ; Y
|
||||
mov r6, r16
|
||||
ldi r16, HIGH(@0)
|
||||
ldi r16, HIGH(@1)
|
||||
mov r7, r16
|
||||
lds r16, @1 ; data
|
||||
lds r17, @1+1
|
||||
lds r16, @2 ; data
|
||||
lds r17, @2+1
|
||||
bigcall Window_WriteHexWordAt
|
||||
.endmacro
|
||||
|
||||
@@ -120,24 +121,26 @@ WinNetStats_Update:
|
||||
ldi yh, HIGH(winNetstats)
|
||||
|
||||
; packets in
|
||||
WINNETSTATS_PRINTDATA 2, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW
|
||||
WINNETSTATS_PRINTDATA 160, 2, netInterfaceData+NET_IFACE_OFFS_PACKETSIN_LOW
|
||||
; packets out
|
||||
WINNETSTATS_PRINTDATA 24, netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW
|
||||
WINNETSTATS_PRINTDATA 160, 24, netInterfaceData+NET_IFACE_OFFS_PACKETSOUT_LOW
|
||||
; eContent
|
||||
WINNETSTATS_PRINTDATA 46, netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW
|
||||
WINNETSTATS_PRINTDATA 160, 46, netInterfaceData+NET_IFACE_OFFS_ERR_CONTENT_LOW
|
||||
; eIO
|
||||
WINNETSTATS_PRINTDATA 68, netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW
|
||||
WINNETSTATS_PRINTDATA 160, 68, netInterfaceData+NET_IFACE_OFFS_ERR_IO_LOW
|
||||
; eMsgSize
|
||||
WINNETSTATS_PRINTDATA 90, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
|
||||
WINNETSTATS_PRINTDATA 160, 90, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW
|
||||
|
||||
; X
|
||||
WINNETSTATS_PRINTDATA 112, xpt2046CurrentX
|
||||
WINNETSTATS_PRINTDATA 160, 112, xpt2046CurrentX
|
||||
WINNETSTATS_PRINTDATA 240, 112, xpt2046RawX
|
||||
; Y
|
||||
WINNETSTATS_PRINTDATA 134, xpt2046CurrentY
|
||||
WINNETSTATS_PRINTDATA 160, 134, xpt2046CurrentY
|
||||
WINNETSTATS_PRINTDATA 240, 134, xpt2046RawY
|
||||
; Z
|
||||
WINNETSTATS_PRINTDATA 156, xpt2046CurrentZ
|
||||
WINNETSTATS_PRINTDATA 160, 156, xpt2046CurrentZ
|
||||
; update num
|
||||
WINNETSTATS_PRINTDATA 178, winNetstatsUpdateNum
|
||||
WINNETSTATS_PRINTDATA 160, 178, winNetstatsUpdateNum
|
||||
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -37,6 +37,11 @@
|
||||
.equ XPT2046_FLAGS_CHGCOORD_BIT = 6
|
||||
.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
|
||||
|
||||
xpt2046ValueBuffer: .byte (XPT2046_AVERAGE*2)
|
||||
xpt2046RawX: .byte 2
|
||||
xpt2046RawY: .byte 2
|
||||
xpt2046CurrentX: .byte 2
|
||||
xpt2046CurrentY: .byte 2
|
||||
xpt2046CurrentZ: .byte 2
|
||||
xpt2046Flags: .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
|
||||
|
||||
rcall xpt2046CalcCalibration
|
||||
|
||||
ret
|
||||
; @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
|
||||
|
||||
@@ -127,33 +230,17 @@ xpt2046UpdateValues:
|
||||
lds r23, xpt2046Flags
|
||||
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
|
||||
andi r16, (1<<XPT2046_FLAGS_PRESSED_BIT) ; only read coords if pressed
|
||||
breq xpt2046UpdateValues_storeFlags
|
||||
|
||||
rcall xpt2046UpdateX
|
||||
rcall xpt2046UpdateY
|
||||
rcall xpt2046UpdateRawX
|
||||
rcall xpt2046UpdateRawY
|
||||
|
||||
rcall xpt2046CalcX
|
||||
rcall xpt2046CalcY
|
||||
|
||||
xpt2046UpdateValues_storeFlags:
|
||||
sts xpt2046Flags, r23
|
||||
@@ -167,53 +254,123 @@ xpt2046UpdateValues_storeFlags:
|
||||
|
||||
|
||||
; ---------------------------------------------------------------------------
|
||||
; @routine xpt2046UpdateX
|
||||
; @routine xpt2046CalcX
|
||||
;
|
||||
; @param r23 current xpt2046Flag (modified by routine)
|
||||
; @clobbers (r16, r18, r19, r20, r21)
|
||||
; @clobbers (r16, r17, r18, r19, r20, r21, r22)
|
||||
|
||||
xpt2046UpdateX:
|
||||
; 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)
|
||||
lds r16, xpt2046CurrentX
|
||||
lds r17, xpt2046CurrentX+1
|
||||
sts xpt2046CurrentX, r18
|
||||
sts xpt2046CurrentX+1, r19
|
||||
xpt2046CalcX:
|
||||
push r23
|
||||
lds r20, xpt2046RawY
|
||||
lds r21, xpt2046RawY+1
|
||||
lds r16, xpt2046TopY
|
||||
lds r17, xpt2046TopY+1
|
||||
sub r20, r16
|
||||
sbc r21, r17
|
||||
brcc xpt2046CalcX_trans
|
||||
clr r20
|
||||
clr r21
|
||||
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
|
||||
sbc r17, r19
|
||||
breq xpt2046UpdateX_ret
|
||||
breq xpt2046CalcX_ret
|
||||
ori r23, (1<<XPT2046_FLAGS_CHGCOORD_BIT)
|
||||
xpt2046UpdateX_ret:
|
||||
xpt2046CalcX_ret:
|
||||
ret
|
||||
; @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)
|
||||
; @clobbers (r16, r18, r19, r20, r21)
|
||||
|
||||
xpt2046UpdateY:
|
||||
xpt2046UpdateRawY:
|
||||
; read Y
|
||||
ldi r16, XPT2046_CMD_READ_Y
|
||||
rcall xpt2046ReadAvgValues ; (r16, r18, r19, r20, r21)
|
||||
rcall xpt2046AverageValues ; (r16, r17, r21)
|
||||
lds r16, xpt2046CurrentY
|
||||
lds r17, xpt2046CurrentY+1
|
||||
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:
|
||||
sts xpt2046RawY, r18
|
||||
sts xpt2046RawY+1, r19
|
||||
ret
|
||||
; @end
|
||||
|
||||
@@ -236,10 +393,10 @@ xpt2046UpdateZ:
|
||||
sub r18, r16
|
||||
sbc r19, r17
|
||||
mov r16, r23
|
||||
brcs xpt2046UpdateZ_overThreshold
|
||||
brcc xpt2046UpdateZ_aboveThreshold
|
||||
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
||||
rjmp xpt2046UpdateZ_checkPressChg
|
||||
xpt2046UpdateZ_overThreshold:
|
||||
xpt2046UpdateZ_aboveThreshold:
|
||||
ori r23, (1<<XPT2046_FLAGS_PRESSED_BIT)
|
||||
xpt2046UpdateZ_checkPressChg:
|
||||
eor r16, r23
|
||||
|
||||
Reference in New Issue
Block a user