ILI9341 display controller component driver.
Copyright (c) 2012-2018 Microchip Technology Inc. and its subsidiaries.
#include "conf_ili9341.h"
#include "ili9341.h"
#include "ili9341_regs.h"
#include <sysclk.h>
#include <ioport.h>
#include <delay.h>
Functions | |
static void | ili9341_controller_init_registers (void) |
Initialize all the display registers. More... | |
void | ili9341_copy_pixels_from_screen (ili9341_color_t *pixels, uint32_t count) |
Copy pixels from the screen to a pixel buffer. More... | |
void | ili9341_copy_pixels_to_screen (const ili9341_color_t *pixels, uint32_t count) |
Copy pixels from SRAM to the screen. More... | |
static __always_inline void | ili9341_deselect_chip (void) |
Helper function to de-select the CS of the controller on the bus. More... | |
void | ili9341_duplicate_pixel (const ili9341_color_t color, uint32_t count) |
Set a given number of pixels to the same color. More... | |
static void | ili9341_exit_standby (void) |
Send display commands to exit standby mode. More... | |
void | ili9341_init (void) |
Initialize the controller. More... | |
static void | ili9341_interface_init (void) |
Initialize the hardware interface to the controller. More... | |
static __always_inline uint8_t | ili9341_read_byte (void) |
Helper function to read a byte from an arbitrary interface. More... | |
ili9341_color_t | ili9341_read_gram (void) |
Read a single color from the graphical memory. More... | |
static void | ili9341_reset_display (void) |
Reset the display using the digital control interface. More... | |
static __always_inline void | ili9341_select_chip (void) |
Helper function to select the CS of the controller on the bus. More... | |
static __always_inline void | ili9341_select_command_mode (void) |
Helper function to select command byte transmission mode. More... | |
static __always_inline void | ili9341_select_data_mode (void) |
Helper function to select data byte transmission mode. More... | |
static __always_inline void | ili9341_send_byte (uint8_t data) |
Helper function to send a byte over an arbitrary interface. More... | |
static void | ili9341_send_command (uint8_t command) |
Sends a command to the controller, and prepares for parameter transfer. More... | |
static void | ili9341_send_draw_limits (const bool send_end_limits) |
Helper function to send the drawing limits (boundaries) to the display. More... | |
void | ili9341_set_bottom_right_limit (ili9341_coord_t x, ili9341_coord_t y) |
Set the display bottom right drawing limit. More... | |
void | ili9341_set_limits (ili9341_coord_t start_x, ili9341_coord_t start_y, ili9341_coord_t end_x, ili9341_coord_t end_y) |
Set the full display drawing limits. More... | |
void | ili9341_set_orientation (uint8_t flags) |
Sets the orientation of the display data. More... | |
void | ili9341_set_top_left_limit (ili9341_coord_t x, ili9341_coord_t y) |
Set the display top left drawing limit. More... | |
static __always_inline void | ili9341_wait_for_send_done (void) |
Helper function to wait for the last send operation to complete. More... | |
void | ili9341_write_gram (ili9341_color_t color) |
Write the graphical memory with a single color pixel. More... | |
Variables | |
static ili9341_coord_t | limit_end_x |
static ili9341_coord_t | limit_end_y |
static ili9341_coord_t | limit_start_x |
static ili9341_coord_t | limit_start_y |
|
static |
Initialize all the display registers.
This function will set up all the internal registers according the the manufacturer's description.
References ILI9341_CMD_COLMOD_PIXEL_FORMAT_SET, ILI9341_CMD_DRIVER_TIMING_CONTROL_A, ILI9341_CMD_DRIVER_TIMING_CONTROL_B, ILI9341_CMD_POWER_CONTROL_1, ILI9341_CMD_POWER_CONTROL_2, ILI9341_CMD_POWER_CONTROL_A, ILI9341_CMD_POWER_CONTROL_B, ILI9341_CMD_PUMP_RATIO_CONTROL, ILI9341_CMD_VCOM_CONTROL_1, ILI9341_CMD_VCOM_CONTROL_2, ILI9341_DEFAULT_HEIGHT, ILI9341_DEFAULT_WIDTH, ili9341_deselect_chip(), ili9341_send_byte(), ili9341_send_command(), ili9341_set_limits(), ili9341_set_orientation(), and ili9341_wait_for_send_done().
Referenced by ili9341_init().
|
static |
Helper function to de-select the CS of the controller on the bus.
References ioport_set_pin_level().
Referenced by ili9341_controller_init_registers(), ili9341_copy_pixels_from_screen(), ili9341_copy_pixels_to_screen(), ili9341_duplicate_pixel(), ili9341_exit_standby(), ili9341_read_gram(), ili9341_send_draw_limits(), ili9341_set_orientation(), and ili9341_write_gram().
|
static |
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.
References delay_ms, ILI9341_CMD_DISPLAY_ON, ILI9341_CMD_SLEEP_OUT, ili9341_deselect_chip(), and ili9341_send_command().
Referenced by ili9341_init().
|
static |
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.
References usart_spi_device::id, spi_device::id, spi_enable(), spi_master_init(), spi_master_setup_device(), SPI_MODE_0, spi_write_single(), sysclk_enable_peripheral_clock(), usart_spi_init(), and usart_spi_setup_device().
Referenced by ili9341_init().
|
static |
Helper function to read a byte from an arbitrary interface.
This function is used to hide what interface is used by the component driver, e.g. the component driver does not need to know if USART in SPI mode is used or the native SPI module.
uint8_t | Byte of data read from the display controller |
References ili9341_wait_for_send_done(), spi_is_rx_full(), spi_read_single(), spi_write_single(), and usart_spi_read_single().
Referenced by ili9341_copy_pixels_from_screen(), and ili9341_read_gram().
|
static |
Reset the display using the digital control interface.
Controls the reset pin of the display controller to reset the display.
References delay_ms, and ioport_set_pin_level().
Referenced by ili9341_init().
|
static |
Helper function to select the CS of the controller on the bus.
References ioport_set_pin_level().
Referenced by ili9341_send_command().
|
static |
Helper function to select command byte transmission mode.
References ioport_set_pin_level().
Referenced by ili9341_send_command().
|
static |
Helper function to select data byte transmission mode.
References ioport_set_pin_level().
Referenced by ili9341_send_command().
|
static |
Helper function to send a byte over an arbitrary interface.
This function is used to hide what interface is used by the component driver, e.g. the component driver does not need to know if USART in SPI mode is used or the native SPI module.
data | The byte to be transfered |
References cpu_irq_restore(), cpu_irq_save(), ili9341_wait_for_send_done(), spi_write_single(), and usart_spi_write_single().
Referenced by ili9341_controller_init_registers(), ili9341_copy_pixels_to_screen(), ili9341_duplicate_pixel(), ili9341_send_command(), ili9341_send_draw_limits(), ili9341_set_orientation(), and ili9341_write_gram().
|
static |
Sends a command to the controller, and prepares for parameter transfer.
Helper function to use for sending a command to the controller.
command | The command to send |
References ili9341_select_chip(), ili9341_select_command_mode(), ili9341_select_data_mode(), ili9341_send_byte(), and ili9341_wait_for_send_done().
Referenced by ili9341_controller_init_registers(), ili9341_copy_pixels_from_screen(), ili9341_copy_pixels_to_screen(), ili9341_duplicate_pixel(), ili9341_exit_standby(), ili9341_read_gram(), ili9341_send_draw_limits(), ili9341_set_orientation(), and ili9341_write_gram().
|
static |
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.
send_end_limits | True to also send the lower-right drawing limits |
References ILI9341_CMD_COLUMN_ADDRESS_SET, ILI9341_CMD_PAGE_ADDRESS_SET, ili9341_deselect_chip(), ili9341_send_byte(), ili9341_send_command(), ili9341_wait_for_send_done(), limit_end_x, limit_end_y, limit_start_x, and limit_start_y.
Referenced by ili9341_set_bottom_right_limit(), ili9341_set_limits(), and ili9341_set_top_left_limit().
|
static |
Helper function to wait for the last send operation to complete.
References spi_is_tx_empty(), and usart_spi_is_tx_empty().
Referenced by ili9341_controller_init_registers(), ili9341_copy_pixels_to_screen(), ili9341_duplicate_pixel(), ili9341_read_byte(), ili9341_send_byte(), ili9341_send_command(), ili9341_send_draw_limits(), ili9341_set_orientation(), and ili9341_write_gram().
|
static |
Referenced by ili9341_send_draw_limits(), ili9341_set_bottom_right_limit(), and ili9341_set_limits().
|
static |
Referenced by ili9341_send_draw_limits(), ili9341_set_bottom_right_limit(), and ili9341_set_limits().
|
static |
Referenced by ili9341_send_draw_limits(), ili9341_set_limits(), and ili9341_set_top_left_limit().
|
static |
Referenced by ili9341_send_draw_limits(), ili9341_set_limits(), and ili9341_set_top_left_limit().