xpt2046: reading values works.
This commit is contained in:
@@ -16,9 +16,9 @@
|
|||||||
; ***************************************************************************
|
; ***************************************************************************
|
||||||
; defines
|
; defines
|
||||||
|
|
||||||
.equ XPT2046_SPIMODE = (1<<SPIHW_MODE_SPEED0_BIT) | \
|
.equ XPT2046_SPIMODE = (0<<SPIHW_MODE_SPEED0_BIT) | \
|
||||||
(1<<SPIHW_MODE_SPEED1_BIT) | \
|
(0<<SPIHW_MODE_SPEED1_BIT) | \
|
||||||
(0<<SPIHW_MODE_DOUBLESPEED_BIT) | \
|
(1<<SPIHW_MODE_DOUBLESPEED_BIT) | \
|
||||||
(0<<SPIHW_MODE_DATAORDER_BIT) | \
|
(0<<SPIHW_MODE_DATAORDER_BIT) | \
|
||||||
(0<<SPIHW_MODE_CPOL_BIT) | \
|
(0<<SPIHW_MODE_CPOL_BIT) | \
|
||||||
(0<<SPIHW_MODE_CPHA_BIT)
|
(0<<SPIHW_MODE_CPHA_BIT)
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
.equ XPT2046_CMD_READ_Z2 = 0xc1
|
.equ XPT2046_CMD_READ_Z2 = 0xc1
|
||||||
|
|
||||||
.equ XPT2046_AVERAGE = 2
|
.equ XPT2046_AVERAGE = 2
|
||||||
.equ XPT2046_Z_THRESHOLD = 500
|
.equ XPT2046_Z_THRESHOLD = 50
|
||||||
.equ XPT2046_TIMER_VALUE = 3 ; every 300ms
|
.equ XPT2046_TIMER_VALUE = 3 ; every 300ms
|
||||||
|
|
||||||
.equ XPT2046_FLAGS_PRESSED_BIT = 7
|
.equ XPT2046_FLAGS_PRESSED_BIT = 7
|
||||||
@@ -127,22 +127,35 @@ xpt2046UpdateValues:
|
|||||||
lds r23, xpt2046Flags
|
lds r23, xpt2046Flags
|
||||||
rcall xpt2046BeginSpi ; (R16, R17)
|
rcall xpt2046BeginSpi ; (R16, R17)
|
||||||
|
|
||||||
#if 0
|
; rcall xpt2046UpdateZ
|
||||||
ldi r16, XPT2046_CMD_READ_X
|
|
||||||
|
ldi r16, XPT2046_CMD_READ_Z1
|
||||||
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
sts xpt2046CurrentX, r18
|
sts xpt2046CurrentZ, r18
|
||||||
sts xpt2046CurrentX+1, r19
|
sts xpt2046CurrentZ+1, r19
|
||||||
lds r24, xpt2046CurrentY
|
ldi r16, LOW(XPT2046_Z_THRESHOLD)
|
||||||
lds r25, xpt2046CurrentY+1
|
ldi r17, HIGH(XPT2046_Z_THRESHOLD)
|
||||||
adiw r25:r24, 1
|
sub r18, r16
|
||||||
sts xpt2046CurrentY, r24
|
sbc r19, r17
|
||||||
sts xpt2046CurrentY+1, r25
|
brcc xpt2046UpdateValues_aboveThreshold
|
||||||
#else
|
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 xpt2046UpdateX
|
||||||
rcall xpt2046UpdateY
|
rcall xpt2046UpdateY
|
||||||
rcall xpt2046UpdateZ
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
xpt2046UpdateValues_storeFlags:
|
||||||
sts xpt2046Flags, r23
|
sts xpt2046Flags, r23
|
||||||
rcall xpt2046EndSpi ; (R16, R17)
|
rcall xpt2046EndSpi ; (R16, R17)
|
||||||
|
|
||||||
@@ -215,21 +228,13 @@ xpt2046UpdateY_ret:
|
|||||||
xpt2046UpdateZ:
|
xpt2046UpdateZ:
|
||||||
ldi r16, XPT2046_CMD_READ_Z1
|
ldi r16, XPT2046_CMD_READ_Z1
|
||||||
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
rcall xpt2046SendCommandRecv12Bit ; (R16)
|
||||||
ldi r24, LOW(4095)
|
sts xpt2046CurrentZ, r18
|
||||||
ldi r25, HIGH(4095)
|
sts xpt2046CurrentZ+1, r19
|
||||||
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
|
|
||||||
|
|
||||||
ldi r16, LOW(XPT2046_Z_THRESHOLD)
|
ldi r16, LOW(XPT2046_Z_THRESHOLD)
|
||||||
ldi r17, HIGH(XPT2046_Z_THRESHOLD)
|
ldi r17, HIGH(XPT2046_Z_THRESHOLD)
|
||||||
sub r24, r16
|
sub r18, r16
|
||||||
sbc r25, r17
|
sbc r19, r17
|
||||||
mov r16, r23
|
mov r16, r23
|
||||||
brcs xpt2046UpdateZ_overThreshold
|
brcs xpt2046UpdateZ_overThreshold
|
||||||
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
cbr r23, (1<<XPT2046_FLAGS_PRESSED_BIT) ; Z below threshold, not pressed
|
||||||
@@ -370,7 +375,24 @@ xpt2046SendCommandRecv16Bit:
|
|||||||
clr r16
|
clr r16
|
||||||
rcall SPIHW_MasterTransfer ; (R16)
|
rcall SPIHW_MasterTransfer ; (R16)
|
||||||
mov r18, 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
|
ret
|
||||||
; @end
|
; @end
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user