From ece4fe824aad9894d6bc360a3240a6272441e412 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 10 Nov 2025 19:33:40 +0100 Subject: [PATCH] xpt2046 now basically works. --- avr/devices/c02/main/main.asm | 2 +- avr/devices/c02/main/win_netstats.asm | 35 ++-- avr/modules/lcd2/xpt2046/main.asm | 259 +++++++++++++++++++++----- 3 files changed, 228 insertions(+), 68 deletions(-) diff --git a/avr/devices/c02/main/main.asm b/avr/devices/c02/main/main.asm index 619d9bf..b9dd66a 100644 --- a/avr/devices/c02/main/main.asm +++ b/avr/devices/c02/main/main.asm @@ -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" diff --git a/avr/devices/c02/main/win_netstats.asm b/avr/devices/c02/main/win_netstats.asm index 8a09fce..8a443b9 100644 --- a/avr/devices/c02/main/win_netstats.asm +++ b/avr/devices/c02/main/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 diff --git a/avr/modules/lcd2/xpt2046/main.asm b/avr/modules/lcd2/xpt2046/main.asm index 10e80d6..0c2635c 100644 --- a/avr/modules/lcd2/xpt2046/main.asm +++ b/avr/modules/lcd2/xpt2046/main.asm @@ -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<