From 049d651fec18c581b7ee29266b0b824662fcfbe8 Mon Sep 17 00:00:00 2001 From: Martin Preuss Date: Mon, 10 Nov 2025 22:29:37 +0100 Subject: [PATCH] avr: improved modules ILI9341 and XPT2046. --- avr/devices/c02/main/win_netstats.asm | 34 +++++++---- avr/modules/lcd2/gui/titlewindow2.asm | 1 + avr/modules/lcd2/ili9341/graphops.asm | 85 +++++++++++++++++++++++++++ avr/modules/lcd2/xpt2046/main.asm | 79 ++++++++++++++++++++----- 4 files changed, 173 insertions(+), 26 deletions(-) diff --git a/avr/devices/c02/main/win_netstats.asm b/avr/devices/c02/main/win_netstats.asm index 8a443b9..9733e20 100644 --- a/avr/devices/c02/main/win_netstats.asm +++ b/avr/devices/c02/main/win_netstats.asm @@ -96,14 +96,28 @@ WinNetStats_Show: ; eMsgSize WINNETSTATS_PRINTLABEL 90, winNetstats_lMsgSizeErr + ; draw horizontal line + ldi r16, STYLE_WIN_TITLE_HEIGHT+112 + mov r6, r16 + clr r7 + clr r4 + clr r5 + ldi r16, LOW(DISPLAY_WIDTH) + mov r8, r16 + ldi r16, HIGH(DISPLAY_WIDTH) + mov r9, r16 + clr r2 + clr r3 + bigcall Display_DrawHLine + ; X - WINNETSTATS_PRINTLABEL 112, winNetstats_lX + WINNETSTATS_PRINTLABEL 114, winNetstats_lX ; Y - WINNETSTATS_PRINTLABEL 134, winNetstats_lY + WINNETSTATS_PRINTLABEL 136, winNetstats_lY ; Z - WINNETSTATS_PRINTLABEL 156, winNetstats_lZ + WINNETSTATS_PRINTLABEL 158, winNetstats_lZ ; update num - WINNETSTATS_PRINTLABEL 178, winNetstats_lUpdate + WINNETSTATS_PRINTLABEL 180, winNetstats_lUpdate rcall WinNetStats_Update @@ -132,15 +146,15 @@ WinNetStats_Update: WINNETSTATS_PRINTDATA 160, 90, netInterfaceData+NET_IFACE_OFFS_ERR_MSGSIZE_LOW ; X - WINNETSTATS_PRINTDATA 160, 112, xpt2046CurrentX - WINNETSTATS_PRINTDATA 240, 112, xpt2046RawX + WINNETSTATS_PRINTDATA 160, 114, xpt2046CurrentX + WINNETSTATS_PRINTDATA 240, 114, xpt2046RawX ; Y - WINNETSTATS_PRINTDATA 160, 134, xpt2046CurrentY - WINNETSTATS_PRINTDATA 240, 134, xpt2046RawY + WINNETSTATS_PRINTDATA 160, 136, xpt2046CurrentY + WINNETSTATS_PRINTDATA 240, 136, xpt2046RawY ; Z - WINNETSTATS_PRINTDATA 160, 156, xpt2046CurrentZ + WINNETSTATS_PRINTDATA 160, 158, xpt2046CurrentZ ; update num - WINNETSTATS_PRINTDATA 160, 178, winNetstatsUpdateNum + WINNETSTATS_PRINTDATA 160, 180, winNetstatsUpdateNum ret ; @end diff --git a/avr/modules/lcd2/gui/titlewindow2.asm b/avr/modules/lcd2/gui/titlewindow2.asm index f3ab9e9..a29b320 100644 --- a/avr/modules/lcd2/gui/titlewindow2.asm +++ b/avr/modules/lcd2/gui/titlewindow2.asm @@ -118,6 +118,7 @@ TitleWindow_DrawTitle: ldi r16, HIGH(STYLE_WIN_TITLE_FOREGROUND) mov r3, r16 bigcall Window_DrawColorTextFlash + ret ; @end diff --git a/avr/modules/lcd2/ili9341/graphops.asm b/avr/modules/lcd2/ili9341/graphops.asm index ba1fc09..0bf376c 100644 --- a/avr/modules/lcd2/ili9341/graphops.asm +++ b/avr/modules/lcd2/ili9341/graphops.asm @@ -63,6 +63,91 @@ Display_FillRect_loopW: +; --------------------------------------------------------------------------- +; @routine Display_DrawHLine @global +; +; @param r3:r2 color +; @param r5:r4 X0 +; @param r7:r6 Y0 +; @param r9:r8 W + +Display_DrawHLine: + push r15 + in r15, SREG + cli + + ldi r16, 1 ; height is 1 + mov r10, r16 + clr r11 + rcall ili9341BeginSpi ; (R16, R17) + rcall ili9341SetAddressWindow ; (R16, r20, r21) + + ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM + rcall ili9341SendCommand ; (R16) + + cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low + sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) + mov r24, r8 ; W low + mov r25, r9 ; W high +Display_DrawHLine_loop: + mov r16, r3 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r2 + rcall SPIHW_MasterTransfer ; (R16) + sbiw r25:r24, 1 + brne Display_DrawHLine_loop + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + rcall ili9341EndSpi + out SREG, r15 + pop r15 + ret +; @end + + + +; --------------------------------------------------------------------------- +; @routine Display_DrawVLine @global +; +; @param r3:r2 color +; @param r5:r4 X0 +; @param r7:r6 Y0 +; @param r11:r10 H + +Display_DrawVLine: + push r15 + in r15, SREG + cli + + ldi r16, 1 ; width is 1 + mov r8, r16 + clr r9 + rcall ili9341BeginSpi ; (R16, R17) + rcall ili9341SetAddressWindow ; (R16, r20, r21) + + ldi r16, ILI9341_CMD_RAMWR ; start writing ro RAM + rcall ili9341SendCommand ; (R16) + + cbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS low + sbi ILI9341_DC_OUTPUT, ILI9341_DC_PIN ; D high (DATA) + mov r24, r10 ; H low + mov r25, r11 ; H high +Display_DrawVLine_loop: + mov r16, r3 + rcall SPIHW_MasterTransfer ; (R16) + mov r16, r2 + rcall SPIHW_MasterTransfer ; (R16) + sbiw r25:r24, 1 + brne Display_DrawVLine_loop + sbi SPIHW_SS_OUTPUT, SPIHW_SS_PIN ; SS high + rcall ili9341EndSpi + out SREG, r15 + pop r15 + ret +; @end + + + + ; --------------------------------------------------------------------------- ; @routine Display_DrawChar @global diff --git a/avr/modules/lcd2/xpt2046/main.asm b/avr/modules/lcd2/xpt2046/main.asm index 0c2635c..a1c0867 100644 --- a/avr/modules/lcd2/xpt2046/main.asm +++ b/avr/modules/lcd2/xpt2046/main.asm @@ -11,11 +11,35 @@ #define AQH_AVR_XPT2046_MAIN_ASM +; *************************************************************************** +; Module implementing DISPLAY_INPUT using displays with XPT2046 touch +; controllers. +; +; Implements: +; - Display_InputGetFlagsResetChg +; - Display_InputGetCurrentX +; - Display_InputGetCurrentY +; Defines: +; - DISPLAY_IFLAGS_PRESSED_BIT +; - DISPLAY_IFLAGS_CHGCOORD_BIT +; - DISPLAY_IFLAGS_CHGPRESS_BIT +; Needs: +; - DISPLAY_WIDTH +; - DISPLAY_HEIGHT +; *************************************************************************** + + ; *************************************************************************** ; defines +.equ DISPLAY_IFLAGS_PRESSED_BIT = 7 +.equ DISPLAY_IFLAGS_CHGCOORD_BIT = 6 +.equ DISPLAY_IFLAGS_CHGPRESS_BIT = 5 + + + .equ XPT2046_SPIMODE = (0<