/* * Display_Config.h * * Created: Sun Mar 21 2021 16:11:51 * Author Chris */ #ifndef DISPLAY_CONFIG_H_ #define DISPLAY_CONFIG_H_ // ============================================================================================ // Includes #include #include #include #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_ */