/** * \internal * \brief Send display commands to exit standby mode * * This function is used to exit the display standby mode, which is the default * mode after a reset signal to the display. */ void ili9341_exit_standby(void) { ili9341_send_command(ILI9341_CMD_SLEEP_OUT); ili9341_deselect_chip(); delay_ms(150); ili9341_send_command(ILI9341_CMD_DISPLAY_ON); ili9341_deselect_chip(); }
/** * \brief Write the graphical memory with a single color pixel * * Use this function to write a single color pixel to the controller memory. * * Limits have to be set prior to calling this function, e.g.: * \code * ili9341_set_top_left_limit(0, 0); * ili9341_set_bottom_right_limit(320, 240); * ... * \endcode * * \param color The color pixel to write to the screen */ void ili9341_write_gram(ili9341_color_t color) { /* Only 16-bit color supported */ Assert(sizeof(color) == 2); ili9341_send_command(ILI9341_CMD_MEMORY_WRITE); ili9341_send_byte(color); ili9341_send_byte(color >> 8); ili9341_wait_for_send_done(); ili9341_deselect_chip(); }
/** * \internal * \brief Helper function to send the drawing limits (boundaries) to the display * * This function is used to send the currently set upper-left and lower-right * drawing limits to the display, as set through the various limit functions. * * \param send_end_limits True to also send the lower-right drawing limits */ static void ili9341_send_draw_limits(const bool send_end_limits) { ili9341_send_command(ILI9341_CMD_COLUMN_ADDRESS_SET); ili9341_send_byte(limit_start_x >> 8); ili9341_send_byte(limit_start_x & 0xFF); if (send_end_limits) { ili9341_send_byte(limit_end_x >> 8); ili9341_send_byte(limit_end_x & 0xFF); } ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_PAGE_ADDRESS_SET); ili9341_send_byte(limit_start_y >> 8); ili9341_send_byte(limit_start_y & 0xFF); if (send_end_limits) { ili9341_send_byte(limit_end_y >> 8); ili9341_send_byte(limit_end_y & 0xFF); } ili9341_wait_for_send_done(); ili9341_deselect_chip(); }
/** * \brief Read a single color from the graphical memory * * Use this function to read a color from the graphical memory of the * controller. * * Limits have to be set prior to calling this function, e.g.: * \code * ili9341_set_top_left_limit(0, 0); * ili9341_set_bottom_right_limit(320, 240); * ... * \endcode * * \retval ili9341_color_t The read color pixel */ ili9341_color_t ili9341_read_gram(void) { uint8_t red, green, blue; ili9341_send_command(ILI9341_CMD_MEMORY_READ); /* No interesting data in the first byte, hence read and discard */ red = ili9341_read_byte(); red = ili9341_read_byte(); green = ili9341_read_byte(); blue = ili9341_read_byte(); ili9341_deselect_chip(); return ILI9341_COLOR(red, green, blue); }
/** * \brief Sets the orientation of the display data * * Configures the display for a given orientation, including mirroring and/or * screen rotation. * * \param flags Orientation flags to use, see \ref ILI9341_FLIP_X, \ref ILI9341_FLIP_Y * and \ref ILI9341_SWITCH_XY. */ void ili9341_set_orientation(uint8_t flags) { uint8_t madctl = 0x48; if (flags & ILI9341_FLIP_X) { madctl &= ~(1 << 6); } if (flags & ILI9341_FLIP_Y) { madctl |= 1 << 7; } if (flags & ILI9341_SWITCH_XY) { madctl |= 1 << 5; } ili9341_send_command(ILI9341_CMD_MEMORY_ACCESS_CONTROL); ili9341_send_byte(madctl); ili9341_wait_for_send_done(); ili9341_deselect_chip(); }
/** * \brief Copy pixels from progmem to the screen * * This function can be used to copy data from program memory (flash) to the * display. * * Limits have to be set prior to calling this function, e.g.: * \code * ili9341_set_top_left_limit(0, 0); * ili9341_set_bottom_right_limit(320, 240); * ... * \endcode * * \param pixels Pointer to the progmem data * \param count Number of pixels to write */ void ili9341_copy_progmem_pixels_to_screen( ili9341_color_t PROGMEM_PTR_T pixels, uint32_t count) { ili9341_color_t color; /* Sanity check to make sure that the pixel count is not zero */ Assert(count > 0); ili9341_send_command(ILI9341_CMD_MEMORY_WRITE); while (count--) { color = PROGMEM_READ_WORD(pixels); ili9341_send_byte(color); ili9341_send_byte(color >> 8); pixels++; } ili9341_wait_for_send_done(); ili9341_deselect_chip(); }
/** * \brief Copy pixels from the screen to a pixel buffer * * Use this function to copy pixels from the display to an internal SRAM buffer. * * Limits have to be set prior to calling this function, e.g.: * \code * ili9341_set_top_left_limit(0, 0); * ili9341_set_bottom_right_limit(320, 240); * ... * \endcode * * \param pixels Pointer to the pixel buffer to read to * \param count Number of pixels to read */ void ili9341_copy_pixels_from_screen(ili9341_color_t *pixels, uint32_t count) { uint8_t red, green, blue; /* Sanity check to make sure that the pixel count is not zero */ Assert(count > 0); ili9341_send_command(ILI9341_CMD_MEMORY_READ); /* No interesting data in the first byte, hence read and discard */ red = ili9341_read_byte(); while (count--) { red = ili9341_read_byte(); green = ili9341_read_byte(); blue = ili9341_read_byte(); *pixels = ILI9341_COLOR(red, green, blue); pixels++; } ili9341_deselect_chip(); }
/** * \brief Sets the orientation of the display data * * Configures the display for a given orientation, including mirroring and/or * screen rotation. * * \param flags Orientation flags to use, see \ref ILI9341_FLIP_X, \ref ILI9341_FLIP_Y * and \ref ILI9341_SWITCH_XY. */ void ili9341_set_orientation(uint8_t flags) { uint8_t madctl = 0x48; /* Pretend the display is in landscape mode by default to match other display drivers */ flags ^= ILI9341_SWITCH_XY | ILI9341_FLIP_X; if (flags & ILI9341_FLIP_X) { madctl &= ~(1 << 6); } if (flags & ILI9341_FLIP_Y) { madctl |= 1 << 7; } if (flags & ILI9341_SWITCH_XY) { madctl |= 1 << 5; } ili9341_send_command(ILI9341_CMD_MEMORY_ACCESS_CONTROL); ili9341_send_byte(madctl); ili9341_wait_for_send_done(); ili9341_deselect_chip(); }
/** * \internal * \brief Initialize the hardware interface to the controller * * This will initialize the module used for communication with the controller. * Currently supported interfaces by this component driver are the SPI * interface through either the SPI module in master mode or the USART in * Master SPI mode. Configuration must be done in the associated * conf_ili9341.h file. */ static void ili9341_interface_init(void) { #if defined(CONF_ILI9341_USART_SPI) || defined(CONF_ILI9341_SPI) spi_flags_t spi_flags = SPI_MODE_0; board_spi_select_id_t spi_select_id = 0; #else #error Interface for ILI9341 has not been selected or interface not\ supported, please configure component driver using the conf_ili9341.h\ file! #endif #if defined(CONF_ILI9341_USART_SPI) struct usart_spi_device device = { .id = 0, }; usart_spi_init(CONF_ILI9341_USART_SPI); usart_spi_setup_device(CONF_ILI9341_USART_SPI, &device, spi_flags, CONF_ILI9341_CLOCK_SPEED, spi_select_id); #elif defined(CONF_ILI9341_SPI) struct spi_device device = { .id = 0, }; spi_master_init(CONF_ILI9341_SPI); spi_master_setup_device(CONF_ILI9341_SPI, &device, spi_flags, CONF_ILI9341_CLOCK_SPEED, spi_select_id); spi_enable(CONF_ILI9341_SPI); # if UC3 spi_set_chipselect(CONF_ILI9341_SPI, ~(1 << 0)); # if defined(ILI9341_DMA_ENABLED) sysclk_enable_peripheral_clock(&AVR32_PDCA); # endif # endif /* Send one dummy byte for the spi_is_tx_ok() to work as expected */ spi_write_single(CONF_ILI9341_SPI, 0); #endif } /** * \internal * \brief Initialize all the display registers * * This function will set up all the internal registers according the the * manufacturer's description. */ static void ili9341_controller_init_registers(void) { ili9341_send_command(ILI9341_CMD_POWER_CONTROL_A); ili9341_send_byte(0x39); ili9341_send_byte(0x2C); ili9341_send_byte(0x00); ili9341_send_byte(0x34); ili9341_send_byte(0x02); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_POWER_CONTROL_B); ili9341_send_byte(0x00); ili9341_send_byte(0xAA); ili9341_send_byte(0XB0); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_PUMP_RATIO_CONTROL); ili9341_send_byte(0x30); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_POWER_CONTROL_1); ili9341_send_byte(0x25); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_POWER_CONTROL_2); ili9341_send_byte(0x11); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_VCOM_CONTROL_1); ili9341_send_byte(0x5C); ili9341_send_byte(0x4C); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_VCOM_CONTROL_2); ili9341_send_byte(0x94); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_DRIVER_TIMING_CONTROL_A); ili9341_send_byte(0x85); ili9341_send_byte(0x01); ili9341_send_byte(0x78); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_DRIVER_TIMING_CONTROL_B); ili9341_send_byte(0x00); ili9341_send_byte(0x00); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(ILI9341_CMD_COLMOD_PIXEL_FORMAT_SET); ili9341_send_byte(0x05); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_set_orientation(0); ili9341_set_limits(0, 0, ILI9341_DEFAULT_WIDTH, ILI9341_DEFAULT_HEIGHT); } /** * \internal * \brief Send display commands to exit standby mode * * This function is used to exit the display standby mode, which is the default * mode after a reset signal to the display. */ static void ili9341_exit_standby(void) { ili9341_send_command(ILI9341_CMD_SLEEP_OUT); ili9341_deselect_chip(); delay_ms(150); ili9341_send_command(ILI9341_CMD_DISPLAY_ON); ili9341_deselect_chip(); }
/** * \brief Set a given number of pixels to the same color * * Use this function to write a certain number of pixels to the same color * within a set limit. * * Limits have to be set prior to calling this function, e.g.: * \code * ili9341_set_top_left_limit(0, 0); * ili9341_set_bottom_right_limit(320, 240); * ... * \endcode * * \param color The color to write to the display * \param count The number of pixels to write with this color */ void ili9341_duplicate_pixel(const ili9341_color_t color, uint32_t count) { /* Sanity check to make sure that the pixel count is not zero */ Assert(count > 0); ili9341_send_command(ILI9341_CMD_MEMORY_WRITE); #if defined(ILI9341_DMA_ENABLED) ili9341_color_t chunk_buf[ILI9341_DMA_CHUNK_SIZE]; uint32_t chunk_len; # if SAM Pdc *SPI_DMA = spi_get_pdc_base(CONF_ILI9341_SPI); pdc_packet_t spi_pdc_data; pdc_enable_transfer(SPI_DMA, PERIPH_PTCR_TXTEN); spi_pdc_data.ul_addr = (uint32_t)chunk_buf; # elif UC3 pdca_set_transfer_size(CONF_ILI9341_PDCA_CHANNEL, PDCA_TRANSFER_SIZE_BYTE); pdca_set_peripheral_select(CONF_ILI9341_PDCA_CHANNEL, CONF_ILI9341_PDCA_PID); # endif for (uint32_t i = 0; i < ILI9341_DMA_CHUNK_SIZE; i++) { chunk_buf[i] = le16_to_cpu(color); } while (count) { chunk_len = min(ILI9341_DMA_CHUNK_SIZE, count); ili9341_wait_for_send_done(); # if SAM spi_pdc_data.ul_size = (uint32_t)sizeof(ili9341_color_t) * chunk_len; pdc_tx_init(SPI_DMA, NULL, &spi_pdc_data); # elif UC3 pdca_reload_channel(CONF_ILI9341_PDCA_CHANNEL, chunk_buf, (uint32_t)sizeof(ili9341_color_t) * chunk_len); pdca_enable(CONF_ILI9341_PDCA_CHANNEL); # endif count -= chunk_len; } ili9341_wait_for_send_done(); ili9341_deselect_chip(); # if SAM pdc_disable_transfer(SPI_DMA, PERIPH_PTCR_TXTEN); # elif UC3 pdca_disable(CONF_ILI9341_PDCA_CHANNEL); # endif #else while (count--) { ili9341_send_byte(color); ili9341_send_byte(color >> 8); } ili9341_wait_for_send_done(); ili9341_deselect_chip(); #endif }
/** * \brief Copy pixels from SRAM to the screen * * Used to copy a large quantitative of data to the screen in one go. * * Limits have to be set prior to calling this function, e.g.: * \code * ili9341_set_top_left_limit(0, 0); * ili9341_set_bottom_right_limit(320, 240); * ... * \endcode * * \param pixels Pointer to the pixel data * \param count Number of pixels to copy to the screen */ void ili9341_copy_pixels_to_screen(const ili9341_color_t *pixels, uint32_t count) { const ili9341_color_t *pixel = pixels; /* Sanity check to make sure that the pixel count is not zero */ Assert(count > 0); ili9341_send_command(ILI9341_CMD_MEMORY_WRITE); #if defined(ILI9341_DMA_ENABLED) ili9341_color_t chunk_buf[ILI9341_DMA_CHUNK_SIZE]; uint32_t chunk_len; # if SAM Pdc *SPI_DMA = spi_get_pdc_base(CONF_ILI9341_SPI); pdc_packet_t spi_pdc_data; pdc_enable_transfer(SPI_DMA, PERIPH_PTCR_TXTEN); spi_pdc_data.ul_addr = (uint32_t)chunk_buf; # elif UC3 pdca_set_transfer_size(CONF_ILI9341_PDCA_CHANNEL, PDCA_TRANSFER_SIZE_BYTE); pdca_set_peripheral_select(CONF_ILI9341_PDCA_CHANNEL, CONF_ILI9341_PDCA_PID); # endif while (count) { /* We need to copy out the data to send in chunks into RAM, as the PDC * does not allow FLASH->Peripheral transfers */ chunk_len = min(ILI9341_DMA_CHUNK_SIZE, count); /* Wait for pending transfer to complete */ ili9341_wait_for_send_done(); for (uint32_t i = 0; i < chunk_len; i++) { chunk_buf[i] = le16_to_cpu(pixel[i]); } # if SAM spi_pdc_data.ul_size = (uint32_t)sizeof(ili9341_color_t) * chunk_len; pdc_tx_init(SPI_DMA, NULL, &spi_pdc_data); # elif UC3 pdca_reload_channel(CONF_ILI9341_PDCA_CHANNEL, chunk_buf, (uint32_t)sizeof(ili9341_color_t) * chunk_len); pdca_enable(CONF_ILI9341_PDCA_CHANNEL); # endif pixel += chunk_len; count -= chunk_len; } ili9341_wait_for_send_done(); ili9341_deselect_chip(); # if SAM pdc_disable_transfer(SPI_DMA, PERIPH_PTCR_TXTEN); # elif UC3 pdca_disable(CONF_ILI9341_PDCA_CHANNEL); # endif #else while (count--) { ili9341_send_byte(*pixel); ili9341_send_byte(*pixel >> 8); pixel++; } ili9341_wait_for_send_done(); ili9341_deselect_chip(); #endif }
/** * \internal * \brief Initialize the hardware interface to the controller * * This will initialize the module used for communication with the controller. * Currently supported interfaces by this component driver are the SPI * interface through either the SPI module in master mode or the USART in * Master SPI mode. Configuration must be done in the associated * conf_ili9341.h file. */ static void ili9341_interface_init(void) { #if defined(CONF_ILI9341_USART_SPI) || defined(CONF_ILI9341_SPI) spi_flags_t spi_flags = SPI_MODE_0; board_spi_select_id_t spi_select_id = 0; #else #error Interface for ILI9341 has not been selected or interface not\ supported, please configure component driver using the conf_ili9341.h\ file! #endif #if defined(CONF_ILI9341_USART_SPI) struct usart_spi_device device = { .id = 0, }; usart_spi_init(CONF_ILI9341_USART_SPI); usart_spi_setup_device(CONF_ILI9341_USART_SPI, &device, spi_flags, CONF_ILI9341_CLOCK_SPEED, spi_select_id); #elif defined(CONF_ILI9341_SPI) struct spi_device device = { .id = 0, }; spi_master_init(CONF_ILI9341_SPI); spi_master_setup_device(CONF_ILI9341_SPI, &device, spi_flags, CONF_ILI9341_CLOCK_SPEED, spi_select_id); spi_enable(CONF_ILI9341_SPI); # if UC3 spi_set_chipselect(CONF_ILI9341_SPI, ~(1 << 0)); # if defined(ILI9341_DMA_ENABLED) sysclk_enable_peripheral_clock(&AVR32_PDCA); # endif # endif /* Send one dummy byte for the spi_is_tx_ok() to work as expected */ spi_write_single(CONF_ILI9341_SPI, 0); #endif } /** * \internal * \brief Initialize all the display registers * * This function will set up all the internal registers according the the * manufacturer's description. */ static void ili9341_controller_init_registers(void) { ili9341_send_command(0xEF); ili9341_send_byte(0x03); ili9341_send_byte(0x80); ili9341_send_byte(0x02); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xCF); ili9341_send_byte(0x00); ili9341_send_byte(0xC1); ili9341_send_byte(0x30); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xED); ili9341_send_byte(0x64); ili9341_send_byte(0x03); ili9341_send_byte(0x12); ili9341_send_byte(0x81); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xE8); ili9341_send_byte(0x85); ili9341_send_byte(0x00); ili9341_send_byte(0x78); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xCB); ili9341_send_byte(0x39); ili9341_send_byte(0x2C); ili9341_send_byte(0x00); ili9341_send_byte(0x34); ili9341_send_byte(0x02); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xF7); ili9341_send_byte(0x20); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xEA); ili9341_send_byte(0x00); ili9341_send_byte(0x00); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xC0); ili9341_send_byte(0x23); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xC1); ili9341_send_byte(0x10); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xC5); ili9341_send_byte(0x3E); ili9341_send_byte(0x28); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xC7); ili9341_send_byte(0x86); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0x36); ili9341_send_byte(0x48); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0x3A); ili9341_send_byte(0x55); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xB1); ili9341_send_byte(0x00); ili9341_send_byte(0x18); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xB6); ili9341_send_byte(0x08); ili9341_send_byte(0x82); ili9341_send_byte(0x27); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xF2); ili9341_send_byte(0x00); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0x26); ili9341_send_byte(0x01); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xE0); ili9341_send_byte(0x0F); ili9341_send_byte(0x31); ili9341_send_byte(0x2B); ili9341_send_byte(0x0C); ili9341_send_byte(0x0E); ili9341_send_byte(0x08); ili9341_send_byte(0x4E); ili9341_send_byte(0xF1); ili9341_send_byte(0x37); ili9341_send_byte(0x07); ili9341_send_byte(0x10); ili9341_send_byte(0x03); ili9341_send_byte(0x0E); ili9341_send_byte(0x09); ili9341_send_byte(0x00); ili9341_wait_for_send_done(); ili9341_deselect_chip(); ili9341_send_command(0xE1); ili9341_send_byte(0x00); ili9341_send_byte(0x0E); ili9341_send_byte(0x14); ili9341_send_byte(0x03); ili9341_send_byte(0x11); ili9341_send_byte(0x07); ili9341_send_byte(0x31); ili9341_send_byte(0xC1); ili9341_send_byte(0x48); ili9341_send_byte(0x08); ili9341_send_byte(0x0F); ili9341_send_byte(0x0C); ili9341_send_byte(0x31); ili9341_send_byte(0x36); ili9341_send_byte(0x0F); ili9341_wait_for_send_done(); ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_POWER_CONTROL_A); // ili9341_send_byte(0x39); // ili9341_send_byte(0x2C); // ili9341_send_byte(0x00); // ili9341_send_byte(0x34); // ili9341_send_byte(0x02); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_POWER_CONTROL_B); // ili9341_send_byte(0x00); // ili9341_send_byte(0xAA); // ili9341_send_byte(0XB0); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_PUMP_RATIO_CONTROL); // ili9341_send_byte(0x30); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_POWER_CONTROL_1); // ili9341_send_byte(0x25); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_POWER_CONTROL_2); // ili9341_send_byte(0x11); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_VCOM_CONTROL_1); // ili9341_send_byte(0x5C); // ili9341_send_byte(0x4C); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_VCOM_CONTROL_2); // ili9341_send_byte(0x94); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_DRIVER_TIMING_CONTROL_A); // ili9341_send_byte(0x85); // ili9341_send_byte(0x01); // ili9341_send_byte(0x78); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_DRIVER_TIMING_CONTROL_B); // ili9341_send_byte(0x00); // ili9341_send_byte(0x00); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); // ili9341_send_command(ILI9341_CMD_COLMOD_PIXEL_FORMAT_SET); // ili9341_send_byte(0x05); // ili9341_wait_for_send_done(); // ili9341_deselect_chip(); ili9341_set_orientation(0); ili9341_set_limits(0, 0, ILI9341_DEFAULT_WIDTH, ILI9341_DEFAULT_HEIGHT); } void ili9341_enter_standby(void) { ili9341_send_command(ILI9341_CMD_ENTER_SLEEP_MODE); ili9341_deselect_chip(); }