Mercurial > public > hwos_code
diff src/tft.asm @ 656:8af5aefbcdaf default tip
Update to 3.31 beta
| author | heinrichsweikamp |
|---|---|
| date | Thu, 27 Nov 2025 18:32:58 +0100 |
| parents | 75e90cd0c2c3 |
| children |
line wrap: on
line diff
--- a/src/tft.asm Mon Apr 29 13:05:18 2024 +0200 +++ b/src/tft.asm Thu Nov 27 18:32:58 2025 +0100 @@ -73,6 +73,8 @@ TFT_ClearScreen: btfsc screen_type4 ; screen type 4? bra TFT_ClearScreen_display4; YES + btfsc screen_type5 ; screen type 5? + bra TFT_ClearScreen_display4; YES btfsc screen_type3 ; screen type 3? bra TFT_ClearScreen_display3; YES btfsc screen_type2 ; screen type 2? @@ -373,6 +375,10 @@ btfsc screen_type4 ; display type 4 ? bra TFT_boot_screen4 ; YES + btfsc screen_type5 ; display type 5 ? + bra TFT_boot_screen5 ; YES + + ; Data Transfer Synchronization Parameter_out 0x00, 0x00 Parameter_out 0x00, 0x00 @@ -547,178 +553,99 @@ movf TABLAT,W rcall TFT_DataWrite ; write configuration bra display1_init_loop ; loop - + TFT_boot_screen4: - movlw 0xB0 + movlw 0x11 rcall TFT_CmdWrite - movlw 0x00 - rcall TFT_DataWrite - movlw 0xC4 - rcall TFT_DataWrite - - movlw 0xB1 - rcall TFT_CmdWrite - movlw 0xC0 - rcall TFT_DataWrite - - movlw 0x3A - rcall TFT_CmdWrite - movlw 0x55 - rcall TFT_DataWrite - + WAITMS d'120' + movlw 0x36 ; x/y mirror, see page 125 of ST7789V datasheet rcall TFT_CmdWrite - movlw 0x40 ; 0x40 (normal orientation) - rcall TFT_DataWrite - - movlw 0xB0 - rcall TFT_CmdWrite - movlw 0x00 - rcall TFT_DataWrite - - movlw 0xB2 - call TFT_CmdWrite - movlw 0x0C - rcall TFT_DataWrite - movlw 0x0C - rcall TFT_DataWrite - movlw 0x00 - rcall TFT_DataWrite - movlw 0x33 - rcall TFT_DataWrite - movlw 0x33 - rcall TFT_DataWrite - - movlw 0xB7 - rcall TFT_CmdWrite - movlw 0x75 - rcall TFT_DataWrite - - movlw 0xBB - rcall TFT_CmdWrite - movlw 0x20 - rcall TFT_DataWrite - - movlw 0xC0 - rcall TFT_CmdWrite - movlw 0x2C - rcall TFT_DataWrite - - movlw 0xC2 - rcall TFT_CmdWrite - movlw 0x01 - rcall TFT_DataWrite - - movlw 0xC3 - rcall TFT_CmdWrite - movlw 0x19 - rcall TFT_DataWrite - - movlw 0xC4 - rcall TFT_CmdWrite - movlw 0x20 - rcall TFT_DataWrite - - movlw 0xC6 - rcall TFT_CmdWrite - movlw 0x0F + movlw 0x80 ; 0x80 (flipped orientation) + btfss flip_screen ; 180° rotation? + movlw 0x40 ; NO, 0x40 (normal orientation) rcall TFT_DataWrite - movlw 0xD0 - rcall TFT_CmdWrite - movlw 0xA7 - rcall TFT_DataWrite - movlw 0xA1 - rcall TFT_DataWrite - - movlw 0xBB - rcall TFT_CmdWrite - movlw 0x35 - rcall TFT_DataWrite - - movlw 0xC0 - rcall TFT_CmdWrite - movlw 0x2C - rcall TFT_DataWrite + movlw LOW display4_config_table + movwf TBLPTRL + movlw HIGH display4_config_table + movwf TBLPTRH + movlw UPPER display4_config_table + movwf TBLPTRU + bra display45_init_loop ; use common loop - movlw 0xC2 - rcall TFT_CmdWrite - movlw 0x01 - rcall TFT_DataWrite - - movlw 0xC3 +TFT_boot_screen5: + movlw 0x11 rcall TFT_CmdWrite - movlw 0x11 - rcall TFT_DataWrite + WAITMS d'120' - movlw 0xC4 + movlw 0x36 rcall TFT_CmdWrite - movlw 0x20 - rcall TFT_DataWrite - - movlw 0xC6 - rcall TFT_CmdWrite - movlw 0x0F + movlw b'11001000' ; 0xC8 (flipped orientation) + btfss flip_screen ; 180° rotation? + movlw b'00001000' ; NO, 0x08 (normal orientation) rcall TFT_DataWrite - movlw 0xD0 - rcall TFT_CmdWrite - movlw 0xA7 - rcall TFT_DataWrite - movlw 0xA1 - rcall TFT_DataWrite - - movlw 0xBB - rcall TFT_CmdWrite - movlw 0x35 - rcall TFT_DataWrite - - movlw 0xC0 - rcall TFT_CmdWrite - movlw 0x2C - rcall TFT_DataWrite - - movlw 0x2C - rcall TFT_CmdWrite - movlw 0x01 - rcall TFT_DataWrite + movlw LOW display5_config_table + movwf TBLPTRL + movlw HIGH display5_config_table + movwf TBLPTRH + movlw UPPER display5_config_table + movwf TBLPTRU +display45_init_loop: + TBLRD*+ + movlw 0xFF ; coding for end of configuration + cpfseq TABLAT ; TABLAT = 0xFF ? + bra display45_config_write ; NO, write configuration to display + bra display45_init_loop2 ; YES - done +display45_config_write: ; with command in WREG + movf TABLAT,W + rcall TFT_CmdWrite ; write command +display45_config_write_more: + TBLRD*+ ; get configuration + movf TABLAT,W + rcall TFT_DataWrite ; write configuration + movlw 0xFF ; coding for end of configuration + cpfseq TABLAT + bra display45_config_write_more + bra display45_init_loop ; Continue with the next command - movlw 0xC3 - rcall TFT_CmdWrite - movlw 0x11 - rcall TFT_DataWrite - - movlw 0xC4 - rcall TFT_CmdWrite - movlw 0x20 - rcall TFT_DataWrite - - movlw 0xC6 - rcall TFT_CmdWrite - movlw 0x0F - rcall TFT_DataWrite - - movlw 0xD0 - rcall TFT_CmdWrite - movlw 0xA4 - rcall TFT_DataWrite - movlw 0xA1 - rcall TFT_DataWrite - ; gamma - movlw 0x11 - rcall TFT_CmdWrite - +display45_init_loop2: movlw 0x21 rcall TFT_CmdWrite WAITMS d'60' - movlw 0x29 rcall TFT_CmdWrite - WAITMS d'50' + WAITMS d'120' rcall TFT_ClearScreen - ; ToDo: Flip.... return ; done TFT_boot +display4_config_table: + ; Reg, Dat0, Dat1, Dat2, ... 0xFF for command end, 0xFF 0xFF for init end + db 0xB0,0x00,0xC4,0xFF,0xB1,0xC0,0xFF,0x3A + db 0x55,0xFF,0xB0,0x00,0xFF,0xB2,0x0C,0x0C + db 0x00,0x33,0x33,0xFF,0xB7,0x75,0xFF,0xBB + db 0x20,0xFF,0xC0,0x2C,0xFF,0xC2,0x01,0xFF + db 0xC3,0x19,0xFF,0xC4,0x20,0xFF,0xC6,0x0F + db 0xFF,0xD0,0xA7,0xA1,0xFF,0xBB,0x35,0xFF + db 0xC0,0x2C,0xFF,0xC2,0x01,0xFF,0xC3,0x11 + db 0xFF,0xC4,0x20,0xFF,0xC6,0x0F,0xFF,0xD0 + db 0xA7,0xA1,0xFF,0xBB,0x35,0xFF,0xC0,0x2C + db 0xFF,0x2C,0x01,0xFF,0xC3,0x11,0xFF,0xC4 + db 0x20,0xFF,0xC6,0x0F,0xFF,0x11,0xFF,0xD0 + db 0xA4,0xA1,0xC6,0x0F,0xFF,0x11,0xFF,0xFF + +display5_config_table: + ; Reg, Dat0, Dat1, Dat2, ... 0xFF for command end, 0xFF 0xFF for init end + db 0x13,0xFF,0xEF,0x01,0x01,0x00,0xFF,0xED + db 0x64,0x03,0x12,0x81,0xFF,0xE8,0x85,0x00 + db 0x7A,0xFF,0xCB,0x39,0x2C,0x00,0x35,0x06 + db 0xFF,0xEA,0x00,0x00,0xFF,0xC0,0x20,0xFF + db 0xC1,0x13,0xFF,0xC5,0x39,0x27,0xFF,0xC7 + db 0xA6,0xFF,0x36,0x08,0xFF,0x3A,0x55,0xFF + db 0xB1,0x00,0x0B,0xFF,0xB6,0x08,0x82,0x27 + db 0xFF,0xF2,0x00,0xFF,0x26,0x01,0xFF,0xFF + global TFT_CmdWrite TFT_CmdWrite: @@ -938,6 +865,8 @@ pixel_write_col320: btfsc screen_type4 ; display type 4 ? bra pixel_write_col320_d4 ; YES + btfsc screen_type5 ; display type 5 ? + bra pixel_write_col320_d4 ; YES btfsc screen_type3 ; display type 3 ? bra pixel_write_col320_d3 ; YES btfsc screen_type2 ; display type 2 ? @@ -994,14 +923,20 @@ bra TFT_DataWrite_PROD ; and return... pixel_write_col320_d4: - movlw 0x2A + movlw 0x2B rcall TFT_CmdWrite - rcall TFT_DataWrite_PROD + movf PRODH,W + rcall TFT_DataWrite + movf PRODL,W + rcall TFT_DataWrite incf PRODL,F movlw .0 addwfc PRODH,F ; +1 - bra TFT_DataWrite_PROD ; and return... - + movf PRODH,W + rcall TFT_DataWrite + movf PRODL,W + bra TFT_DataWrite ; and return + ;----------------------------------------------------------------------------- ; Write one half-pixel at position (win_top,win_leftx2). ; Inputs: win_leftx2, win_top, win_color_1/_2 @@ -1014,7 +949,9 @@ half_pixel_write_1: btfsc screen_type4 ; display type 4 ? bra half_pixel_write_1_display4 ; YES - btfsc screen_type3 ; display type 3 ? + btfsc screen_type5 ; display type 5 ? + bra half_pixel_write_1_display4 ; YES + btfsc screen_type3 ; display type 3 ? bra half_pixel_write_1_display3 ; YES btfsc screen_type2 ; display type 2 ? bra half_pixel_write_1_display2 ; YES @@ -1109,7 +1046,7 @@ half_pixel_write_1_display4: mullw 1 ; copy row to PRODL (PRODH=0) ; Row address start - movlw 0x2B + movlw 0x2A rcall TFT_CmdWrite movlw 0x00 rcall TFT_DataWrite @@ -1267,6 +1204,8 @@ btfsc screen_type4 ; screen type 4 ? bra TFT_box_write_display4 ; YES + btfsc screen_type5 ; screen type 5 ? + bra TFT_box_write_display4 ; YES btfsc screen_type3 ; screen type 3 ? bra TFT_box_write_display3 ; YES btfsc screen_type2 ; screen type 2 ? @@ -1587,6 +1526,8 @@ movlw 0x22 ; frame memory data write start btfsc screen_type4 movlw 0x2C ; Start Writing Data to GRAM (Display 4) + btfsc screen_type5 + movlw 0x2C ; Start Writing Data to GRAM (Display 4) rcall TFT_CmdWrite clrf PRODH ; column counter @@ -1594,6 +1535,8 @@ btfsc screen_type4 ; display type 4 ? bra TFT_box_display4 ; YES + btfsc screen_type5 ; display type 5 ? + bra TFT_box_display4 ; YES btfsc screen_type3 ; display type 3 ? bra TFT_box_display3 ; YES btfsc screen_type2 ; display type 2 ?
