diff --git a/src/lcd/ili934x.h b/src/lcd/ili934x.h new file mode 100644 index 0000000000000000000000000000000000000000..4ad292f995a47819a76e85b3c7af0d6a161774c4 --- /dev/null +++ b/src/lcd/ili934x.h @@ -0,0 +1,118 @@ +/* Author: Steve Gunn + * Licence: This work is licensed under the Creative Commons Attribution License. + * View this license at http://creativecommons.org/about/licenses/ + */ +#ifndef _ILI934x_H +#define _ILI934x_H + +#define BLC 4 +#define RESET 7 + +#define CMD_ADDR 0x4000 +#define DATA_ADDR 0x4100 + +#define write_cmd(cmd) asm volatile("sts %0,%1" :: "i" (CMD_ADDR), "r" (cmd) : "memory"); +#define write_data(data) asm volatile("sts %0,%1" :: "i" (DATA_ADDR), "r" (data) : "memory"); +#define write_data16(data) asm volatile("sts %0,%B1 \n\t sts %0,%A1" :: "i" (DATA_ADDR), "r" (data) : "memory"); +#define write_cmd_data(cmd, data) asm volatile("sts %0,%1 \n\t sts %2,%3" :: "i" (CMD_ADDR), "r" (cmd), "i" (DATA_ADDR), "r" (data) : "memory"); + +/* Basic Commands */ +#define NO_OPERATION 0x00 +#define SOFTWARE_RESET 0x01 +#define READ_DISPLAY_IDENTIFICATION_INFORMATION 0x04 +#define READ_DISPLAY_STATUS 0x09 +#define READ_DISPLAY_POWER_MODE 0x0A +#define READ_DISPLAY_MADCTL 0x0B +#define READ_DISPLAY_PIXEL_FORMAT 0x0C +#define READ_DISPLAY_IMAGE_FORMAT 0x0D +#define READ_DISPLAY_SIGNAL_MODE 0x0E +#define READ_DISPLAY_SELF_DIAGNOSTIC_RESULT 0x0F +#define ENTER_SLEEP_MODE 0x10 +#define SLEEP_OUT 0x11 +#define PARTIAL_MODE_ON 0x12 +#define NORMAL_DISPLAY_MODE_ON 0x13 +#define DISPLAY_INVERSION_OFF 0x20 +#define DISPLAY_INVERSION_ON 0x21 +#define GAMMA_SET 0x26 +#define DISPLAY_OFF 0x28 +#define DISPLAY_ON 0x29 +#define COLUMN_ADDRESS_SET 0x2A +#define PAGE_ADDRESS_SET 0x2B +#define MEMORY_WRITE 0x2C +#define COLOR_SET 0x2D +#define MEMORY_READ 0x2E +#define PARTIAL_AREA 0x30 +#define VERTICAL_SCROLLING_DEFINITION 0x33 +#define TEARING_EFFECT_LINE_OFF 0x34 +#define TEARING_EFFECT_LINE_ON 0x35 +#define MEMORY_ACCESS_CONTROL 0x36 +#define VERTICAL_SCROLLING_START_ADDRESS 0x37 +#define IDLE_MODE_OFF 0x38 +#define IDLE_MODE_ON 0x39 +#define PIXEL_FORMAT_SET 0x3A +#define WRITE_MEMORY_CONTINUE 0x3C +#define READ_MEMORY_CONTINUE 0x3E +#define SET_TEAR_SCANLINE 0x44 +#define GET_SCANLINE 0x45 +#define WRITE_DISPLAY_BRIGHTNESS 0x51 +#define READ_DISPLAY_BRIGHTNESS 0x52 +#define WRITE_CTRL_DISPLAY 0x53 +#define READ_CTRL_DISPLAY 0x54 +#define WRITE_CONTENT_ADAPTIVE_BRIGHTNESS_CONTROL 0x55 +#define READ_CONTENT_ADAPTIVE_BRIGHTNESS_CONTROL 0x56 +#define WRITE_CABC_MINIMUM_BRIGHTNESS 0x5E +#define READ_CABC_MINIMUM_BRIGHTNESS 0x5F +#define READ_ID1 0xDA +#define READ_ID2 0xDB +#define READ_ID3 0xDC + +/* Extended Commands */ +#define RGB_INTERFACE_SIGNAL_CONTROL 0xB0 +#define FRAME_CONTROL_IN_NORMAL_MODE 0xB1 +#define FRAME_CONTROL_IN_IDLE_MODE 0xB2 +#define FRAME_CONTROL_IN_PARTIAL_MODE 0xB3 +#define DISPLAY_INVERSION_CONTROL 0xB4 +#define BLANKING_PORCH_CONTROL 0xB5 +#define DISPLAY_FUNCTION_CONTROL 0xB6 +#define ENTRY_MODE_SET 0xB7 +#define BACKLIGHT_CONTROL_1 0xB8 +#define BACKLIGHT_CONTROL_2 0xB9 +#define BACKLIGHT_CONTROL_3 0xBA +#define BACKLIGHT_CONTROL_4 0xBB +#define BACKLIGHT_CONTROL_5 0xBC +#define BACKLIGHT_CONTROL_7 0xBE +#define BACKLIGHT_CONTROL_8 0xBF +#define POWER_CONTROL_1 0xC0 +#define POWER_CONTROL_2 0xC1 +#define POWER_CONTROL3_(FOR_NORMAL_MODE) 0xC2 +#define POWER_CONTROL4_(FOR_IDLE_MODE) 0xC3 +#define POWER_CONTROL5_(FOR_PARTIAL_MODE) 0xC4 +#define VCOM_CONTROL_1 0xC5 +#define VCOM_CONTROL_2 0xC7 +#define NV_MEMORY_WRITE 0xD0 +#define NV_MEMORY_PROTECTION_KEY 0xD1 +#define NV_MEMORY_STATUS_READ 0xD2 +#define READ_ID4 0xD3 +#define POSITIVE_GAMM_CORRECTION 0xE0 +#define NEGATIVE_GAMMA_CORRECTION 0xE1 +#define DIGITAL_GAMMA_CONTROL 0xE2 +#define DIGITAL_GAMMA_CONTROL2 0xE3 +#define INTERFACE_CONTROL 0xF6 + +/* Undocumented commands */ +#define INTERNAL_IC_SETTING 0xCB +#define GAMMA_DISABLE 0xF2 + +inline uint16_t read_data16(){ + uint16_t result; + asm volatile("lds %A0,%1 \n\t lds %B0,%1" : "=r" (result) : "i" (DATA_ADDR) : "memory"); + return result; +} + +inline unsigned char read_data(){ + unsigned char result; + asm volatile("lds %A0,%1" : "=r" (result) : "i" (DATA_ADDR) : "memory"); + return result; +} + +#endif //_ILI934x_H \ No newline at end of file