The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /*
AnnaBridge 171:3a7713b1edbc 2 * The Clear BSD License
AnnaBridge 171:3a7713b1edbc 3 * Copyright (c) 2016, Freescale Semiconductor, Inc.
AnnaBridge 171:3a7713b1edbc 4 * Copyright 2016-2017 NXP
AnnaBridge 171:3a7713b1edbc 5 * All rights reserved.
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 171:3a7713b1edbc 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 171:3a7713b1edbc 9 * that the following conditions are met:
AnnaBridge 171:3a7713b1edbc 10 *
AnnaBridge 171:3a7713b1edbc 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 171:3a7713b1edbc 12 * of conditions and the following disclaimer.
AnnaBridge 171:3a7713b1edbc 13 *
AnnaBridge 171:3a7713b1edbc 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 171:3a7713b1edbc 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 171:3a7713b1edbc 16 * other materials provided with the distribution.
AnnaBridge 171:3a7713b1edbc 17 *
AnnaBridge 171:3a7713b1edbc 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 171:3a7713b1edbc 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 171:3a7713b1edbc 20 * software without specific prior written permission.
AnnaBridge 171:3a7713b1edbc 21 *
AnnaBridge 171:3a7713b1edbc 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 171:3a7713b1edbc 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 171:3a7713b1edbc 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 171:3a7713b1edbc 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 171:3a7713b1edbc 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 171:3a7713b1edbc 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 171:3a7713b1edbc 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 171:3a7713b1edbc 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 171:3a7713b1edbc 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 171:3a7713b1edbc 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 171:3a7713b1edbc 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 171:3a7713b1edbc 33 */
AnnaBridge 171:3a7713b1edbc 34
AnnaBridge 171:3a7713b1edbc 35 #ifndef __FSL_LCDC_H__
AnnaBridge 171:3a7713b1edbc 36 #define __FSL_LCDC_H__
AnnaBridge 171:3a7713b1edbc 37
AnnaBridge 171:3a7713b1edbc 38 #include "fsl_common.h"
AnnaBridge 171:3a7713b1edbc 39
AnnaBridge 171:3a7713b1edbc 40 /*!
AnnaBridge 171:3a7713b1edbc 41 * @addtogroup lpc_lcdc
AnnaBridge 171:3a7713b1edbc 42 * @{
AnnaBridge 171:3a7713b1edbc 43 */
AnnaBridge 171:3a7713b1edbc 44
AnnaBridge 171:3a7713b1edbc 45 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 46 * Definitions
AnnaBridge 171:3a7713b1edbc 47 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 48
AnnaBridge 171:3a7713b1edbc 49 /*! @name Driver version */
AnnaBridge 171:3a7713b1edbc 50 /*@{*/
AnnaBridge 171:3a7713b1edbc 51 /*! @brief LCDC driver version 2.0.0. */
AnnaBridge 171:3a7713b1edbc 52 #define LPC_LCDC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0))
AnnaBridge 171:3a7713b1edbc 53 /*@}*/
AnnaBridge 171:3a7713b1edbc 54
AnnaBridge 171:3a7713b1edbc 55 /*!@brief How many hardware cursors supports. */
AnnaBridge 171:3a7713b1edbc 56 #define LCDC_CURSOR_COUNT 4
AnnaBridge 171:3a7713b1edbc 57
AnnaBridge 171:3a7713b1edbc 58 /*!@brief LCD cursor image bits per pixel. */
AnnaBridge 171:3a7713b1edbc 59 #define LCDC_CURSOR_IMG_BPP 2
AnnaBridge 171:3a7713b1edbc 60
AnnaBridge 171:3a7713b1edbc 61 /*!@brief LCD 32x32 cursor image size in word(32-bit). */
AnnaBridge 171:3a7713b1edbc 62 #define LCDC_CURSOR_IMG_32X32_WORDS (32 * 32 * LCDC_CURSOR_IMG_BPP / (8 * sizeof(uint32_t)))
AnnaBridge 171:3a7713b1edbc 63
AnnaBridge 171:3a7713b1edbc 64 /*!@brief LCD 64x64 cursor image size in word(32-bit). */
AnnaBridge 171:3a7713b1edbc 65 #define LCDC_CURSOR_IMG_64X64_WORDS (64 * 64 * LCDC_CURSOR_IMG_BPP / (8 * sizeof(uint32_t)))
AnnaBridge 171:3a7713b1edbc 66
AnnaBridge 171:3a7713b1edbc 67 /*!@brief LCD palette size in words(32-bit). */
AnnaBridge 171:3a7713b1edbc 68 #define LCDC_PALETTE_SIZE_WORDS (ARRAY_SIZE(((LCD_Type *)0)->PAL))
AnnaBridge 171:3a7713b1edbc 69
AnnaBridge 171:3a7713b1edbc 70 /*!
AnnaBridge 171:3a7713b1edbc 71 * @brief LCD sigal polarity flags.
AnnaBridge 171:3a7713b1edbc 72 */
AnnaBridge 171:3a7713b1edbc 73 enum _lcdc_polarity_flags
AnnaBridge 171:3a7713b1edbc 74 {
AnnaBridge 171:3a7713b1edbc 75 kLCDC_InvertVsyncPolarity = LCD_POL_IVS_MASK, /*!< Invert the VSYNC polarity, set to active low. */
AnnaBridge 171:3a7713b1edbc 76 kLCDC_InvertHsyncPolarity = LCD_POL_IHS_MASK, /*!< Invert the HSYNC polarity, set to active low. */
AnnaBridge 171:3a7713b1edbc 77 kLCDC_InvertClkPolarity = LCD_POL_IPC_MASK, /*!< Invert the panel clock polarity, set to
AnnaBridge 171:3a7713b1edbc 78 drive data on falling edge. */
AnnaBridge 171:3a7713b1edbc 79 kLCDC_InvertDePolarity = LCD_POL_IOE_MASK, /*!< Invert the data enable (DE) polarity, set to active low. */
AnnaBridge 171:3a7713b1edbc 80 };
AnnaBridge 171:3a7713b1edbc 81
AnnaBridge 171:3a7713b1edbc 82 /*!
AnnaBridge 171:3a7713b1edbc 83 * @brief LCD bits per pixel.
AnnaBridge 171:3a7713b1edbc 84 */
AnnaBridge 171:3a7713b1edbc 85 typedef enum _lcdc_bpp
AnnaBridge 171:3a7713b1edbc 86 {
AnnaBridge 171:3a7713b1edbc 87 kLCDC_1BPP = 0U, /*!< 1 bpp. */
AnnaBridge 171:3a7713b1edbc 88 kLCDC_2BPP = 1U, /*!< 2 bpp. */
AnnaBridge 171:3a7713b1edbc 89 kLCDC_4BPP = 2U, /*!< 4 bpp. */
AnnaBridge 171:3a7713b1edbc 90 kLCDC_8BPP = 3U, /*!< 8 bpp. */
AnnaBridge 171:3a7713b1edbc 91 kLCDC_16BPP = 4U, /*!< 16 bpp. */
AnnaBridge 171:3a7713b1edbc 92 kLCDC_24BPP = 5U, /*!< 24 bpp, TFT panel only. */
AnnaBridge 171:3a7713b1edbc 93 kLCDC_16BPP565 = 6U, /*!< 16 bpp, 5:6:5 mode. */
AnnaBridge 171:3a7713b1edbc 94 kLCDC_12BPP = 7U, /*!< 12 bpp, 4:4:4 mode. */
AnnaBridge 171:3a7713b1edbc 95 } lcdc_bpp_t;
AnnaBridge 171:3a7713b1edbc 96
AnnaBridge 171:3a7713b1edbc 97 /*!
AnnaBridge 171:3a7713b1edbc 98 * @brief The types of display panel.
AnnaBridge 171:3a7713b1edbc 99 */
AnnaBridge 171:3a7713b1edbc 100 typedef enum _lcdc_display
AnnaBridge 171:3a7713b1edbc 101 {
AnnaBridge 171:3a7713b1edbc 102 kLCDC_DisplayTFT = LCD_CTRL_LCDTFT_MASK, /*!< Active matrix TFT panels with up to 24-bit bus interface. */
AnnaBridge 171:3a7713b1edbc 103 kLCDC_DisplaySingleMonoSTN4Bit = LCD_CTRL_LCDBW_MASK, /*!< Single-panel monochrome STN (4-bit bus interface). */
AnnaBridge 171:3a7713b1edbc 104 kLCDC_DisplaySingleMonoSTN8Bit =
AnnaBridge 171:3a7713b1edbc 105 LCD_CTRL_LCDBW_MASK | LCD_CTRL_LCDMONO8_MASK, /*!< Single-panel monochrome STN (8-bit bus interface). */
AnnaBridge 171:3a7713b1edbc 106 kLCDC_DisplayDualMonoSTN4Bit =
AnnaBridge 171:3a7713b1edbc 107 LCD_CTRL_LCDBW_MASK | LCD_CTRL_LCDDUAL_MASK, /*!< Dual-panel monochrome STN (4-bit bus interface). */
AnnaBridge 171:3a7713b1edbc 108 kLCDC_DisplayDualMonoSTN8Bit = LCD_CTRL_LCDBW_MASK | LCD_CTRL_LCDMONO8_MASK |
AnnaBridge 171:3a7713b1edbc 109 LCD_CTRL_LCDDUAL_MASK, /*!< Dual-panel monochrome STN (8-bit bus interface). */
AnnaBridge 171:3a7713b1edbc 110 kLCDC_DisplaySingleColorSTN8Bit = 0U, /*!< Single-panel color STN (8-bit bus interface). */
AnnaBridge 171:3a7713b1edbc 111 kLCDC_DisplayDualColorSTN8Bit = LCD_CTRL_LCDDUAL_MASK, /*!< Dual-panel coor STN (8-bit bus interface). */
AnnaBridge 171:3a7713b1edbc 112 } lcdc_display_t;
AnnaBridge 171:3a7713b1edbc 113
AnnaBridge 171:3a7713b1edbc 114 /*!
AnnaBridge 171:3a7713b1edbc 115 * @brief LCD panel buffer data format.
AnnaBridge 171:3a7713b1edbc 116 */
AnnaBridge 171:3a7713b1edbc 117 typedef enum _lcdc_data_format
AnnaBridge 171:3a7713b1edbc 118 {
AnnaBridge 171:3a7713b1edbc 119 kLCDC_LittleEndian = 0U, /*!< Little endian byte, little endian pixel. */
AnnaBridge 171:3a7713b1edbc 120 kLCDC_BigEndian = LCD_CTRL_BEPO_MASK | LCD_CTRL_BEBO_MASK, /*!< Big endian byte, big endian pixel. */
AnnaBridge 171:3a7713b1edbc 121 kLCDC_WinCeMode = LCD_CTRL_BEPO_MASK, /*!< little-endian byte, big-endian pixel for Windows CE mode. */
AnnaBridge 171:3a7713b1edbc 122 } lcdc_data_format_t;
AnnaBridge 171:3a7713b1edbc 123
AnnaBridge 171:3a7713b1edbc 124 /*!
AnnaBridge 171:3a7713b1edbc 125 * @brief LCD configuration structure.
AnnaBridge 171:3a7713b1edbc 126 */
AnnaBridge 171:3a7713b1edbc 127 typedef struct _lcdc_config
AnnaBridge 171:3a7713b1edbc 128 {
AnnaBridge 171:3a7713b1edbc 129 uint32_t panelClock_Hz; /*!< Panel clock in Hz. */
AnnaBridge 171:3a7713b1edbc 130 uint16_t ppl; /*!< Pixels per line, it must could be divided by 16. */
AnnaBridge 171:3a7713b1edbc 131 uint8_t hsw; /*!< HSYNC pulse width. */
AnnaBridge 171:3a7713b1edbc 132 uint8_t hfp; /*!< Horizontal front porch. */
AnnaBridge 171:3a7713b1edbc 133 uint8_t hbp; /*!< Horizontal back porch. */
AnnaBridge 171:3a7713b1edbc 134 uint16_t lpp; /*!< Lines per panal. */
AnnaBridge 171:3a7713b1edbc 135 uint8_t vsw; /*!< VSYNC pulse width. */
AnnaBridge 171:3a7713b1edbc 136 uint8_t vfp; /*!< Vrtical front porch. */
AnnaBridge 171:3a7713b1edbc 137 uint8_t vbp; /*!< Vertical back porch. */
AnnaBridge 171:3a7713b1edbc 138 uint8_t acBiasFreq; /*!< The number of line clocks between AC bias pin toggling. Only used for STN display. */
AnnaBridge 171:3a7713b1edbc 139 uint16_t polarityFlags; /*!< OR'ed value of @ref _lcdc_polarity_flags, used to contol the signal polarity. */
AnnaBridge 171:3a7713b1edbc 140 bool enableLineEnd; /*!< Enable line end or not, the line end is a positive pulse with 4 panel clock. */
AnnaBridge 171:3a7713b1edbc 141 uint8_t lineEndDelay; /*!< The panel clocks between the last pixel of line and the start of line end. */
AnnaBridge 171:3a7713b1edbc 142 uint32_t upperPanelAddr; /*!< LCD upper panel base address, must be double-word(64-bit) align. */
AnnaBridge 171:3a7713b1edbc 143 uint32_t lowerPanelAddr; /*!< LCD lower panel base address, must be double-word(64-bit) align. */
AnnaBridge 171:3a7713b1edbc 144 lcdc_bpp_t bpp; /*!< LCD bits per pixel. */
AnnaBridge 171:3a7713b1edbc 145 lcdc_data_format_t dataFormat; /*!< Data format. */
AnnaBridge 171:3a7713b1edbc 146 bool swapRedBlue; /*!< Set true to use BGR format, set false to choose RGB format. */
AnnaBridge 171:3a7713b1edbc 147 lcdc_display_t display; /*!< The display type. */
AnnaBridge 171:3a7713b1edbc 148 } lcdc_config_t;
AnnaBridge 171:3a7713b1edbc 149
AnnaBridge 171:3a7713b1edbc 150 /*!
AnnaBridge 171:3a7713b1edbc 151 * @brief LCD vertical compare interrupt mode.
AnnaBridge 171:3a7713b1edbc 152 */
AnnaBridge 171:3a7713b1edbc 153 typedef enum _lcdc_vertical_compare_interrupt_mode
AnnaBridge 171:3a7713b1edbc 154 {
AnnaBridge 171:3a7713b1edbc 155 kLCDC_StartOfVsync, /*!< Generate vertical compare interrupt at start of VSYNC. */
AnnaBridge 171:3a7713b1edbc 156 kLCDC_StartOfBackPorch, /*!< Generate vertical compare interrupt at start of back porch. */
AnnaBridge 171:3a7713b1edbc 157 kLCDC_StartOfActiveVideo, /*!< Generate vertical compare interrupt at start of active video. */
AnnaBridge 171:3a7713b1edbc 158 kLCDC_StartOfFrontPorch, /*!< Generate vertical compare interrupt at start of front porch. */
AnnaBridge 171:3a7713b1edbc 159 } lcdc_vertical_compare_interrupt_mode_t;
AnnaBridge 171:3a7713b1edbc 160
AnnaBridge 171:3a7713b1edbc 161 /*!
AnnaBridge 171:3a7713b1edbc 162 * @brief LCD interrupts.
AnnaBridge 171:3a7713b1edbc 163 */
AnnaBridge 171:3a7713b1edbc 164 enum _lcdc_interrupts
AnnaBridge 171:3a7713b1edbc 165 {
AnnaBridge 171:3a7713b1edbc 166 kLCDC_CursorInterrupt = LCD_CRSR_INTMSK_CRSRIM_MASK, /*!< Cursor image read finished interrupt. */
AnnaBridge 171:3a7713b1edbc 167 kLCDC_FifoUnderflowInterrupt = LCD_INTMSK_FUFIM_MASK, /*!< FIFO underflow interrupt. */
AnnaBridge 171:3a7713b1edbc 168 kLCDC_BaseAddrUpdateInterrupt = LCD_INTMSK_LNBUIM_MASK, /*!< Panel frame base address update interrupt. */
AnnaBridge 171:3a7713b1edbc 169 kLCDC_VerticalCompareInterrupt = LCD_INTMSK_VCOMPIM_MASK, /*!< Vertical compare interrupt. */
AnnaBridge 171:3a7713b1edbc 170 kLCDC_AhbErrorInterrupt = LCD_INTMSK_BERIM_MASK, /*!< AHB master error interrupt. */
AnnaBridge 171:3a7713b1edbc 171 };
AnnaBridge 171:3a7713b1edbc 172
AnnaBridge 171:3a7713b1edbc 173 /*!
AnnaBridge 171:3a7713b1edbc 174 * @brief LCD panel frame.
AnnaBridge 171:3a7713b1edbc 175 */
AnnaBridge 171:3a7713b1edbc 176 typedef enum _lcdc_panel
AnnaBridge 171:3a7713b1edbc 177 {
AnnaBridge 171:3a7713b1edbc 178 kLCDC_UpperPanel, /*!< Upper panel frame. */
AnnaBridge 171:3a7713b1edbc 179 kLCDC_LowerPanel /*!< Lower panel frame. */
AnnaBridge 171:3a7713b1edbc 180 } lcdc_panel_t;
AnnaBridge 171:3a7713b1edbc 181
AnnaBridge 171:3a7713b1edbc 182 /*!
AnnaBridge 171:3a7713b1edbc 183 * @brief LCD hardware cursor size
AnnaBridge 171:3a7713b1edbc 184 */
AnnaBridge 171:3a7713b1edbc 185 typedef enum _lcdc_cursor_size
AnnaBridge 171:3a7713b1edbc 186 {
AnnaBridge 171:3a7713b1edbc 187 kLCDC_CursorSize32, /*!< 32x32 pixel cursor. */
AnnaBridge 171:3a7713b1edbc 188 kLCDC_CursorSize64, /*!< 64x64 pixel cursor. */
AnnaBridge 171:3a7713b1edbc 189 } lcdc_cursor_size_t;
AnnaBridge 171:3a7713b1edbc 190
AnnaBridge 171:3a7713b1edbc 191 /*!
AnnaBridge 171:3a7713b1edbc 192 * @brief LCD hardware cursor palette
AnnaBridge 171:3a7713b1edbc 193 */
AnnaBridge 171:3a7713b1edbc 194 typedef struct _lcdc_cursor_palette
AnnaBridge 171:3a7713b1edbc 195 {
AnnaBridge 171:3a7713b1edbc 196 uint8_t red; /*!< Red color component. */
AnnaBridge 171:3a7713b1edbc 197 uint8_t green; /*!< Red color component. */
AnnaBridge 171:3a7713b1edbc 198 uint8_t blue; /*!< Red color component. */
AnnaBridge 171:3a7713b1edbc 199 } lcdc_cursor_palette_t;
AnnaBridge 171:3a7713b1edbc 200
AnnaBridge 171:3a7713b1edbc 201 /*!
AnnaBridge 171:3a7713b1edbc 202 * @brief LCD hardware cursor frame synchronization mode.
AnnaBridge 171:3a7713b1edbc 203 */
AnnaBridge 171:3a7713b1edbc 204 typedef enum _lcdc_cursor_sync_mode
AnnaBridge 171:3a7713b1edbc 205 {
AnnaBridge 171:3a7713b1edbc 206 kLCDC_CursorAsync, /*!< Cursor change will be displayed immediately. */
AnnaBridge 171:3a7713b1edbc 207 kLCDC_CursorSync, /*!< Cursor change will be displayed in next frame. */
AnnaBridge 171:3a7713b1edbc 208 } lcdc_cursor_sync_mode_t;
AnnaBridge 171:3a7713b1edbc 209
AnnaBridge 171:3a7713b1edbc 210 /*!
AnnaBridge 171:3a7713b1edbc 211 * @brief LCD hardware cursor configuration structure.
AnnaBridge 171:3a7713b1edbc 212 */
AnnaBridge 171:3a7713b1edbc 213 typedef struct _lcdc_cursor_config
AnnaBridge 171:3a7713b1edbc 214 {
AnnaBridge 171:3a7713b1edbc 215 lcdc_cursor_size_t size; /*!< Cursor size. */
AnnaBridge 171:3a7713b1edbc 216 lcdc_cursor_sync_mode_t syncMode; /*!< Cursor synchronization mode. */
AnnaBridge 171:3a7713b1edbc 217 lcdc_cursor_palette_t palette0; /*!< Cursor palette 0. */
AnnaBridge 171:3a7713b1edbc 218 lcdc_cursor_palette_t palette1; /*!< Cursor palette 1. */
AnnaBridge 171:3a7713b1edbc 219 uint32_t *image[LCDC_CURSOR_COUNT]; /*!< Pointer to cursor image data. */
AnnaBridge 171:3a7713b1edbc 220 } lcdc_cursor_config_t;
AnnaBridge 171:3a7713b1edbc 221
AnnaBridge 171:3a7713b1edbc 222 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 223 extern "C" {
AnnaBridge 171:3a7713b1edbc 224 #endif
AnnaBridge 171:3a7713b1edbc 225
AnnaBridge 171:3a7713b1edbc 226 /*******************************************************************************
AnnaBridge 171:3a7713b1edbc 227 * API
AnnaBridge 171:3a7713b1edbc 228 ******************************************************************************/
AnnaBridge 171:3a7713b1edbc 229
AnnaBridge 171:3a7713b1edbc 230 /*!
AnnaBridge 171:3a7713b1edbc 231 * @name Initialization and Deinitialization
AnnaBridge 171:3a7713b1edbc 232 * @{
AnnaBridge 171:3a7713b1edbc 233 */
AnnaBridge 171:3a7713b1edbc 234
AnnaBridge 171:3a7713b1edbc 235 /*!
AnnaBridge 171:3a7713b1edbc 236 * @brief Initialize the LCD module.
AnnaBridge 171:3a7713b1edbc 237 *
AnnaBridge 171:3a7713b1edbc 238 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 239 * @param config Pointer to configuration structure, see to @ref lcdc_config_t.
AnnaBridge 171:3a7713b1edbc 240 * @param srcClock_Hz The LCD input clock (LCDCLK) frequency in Hz.
AnnaBridge 171:3a7713b1edbc 241 * @retval kStatus_Success LCD is initialized successfully.
AnnaBridge 171:3a7713b1edbc 242 * @retval kStatus_InvalidArgument Initlialize failed because of invalid argument.
AnnaBridge 171:3a7713b1edbc 243 */
AnnaBridge 171:3a7713b1edbc 244 status_t LCDC_Init(LCD_Type *base, const lcdc_config_t *config, uint32_t srcClock_Hz);
AnnaBridge 171:3a7713b1edbc 245
AnnaBridge 171:3a7713b1edbc 246 /*!
AnnaBridge 171:3a7713b1edbc 247 * @brief Deinitialize the LCD module.
AnnaBridge 171:3a7713b1edbc 248 *
AnnaBridge 171:3a7713b1edbc 249 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 250 */
AnnaBridge 171:3a7713b1edbc 251 void LCDC_Deinit(LCD_Type *base);
AnnaBridge 171:3a7713b1edbc 252
AnnaBridge 171:3a7713b1edbc 253 /*!
AnnaBridge 171:3a7713b1edbc 254 * @brief Gets default pre-defined settings for initial configuration.
AnnaBridge 171:3a7713b1edbc 255 *
AnnaBridge 171:3a7713b1edbc 256 * This function initializes the configuration structure. The default values are:
AnnaBridge 171:3a7713b1edbc 257 *
AnnaBridge 171:3a7713b1edbc 258 @code
AnnaBridge 171:3a7713b1edbc 259 config->panelClock_Hz = 0U;
AnnaBridge 171:3a7713b1edbc 260 config->ppl = 0U;
AnnaBridge 171:3a7713b1edbc 261 config->hsw = 0U;
AnnaBridge 171:3a7713b1edbc 262 config->hfp = 0U;
AnnaBridge 171:3a7713b1edbc 263 config->hbp = 0U;
AnnaBridge 171:3a7713b1edbc 264 config->lpp = 0U;
AnnaBridge 171:3a7713b1edbc 265 config->vsw = 0U;
AnnaBridge 171:3a7713b1edbc 266 config->vfp = 0U;
AnnaBridge 171:3a7713b1edbc 267 config->vbp = 0U;
AnnaBridge 171:3a7713b1edbc 268 config->acBiasFreq = 1U;
AnnaBridge 171:3a7713b1edbc 269 config->polarityFlags = 0U;
AnnaBridge 171:3a7713b1edbc 270 config->enableLineEnd = false;
AnnaBridge 171:3a7713b1edbc 271 config->lineEndDelay = 0U;
AnnaBridge 171:3a7713b1edbc 272 config->upperPanelAddr = 0U;
AnnaBridge 171:3a7713b1edbc 273 config->lowerPanelAddr = 0U;
AnnaBridge 171:3a7713b1edbc 274 config->bpp = kLCDC_1BPP;
AnnaBridge 171:3a7713b1edbc 275 config->dataFormat = kLCDC_LittleEndian;
AnnaBridge 171:3a7713b1edbc 276 config->swapRedBlue = false;
AnnaBridge 171:3a7713b1edbc 277 config->display = kLCDC_DisplayTFT;
AnnaBridge 171:3a7713b1edbc 278 @endcode
AnnaBridge 171:3a7713b1edbc 279 *
AnnaBridge 171:3a7713b1edbc 280 * @param config Pointer to configuration structure.
AnnaBridge 171:3a7713b1edbc 281 */
AnnaBridge 171:3a7713b1edbc 282 void LCDC_GetDefaultConfig(lcdc_config_t *config);
AnnaBridge 171:3a7713b1edbc 283
AnnaBridge 171:3a7713b1edbc 284 /* @} */
AnnaBridge 171:3a7713b1edbc 285
AnnaBridge 171:3a7713b1edbc 286 /*!
AnnaBridge 171:3a7713b1edbc 287 * @name Start and stop
AnnaBridge 171:3a7713b1edbc 288 * @{
AnnaBridge 171:3a7713b1edbc 289 */
AnnaBridge 171:3a7713b1edbc 290
AnnaBridge 171:3a7713b1edbc 291 /*!
AnnaBridge 171:3a7713b1edbc 292 * @brief Start to output LCD timing signal.
AnnaBridge 171:3a7713b1edbc 293 *
AnnaBridge 171:3a7713b1edbc 294 * The LCD power up sequence should be:
AnnaBridge 171:3a7713b1edbc 295 * 1. Apply power to LCD, here all output signals are held low.
AnnaBridge 171:3a7713b1edbc 296 * 2. When LCD power stablized, call @ref LCDC_Start to output the timing signals.
AnnaBridge 171:3a7713b1edbc 297 * 3. Apply contrast voltage to LCD panel. Delay if the display requires.
AnnaBridge 171:3a7713b1edbc 298 * 4. Call @ref LCDC_PowerUp.
AnnaBridge 171:3a7713b1edbc 299 *
AnnaBridge 171:3a7713b1edbc 300 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 301 */
AnnaBridge 171:3a7713b1edbc 302 static inline void LCDC_Start(LCD_Type *base)
AnnaBridge 171:3a7713b1edbc 303 {
AnnaBridge 171:3a7713b1edbc 304 base->CTRL |= LCD_CTRL_LCDEN_MASK;
AnnaBridge 171:3a7713b1edbc 305 }
AnnaBridge 171:3a7713b1edbc 306
AnnaBridge 171:3a7713b1edbc 307 /*!
AnnaBridge 171:3a7713b1edbc 308 * @brief Stop the LCD timing signal.
AnnaBridge 171:3a7713b1edbc 309 *
AnnaBridge 171:3a7713b1edbc 310 * The LCD power down sequence should be:
AnnaBridge 171:3a7713b1edbc 311 * 1. Call @ref LCDC_PowerDown.
AnnaBridge 171:3a7713b1edbc 312 * 2. Delay if the display requires. Disable contrast voltage to LCD panel.
AnnaBridge 171:3a7713b1edbc 313 * 3. Call @ref LCDC_Stop to disable the timing signals.
AnnaBridge 171:3a7713b1edbc 314 * 4. Disable power to LCD.
AnnaBridge 171:3a7713b1edbc 315 *
AnnaBridge 171:3a7713b1edbc 316 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 317 */
AnnaBridge 171:3a7713b1edbc 318 static inline void LCDC_Stop(LCD_Type *base)
AnnaBridge 171:3a7713b1edbc 319 {
AnnaBridge 171:3a7713b1edbc 320 base->CTRL &= ~LCD_CTRL_LCDEN_MASK;
AnnaBridge 171:3a7713b1edbc 321 }
AnnaBridge 171:3a7713b1edbc 322
AnnaBridge 171:3a7713b1edbc 323 /*!
AnnaBridge 171:3a7713b1edbc 324 * @brief Power up the LCD and output the pixel signal.
AnnaBridge 171:3a7713b1edbc 325 *
AnnaBridge 171:3a7713b1edbc 326 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 327 */
AnnaBridge 171:3a7713b1edbc 328 static inline void LCDC_PowerUp(LCD_Type *base)
AnnaBridge 171:3a7713b1edbc 329 {
AnnaBridge 171:3a7713b1edbc 330 base->CTRL |= LCD_CTRL_LCDPWR_MASK;
AnnaBridge 171:3a7713b1edbc 331 }
AnnaBridge 171:3a7713b1edbc 332
AnnaBridge 171:3a7713b1edbc 333 /*!
AnnaBridge 171:3a7713b1edbc 334 * @brief Power down the LCD and disable the output pixel signal.
AnnaBridge 171:3a7713b1edbc 335 *
AnnaBridge 171:3a7713b1edbc 336 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 337 */
AnnaBridge 171:3a7713b1edbc 338 static inline void LCDC_PowerDown(LCD_Type *base)
AnnaBridge 171:3a7713b1edbc 339 {
AnnaBridge 171:3a7713b1edbc 340 base->CTRL &= ~LCD_CTRL_LCDPWR_MASK;
AnnaBridge 171:3a7713b1edbc 341 }
AnnaBridge 171:3a7713b1edbc 342
AnnaBridge 171:3a7713b1edbc 343 /* @} */
AnnaBridge 171:3a7713b1edbc 344
AnnaBridge 171:3a7713b1edbc 345 /*!
AnnaBridge 171:3a7713b1edbc 346 * @name LCD control
AnnaBridge 171:3a7713b1edbc 347 * @{
AnnaBridge 171:3a7713b1edbc 348 */
AnnaBridge 171:3a7713b1edbc 349
AnnaBridge 171:3a7713b1edbc 350 /*!
AnnaBridge 171:3a7713b1edbc 351 * @brief Sets panel frame base address
AnnaBridge 171:3a7713b1edbc 352 *
AnnaBridge 171:3a7713b1edbc 353 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 354 * @param panel Which panel to set.
AnnaBridge 171:3a7713b1edbc 355 * @param addr Frame base address, must be doubleword(64-bit) aligned.
AnnaBridge 171:3a7713b1edbc 356 */
AnnaBridge 171:3a7713b1edbc 357 void LCDC_SetPanelAddr(LCD_Type *base, lcdc_panel_t panel, uint32_t addr);
AnnaBridge 171:3a7713b1edbc 358
AnnaBridge 171:3a7713b1edbc 359 /*!
AnnaBridge 171:3a7713b1edbc 360 * @brief Sets palette
AnnaBridge 171:3a7713b1edbc 361 *
AnnaBridge 171:3a7713b1edbc 362 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 363 * @param palette Pointer to the palette array.
AnnaBridge 171:3a7713b1edbc 364 * @param count_words Length of the palette array to set (how many words), it should
AnnaBridge 171:3a7713b1edbc 365 * not be larger than LCDC_PALETTE_SIZE_WORDS.
AnnaBridge 171:3a7713b1edbc 366 */
AnnaBridge 171:3a7713b1edbc 367 void LCDC_SetPalette(LCD_Type *base, const uint32_t *palette, uint8_t count_words);
AnnaBridge 171:3a7713b1edbc 368
AnnaBridge 171:3a7713b1edbc 369 /* @} */
AnnaBridge 171:3a7713b1edbc 370
AnnaBridge 171:3a7713b1edbc 371 /*!
AnnaBridge 171:3a7713b1edbc 372 * @name Interrupts
AnnaBridge 171:3a7713b1edbc 373 * @{
AnnaBridge 171:3a7713b1edbc 374 */
AnnaBridge 171:3a7713b1edbc 375
AnnaBridge 171:3a7713b1edbc 376 /*!
AnnaBridge 171:3a7713b1edbc 377 * @brief Sets the vertical compare interrupt mode.
AnnaBridge 171:3a7713b1edbc 378 *
AnnaBridge 171:3a7713b1edbc 379 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 380 * @param mode The vertical compare interrupt mode.
AnnaBridge 171:3a7713b1edbc 381 */
AnnaBridge 171:3a7713b1edbc 382 static inline void LCDC_SetVerticalInterruptMode(LCD_Type *base, lcdc_vertical_compare_interrupt_mode_t mode)
AnnaBridge 171:3a7713b1edbc 383 {
AnnaBridge 171:3a7713b1edbc 384 base->CTRL = (base->CTRL & ~LCD_CTRL_LCDVCOMP_MASK) | LCD_CTRL_LCDVCOMP(mode);
AnnaBridge 171:3a7713b1edbc 385 }
AnnaBridge 171:3a7713b1edbc 386
AnnaBridge 171:3a7713b1edbc 387 /*!
AnnaBridge 171:3a7713b1edbc 388 * @brief Enable LCD interrupts.
AnnaBridge 171:3a7713b1edbc 389 *
AnnaBridge 171:3a7713b1edbc 390 * Example to enable LCD base address update interrupt and vertical compare
AnnaBridge 171:3a7713b1edbc 391 * interrupt:
AnnaBridge 171:3a7713b1edbc 392 *
AnnaBridge 171:3a7713b1edbc 393 * @code
AnnaBridge 171:3a7713b1edbc 394 LCDC_EnableInterrupts(LCD, kLCDC_BaseAddrUpdateInterrupt | kLCDC_VerticalCompareInterrupt);
AnnaBridge 171:3a7713b1edbc 395 @endcode
AnnaBridge 171:3a7713b1edbc 396 *
AnnaBridge 171:3a7713b1edbc 397 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 398 * @param mask Interrupts to enable, it is OR'ed value of @ref _lcdc_interrupts.
AnnaBridge 171:3a7713b1edbc 399 */
AnnaBridge 171:3a7713b1edbc 400 void LCDC_EnableInterrupts(LCD_Type *base, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 401
AnnaBridge 171:3a7713b1edbc 402 /*!
AnnaBridge 171:3a7713b1edbc 403 * @brief Disable LCD interrupts.
AnnaBridge 171:3a7713b1edbc 404 *
AnnaBridge 171:3a7713b1edbc 405 * Example to disable LCD base address update interrupt and vertical compare
AnnaBridge 171:3a7713b1edbc 406 * interrupt:
AnnaBridge 171:3a7713b1edbc 407 *
AnnaBridge 171:3a7713b1edbc 408 * @code
AnnaBridge 171:3a7713b1edbc 409 LCDC_DisableInterrupts(LCD, kLCDC_BaseAddrUpdateInterrupt | kLCDC_VerticalCompareInterrupt);
AnnaBridge 171:3a7713b1edbc 410 @endcode
AnnaBridge 171:3a7713b1edbc 411 *
AnnaBridge 171:3a7713b1edbc 412 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 413 * @param mask Interrupts to disable, it is OR'ed value of @ref _lcdc_interrupts.
AnnaBridge 171:3a7713b1edbc 414 */
AnnaBridge 171:3a7713b1edbc 415 void LCDC_DisableInterrupts(LCD_Type *base, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 416
AnnaBridge 171:3a7713b1edbc 417 /*!
AnnaBridge 171:3a7713b1edbc 418 * @brief Get LCD interrupt pending status.
AnnaBridge 171:3a7713b1edbc 419 *
AnnaBridge 171:3a7713b1edbc 420 * Example:
AnnaBridge 171:3a7713b1edbc 421 *
AnnaBridge 171:3a7713b1edbc 422 * @code
AnnaBridge 171:3a7713b1edbc 423 uint32_t status;
AnnaBridge 171:3a7713b1edbc 424
AnnaBridge 171:3a7713b1edbc 425 status = LCDC_GetInterruptsPendingStatus(LCD);
AnnaBridge 171:3a7713b1edbc 426
AnnaBridge 171:3a7713b1edbc 427 if (kLCDC_BaseAddrUpdateInterrupt & status)
AnnaBridge 171:3a7713b1edbc 428 {
AnnaBridge 171:3a7713b1edbc 429 // LCD base address update interrupt occurred.
AnnaBridge 171:3a7713b1edbc 430 }
AnnaBridge 171:3a7713b1edbc 431
AnnaBridge 171:3a7713b1edbc 432 if (kLCDC_VerticalCompareInterrupt & status)
AnnaBridge 171:3a7713b1edbc 433 {
AnnaBridge 171:3a7713b1edbc 434 // LCD vertical compare interrupt occurred.
AnnaBridge 171:3a7713b1edbc 435 }
AnnaBridge 171:3a7713b1edbc 436 @endcode
AnnaBridge 171:3a7713b1edbc 437 *
AnnaBridge 171:3a7713b1edbc 438 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 439 * @return Interrupts pending status, it is OR'ed value of @ref _lcdc_interrupts.
AnnaBridge 171:3a7713b1edbc 440 */
AnnaBridge 171:3a7713b1edbc 441 uint32_t LCDC_GetInterruptsPendingStatus(LCD_Type *base);
AnnaBridge 171:3a7713b1edbc 442
AnnaBridge 171:3a7713b1edbc 443 /*!
AnnaBridge 171:3a7713b1edbc 444 * @brief Get LCD enabled interrupt pending status.
AnnaBridge 171:3a7713b1edbc 445 *
AnnaBridge 171:3a7713b1edbc 446 * This function is similar with @ref LCDC_GetInterruptsPendingStatus, the only
AnnaBridge 171:3a7713b1edbc 447 * difference is, this function only returns the pending status of the
AnnaBridge 171:3a7713b1edbc 448 * interrupts that have been enabled using @ref LCDC_EnableInterrupts.
AnnaBridge 171:3a7713b1edbc 449 *
AnnaBridge 171:3a7713b1edbc 450 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 451 * @return Interrupts pending status, it is OR'ed value of @ref _lcdc_interrupts.
AnnaBridge 171:3a7713b1edbc 452 */
AnnaBridge 171:3a7713b1edbc 453 uint32_t LCDC_GetEnabledInterruptsPendingStatus(LCD_Type *base);
AnnaBridge 171:3a7713b1edbc 454
AnnaBridge 171:3a7713b1edbc 455 /*!
AnnaBridge 171:3a7713b1edbc 456 * @brief Clear LCD interrupts pending status.
AnnaBridge 171:3a7713b1edbc 457 *
AnnaBridge 171:3a7713b1edbc 458 * Example to clear LCD base address update interrupt and vertical compare
AnnaBridge 171:3a7713b1edbc 459 * interrupt pending status:
AnnaBridge 171:3a7713b1edbc 460 *
AnnaBridge 171:3a7713b1edbc 461 * @code
AnnaBridge 171:3a7713b1edbc 462 LCDC_ClearInterruptsStatus(LCD, kLCDC_BaseAddrUpdateInterrupt | kLCDC_VerticalCompareInterrupt);
AnnaBridge 171:3a7713b1edbc 463 @endcode
AnnaBridge 171:3a7713b1edbc 464 *
AnnaBridge 171:3a7713b1edbc 465 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 466 * @param mask Interrupts to disable, it is OR'ed value of @ref _lcdc_interrupts.
AnnaBridge 171:3a7713b1edbc 467 */
AnnaBridge 171:3a7713b1edbc 468 void LCDC_ClearInterruptsStatus(LCD_Type *base, uint32_t mask);
AnnaBridge 171:3a7713b1edbc 469
AnnaBridge 171:3a7713b1edbc 470 /* @} */
AnnaBridge 171:3a7713b1edbc 471
AnnaBridge 171:3a7713b1edbc 472 /*!
AnnaBridge 171:3a7713b1edbc 473 * @name Hardware cursor
AnnaBridge 171:3a7713b1edbc 474 * @{
AnnaBridge 171:3a7713b1edbc 475 */
AnnaBridge 171:3a7713b1edbc 476
AnnaBridge 171:3a7713b1edbc 477 /*!
AnnaBridge 171:3a7713b1edbc 478 * @brief Set the hardware cursor configuration
AnnaBridge 171:3a7713b1edbc 479 *
AnnaBridge 171:3a7713b1edbc 480 * This function should be called before enabling the hardware cursor.
AnnaBridge 171:3a7713b1edbc 481 * It supports initializing multiple cursor images at a time when using
AnnaBridge 171:3a7713b1edbc 482 * 32x32 pixels cursor.
AnnaBridge 171:3a7713b1edbc 483 *
AnnaBridge 171:3a7713b1edbc 484 * For example:
AnnaBridge 171:3a7713b1edbc 485 *
AnnaBridge 171:3a7713b1edbc 486 * @code
AnnaBridge 171:3a7713b1edbc 487 uint32_t cursor0Img[LCDC_CURSOR_IMG_32X32_WORDS] = {...};
AnnaBridge 171:3a7713b1edbc 488 uint32_t cursor2Img[LCDC_CURSOR_IMG_32X32_WORDS] = {...};
AnnaBridge 171:3a7713b1edbc 489
AnnaBridge 171:3a7713b1edbc 490 lcdc_cursor_config_t cursorConfig;
AnnaBridge 171:3a7713b1edbc 491
AnnaBridge 171:3a7713b1edbc 492 LCDC_CursorGetDefaultConfig(&cursorConfig);
AnnaBridge 171:3a7713b1edbc 493
AnnaBridge 171:3a7713b1edbc 494 cursorConfig.image[0] = cursor0Img;
AnnaBridge 171:3a7713b1edbc 495 cursorConfig.image[2] = cursor2Img;
AnnaBridge 171:3a7713b1edbc 496
AnnaBridge 171:3a7713b1edbc 497 LCDC_SetCursorConfig(LCD, &cursorConfig);
AnnaBridge 171:3a7713b1edbc 498
AnnaBridge 171:3a7713b1edbc 499 LCDC_ChooseCursor(LCD, 0);
AnnaBridge 171:3a7713b1edbc 500 LCDC_SetCursorPosition(LCD, 0, 0);
AnnaBridge 171:3a7713b1edbc 501
AnnaBridge 171:3a7713b1edbc 502 LCDC_EnableCursor(LCD);
AnnaBridge 171:3a7713b1edbc 503 @endcode
AnnaBridge 171:3a7713b1edbc 504 *
AnnaBridge 171:3a7713b1edbc 505 * In this example, cursor 0 and cursor 2 image data are initialized, but cursor 1
AnnaBridge 171:3a7713b1edbc 506 * and cursor 3 image data are not initialized because image[1] and image[2] are
AnnaBridge 171:3a7713b1edbc 507 * all NULL. With this, application could initializes all cursor images it will
AnnaBridge 171:3a7713b1edbc 508 * use at the beginning and call @ref LCDC_SetCursorImage directly to display the
AnnaBridge 171:3a7713b1edbc 509 * one which it needs.
AnnaBridge 171:3a7713b1edbc 510 *
AnnaBridge 171:3a7713b1edbc 511 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 512 * @param config Pointer to the hardware cursor configuration structure.
AnnaBridge 171:3a7713b1edbc 513 */
AnnaBridge 171:3a7713b1edbc 514 void LCDC_SetCursorConfig(LCD_Type *base, const lcdc_cursor_config_t *config);
AnnaBridge 171:3a7713b1edbc 515
AnnaBridge 171:3a7713b1edbc 516 /*!
AnnaBridge 171:3a7713b1edbc 517 * @brief Get the hardware cursor default configuration
AnnaBridge 171:3a7713b1edbc 518 *
AnnaBridge 171:3a7713b1edbc 519 * The default configuration values are:
AnnaBridge 171:3a7713b1edbc 520 *
AnnaBridge 171:3a7713b1edbc 521 * @code
AnnaBridge 171:3a7713b1edbc 522 config->size = kLCDC_CursorSize32;
AnnaBridge 171:3a7713b1edbc 523 config->syncMode = kLCDC_CursorAsync;
AnnaBridge 171:3a7713b1edbc 524 config->palette0.red = 0U;
AnnaBridge 171:3a7713b1edbc 525 config->palette0.green = 0U;
AnnaBridge 171:3a7713b1edbc 526 config->palette0.blue = 0U;
AnnaBridge 171:3a7713b1edbc 527 config->palette1.red = 255U;
AnnaBridge 171:3a7713b1edbc 528 config->palette1.green = 255U;
AnnaBridge 171:3a7713b1edbc 529 config->palette1.blue = 255U;
AnnaBridge 171:3a7713b1edbc 530 config->image[0] = (uint32_t *)0;
AnnaBridge 171:3a7713b1edbc 531 config->image[1] = (uint32_t *)0;
AnnaBridge 171:3a7713b1edbc 532 config->image[2] = (uint32_t *)0;
AnnaBridge 171:3a7713b1edbc 533 config->image[3] = (uint32_t *)0;
AnnaBridge 171:3a7713b1edbc 534 @endcode
AnnaBridge 171:3a7713b1edbc 535 *
AnnaBridge 171:3a7713b1edbc 536 * @param config Pointer to the hardware cursor configuration structure.
AnnaBridge 171:3a7713b1edbc 537 */
AnnaBridge 171:3a7713b1edbc 538 void LCDC_CursorGetDefaultConfig(lcdc_cursor_config_t *config);
AnnaBridge 171:3a7713b1edbc 539
AnnaBridge 171:3a7713b1edbc 540 /*!
AnnaBridge 171:3a7713b1edbc 541 * @brief Enable or disable the cursor.
AnnaBridge 171:3a7713b1edbc 542 *
AnnaBridge 171:3a7713b1edbc 543 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 544 * @param enable True to enable, false to disable.
AnnaBridge 171:3a7713b1edbc 545 */
AnnaBridge 171:3a7713b1edbc 546 static inline void LCDC_EnableCursor(LCD_Type *base, bool enable)
AnnaBridge 171:3a7713b1edbc 547 {
AnnaBridge 171:3a7713b1edbc 548 if (enable)
AnnaBridge 171:3a7713b1edbc 549 {
AnnaBridge 171:3a7713b1edbc 550 base->CRSR_CTRL |= LCD_CRSR_CTRL_CRSRON_MASK;
AnnaBridge 171:3a7713b1edbc 551 }
AnnaBridge 171:3a7713b1edbc 552 else
AnnaBridge 171:3a7713b1edbc 553 {
AnnaBridge 171:3a7713b1edbc 554 base->CRSR_CTRL &= ~LCD_CRSR_CTRL_CRSRON_MASK;
AnnaBridge 171:3a7713b1edbc 555 }
AnnaBridge 171:3a7713b1edbc 556 }
AnnaBridge 171:3a7713b1edbc 557
AnnaBridge 171:3a7713b1edbc 558 /*!
AnnaBridge 171:3a7713b1edbc 559 * @brief Choose which cursor to display.
AnnaBridge 171:3a7713b1edbc 560 *
AnnaBridge 171:3a7713b1edbc 561 * When using 32x32 cursor, the number of cursors supports is @ref LCDC_CURSOR_COUNT.
AnnaBridge 171:3a7713b1edbc 562 * When using 64x64 cursor, the LCD only supports one cursor.
AnnaBridge 171:3a7713b1edbc 563 * This function selects which cursor to display when using 32x32 cursor.
AnnaBridge 171:3a7713b1edbc 564 * When synchronization mode is @ref kLCDC_CursorSync, the change effects in the
AnnaBridge 171:3a7713b1edbc 565 * next frame. When synchronization mode is @ref * kLCDC_CursorAsync, change effects
AnnaBridge 171:3a7713b1edbc 566 * immediately.
AnnaBridge 171:3a7713b1edbc 567 *
AnnaBridge 171:3a7713b1edbc 568 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 569 * @param index Index of the cursor to display.
AnnaBridge 171:3a7713b1edbc 570 * @note The function @ref LCDC_SetCursorPosition must be called after this function
AnnaBridge 171:3a7713b1edbc 571 * to show the new cursor.
AnnaBridge 171:3a7713b1edbc 572 */
AnnaBridge 171:3a7713b1edbc 573 static inline void LCDC_ChooseCursor(LCD_Type *base, uint8_t index)
AnnaBridge 171:3a7713b1edbc 574 {
AnnaBridge 171:3a7713b1edbc 575 base->CRSR_CTRL = (base->CRSR_CTRL & ~LCD_CRSR_CTRL_CRSRNUM1_0_MASK) | LCD_CRSR_CTRL_CRSRNUM1_0(index);
AnnaBridge 171:3a7713b1edbc 576 }
AnnaBridge 171:3a7713b1edbc 577
AnnaBridge 171:3a7713b1edbc 578 /*!
AnnaBridge 171:3a7713b1edbc 579 * @brief Set the position of cursor
AnnaBridge 171:3a7713b1edbc 580 *
AnnaBridge 171:3a7713b1edbc 581 * When synchronization mode is @ref kLCDC_CursorSync, position change effects
AnnaBridge 171:3a7713b1edbc 582 * in the next frame. When synchronization mode is @ref kLCDC_CursorAsync,
AnnaBridge 171:3a7713b1edbc 583 * position change effects immediately.
AnnaBridge 171:3a7713b1edbc 584 *
AnnaBridge 171:3a7713b1edbc 585 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 586 * @param positionX X ordinate of the cursor top-left measured in pixels
AnnaBridge 171:3a7713b1edbc 587 * @param positionY Y ordinate of the cursor top-left measured in pixels
AnnaBridge 171:3a7713b1edbc 588 */
AnnaBridge 171:3a7713b1edbc 589 void LCDC_SetCursorPosition(LCD_Type *base, int32_t positionX, int32_t positionY);
AnnaBridge 171:3a7713b1edbc 590
AnnaBridge 171:3a7713b1edbc 591 /*!
AnnaBridge 171:3a7713b1edbc 592 * @brief Set the cursor image.
AnnaBridge 171:3a7713b1edbc 593 *
AnnaBridge 171:3a7713b1edbc 594 * The interrupt @ref kLCDC_CursorInterrupt indicates that last cursor pixel is
AnnaBridge 171:3a7713b1edbc 595 * displayed. When the hardware cursor is enabled,
AnnaBridge 171:3a7713b1edbc 596 *
AnnaBridge 171:3a7713b1edbc 597 * @param base LCD peripheral base address.
AnnaBridge 171:3a7713b1edbc 598 * @param size The cursor size.
AnnaBridge 171:3a7713b1edbc 599 * @param index Index of the cursor to set when using 32x32 cursor.
AnnaBridge 171:3a7713b1edbc 600 * @param image Pointer to the cursor image. When using 32x32 cursor, the image
AnnaBridge 171:3a7713b1edbc 601 * size should be LCDC_CURSOR_IMG_32X32_WORDS. When using 64x64 cursor, the image
AnnaBridge 171:3a7713b1edbc 602 * size should be LCDC_CURSOR_IMG_64X64_WORDS.
AnnaBridge 171:3a7713b1edbc 603 */
AnnaBridge 171:3a7713b1edbc 604 void LCDC_SetCursorImage(LCD_Type *base, lcdc_cursor_size_t size, uint8_t index, const uint32_t *image);
AnnaBridge 171:3a7713b1edbc 605
AnnaBridge 171:3a7713b1edbc 606 /* @} */
AnnaBridge 171:3a7713b1edbc 607
AnnaBridge 171:3a7713b1edbc 608 #if defined(__cplusplus)
AnnaBridge 171:3a7713b1edbc 609 }
AnnaBridge 171:3a7713b1edbc 610 #endif
AnnaBridge 171:3a7713b1edbc 611
AnnaBridge 171:3a7713b1edbc 612 #endif /* __FSL_LCDC_H__ */