xpt2046: reading values works.

This commit is contained in:
Martin Preuss
2025-11-10 15:55:31 +01:00
parent 29f74c0eae
commit 03f794b253

View File

@@ -16,9 +16,9 @@
; ***************************************************************************
; defines
.equ XPT2046_SPIMODE = (1<<SPIHW_MODE_SPEED0_BIT) | \
(1<<SPIHW_MODE_SPEED1_BIT) | \
(0<<SPIHW_MODE_DOUBLESPEED_BIT) | \
.equ XPT2046_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)
@@ -30,7 +30,7 @@
.equ XPT2046_CMD_READ_Z2 = 0xc1
.equ XPT2046_AVERAGE = 2
.equ XPT2046_Z_THRESHOLD = 500
.equ XPT2046_Z_THRESHOLD = 50
.equ XPT2046_TIMER_VALUE = 3 ; every 300ms
.equ XPT2046_FLAGS_PRESSED_BIT = 7
@@ -127,22 +127,35 @@ xpt2046UpdateValues:
lds r23, xpt2046Flags
rcall xpt2046BeginSpi ; (R16, R17)
#if 0
ldi r16, XPT2046_CMD_READ_X
; rcall xpt2046UpdateZ
ldi r16, XPT2046_CMD_READ_Z1
rcall xpt2046SendCommandRecv12Bit ; (R16)
sts xpt2046CurrentX, r18
sts xpt2046CurrentX+1, r19
lds r24, xpt2046CurrentY
lds r25, xpt2046CurrentY+1
adiw r25:r24, 1
sts xpt2046CurrentY, r24
sts xpt2046CurrentY+1, r25
#else
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 xpt2046UpdateZ
#endif
xpt2046UpdateValues_storeFlags:
sts xpt2046Flags, r23
rcall xpt2046EndSpi ; (R16, R17)
@@ -215,21 +228,13 @@ xpt2046UpdateY_ret:
xpt2046UpdateZ:
ldi r16, XPT2046_CMD_READ_Z1
rcall xpt2046SendCommandRecv12Bit ; (R16)
ldi r24, LOW(4095)
ldi r25, HIGH(4095)
add r24, r18
adc r25, r19
ldi r16, XPT2046_CMD_READ_Z2
rcall xpt2046SendCommandRecv12Bit ; (R16)
sub r24, r18
sbc r25, r19
sts xpt2046CurrentZ, r24
sts xpt2046CurrentZ+1, r25
sts xpt2046CurrentZ, r18
sts xpt2046CurrentZ+1, r19
ldi r16, LOW(XPT2046_Z_THRESHOLD)
ldi r17, HIGH(XPT2046_Z_THRESHOLD)
sub r24, r16
sbc r25, r17
sub r18, r16
sbc r19, r17
mov r16, r23
brcs xpt2046UpdateZ_overThreshold
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
@@ -370,7 +375,24 @@ xpt2046SendCommandRecv16Bit:
clr r16
rcall SPIHW_MasterTransfer ; (R16)
mov r18, r16
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
ret
; @end
; ---------------------------------------------------------------------------
; @routine xpt2046SendCommandRecv8Bit
;
; @param r16 command
; @return r16 data
; @clobbers r16
xpt2046SendCommandRecv8Bit:
cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low
rcall SPIHW_MasterTransfer ; (R16)
mov r18, r16
sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high
ret
; @end