Files
RP2350_MIDI_Lighter/Firmware/Display_Config.h

306 lines
14 KiB
C

/*
* Display_Config.h
*
* Created: Sun Mar 21 2021 16:11:51
* Author Chris
*/
#ifndef DISPLAY_CONFIG_H_
#define DISPLAY_CONFIG_H_
// ============================================================================================
// Includes
#include <stdio.h>
#include <stdint.h>
#include <stdbool.h>
#include "pico/types.h"
#include "pico/stdlib.h"
#include "hardware/spi.h"
#include "hardware/structs/spi.h"
// ============================================================================================
// Defines
#define YES 1
#define NO 0
/*******************************************************************
Pin and Interface Definitions
*******************************************************************/
#define DISPLAY_SPI_PORT spi0
#define DISPLAY_SPI_PIN_CS 21
#define DISPLAY_SPI_PIN_SCK 22
#define DISPLAY_SPI_PIN_MOSI 19
#define DISPLAY_PIN_RESET 16
#define DISPLAY_PIN_COMMAND 20
#define DISPLAY_SPI_PIN_MISO 4 // Only required if Touch Screen is used
#define DISPLAY_SPI_PIN_CS_TOUCH 6 // Only required if Touch Screen is used
// #define DISPLAY_SPI_BAUDRATE 50000000 // results in 37,5 MHz
#define DISPLAY_SPI_BAUDRATE 100000000 // results in 75 MHz
#define DISPLAY_MODE_SET_CMD() gpio_put(DISPLAY_PIN_COMMAND, 0) // Macro for setting TFT mode signal low (command)
#define DISPLAY_MODE_SET_DATA() gpio_put(DISPLAY_PIN_COMMAND, 1) // Macro for setting TFT mode signal (data)
#define DISPLAY_RESET_ON() gpio_put(DISPLAY_PIN_RESET, 0)
#define DISPLAY_RESET_OFF() gpio_put(DISPLAY_PIN_RESET, 1)
/*******************************************************************
Display Definitions
*******************************************************************/
// #define DISPLAY_ILI9341
// #define DISPLAY_ST7735
#define DISPLAY_GC9A01A
#ifdef DISPLAY_ILI9341
#define DISPLAY_WIDTH 320 // Width of display using default orientation
#define DISPLAY_HEIGHT 240 // Height of display using default orientation
#elif defined(DISPLAY_ST7735)
#define DISPLAY_WIDTH 160 // Width of display using default orientation
#define DISPLAY_HEIGHT 128 // Height of display using default orientation
#elif defined(DISPLAY_GC9A01A)
#define DISPLAY_WIDTH 240 // Width of display using default orientation
#define DISPLAY_HEIGHT 240 // Height of display using default orientation
#endif
////////////////////////////
// DISPLAY MAIN DATATYPES //
////////////////////////////
typedef uint16_t Display_Color;
#define DISPLAY_IMAGE_BUFFER_PIXEL_SIZE (DISPLAY_WIDTH*DISPLAY_HEIGHT)
#define DISPLAY_IMAGE_BUFFER_BYTE_SIZE (DISPLAY_IMAGE_BUFFER_PIXEL_SIZE*sizeof(Display_Color))
#define DISPLAY_X_CENTER (DISPLAY_WIDTH >> 1)
#define DISPLAY_Y_CENTER (DISPLAY_HEIGHT >> 1)
typedef union
{
Display_Color Dim_2[DISPLAY_HEIGHT][DISPLAY_WIDTH];
Display_Color Dim_1[DISPLAY_IMAGE_BUFFER_PIXEL_SIZE];
} __aligned(4) Display_Image_Buffer;
///////////////////////////
// DISPLAY CONFIGURATION //
///////////////////////////
#define DISPLAY_FLIP_X NO
#define DISPLAY_FLIP_Y YES
#define DISPLAY_X_Y_EXCHANGE NO
#define DISPLAY_INVERT_COLORS NO
#define DISPLAY_DEFAULT_CHAR_SPACING 2
///////////////////////////////
// DISPLAY COLOR DEFINITIONS //
///////////////////////////////
#if DISPLAY_INVERT_COLORS==NO
#define DISPLAY_COLOR_FROM_RGB888(r, g, b) ((Display_Color)b & 0x00F8) | (((Display_Color)r << 5) & 0x1F00) | ((Display_Color)g >> 5) | (((Display_Color)g << 11) & 0xE000)
#define DISPLAY_COLOR_FROM_RGB565(r, g, b) (((Display_Color)b << 3) & 0x00F8) | (((Display_Color)r << 8) & 0x1F00) | ((Display_Color)g >> 3) | (((Display_Color)g << 11) & 0xE000)
#define RED_FROM_RGB565(_color_) (Display_Color)((_color_ & 0x1F00) >> 8)
#define GREEN_FROM_RGB565(_color_) (Display_Color)(((_color_ & 0xE000) >> 11) | ((_color_ & 0x0007) << 3))
#define BLUE_FROM_RGB565(_color_) (Display_Color)((_color_ & 0x00F8) >> 3)
#else
#define DISPLAY_COLOR_FROM_RGB888(r, g, b) ((Display_Color)r & 0x00F8) | (((Display_Color)b << 5) & 0x1F00) | ((Display_Color)g >> 5) | (((Display_Color)g << 11) & 0xE000)
#endif
#define DISPLAY_COLOR_BLACK DISPLAY_COLOR_FROM_RGB888( 0, 0, 0)
#define DISPLAY_COLOR_NAVY DISPLAY_COLOR_FROM_RGB888( 0, 0, 128)
#define DISPLAY_COLOR_DARKGREEN DISPLAY_COLOR_FROM_RGB888( 0, 128, 0)
#define DISPLAY_COLOR_DARKCYAN DISPLAY_COLOR_FROM_RGB888( 0, 128, 128)
#define DISPLAY_COLOR_MAROON DISPLAY_COLOR_FROM_RGB888(128, 0, 0)
#define DISPLAY_COLOR_PURPLE DISPLAY_COLOR_FROM_RGB888(128, 0, 128)
#define DISPLAY_COLOR_OLIVE DISPLAY_COLOR_FROM_RGB888(128, 128, 0)
#define DISPLAY_COLOR_LIGHTGREY DISPLAY_COLOR_FROM_RGB888(192, 192, 192)
#define DISPLAY_COLOR_DARKGREY DISPLAY_COLOR_FROM_RGB888(128, 128, 128)
#define DISPLAY_COLOR_BLUE DISPLAY_COLOR_FROM_RGB888( 0, 0, 255)
#define DISPLAY_COLOR_GREEN DISPLAY_COLOR_FROM_RGB888( 0, 255, 0)
#define DISPLAY_COLOR_CYAN DISPLAY_COLOR_FROM_RGB888( 0, 255, 255)
#define DISPLAY_COLOR_RED DISPLAY_COLOR_FROM_RGB888(255, 0, 0)
#define DISPLAY_COLOR_MAGENTA DISPLAY_COLOR_FROM_RGB888(255, 0, 255)
#define DISPLAY_COLOR_YELLOW DISPLAY_COLOR_FROM_RGB888(255, 255, 0)
#define DISPLAY_COLOR_WHITE DISPLAY_COLOR_FROM_RGB888(255, 255, 255)
#define DISPLAY_COLOR_ORANGE DISPLAY_COLOR_FROM_RGB888(255, 165, 0)
#define DISPLAY_COLOR_GREENYELLOW DISPLAY_COLOR_FROM_RGB888(173, 255, 47)
#define DISPLAY_COLOR_PINK DISPLAY_COLOR_FROM_RGB888(255, 0, 255)
#ifdef DISPLAY_ILI9341
// Level 1 Commands (from the display Datasheet)
#define ILI9341_CMD_NOP 0x00
#define ILI9341_CMD_SOFTWARE_RESET 0x01
#define ILI9341_CMD_READ_DISP_ID 0x04
#define ILI9341_CMD_READ_DISP_STATUS 0x09
#define ILI9341_CMD_READ_DISP_MADCTRL 0x0B
#define ILI9341_CMD_READ_DISP_PIXEL_FORMAT 0x0C
#define ILI9341_CMD_READ_DISP_IMAGE_FORMAT 0x0D
#define ILI9341_CMD_READ_DISP_SIGNAL_MODE 0x0E
#define ILI9341_CMD_READ_DISP_SELF_DIAGNOSTIC 0x0F
#define ILI9341_CMD_ENTER_SLEEP_MODE 0x10
#define ILI9341_CMD_SLEEP_OUT 0x11
#define ILI9341_CMD_PARTIAL_MODE_ON 0x12
#define ILI9341_CMD_NORMAL_DISP_MODE_ON 0x13
#define ILI9341_CMD_DISP_INVERSION_OFF 0x20
#define ILI9341_CMD_DISP_INVERSION_ON 0x21
#define ILI9341_CMD_GAMMA_SET 0x26
#define ILI9341_CMD_DISPLAY_OFF 0x28
#define ILI9341_CMD_DISPLAY_ON 0x29
#define ILI9341_CMD_COLUMN_ADDRESS_SET 0x2A
#define ILI9341_CMD_PAGE_ADDRESS_SET 0x2B
#define ILI9341_CMD_MEMORY_WRITE 0x2C
#define ILI9341_CMD_COLOR_SET 0x2D
#define ILI9341_CMD_MEMORY_READ 0x2E
#define ILI9341_CMD_PARTIAL_AREA 0x30
#define ILI9341_CMD_VERT_SCROLL_DEFINITION 0x33
#define ILI9341_CMD_TEARING_EFFECT_LINE_OFF 0x34
#define ILI9341_CMD_TEARING_EFFECT_LINE_ON 0x35
#define ILI9341_CMD_MEMORY_ACCESS_CONTROL 0x36
#define ILI9341_CMD_VERT_SCROLL_START_ADDRESS 0x37
#define ILI9341_CMD_IDLE_MODE_OFF 0x38
#define ILI9341_CMD_IDLE_MODE_ON 0x39
#define ILI9341_CMD_COLMOD_PIXEL_FORMAT_SET 0x3A
#define ILI9341_CMD_WRITE_MEMORY_CONTINUE 0x3C
#define ILI9341_CMD_READ_MEMORY_CONTINUE 0x3E
#define ILI9341_CMD_SET_TEAR_SCANLINE 0x44
#define ILI9341_CMD_GET_SCANLINE 0x45
#define ILI9341_CMD_WRITE_DISPLAY_BRIGHTNESS 0x51
#define ILI9341_CMD_READ_DISPLAY_BRIGHTNESS 0x52
#define ILI9341_CMD_WRITE_CTRL_DISPLAY 0x53
#define ILI9341_CMD_READ_CTRL_DISPLAY 0x54
#define ILI9341_CMD_WRITE_CONTENT_ADAPT_BRIGHTNESS 0x55
#define ILI9341_CMD_READ_CONTENT_ADAPT_BRIGHTNESS 0x56
#define ILI9341_CMD_WRITE_MIN_CAB_LEVEL 0x5E
#define ILI9341_CMD_READ_MIN_CAB_LEVEL 0x5F
#define ILI9341_CMD_READ_ID1 0xDA
#define ILI9341_CMD_READ_ID2 0xDB
#define ILI9341_CMD_READ_ID3 0xDC
// Level 2 Commands (from the display Datasheet)
#define ILI9341_CMD_RGB_SIGNAL_CONTROL 0xB0
#define ILI9341_CMD_FRAME_RATE_CONTROL_NORMAL 0xB1
#define ILI9341_CMD_FRAME_RATE_CONTROL_IDLE_8COLOR 0xB2
#define ILI9341_CMD_FRAME_RATE_CONTROL_PARTIAL 0xB3
#define ILI9341_CMD_DISPLAY_INVERSION_CONTROL 0xB4
#define ILI9341_CMD_BLANKING_PORCH_CONTROL 0xB5
#define ILI9341_CMD_DISPLAY_FUNCTION_CONTROL 0xB6
#define ILI9341_CMD_ENTRY_MODE_SET 0xB7
#define ILI9341_CMD_BACKLIGHT_CONTROL_1 0xB8
#define ILI9341_CMD_BACKLIGHT_CONTROL_2 0xB9
#define ILI9341_CMD_BACKLIGHT_CONTROL_3 0xBA
#define ILI9341_CMD_BACKLIGHT_CONTROL_4 0xBB
#define ILI9341_CMD_BACKLIGHT_CONTROL_5 0xBC
#define ILI9341_CMD_BACKLIGHT_CONTROL_6 0xBD
#define ILI9341_CMD_BACKLIGHT_CONTROL_7 0xBE
#define ILI9341_CMD_BACKLIGHT_CONTROL_8 0xBF
#define ILI9341_CMD_POWER_CONTROL_1 0xC0
#define ILI9341_CMD_POWER_CONTROL_2 0xC1
#define ILI9341_CMD_VCOM_CONTROL_1 0xC5
#define ILI9341_CMD_VCOM_CONTROL_2 0xC7
#define ILI9341_CMD_POWER_CONTROL_A 0xCB
#define ILI9341_CMD_POWER_CONTROL_B 0xCF
#define ILI9341_CMD_NVMEM_WRITE 0xD0
#define ILI9341_CMD_NVMEM_PROTECTION_KEY 0xD1
#define ILI9341_CMD_NVMEM_STATUS_READ 0xD2
#define ILI9341_CMD_READ_ID4 0xD3
#define ILI9341_CMD_POSITIVE_GAMMA_CORRECTION 0xE0
#define ILI9341_CMD_NEGATIVE_GAMMA_CORRECTION 0xE1
#define ILI9341_CMD_DIGITAL_GAMMA_CONTROL_1 0xE2
#define ILI9341_CMD_DIGITAL_GAMMA_CONTROL_2 0xE3
#define ILI9341_CMD_DRIVER_TIMING_CONTROL_A 0xE8
#define ILI9341_CMD_DRIVER_TIMING_CONTROL_B 0xEA
#define ILI9341_CMD_ENABLE_3_GAMMA_CONTROL 0xF2
#define ILI9341_CMD_INTERFACE_CONTROL 0xF6
#define ILI9341_CMD_PUMP_RATIO_CONTROL 0xF7
#elif defined(DISPLAY_ST7735)
#define ST77XX_SLPOUT 0x11
#define ST77XX_NORON 0x13
#define ST77XX_INVOFF 0x20
#define ST77XX_DISPON 0x29
#define ST77XX_CASET 0x2A
#define ST77XX_RASET 0x2B
#define ST77XX_MEM_WR 0x2C
#define ST77XX_MADCTL 0x36
#define ST77XX_COLMOD 0x3A
#define ST7735_MADCTL_BGR 0x08
#define ST7735_MADCTL_MH 0x04
#define ST7735_FRMCTR1 0xB1
#define ST7735_FRMCTR2 0xB2
#define ST7735_FRMCTR3 0xB3
#define ST7735_INVCTR 0xB4
#define ST7735_DISSET5 0xB6
#define ST7735_PWCTR1 0xC0
#define ST7735_PWCTR2 0xC1
#define ST7735_PWCTR3 0xC2
#define ST7735_PWCTR4 0xC3
#define ST7735_PWCTR5 0xC4
#define ST7735_VMCTR1 0xC5
#define ST7735_PWCTR6 0xFC
#define ST7735_GMCTRP1 0xE0
#define ST7735_GMCTRN1 0xE1
#elif defined(DISPLAY_GC9A01A)
#define GC9A01A_SWRESET 0x01 ///< Software Reset (maybe, not documented)
#define GC9A01A_RDDID 0x04 ///< Read display identification information
#define GC9A01A_RDDST 0x09 ///< Read Display Status
#define GC9A01A_SLPIN 0x10 ///< Enter Sleep Mode
#define GC9A01A_SLPOUT 0x11 ///< Sleep Out
#define GC9A01A_PTLON 0x12 ///< Partial Mode ON
#define GC9A01A_NORON 0x13 ///< Normal Display Mode ON
#define GC9A01A_INVOFF 0x20 ///< Display Inversion OFF
#define GC9A01A_INVON 0x21 ///< Display Inversion ON
#define GC9A01A_DISPOFF 0x28 ///< Display OFF
#define GC9A01A_DISPON 0x29 ///< Display ON
#define GC9A01A_CASET 0x2A ///< Column Address Set
#define GC9A01A_RASET 0x2B ///< Row Address Set
#define GC9A01A_RAMWR 0x2C ///< Memory Write
#define GC9A01A_PTLAR 0x30 ///< Partial Area
#define GC9A01A_VSCRDEF 0x33 ///< Vertical Scrolling Definition
#define GC9A01A_TEOFF 0x34 ///< Tearing Effect Line OFF
#define GC9A01A_TEON 0x35 ///< Tearing Effect Line ON
#define GC9A01A_MADCTL 0x36 ///< Memory Access Control
#define GC9A01A_VSCRSADD 0x37 ///< Vertical Scrolling Start Address
#define GC9A01A_IDLEOFF 0x38 ///< Idle mode OFF
#define GC9A01A_IDLEON 0x39 ///< Idle mode ON
#define GC9A01A_COLMOD 0x3A ///< Pixel Format Set
#define GC9A01A_CONTINUE 0x3C ///< Write Memory Continue
#define GC9A01A_TEARSET 0x44 ///< Set Tear Scanline
#define GC9A01A_GETLINE 0x45 ///< Get Scanline
#define GC9A01A_SETBRIGHT 0x51 ///< Write Display Brightness
#define GC9A01A_SETCTRL 0x53 ///< Write CTRL Display
#define GC9A01A1_POWER7 0xA7 ///< Power Control 7
#define GC9A01A_TEWC 0xBA ///< Tearing effect width control
#define GC9A01A1_POWER1 0xC1 ///< Power Control 1
#define GC9A01A1_POWER2 0xC3 ///< Power Control 2
#define GC9A01A1_POWER3 0xC4 ///< Power Control 3
#define GC9A01A1_POWER4 0xC9 ///< Power Control 4
#define GC9A01A_RDID1 0xDA ///< Read ID 1
#define GC9A01A_RDID2 0xDB ///< Read ID 2
#define GC9A01A_RDID3 0xDC ///< Read ID 3
#define GC9A01A_FRAMERATE 0xE8 ///< Frame rate control
#define GC9A01A_SPI2DATA 0xE9 ///< SPI 2DATA control
#define GC9A01A_INREGEN2 0xEF ///< Inter register enable 2
#define GC9A01A_GAMMA1 0xF0 ///< Set gamma 1
#define GC9A01A_GAMMA2 0xF1 ///< Set gamma 2
#define GC9A01A_GAMMA3 0xF2 ///< Set gamma 3
#define GC9A01A_GAMMA4 0xF3 ///< Set gamma 4
#define GC9A01A_IFACE 0xF6 ///< Interface control
#define GC9A01A_INREGEN1 0xFE ///< Inter register enable 1
#endif
#ifdef DISPLAY_ILI9341
#define DISPLAY_MEMORY_WRITE ILI9341_CMD_MEMORY_WRITE
#elif defined(DISPLAY_ST7735)
#define DISPLAY_MEMORY_WRITE ST77XX_MEM_WR
#elif defined(DISPLAY_GC9A01A)
#define DISPLAY_MEMORY_WRITE GC9A01A_RAMWR
#endif
#endif /* DISPLAY_CONFIG_H_ */