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:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 /*
AnnaBridge 170:e95d10626187 2 * The Clear BSD License
AnnaBridge 161:aa5281ff4a02 3 * Copyright (c) 2017, NXP Semiconductors, Inc.
AnnaBridge 161:aa5281ff4a02 4 * All rights reserved.
AnnaBridge 161:aa5281ff4a02 5 *
AnnaBridge 170:e95d10626187 6 *
AnnaBridge 161:aa5281ff4a02 7 * Redistribution and use in source and binary forms, with or without modification,
AnnaBridge 170:e95d10626187 8 * are permitted (subject to the limitations in the disclaimer below) provided
AnnaBridge 170:e95d10626187 9 * that the following conditions are met:
AnnaBridge 161:aa5281ff4a02 10 *
AnnaBridge 161:aa5281ff4a02 11 * o Redistributions of source code must retain the above copyright notice, this list
AnnaBridge 161:aa5281ff4a02 12 * of conditions and the following disclaimer.
AnnaBridge 161:aa5281ff4a02 13 *
AnnaBridge 161:aa5281ff4a02 14 * o Redistributions in binary form must reproduce the above copyright notice, this
AnnaBridge 161:aa5281ff4a02 15 * list of conditions and the following disclaimer in the documentation and/or
AnnaBridge 161:aa5281ff4a02 16 * other materials provided with the distribution.
AnnaBridge 161:aa5281ff4a02 17 *
AnnaBridge 161:aa5281ff4a02 18 * o Neither the name of the copyright holder nor the names of its
AnnaBridge 161:aa5281ff4a02 19 * contributors may be used to endorse or promote products derived from this
AnnaBridge 161:aa5281ff4a02 20 * software without specific prior written permission.
AnnaBridge 161:aa5281ff4a02 21 *
AnnaBridge 170:e95d10626187 22 * NO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTS ARE GRANTED BY THIS LICENSE.
AnnaBridge 161:aa5281ff4a02 23 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
AnnaBridge 161:aa5281ff4a02 24 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
AnnaBridge 161:aa5281ff4a02 25 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
AnnaBridge 161:aa5281ff4a02 26 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
AnnaBridge 161:aa5281ff4a02 27 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
AnnaBridge 161:aa5281ff4a02 28 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
AnnaBridge 161:aa5281ff4a02 29 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
AnnaBridge 161:aa5281ff4a02 30 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
AnnaBridge 161:aa5281ff4a02 31 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
AnnaBridge 161:aa5281ff4a02 32 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
AnnaBridge 161:aa5281ff4a02 33 */
AnnaBridge 161:aa5281ff4a02 34
AnnaBridge 161:aa5281ff4a02 35 #ifndef _FSL_ELCDIF_H_
AnnaBridge 161:aa5281ff4a02 36 #define _FSL_ELCDIF_H_
AnnaBridge 161:aa5281ff4a02 37
AnnaBridge 161:aa5281ff4a02 38 #include "fsl_common.h"
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 /*!
AnnaBridge 161:aa5281ff4a02 41 * @addtogroup elcdif
AnnaBridge 161:aa5281ff4a02 42 * @{
AnnaBridge 161:aa5281ff4a02 43 */
AnnaBridge 161:aa5281ff4a02 44
AnnaBridge 161:aa5281ff4a02 45 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 46 * Definitions
AnnaBridge 161:aa5281ff4a02 47 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 48
AnnaBridge 161:aa5281ff4a02 49 /*! @name Driver version */
AnnaBridge 161:aa5281ff4a02 50 /*@{*/
AnnaBridge 161:aa5281ff4a02 51 /*! @brief eLCDIF driver version */
AnnaBridge 161:aa5281ff4a02 52 #define FSL_ELCDIF_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */
AnnaBridge 161:aa5281ff4a02 53 /*@}*/
AnnaBridge 161:aa5281ff4a02 54
AnnaBridge 161:aa5281ff4a02 55 /* All IRQ flags in CTRL1 register. */
AnnaBridge 161:aa5281ff4a02 56 #define ELCDIF_CTRL1_IRQ_MASK \
AnnaBridge 161:aa5281ff4a02 57 (LCDIF_CTRL1_BM_ERROR_IRQ_MASK | LCDIF_CTRL1_OVERFLOW_IRQ_MASK | LCDIF_CTRL1_UNDERFLOW_IRQ_MASK | \
AnnaBridge 161:aa5281ff4a02 58 LCDIF_CTRL1_CUR_FRAME_DONE_IRQ_MASK | LCDIF_CTRL1_VSYNC_EDGE_IRQ_MASK)
AnnaBridge 161:aa5281ff4a02 59
AnnaBridge 161:aa5281ff4a02 60 /* All IRQ enable control bits in CTRL1 register. */
AnnaBridge 161:aa5281ff4a02 61 #define ELCDIF_CTRL1_IRQ_EN_MASK \
AnnaBridge 161:aa5281ff4a02 62 (LCDIF_CTRL1_BM_ERROR_IRQ_EN_MASK | LCDIF_CTRL1_OVERFLOW_IRQ_EN_MASK | LCDIF_CTRL1_UNDERFLOW_IRQ_EN_MASK | \
AnnaBridge 161:aa5281ff4a02 63 LCDIF_CTRL1_CUR_FRAME_DONE_IRQ_EN_MASK | LCDIF_CTRL1_VSYNC_EDGE_IRQ_EN_MASK)
AnnaBridge 161:aa5281ff4a02 64
AnnaBridge 161:aa5281ff4a02 65 /* All IRQ flags in AS_CTRL register. */
AnnaBridge 161:aa5281ff4a02 66 #if defined(LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_MASK)
AnnaBridge 161:aa5281ff4a02 67 #define ELCDIF_AS_CTRL_IRQ_MASK (LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_MASK)
AnnaBridge 161:aa5281ff4a02 68 #else
AnnaBridge 161:aa5281ff4a02 69 #define ELCDIF_AS_CTRL_IRQ_MASK 0U
AnnaBridge 161:aa5281ff4a02 70 #endif
AnnaBridge 161:aa5281ff4a02 71
AnnaBridge 161:aa5281ff4a02 72 /* All IRQ enable control bits in AS_CTRL register. */
AnnaBridge 161:aa5281ff4a02 73 #if defined(LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_EN_MASK)
AnnaBridge 161:aa5281ff4a02 74 #define ELCDIF_AS_CTRL_IRQ_EN_MASK (LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_EN_MASK)
AnnaBridge 161:aa5281ff4a02 75 #else
AnnaBridge 161:aa5281ff4a02 76 #define ELCDIF_AS_CTRL_IRQ_EN_MASK 0U
AnnaBridge 161:aa5281ff4a02 77 #endif
AnnaBridge 161:aa5281ff4a02 78
AnnaBridge 161:aa5281ff4a02 79 #if ((ELCDIF_CTRL1_IRQ_MASK & ELCDIF_AS_CTRL_IRQ_MASK) || (ELCDIF_AS_CTRL_IRQ_MASK & ELCDIF_AS_CTRL_IRQ_EN_MASK))
AnnaBridge 161:aa5281ff4a02 80 #error Interrupt bits overlap, need to update the interrupt functions.
AnnaBridge 161:aa5281ff4a02 81 #endif
AnnaBridge 161:aa5281ff4a02 82
AnnaBridge 161:aa5281ff4a02 83 /* LUT memory entery number. */
AnnaBridge 161:aa5281ff4a02 84 #define ELCDIF_LUT_ENTRY_NUM 256
AnnaBridge 161:aa5281ff4a02 85
AnnaBridge 161:aa5281ff4a02 86 /*!
AnnaBridge 161:aa5281ff4a02 87 * @brief eLCDIF signal polarity flags
AnnaBridge 161:aa5281ff4a02 88 */
AnnaBridge 161:aa5281ff4a02 89 enum _elcdif_polarity_flags
AnnaBridge 161:aa5281ff4a02 90 {
AnnaBridge 161:aa5281ff4a02 91 kELCDIF_VsyncActiveLow = 0U, /*!< VSYNC active low. */
AnnaBridge 161:aa5281ff4a02 92 kELCDIF_VsyncActiveHigh = LCDIF_VDCTRL0_VSYNC_POL_MASK, /*!< VSYNC active high. */
AnnaBridge 161:aa5281ff4a02 93 kELCDIF_HsyncActiveLow = 0U, /*!< HSYNC active low. */
AnnaBridge 161:aa5281ff4a02 94 kELCDIF_HsyncActiveHigh = LCDIF_VDCTRL0_HSYNC_POL_MASK, /*!< HSYNC active high. */
AnnaBridge 161:aa5281ff4a02 95 kELCDIF_DataEnableActiveLow = 0U, /*!< Data enable line active low. */
AnnaBridge 161:aa5281ff4a02 96 kELCDIF_DataEnableActiveHigh = LCDIF_VDCTRL0_ENABLE_POL_MASK, /*!< Data enable line active high. */
AnnaBridge 161:aa5281ff4a02 97 kELCDIF_DriveDataOnFallingClkEdge = 0U, /*!< Drive data on falling clock edge, capture data
AnnaBridge 161:aa5281ff4a02 98 on rising clock edge. */
AnnaBridge 161:aa5281ff4a02 99 kELCDIF_DriveDataOnRisingClkEdge = LCDIF_VDCTRL0_DOTCLK_POL_MASK, /*!< Drive data on falling
AnnaBridge 161:aa5281ff4a02 100 clock edge, capture data
AnnaBridge 161:aa5281ff4a02 101 on rising clock edge. */
AnnaBridge 161:aa5281ff4a02 102 };
AnnaBridge 161:aa5281ff4a02 103
AnnaBridge 161:aa5281ff4a02 104 /*!
AnnaBridge 161:aa5281ff4a02 105 * @brief The eLCDIF interrupts to enable.
AnnaBridge 161:aa5281ff4a02 106 */
AnnaBridge 161:aa5281ff4a02 107 enum _elcdif_interrupt_enable
AnnaBridge 161:aa5281ff4a02 108 {
AnnaBridge 161:aa5281ff4a02 109 kELCDIF_BusMasterErrorInterruptEnable = LCDIF_CTRL1_BM_ERROR_IRQ_EN_MASK, /*!< Bus master error interrupt. */
AnnaBridge 161:aa5281ff4a02 110 kELCDIF_TxFifoOverflowInterruptEnable = LCDIF_CTRL1_OVERFLOW_IRQ_EN_MASK, /*!< TXFIFO overflow interrupt. */
AnnaBridge 161:aa5281ff4a02 111 kELCDIF_TxFifoUnderflowInterruptEnable = LCDIF_CTRL1_UNDERFLOW_IRQ_EN_MASK, /*!< TXFIFO underflow interrupt. */
AnnaBridge 161:aa5281ff4a02 112 kELCDIF_CurFrameDoneInterruptEnable =
AnnaBridge 161:aa5281ff4a02 113 LCDIF_CTRL1_CUR_FRAME_DONE_IRQ_EN_MASK, /*!< Interrupt when hardware enters vertical blanking state. */
AnnaBridge 161:aa5281ff4a02 114 kELCDIF_VsyncEdgeInterruptEnable =
AnnaBridge 161:aa5281ff4a02 115 LCDIF_CTRL1_VSYNC_EDGE_IRQ_EN_MASK, /*!< Interrupt when hardware encounters VSYNC edge. */
AnnaBridge 161:aa5281ff4a02 116 #if defined(LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_EN_MASK)
AnnaBridge 161:aa5281ff4a02 117 kELCDIF_SciSyncOnInterruptEnable =
AnnaBridge 161:aa5281ff4a02 118 LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_EN_MASK, /*!< Interrupt when eLCDIF lock with CSI input. */
AnnaBridge 161:aa5281ff4a02 119 #endif
AnnaBridge 161:aa5281ff4a02 120 };
AnnaBridge 161:aa5281ff4a02 121
AnnaBridge 161:aa5281ff4a02 122 /*!
AnnaBridge 161:aa5281ff4a02 123 * @brief The eLCDIF interrupt status flags.
AnnaBridge 161:aa5281ff4a02 124 */
AnnaBridge 161:aa5281ff4a02 125 enum _elcdif_interrupt_flags
AnnaBridge 161:aa5281ff4a02 126 {
AnnaBridge 161:aa5281ff4a02 127 kELCDIF_BusMasterError = LCDIF_CTRL1_BM_ERROR_IRQ_MASK, /*!< Bus master error interrupt. */
AnnaBridge 161:aa5281ff4a02 128 kELCDIF_TxFifoOverflow = LCDIF_CTRL1_OVERFLOW_IRQ_MASK, /*!< TXFIFO overflow interrupt. */
AnnaBridge 161:aa5281ff4a02 129 kELCDIF_TxFifoUnderflow = LCDIF_CTRL1_UNDERFLOW_IRQ_MASK, /*!< TXFIFO underflow interrupt. */
AnnaBridge 161:aa5281ff4a02 130 kELCDIF_CurFrameDone =
AnnaBridge 161:aa5281ff4a02 131 LCDIF_CTRL1_CUR_FRAME_DONE_IRQ_MASK, /*!< Interrupt when hardware enters vertical blanking state. */
AnnaBridge 161:aa5281ff4a02 132 kELCDIF_VsyncEdge = LCDIF_CTRL1_VSYNC_EDGE_IRQ_MASK, /*!< Interrupt when hardware encounters VSYNC edge. */
AnnaBridge 161:aa5281ff4a02 133 #if defined(LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_MASK)
AnnaBridge 161:aa5281ff4a02 134 kELCDIF_SciSyncOn = LCDIF_AS_CTRL_CSI_SYNC_ON_IRQ_MASK, /*!< Interrupt when eLCDIF lock with CSI input. */
AnnaBridge 161:aa5281ff4a02 135 #endif
AnnaBridge 161:aa5281ff4a02 136 };
AnnaBridge 161:aa5281ff4a02 137
AnnaBridge 161:aa5281ff4a02 138 /*!
AnnaBridge 161:aa5281ff4a02 139 * @brief eLCDIF status flags
AnnaBridge 161:aa5281ff4a02 140 */
AnnaBridge 161:aa5281ff4a02 141 enum _elcdif_status_flags
AnnaBridge 161:aa5281ff4a02 142 {
AnnaBridge 161:aa5281ff4a02 143 kELCDIF_LFifoFull = LCDIF_STAT_LFIFO_FULL_MASK, /*!< LFIFO full. */
AnnaBridge 161:aa5281ff4a02 144 kELCDIF_LFifoEmpty = LCDIF_STAT_LFIFO_EMPTY_MASK, /*!< LFIFO empty. */
AnnaBridge 161:aa5281ff4a02 145 kELCDIF_TxFifoFull = LCDIF_STAT_TXFIFO_FULL_MASK, /*!< TXFIFO full. */
AnnaBridge 161:aa5281ff4a02 146 kELCDIF_TxFifoEmpty = LCDIF_STAT_TXFIFO_EMPTY_MASK, /*!< TXFIFO empty. */
AnnaBridge 161:aa5281ff4a02 147 #if defined(LCDIF_STAT_BUSY_MASK)
AnnaBridge 161:aa5281ff4a02 148 kELCDIF_LcdControllerBusy = LCDIF_STAT_BUSY_MASK, /*!< The external LCD controller busy signal. */
AnnaBridge 161:aa5281ff4a02 149 #endif
AnnaBridge 161:aa5281ff4a02 150 #if defined(LCDIF_STAT_DVI_CURRENT_FIELD_MASK)
AnnaBridge 161:aa5281ff4a02 151 kELCDIF_CurDviField2 = LCDIF_STAT_DVI_CURRENT_FIELD_MASK, /*!< Current DVI filed, if set, then current filed is 2,
AnnaBridge 161:aa5281ff4a02 152 otherwise current filed is 1. */
AnnaBridge 161:aa5281ff4a02 153 #endif
AnnaBridge 161:aa5281ff4a02 154 };
AnnaBridge 161:aa5281ff4a02 155
AnnaBridge 161:aa5281ff4a02 156 /*!
AnnaBridge 161:aa5281ff4a02 157 * @brief The pixel format.
AnnaBridge 161:aa5281ff4a02 158 *
AnnaBridge 161:aa5281ff4a02 159 * This enumerator should be defined together with the array s_pixelFormatReg.
AnnaBridge 161:aa5281ff4a02 160 * To support new pixel format, enhance this enumerator and s_pixelFormatReg.
AnnaBridge 161:aa5281ff4a02 161 */
AnnaBridge 161:aa5281ff4a02 162 typedef enum _elcdif_pixel_format
AnnaBridge 161:aa5281ff4a02 163 {
AnnaBridge 161:aa5281ff4a02 164 kELCDIF_PixelFormatRAW8 = 0, /*!< RAW 8 bit, four data use 32 bits. */
AnnaBridge 161:aa5281ff4a02 165 kELCDIF_PixelFormatRGB565 = 1, /*!< RGB565, two pixel use 32 bits. */
AnnaBridge 161:aa5281ff4a02 166 kELCDIF_PixelFormatRGB666 = 2, /*!< RGB666 unpacked, one pixel uses 32 bits, high byte unused,
AnnaBridge 161:aa5281ff4a02 167 upper 2 bits of other bytes unused. */
AnnaBridge 161:aa5281ff4a02 168 kELCDIF_PixelFormatXRGB8888 = 3, /*!< XRGB8888 unpacked, one pixel uses 32 bits, high byte unused. */
AnnaBridge 161:aa5281ff4a02 169 kELCDIF_PixelFormatRGB888 = 4, /*!< RGB888 packed, one pixel uses 24 bits. */
AnnaBridge 161:aa5281ff4a02 170 } elcdif_pixel_format_t;
AnnaBridge 161:aa5281ff4a02 171
AnnaBridge 161:aa5281ff4a02 172 /*! @brief The LCD data bus type. */
AnnaBridge 161:aa5281ff4a02 173 typedef enum _elcdif_lcd_data_bus
AnnaBridge 161:aa5281ff4a02 174 {
AnnaBridge 161:aa5281ff4a02 175 kELCDIF_DataBus8Bit = LCDIF_CTRL_LCD_DATABUS_WIDTH(1), /*!< 8-bit data bus. */
AnnaBridge 161:aa5281ff4a02 176 kELCDIF_DataBus16Bit = LCDIF_CTRL_LCD_DATABUS_WIDTH(0), /*!< 16-bit data bus, support RGB565. */
AnnaBridge 161:aa5281ff4a02 177 kELCDIF_DataBus18Bit = LCDIF_CTRL_LCD_DATABUS_WIDTH(2), /*!< 18-bit data bus, support RGB666. */
AnnaBridge 161:aa5281ff4a02 178 kELCDIF_DataBus24Bit = LCDIF_CTRL_LCD_DATABUS_WIDTH(3), /*!< 24-bit data bus, support RGB888. */
AnnaBridge 161:aa5281ff4a02 179 } elcdif_lcd_data_bus_t;
AnnaBridge 161:aa5281ff4a02 180
AnnaBridge 161:aa5281ff4a02 181 /*!
AnnaBridge 161:aa5281ff4a02 182 * @brief The register value when using different pixel format.
AnnaBridge 161:aa5281ff4a02 183 *
AnnaBridge 161:aa5281ff4a02 184 * These register bits control the pixel format:
AnnaBridge 161:aa5281ff4a02 185 * - CTRL[DATA_FORMAT_24_BIT]
AnnaBridge 161:aa5281ff4a02 186 * - CTRL[DATA_FORMAT_18_BIT]
AnnaBridge 161:aa5281ff4a02 187 * - CTRL[DATA_FORMAT_16_BIT]
AnnaBridge 161:aa5281ff4a02 188 * - CTRL[WORD_LENGTH]
AnnaBridge 161:aa5281ff4a02 189 * - CTRL1[BYTE_PACKING_FORMAT]
AnnaBridge 161:aa5281ff4a02 190 */
AnnaBridge 161:aa5281ff4a02 191 typedef struct _elcdif_pixel_format_reg
AnnaBridge 161:aa5281ff4a02 192 {
AnnaBridge 161:aa5281ff4a02 193 uint32_t regCtrl; /*!< Value of register CTRL. */
AnnaBridge 161:aa5281ff4a02 194 uint32_t regCtrl1; /*!< Value of register CTRL1. */
AnnaBridge 161:aa5281ff4a02 195 } elcdif_pixel_format_reg_t;
AnnaBridge 161:aa5281ff4a02 196
AnnaBridge 161:aa5281ff4a02 197 /*!
AnnaBridge 161:aa5281ff4a02 198 * @brief eLCDIF configure structure for RGB mode (DOTCLK mode).
AnnaBridge 161:aa5281ff4a02 199 */
AnnaBridge 161:aa5281ff4a02 200 typedef struct _elcdif_rgb_mode_config
AnnaBridge 161:aa5281ff4a02 201 {
AnnaBridge 161:aa5281ff4a02 202 uint16_t panelWidth; /*!< Display panel width, pixels per line. */
AnnaBridge 161:aa5281ff4a02 203 uint16_t panelHeight; /*!< Display panel height, how many lines per panel. */
AnnaBridge 161:aa5281ff4a02 204 uint8_t hsw; /*!< HSYNC pulse width. */
AnnaBridge 161:aa5281ff4a02 205 uint8_t hfp; /*!< Horizontal front porch. */
AnnaBridge 161:aa5281ff4a02 206 uint8_t hbp; /*!< Horizontal back porch. */
AnnaBridge 161:aa5281ff4a02 207 uint8_t vsw; /*!< VSYNC pulse width. */
AnnaBridge 161:aa5281ff4a02 208 uint8_t vfp; /*!< Vrtical front porch. */
AnnaBridge 161:aa5281ff4a02 209 uint8_t vbp; /*!< Vertical back porch. */
AnnaBridge 161:aa5281ff4a02 210 uint32_t polarityFlags; /*!< OR'ed value of @ref _elcdif_polarity_flags, used to contol the signal polarity. */
AnnaBridge 161:aa5281ff4a02 211 uint32_t bufferAddr; /*!< Frame buffer address. */
AnnaBridge 161:aa5281ff4a02 212 elcdif_pixel_format_t pixelFormat; /*!< Pixel format. */
AnnaBridge 161:aa5281ff4a02 213 elcdif_lcd_data_bus_t dataBus; /*!< LCD data bus. */
AnnaBridge 161:aa5281ff4a02 214 } elcdif_rgb_mode_config_t;
AnnaBridge 161:aa5281ff4a02 215
AnnaBridge 161:aa5281ff4a02 216 /*!
AnnaBridge 161:aa5281ff4a02 217 * @brief eLCDIF alpha surface pixel format.
AnnaBridge 161:aa5281ff4a02 218 */
AnnaBridge 161:aa5281ff4a02 219 typedef enum _elcdif_as_pixel_format
AnnaBridge 161:aa5281ff4a02 220 {
AnnaBridge 161:aa5281ff4a02 221 kELCDIF_AsPixelFormatARGB8888 = 0x0, /*!< 32-bit pixels with alpha. */
AnnaBridge 161:aa5281ff4a02 222 kELCDIF_AsPixelFormatRGB888 = 0x4, /*!< 32-bit pixels without alpha (unpacked 24-bit format) */
AnnaBridge 161:aa5281ff4a02 223 kELCDIF_AsPixelFormatARGB1555 = 0x8, /*!< 16-bit pixels with alpha. */
AnnaBridge 161:aa5281ff4a02 224 kELCDIF_AsPixelFormatARGB4444 = 0x9, /*!< 16-bit pixels with alpha. */
AnnaBridge 161:aa5281ff4a02 225 kELCDIF_AsPixelFormatRGB555 = 0xC, /*!< 16-bit pixels without alpha. */
AnnaBridge 161:aa5281ff4a02 226 kELCDIF_AsPixelFormatRGB444 = 0xD, /*!< 16-bit pixels without alpha. */
AnnaBridge 161:aa5281ff4a02 227 kELCDIF_AsPixelFormatRGB565 = 0xE, /*!< 16-bit pixels without alpha. */
AnnaBridge 161:aa5281ff4a02 228 } elcdif_as_pixel_format_t;
AnnaBridge 161:aa5281ff4a02 229
AnnaBridge 161:aa5281ff4a02 230 /*!
AnnaBridge 161:aa5281ff4a02 231 * @brief eLCDIF alpha surface buffer configuration.
AnnaBridge 161:aa5281ff4a02 232 */
AnnaBridge 161:aa5281ff4a02 233 typedef struct _elcdif_as_buffer_config
AnnaBridge 161:aa5281ff4a02 234 {
AnnaBridge 161:aa5281ff4a02 235 uint32_t bufferAddr; /*!< Buffer address. */
AnnaBridge 161:aa5281ff4a02 236 elcdif_as_pixel_format_t pixelFormat; /*!< Pixel format. */
AnnaBridge 161:aa5281ff4a02 237 } elcdif_as_buffer_config_t;
AnnaBridge 161:aa5281ff4a02 238
AnnaBridge 161:aa5281ff4a02 239 /*!
AnnaBridge 161:aa5281ff4a02 240 * @brief eLCDIF alpha mode during blending.
AnnaBridge 161:aa5281ff4a02 241 */
AnnaBridge 161:aa5281ff4a02 242 typedef enum _elcdif_alpha_mode
AnnaBridge 161:aa5281ff4a02 243 {
AnnaBridge 161:aa5281ff4a02 244 kELCDIF_AlphaEmbedded, /*!< The alpha surface pixel alpha value will be used for blend. */
AnnaBridge 161:aa5281ff4a02 245 kELCDIF_AlphaOverride, /*!< The user defined alpha value will be used for blend directly. */
AnnaBridge 161:aa5281ff4a02 246 kELCDIF_AlphaMultiply, /*!< The alpha surface pixel alpha value scaled the user defined
AnnaBridge 161:aa5281ff4a02 247 alpha value will be used for blend, for example, pixel alpha set
AnnaBridge 161:aa5281ff4a02 248 set to 200, user defined alpha set to 100, then the reault alpha
AnnaBridge 161:aa5281ff4a02 249 is 200 * 100 / 255. */
AnnaBridge 161:aa5281ff4a02 250 kELCDIF_AlphaRop /*!< Raster operation. */
AnnaBridge 161:aa5281ff4a02 251 } elcdif_alpha_mode_t;
AnnaBridge 161:aa5281ff4a02 252
AnnaBridge 161:aa5281ff4a02 253 /*!
AnnaBridge 161:aa5281ff4a02 254 * @brief eLCDIF ROP mode during blending.
AnnaBridge 161:aa5281ff4a02 255 *
AnnaBridge 161:aa5281ff4a02 256 * Explanation:
AnnaBridge 161:aa5281ff4a02 257 * - AS: Alpha surface
AnnaBridge 161:aa5281ff4a02 258 * - PS: Process surface
AnnaBridge 161:aa5281ff4a02 259 * - nAS: Alpha surface NOT value
AnnaBridge 161:aa5281ff4a02 260 * - nPS: Process surface NOT value
AnnaBridge 161:aa5281ff4a02 261 */
AnnaBridge 161:aa5281ff4a02 262 typedef enum _elcdif_rop_mode
AnnaBridge 161:aa5281ff4a02 263 {
AnnaBridge 161:aa5281ff4a02 264 kELCDIF_RopMaskAs = 0x0, /*!< AS AND PS. */
AnnaBridge 161:aa5281ff4a02 265 kELCDIF_RopMaskNotAs = 0x1, /*!< nAS AND PS. */
AnnaBridge 161:aa5281ff4a02 266 kELCDIF_RopMaskAsNot = 0x2, /*!< AS AND nPS. */
AnnaBridge 161:aa5281ff4a02 267 kELCDIF_RopMergeAs = 0x3, /*!< AS OR PS. */
AnnaBridge 161:aa5281ff4a02 268 kELCDIF_RopMergeNotAs = 0x4, /*!< nAS OR PS. */
AnnaBridge 161:aa5281ff4a02 269 kELCDIF_RopMergeAsNot = 0x5, /*!< AS OR nPS. */
AnnaBridge 161:aa5281ff4a02 270 kELCDIF_RopNotCopyAs = 0x6, /*!< nAS. */
AnnaBridge 161:aa5281ff4a02 271 kELCDIF_RopNot = 0x7, /*!< nPS. */
AnnaBridge 161:aa5281ff4a02 272 kELCDIF_RopNotMaskAs = 0x8, /*!< AS NAND PS. */
AnnaBridge 161:aa5281ff4a02 273 kELCDIF_RopNotMergeAs = 0x9, /*!< AS NOR PS. */
AnnaBridge 161:aa5281ff4a02 274 kELCDIF_RopXorAs = 0xA, /*!< AS XOR PS. */
AnnaBridge 161:aa5281ff4a02 275 kELCDIF_RopNotXorAs = 0xB /*!< AS XNOR PS. */
AnnaBridge 161:aa5281ff4a02 276 } elcdif_rop_mode_t;
AnnaBridge 161:aa5281ff4a02 277
AnnaBridge 161:aa5281ff4a02 278 /*!
AnnaBridge 161:aa5281ff4a02 279 * @brief eLCDIF alpha surface blending configuration.
AnnaBridge 161:aa5281ff4a02 280 */
AnnaBridge 161:aa5281ff4a02 281 typedef struct _elcdif_as_blend_config
AnnaBridge 161:aa5281ff4a02 282 {
AnnaBridge 161:aa5281ff4a02 283 uint8_t alpha; /*!< User defined alpha value, only used when @ref alphaMode is @ref kELCDIF_AlphaOverride or @ref
AnnaBridge 161:aa5281ff4a02 284 kELCDIF_AlphaRop. */
AnnaBridge 161:aa5281ff4a02 285 bool invertAlpha; /*!< Set true to invert the alpha. */
AnnaBridge 161:aa5281ff4a02 286 elcdif_alpha_mode_t alphaMode; /*!< Alpha mode. */
AnnaBridge 161:aa5281ff4a02 287 elcdif_rop_mode_t ropMode; /*!< ROP mode, only valid when @ref alphaMode is @ref kELCDIF_AlphaRop. */
AnnaBridge 161:aa5281ff4a02 288 } elcdif_as_blend_config_t;
AnnaBridge 161:aa5281ff4a02 289
AnnaBridge 161:aa5281ff4a02 290 /*!
AnnaBridge 161:aa5281ff4a02 291 * @brief eLCDIF LUT
AnnaBridge 161:aa5281ff4a02 292 *
AnnaBridge 161:aa5281ff4a02 293 * The Lookup Table (LUT) is used to expand the 8 bits pixel to 24 bits pixel
AnnaBridge 161:aa5281ff4a02 294 * before output to external displayer.
AnnaBridge 161:aa5281ff4a02 295 *
AnnaBridge 161:aa5281ff4a02 296 * There are two 256x24 bits LUT memory in LCDIF, the LSB of frame buffer address
AnnaBridge 161:aa5281ff4a02 297 * determins which memory to use.
AnnaBridge 161:aa5281ff4a02 298 */
AnnaBridge 161:aa5281ff4a02 299 typedef enum _elcdif_lut
AnnaBridge 161:aa5281ff4a02 300 {
AnnaBridge 161:aa5281ff4a02 301 kELCDIF_Lut0 = 0, /*!< LUT 0. */
AnnaBridge 161:aa5281ff4a02 302 kELCDIF_Lut1, /*!< LUT 1. */
AnnaBridge 161:aa5281ff4a02 303 } elcdif_lut_t;
AnnaBridge 161:aa5281ff4a02 304
AnnaBridge 161:aa5281ff4a02 305 /*******************************************************************************
AnnaBridge 161:aa5281ff4a02 306 * APIs
AnnaBridge 161:aa5281ff4a02 307 ******************************************************************************/
AnnaBridge 161:aa5281ff4a02 308
AnnaBridge 161:aa5281ff4a02 309 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 310 extern "C" {
AnnaBridge 161:aa5281ff4a02 311 #endif /* __cplusplus */
AnnaBridge 161:aa5281ff4a02 312
AnnaBridge 161:aa5281ff4a02 313 /*!
AnnaBridge 161:aa5281ff4a02 314 * @name eLCDIF initialization and de-initialization
AnnaBridge 161:aa5281ff4a02 315 * @{
AnnaBridge 161:aa5281ff4a02 316 */
AnnaBridge 161:aa5281ff4a02 317
AnnaBridge 161:aa5281ff4a02 318 /*!
AnnaBridge 161:aa5281ff4a02 319 * @brief Initializes the eLCDIF to work in RGB mode (DOTCLK mode).
AnnaBridge 161:aa5281ff4a02 320 *
AnnaBridge 161:aa5281ff4a02 321 * This function ungates the eLCDIF clock and configures the eLCDIF peripheral according
AnnaBridge 161:aa5281ff4a02 322 * to the configuration structure.
AnnaBridge 161:aa5281ff4a02 323 *
AnnaBridge 161:aa5281ff4a02 324 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 325 * @param config Pointer to the configuration structure.
AnnaBridge 161:aa5281ff4a02 326 */
AnnaBridge 161:aa5281ff4a02 327 void ELCDIF_RgbModeInit(LCDIF_Type *base, const elcdif_rgb_mode_config_t *config);
AnnaBridge 161:aa5281ff4a02 328
AnnaBridge 161:aa5281ff4a02 329 /*!
AnnaBridge 161:aa5281ff4a02 330 * @brief Gets the eLCDIF default configuration structure for RGB (DOTCLK) mode.
AnnaBridge 161:aa5281ff4a02 331 *
AnnaBridge 161:aa5281ff4a02 332 * This function sets the configuration structure to default values.
AnnaBridge 161:aa5281ff4a02 333 * The default configuration is set to the following values.
AnnaBridge 161:aa5281ff4a02 334 * @code
AnnaBridge 161:aa5281ff4a02 335 config->panelWidth = 480U;
AnnaBridge 161:aa5281ff4a02 336 config->panelHeight = 272U;
AnnaBridge 161:aa5281ff4a02 337 config->hsw = 41;
AnnaBridge 161:aa5281ff4a02 338 config->hfp = 4;
AnnaBridge 161:aa5281ff4a02 339 config->hbp = 8;
AnnaBridge 161:aa5281ff4a02 340 config->vsw = 10;
AnnaBridge 161:aa5281ff4a02 341 config->vfp = 4;
AnnaBridge 161:aa5281ff4a02 342 config->vbp = 2;
AnnaBridge 161:aa5281ff4a02 343 config->polarityFlags = kELCDIF_VsyncActiveLow |
AnnaBridge 161:aa5281ff4a02 344 kELCDIF_HsyncActiveLow |
AnnaBridge 161:aa5281ff4a02 345 kELCDIF_DataEnableActiveLow |
AnnaBridge 161:aa5281ff4a02 346 kELCDIF_DriveDataOnFallingClkEdge;
AnnaBridge 161:aa5281ff4a02 347 config->bufferAddr = 0U;
AnnaBridge 161:aa5281ff4a02 348 config->pixelFormat = kELCDIF_PixelFormatRGB888;
AnnaBridge 161:aa5281ff4a02 349 config->dataBus = kELCDIF_DataBus24Bit;
AnnaBridge 161:aa5281ff4a02 350 @code
AnnaBridge 161:aa5281ff4a02 351 *
AnnaBridge 161:aa5281ff4a02 352 * @param config Pointer to the eLCDIF configuration structure.
AnnaBridge 161:aa5281ff4a02 353 */
AnnaBridge 161:aa5281ff4a02 354 void ELCDIF_RgbModeGetDefaultConfig(elcdif_rgb_mode_config_t *config);
AnnaBridge 161:aa5281ff4a02 355
AnnaBridge 161:aa5281ff4a02 356 /*!
AnnaBridge 161:aa5281ff4a02 357 * @brief Deinitializes the eLCDIF peripheral.
AnnaBridge 161:aa5281ff4a02 358 *
AnnaBridge 161:aa5281ff4a02 359 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 360 */
AnnaBridge 161:aa5281ff4a02 361 void ELCDIF_Deinit(LCDIF_Type *base);
AnnaBridge 161:aa5281ff4a02 362
AnnaBridge 161:aa5281ff4a02 363 /* @} */
AnnaBridge 161:aa5281ff4a02 364
AnnaBridge 161:aa5281ff4a02 365 /*!
AnnaBridge 161:aa5281ff4a02 366 * @name Module operation
AnnaBridge 161:aa5281ff4a02 367 * @{
AnnaBridge 161:aa5281ff4a02 368 */
AnnaBridge 161:aa5281ff4a02 369
AnnaBridge 161:aa5281ff4a02 370 /*!
AnnaBridge 161:aa5281ff4a02 371 * @brief Start to display in RGB (DOTCLK) mode.
AnnaBridge 161:aa5281ff4a02 372 *
AnnaBridge 161:aa5281ff4a02 373 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 374 */
AnnaBridge 161:aa5281ff4a02 375 static inline void ELCDIF_RgbModeStart(LCDIF_Type *base)
AnnaBridge 161:aa5281ff4a02 376 {
AnnaBridge 161:aa5281ff4a02 377 base->CTRL_SET = LCDIF_CTRL_RUN_MASK | LCDIF_CTRL_DOTCLK_MODE_MASK;
AnnaBridge 161:aa5281ff4a02 378 }
AnnaBridge 161:aa5281ff4a02 379
AnnaBridge 161:aa5281ff4a02 380 /*!
AnnaBridge 161:aa5281ff4a02 381 * @brief Stop display in RGB (DOTCLK) mode and wait until finished.
AnnaBridge 161:aa5281ff4a02 382 *
AnnaBridge 161:aa5281ff4a02 383 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 384 */
AnnaBridge 161:aa5281ff4a02 385 void ELCDIF_RgbModeStop(LCDIF_Type *base);
AnnaBridge 161:aa5281ff4a02 386
AnnaBridge 161:aa5281ff4a02 387 /*!
AnnaBridge 161:aa5281ff4a02 388 * @brief Set the next frame buffer address to display.
AnnaBridge 161:aa5281ff4a02 389 *
AnnaBridge 161:aa5281ff4a02 390 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 391 * @param bufferAddr The frame buffer address to set.
AnnaBridge 161:aa5281ff4a02 392 */
AnnaBridge 161:aa5281ff4a02 393 static inline void ELCDIF_SetNextBufferAddr(LCDIF_Type *base, uint32_t bufferAddr)
AnnaBridge 161:aa5281ff4a02 394 {
AnnaBridge 161:aa5281ff4a02 395 base->NEXT_BUF = bufferAddr;
AnnaBridge 161:aa5281ff4a02 396 }
AnnaBridge 161:aa5281ff4a02 397
AnnaBridge 161:aa5281ff4a02 398 /*!
AnnaBridge 161:aa5281ff4a02 399 * @brief Reset the eLCDIF peripheral.
AnnaBridge 161:aa5281ff4a02 400 *
AnnaBridge 161:aa5281ff4a02 401 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 402 */
AnnaBridge 161:aa5281ff4a02 403 void ELCDIF_Reset(LCDIF_Type *base);
AnnaBridge 161:aa5281ff4a02 404
AnnaBridge 161:aa5281ff4a02 405 #if !(defined(FSL_FEATURE_LCDIF_HAS_NO_RESET_PIN) && FSL_FEATURE_LCDIF_HAS_NO_RESET_PIN)
AnnaBridge 161:aa5281ff4a02 406 /*!
AnnaBridge 161:aa5281ff4a02 407 * @brief Pull up or down the reset pin for the externel LCD controller.
AnnaBridge 161:aa5281ff4a02 408 *
AnnaBridge 161:aa5281ff4a02 409 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 410 * @param pullUp True to pull up reset pin, false to pull down.
AnnaBridge 161:aa5281ff4a02 411 */
AnnaBridge 161:aa5281ff4a02 412 static inline void ELCDIF_PullUpResetPin(LCDIF_Type *base, bool pullUp)
AnnaBridge 161:aa5281ff4a02 413 {
AnnaBridge 161:aa5281ff4a02 414 if (pullUp)
AnnaBridge 161:aa5281ff4a02 415 {
AnnaBridge 161:aa5281ff4a02 416 base->CTRL1_SET = LCDIF_CTRL1_RESET_MASK;
AnnaBridge 161:aa5281ff4a02 417 }
AnnaBridge 161:aa5281ff4a02 418 else
AnnaBridge 161:aa5281ff4a02 419 {
AnnaBridge 161:aa5281ff4a02 420 base->CTRL1_CLR = LCDIF_CTRL1_RESET_MASK;
AnnaBridge 161:aa5281ff4a02 421 }
AnnaBridge 161:aa5281ff4a02 422 }
AnnaBridge 161:aa5281ff4a02 423 #endif
AnnaBridge 161:aa5281ff4a02 424
AnnaBridge 161:aa5281ff4a02 425 /*!
AnnaBridge 161:aa5281ff4a02 426 * @brief Enable or disable the hand shake with PXP.
AnnaBridge 161:aa5281ff4a02 427 *
AnnaBridge 161:aa5281ff4a02 428 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 429 * @param enable True to enable, false to disable.
AnnaBridge 161:aa5281ff4a02 430 */
AnnaBridge 161:aa5281ff4a02 431 static inline void ELCDIF_EnablePxpHandShake(LCDIF_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 432 {
AnnaBridge 161:aa5281ff4a02 433 if (enable)
AnnaBridge 161:aa5281ff4a02 434 {
AnnaBridge 161:aa5281ff4a02 435 base->CTRL_SET = LCDIF_CTRL_ENABLE_PXP_HANDSHAKE_MASK;
AnnaBridge 161:aa5281ff4a02 436 }
AnnaBridge 161:aa5281ff4a02 437 else
AnnaBridge 161:aa5281ff4a02 438 {
AnnaBridge 161:aa5281ff4a02 439 base->CTRL_CLR = LCDIF_CTRL_ENABLE_PXP_HANDSHAKE_MASK;
AnnaBridge 161:aa5281ff4a02 440 }
AnnaBridge 161:aa5281ff4a02 441 }
AnnaBridge 161:aa5281ff4a02 442
AnnaBridge 161:aa5281ff4a02 443 /* @} */
AnnaBridge 161:aa5281ff4a02 444
AnnaBridge 161:aa5281ff4a02 445 /*!
AnnaBridge 161:aa5281ff4a02 446 * @name Status
AnnaBridge 161:aa5281ff4a02 447 * @{
AnnaBridge 161:aa5281ff4a02 448 */
AnnaBridge 161:aa5281ff4a02 449
AnnaBridge 161:aa5281ff4a02 450 /*!
AnnaBridge 161:aa5281ff4a02 451 * @brief Get the CRC value of the frame sent out.
AnnaBridge 161:aa5281ff4a02 452 *
AnnaBridge 161:aa5281ff4a02 453 * When a frame is sent complete (the interrupt @ref kELCDIF_CurFrameDone assert), this function
AnnaBridge 161:aa5281ff4a02 454 * can be used to get the CRC value of the frame sent.
AnnaBridge 161:aa5281ff4a02 455 *
AnnaBridge 161:aa5281ff4a02 456 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 457 * @return The CRC value.
AnnaBridge 161:aa5281ff4a02 458 *
AnnaBridge 161:aa5281ff4a02 459 * @note The CRC value is dependent on the LCD_DATABUS_WIDTH.
AnnaBridge 161:aa5281ff4a02 460 */
AnnaBridge 161:aa5281ff4a02 461 static inline uint32_t ELCDIF_GetCrcValue(LCDIF_Type *base)
AnnaBridge 161:aa5281ff4a02 462 {
AnnaBridge 161:aa5281ff4a02 463 return base->CRC_STAT;
AnnaBridge 161:aa5281ff4a02 464 }
AnnaBridge 161:aa5281ff4a02 465
AnnaBridge 161:aa5281ff4a02 466 /*!
AnnaBridge 161:aa5281ff4a02 467 * @brief Get the bus master error virtual address.
AnnaBridge 161:aa5281ff4a02 468 *
AnnaBridge 161:aa5281ff4a02 469 * When bus master error occurs (the interrupt kELCDIF_BusMasterError assert), this function
AnnaBridge 161:aa5281ff4a02 470 * can get the virtual address at which the AXI master received an error
AnnaBridge 161:aa5281ff4a02 471 * response from the slave.
AnnaBridge 161:aa5281ff4a02 472 *
AnnaBridge 161:aa5281ff4a02 473 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 474 * @return The error virtual address.
AnnaBridge 161:aa5281ff4a02 475 */
AnnaBridge 161:aa5281ff4a02 476 static inline uint32_t ELCDIF_GetBusMasterErrorAddr(LCDIF_Type *base)
AnnaBridge 161:aa5281ff4a02 477 {
AnnaBridge 161:aa5281ff4a02 478 return base->BM_ERROR_STAT;
AnnaBridge 161:aa5281ff4a02 479 }
AnnaBridge 161:aa5281ff4a02 480
AnnaBridge 161:aa5281ff4a02 481 /*!
AnnaBridge 161:aa5281ff4a02 482 * @brief Get the eLCDIF status.
AnnaBridge 161:aa5281ff4a02 483 *
AnnaBridge 161:aa5281ff4a02 484 * The status flags are returned as a mask value, application could check the
AnnaBridge 161:aa5281ff4a02 485 * corresponding bit. Example:
AnnaBridge 161:aa5281ff4a02 486 *
AnnaBridge 161:aa5281ff4a02 487 * @code
AnnaBridge 161:aa5281ff4a02 488 uint32_t statusFlags;
AnnaBridge 161:aa5281ff4a02 489 statusFlags = ELCDIF_GetStatus(LCDIF);
AnnaBridge 161:aa5281ff4a02 490
AnnaBridge 161:aa5281ff4a02 491 // If LFIFO is full.
AnnaBridge 161:aa5281ff4a02 492 if (kELCDIF_LFifoFull & statusFlags)
AnnaBridge 161:aa5281ff4a02 493 {
AnnaBridge 161:aa5281ff4a02 494 // ...;
AnnaBridge 161:aa5281ff4a02 495 }
AnnaBridge 161:aa5281ff4a02 496 // If TXFIFO is empty.
AnnaBridge 161:aa5281ff4a02 497 if (kELCDIF_TxFifoEmpty & statusFlags)
AnnaBridge 161:aa5281ff4a02 498 {
AnnaBridge 161:aa5281ff4a02 499 // ...;
AnnaBridge 161:aa5281ff4a02 500 }
AnnaBridge 161:aa5281ff4a02 501 @endcode
AnnaBridge 161:aa5281ff4a02 502 *
AnnaBridge 161:aa5281ff4a02 503 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 504 * @return The mask value of status flags, it is OR'ed value of @ref _elcdif_status_flags.
AnnaBridge 161:aa5281ff4a02 505 */
AnnaBridge 161:aa5281ff4a02 506 static inline uint32_t ELCDIF_GetStatus(LCDIF_Type *base)
AnnaBridge 161:aa5281ff4a02 507 {
AnnaBridge 161:aa5281ff4a02 508 return base->STAT & (LCDIF_STAT_LFIFO_FULL_MASK | LCDIF_STAT_LFIFO_EMPTY_MASK | LCDIF_STAT_TXFIFO_FULL_MASK |
AnnaBridge 161:aa5281ff4a02 509 LCDIF_STAT_TXFIFO_EMPTY_MASK
AnnaBridge 161:aa5281ff4a02 510 #if defined(LCDIF_STAT_BUSY_MASK)
AnnaBridge 161:aa5281ff4a02 511 | LCDIF_STAT_BUSY_MASK
AnnaBridge 161:aa5281ff4a02 512 #endif
AnnaBridge 161:aa5281ff4a02 513 #if defined(LCDIF_STAT_DVI_CURRENT_FIELD_MASK)
AnnaBridge 161:aa5281ff4a02 514 | LCDIF_STAT_DVI_CURRENT_FIELD_MASK
AnnaBridge 161:aa5281ff4a02 515 #endif
AnnaBridge 161:aa5281ff4a02 516 );
AnnaBridge 161:aa5281ff4a02 517 }
AnnaBridge 161:aa5281ff4a02 518
AnnaBridge 161:aa5281ff4a02 519 /*!
AnnaBridge 161:aa5281ff4a02 520 * @brief Get current count in Latency buffer (LFIFO).
AnnaBridge 161:aa5281ff4a02 521 *
AnnaBridge 161:aa5281ff4a02 522 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 523 * @return The LFIFO current count
AnnaBridge 161:aa5281ff4a02 524 */
AnnaBridge 161:aa5281ff4a02 525 static inline uint32_t ELCDIF_GetLFifoCount(LCDIF_Type *base)
AnnaBridge 161:aa5281ff4a02 526 {
AnnaBridge 161:aa5281ff4a02 527 return (base->STAT & LCDIF_STAT_LFIFO_COUNT_MASK) >> LCDIF_STAT_LFIFO_COUNT_SHIFT;
AnnaBridge 161:aa5281ff4a02 528 }
AnnaBridge 161:aa5281ff4a02 529
AnnaBridge 161:aa5281ff4a02 530 /* @} */
AnnaBridge 161:aa5281ff4a02 531
AnnaBridge 161:aa5281ff4a02 532 /*!
AnnaBridge 161:aa5281ff4a02 533 * @name Interrupts
AnnaBridge 161:aa5281ff4a02 534 * @{
AnnaBridge 161:aa5281ff4a02 535 */
AnnaBridge 161:aa5281ff4a02 536
AnnaBridge 161:aa5281ff4a02 537 /*!
AnnaBridge 161:aa5281ff4a02 538 * @brief Enables eLCDIF interrupt requests.
AnnaBridge 161:aa5281ff4a02 539 *
AnnaBridge 161:aa5281ff4a02 540 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 541 * @param mask interrupt source, OR'ed value of _elcdif_interrupt_enable.
AnnaBridge 161:aa5281ff4a02 542 */
AnnaBridge 161:aa5281ff4a02 543 static inline void ELCDIF_EnableInterrupts(LCDIF_Type *base, uint32_t mask)
AnnaBridge 161:aa5281ff4a02 544 {
AnnaBridge 161:aa5281ff4a02 545 base->CTRL1_SET = (mask & ELCDIF_CTRL1_IRQ_EN_MASK);
AnnaBridge 161:aa5281ff4a02 546 #if !(defined(FSL_FEATURE_LCDIF_HAS_NO_AS) && FSL_FEATURE_LCDIF_HAS_NO_AS)
AnnaBridge 161:aa5281ff4a02 547 base->AS_CTRL |= (mask & ELCDIF_AS_CTRL_IRQ_EN_MASK);
AnnaBridge 161:aa5281ff4a02 548 #endif
AnnaBridge 161:aa5281ff4a02 549 }
AnnaBridge 161:aa5281ff4a02 550
AnnaBridge 161:aa5281ff4a02 551 /*!
AnnaBridge 161:aa5281ff4a02 552 * @brief Disables eLCDIF interrupt requests.
AnnaBridge 161:aa5281ff4a02 553 *
AnnaBridge 161:aa5281ff4a02 554 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 555 * @param mask interrupt source, OR'ed value of _elcdif_interrupt_enable.
AnnaBridge 161:aa5281ff4a02 556 */
AnnaBridge 161:aa5281ff4a02 557 static inline void ELCDIF_DisableInterrupts(LCDIF_Type *base, uint32_t mask)
AnnaBridge 161:aa5281ff4a02 558 {
AnnaBridge 161:aa5281ff4a02 559 base->CTRL1_CLR = (mask & ELCDIF_CTRL1_IRQ_EN_MASK);
AnnaBridge 161:aa5281ff4a02 560 #if !(defined(FSL_FEATURE_LCDIF_HAS_NO_AS) && FSL_FEATURE_LCDIF_HAS_NO_AS)
AnnaBridge 161:aa5281ff4a02 561 base->AS_CTRL &= ~(mask & ELCDIF_AS_CTRL_IRQ_EN_MASK);
AnnaBridge 161:aa5281ff4a02 562 #endif
AnnaBridge 161:aa5281ff4a02 563 }
AnnaBridge 161:aa5281ff4a02 564
AnnaBridge 161:aa5281ff4a02 565 /*!
AnnaBridge 161:aa5281ff4a02 566 * @brief Get eLCDIF interrupt peding status.
AnnaBridge 161:aa5281ff4a02 567 *
AnnaBridge 161:aa5281ff4a02 568 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 569 * @return Interrupt pending status, OR'ed value of _elcdif_interrupt_flags.
AnnaBridge 161:aa5281ff4a02 570 */
AnnaBridge 161:aa5281ff4a02 571 static inline uint32_t ELCDIF_GetInterruptStatus(LCDIF_Type *base)
AnnaBridge 161:aa5281ff4a02 572 {
AnnaBridge 161:aa5281ff4a02 573 uint32_t flags;
AnnaBridge 161:aa5281ff4a02 574
AnnaBridge 161:aa5281ff4a02 575 flags = (base->CTRL1 & ELCDIF_CTRL1_IRQ_MASK);
AnnaBridge 161:aa5281ff4a02 576 #if !(defined(FSL_FEATURE_LCDIF_HAS_NO_AS) && FSL_FEATURE_LCDIF_HAS_NO_AS)
AnnaBridge 161:aa5281ff4a02 577 flags |= (base->AS_CTRL & ELCDIF_AS_CTRL_IRQ_MASK);
AnnaBridge 161:aa5281ff4a02 578 #endif
AnnaBridge 161:aa5281ff4a02 579
AnnaBridge 161:aa5281ff4a02 580 return flags;
AnnaBridge 161:aa5281ff4a02 581 }
AnnaBridge 161:aa5281ff4a02 582
AnnaBridge 161:aa5281ff4a02 583 /*!
AnnaBridge 161:aa5281ff4a02 584 * @brief Clear eLCDIF interrupt peding status.
AnnaBridge 161:aa5281ff4a02 585 *
AnnaBridge 161:aa5281ff4a02 586 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 587 * @param mask of the flags to clear, OR'ed value of _elcdif_interrupt_flags.
AnnaBridge 161:aa5281ff4a02 588 */
AnnaBridge 161:aa5281ff4a02 589 static inline void ELCDIF_ClearInterruptStatus(LCDIF_Type *base, uint32_t mask)
AnnaBridge 161:aa5281ff4a02 590 {
AnnaBridge 161:aa5281ff4a02 591 base->CTRL1_CLR = (mask & ELCDIF_CTRL1_IRQ_MASK);
AnnaBridge 161:aa5281ff4a02 592 #if !(defined(FSL_FEATURE_LCDIF_HAS_NO_AS) && FSL_FEATURE_LCDIF_HAS_NO_AS)
AnnaBridge 161:aa5281ff4a02 593 base->AS_CTRL &= ~(mask & ELCDIF_AS_CTRL_IRQ_MASK);
AnnaBridge 161:aa5281ff4a02 594 #endif
AnnaBridge 161:aa5281ff4a02 595 }
AnnaBridge 161:aa5281ff4a02 596
AnnaBridge 161:aa5281ff4a02 597 /* @} */
AnnaBridge 161:aa5281ff4a02 598
AnnaBridge 161:aa5281ff4a02 599 #if !(defined(FSL_FEATURE_LCDIF_HAS_NO_AS) && FSL_FEATURE_LCDIF_HAS_NO_AS)
AnnaBridge 161:aa5281ff4a02 600 /*!
AnnaBridge 161:aa5281ff4a02 601 * @name Alpha surface
AnnaBridge 161:aa5281ff4a02 602 * @{
AnnaBridge 161:aa5281ff4a02 603 */
AnnaBridge 161:aa5281ff4a02 604
AnnaBridge 161:aa5281ff4a02 605 /*!
AnnaBridge 161:aa5281ff4a02 606 * @brief Set the configuration for alpha surface buffer.
AnnaBridge 161:aa5281ff4a02 607 *
AnnaBridge 161:aa5281ff4a02 608 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 609 * @param config Pointer to the configuration structure.
AnnaBridge 161:aa5281ff4a02 610 */
AnnaBridge 161:aa5281ff4a02 611 void ELCDIF_SetAlphaSurfaceBufferConfig(LCDIF_Type *base, const elcdif_as_buffer_config_t *config);
AnnaBridge 161:aa5281ff4a02 612
AnnaBridge 161:aa5281ff4a02 613 /*!
AnnaBridge 161:aa5281ff4a02 614 * @brief Set the alpha surface blending configuration.
AnnaBridge 161:aa5281ff4a02 615 *
AnnaBridge 161:aa5281ff4a02 616 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 617 * @param config Pointer to the configuration structure.
AnnaBridge 161:aa5281ff4a02 618 */
AnnaBridge 161:aa5281ff4a02 619 void ELCDIF_SetAlphaSurfaceBlendConfig(LCDIF_Type *base, const elcdif_as_blend_config_t *config);
AnnaBridge 161:aa5281ff4a02 620
AnnaBridge 161:aa5281ff4a02 621 /*!
AnnaBridge 161:aa5281ff4a02 622 * @brief Set the next alpha surface buffer address.
AnnaBridge 161:aa5281ff4a02 623 *
AnnaBridge 161:aa5281ff4a02 624 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 625 * @param bufferAddr Alpha surface buffer address.
AnnaBridge 161:aa5281ff4a02 626 */
AnnaBridge 161:aa5281ff4a02 627 static inline void ELCDIF_SetNextAlphaSurfaceBufferAddr(LCDIF_Type *base, uint32_t bufferAddr)
AnnaBridge 161:aa5281ff4a02 628 {
AnnaBridge 161:aa5281ff4a02 629 base->AS_NEXT_BUF = bufferAddr;
AnnaBridge 161:aa5281ff4a02 630 }
AnnaBridge 161:aa5281ff4a02 631
AnnaBridge 161:aa5281ff4a02 632 /*!
AnnaBridge 161:aa5281ff4a02 633 * @brief Set the overlay color key.
AnnaBridge 161:aa5281ff4a02 634 *
AnnaBridge 161:aa5281ff4a02 635 * If a pixel in the current overlay image with a color that falls in the range
AnnaBridge 161:aa5281ff4a02 636 * from the @p colorKeyLow to @p colorKeyHigh range, it will use the process surface
AnnaBridge 161:aa5281ff4a02 637 * pixel value for that location.
AnnaBridge 161:aa5281ff4a02 638 *
AnnaBridge 161:aa5281ff4a02 639 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 640 * @param colorKeyLow Color key low range.
AnnaBridge 161:aa5281ff4a02 641 * @param colorKeyHigh Color key high range.
AnnaBridge 161:aa5281ff4a02 642 *
AnnaBridge 161:aa5281ff4a02 643 * @note Colorkey operations are higher priority than alpha or ROP operations
AnnaBridge 161:aa5281ff4a02 644 */
AnnaBridge 161:aa5281ff4a02 645 static inline void ELCDIF_SetOverlayColorKey(LCDIF_Type *base, uint32_t colorKeyLow, uint32_t colorKeyHigh)
AnnaBridge 161:aa5281ff4a02 646 {
AnnaBridge 161:aa5281ff4a02 647 base->AS_CLRKEYLOW = colorKeyLow;
AnnaBridge 161:aa5281ff4a02 648 base->AS_CLRKEYHIGH = colorKeyHigh;
AnnaBridge 161:aa5281ff4a02 649 }
AnnaBridge 161:aa5281ff4a02 650
AnnaBridge 161:aa5281ff4a02 651 /*!
AnnaBridge 161:aa5281ff4a02 652 * @brief Enable or disable the color key.
AnnaBridge 161:aa5281ff4a02 653 *
AnnaBridge 161:aa5281ff4a02 654 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 655 * @param enable True to enable, false to disable.
AnnaBridge 161:aa5281ff4a02 656 */
AnnaBridge 161:aa5281ff4a02 657 static inline void ELCDIF_EnableOverlayColorKey(LCDIF_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 658 {
AnnaBridge 161:aa5281ff4a02 659 if (enable)
AnnaBridge 161:aa5281ff4a02 660 {
AnnaBridge 161:aa5281ff4a02 661 base->AS_CTRL |= LCDIF_AS_CTRL_ENABLE_COLORKEY_MASK;
AnnaBridge 161:aa5281ff4a02 662 }
AnnaBridge 161:aa5281ff4a02 663 else
AnnaBridge 161:aa5281ff4a02 664 {
AnnaBridge 161:aa5281ff4a02 665 base->AS_CTRL &= ~LCDIF_AS_CTRL_ENABLE_COLORKEY_MASK;
AnnaBridge 161:aa5281ff4a02 666 }
AnnaBridge 161:aa5281ff4a02 667 }
AnnaBridge 161:aa5281ff4a02 668
AnnaBridge 161:aa5281ff4a02 669 /*!
AnnaBridge 161:aa5281ff4a02 670 * @brief Enable or disable the alpha surface.
AnnaBridge 161:aa5281ff4a02 671 *
AnnaBridge 161:aa5281ff4a02 672 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 673 * @param enable True to enable, false to disable.
AnnaBridge 161:aa5281ff4a02 674 */
AnnaBridge 161:aa5281ff4a02 675 static inline void ELCDIF_EnableAlphaSurface(LCDIF_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 676 {
AnnaBridge 161:aa5281ff4a02 677 if (enable)
AnnaBridge 161:aa5281ff4a02 678 {
AnnaBridge 161:aa5281ff4a02 679 base->AS_CTRL |= LCDIF_AS_CTRL_AS_ENABLE_MASK;
AnnaBridge 161:aa5281ff4a02 680 }
AnnaBridge 161:aa5281ff4a02 681 else
AnnaBridge 161:aa5281ff4a02 682 {
AnnaBridge 161:aa5281ff4a02 683 base->AS_CTRL &= ~LCDIF_AS_CTRL_AS_ENABLE_MASK;
AnnaBridge 161:aa5281ff4a02 684 }
AnnaBridge 161:aa5281ff4a02 685 }
AnnaBridge 161:aa5281ff4a02 686
AnnaBridge 161:aa5281ff4a02 687 /*!
AnnaBridge 161:aa5281ff4a02 688 * @brief Enable or disable the process surface.
AnnaBridge 161:aa5281ff4a02 689 *
AnnaBridge 161:aa5281ff4a02 690 * Process surface is the normal frame buffer. The process surface content
AnnaBridge 161:aa5281ff4a02 691 * is controlled by @ref ELCDIF_SetNextBufferAddr.
AnnaBridge 161:aa5281ff4a02 692 *
AnnaBridge 161:aa5281ff4a02 693 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 694 * @param enable True to enable, false to disable.
AnnaBridge 161:aa5281ff4a02 695 */
AnnaBridge 161:aa5281ff4a02 696 static inline void ELCDIF_EnableProcessSurface(LCDIF_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 697 {
AnnaBridge 161:aa5281ff4a02 698 if (enable)
AnnaBridge 161:aa5281ff4a02 699 {
AnnaBridge 161:aa5281ff4a02 700 base->AS_CTRL &= ~LCDIF_AS_CTRL_PS_DISABLE_MASK;
AnnaBridge 161:aa5281ff4a02 701 }
AnnaBridge 161:aa5281ff4a02 702 else
AnnaBridge 161:aa5281ff4a02 703 {
AnnaBridge 161:aa5281ff4a02 704 base->AS_CTRL |= LCDIF_AS_CTRL_PS_DISABLE_MASK;
AnnaBridge 161:aa5281ff4a02 705 }
AnnaBridge 161:aa5281ff4a02 706 }
AnnaBridge 161:aa5281ff4a02 707
AnnaBridge 161:aa5281ff4a02 708 /* @} */
AnnaBridge 161:aa5281ff4a02 709 #endif /* FSL_FEATURE_LCDIF_HAS_NO_AS */
AnnaBridge 161:aa5281ff4a02 710
AnnaBridge 161:aa5281ff4a02 711 #if (defined(FSL_FEATURE_LCDIF_HAS_LUT) && FSL_FEATURE_LCDIF_HAS_LUT)
AnnaBridge 161:aa5281ff4a02 712 /*!
AnnaBridge 161:aa5281ff4a02 713 * @name LUT
AnnaBridge 161:aa5281ff4a02 714 *
AnnaBridge 161:aa5281ff4a02 715 * The Lookup Table (LUT) is used to expand the 8 bits pixel to 24 bits pixel
AnnaBridge 161:aa5281ff4a02 716 * before output to external displayer.
AnnaBridge 161:aa5281ff4a02 717 *
AnnaBridge 161:aa5281ff4a02 718 * There are two 256x24 bits LUT memory in LCDIF, the LSB of frame buffer address
AnnaBridge 161:aa5281ff4a02 719 * determins which memory to use.
AnnaBridge 161:aa5281ff4a02 720 *
AnnaBridge 161:aa5281ff4a02 721 * @{
AnnaBridge 161:aa5281ff4a02 722 */
AnnaBridge 161:aa5281ff4a02 723
AnnaBridge 161:aa5281ff4a02 724 /*!
AnnaBridge 161:aa5281ff4a02 725 * @brief Enable or disable the LUT.
AnnaBridge 161:aa5281ff4a02 726 *
AnnaBridge 161:aa5281ff4a02 727 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 728 * @param enable True to enable, false to disable.
AnnaBridge 161:aa5281ff4a02 729 */
AnnaBridge 161:aa5281ff4a02 730 static inline void ELCDIF_EnableLut(LCDIF_Type *base, bool enable)
AnnaBridge 161:aa5281ff4a02 731 {
AnnaBridge 161:aa5281ff4a02 732 if (enable)
AnnaBridge 161:aa5281ff4a02 733 {
AnnaBridge 161:aa5281ff4a02 734 base->LUT_CTRL &= ~LCDIF_LUT_CTRL_LUT_BYPASS_MASK;
AnnaBridge 161:aa5281ff4a02 735 }
AnnaBridge 161:aa5281ff4a02 736 else
AnnaBridge 161:aa5281ff4a02 737 {
AnnaBridge 161:aa5281ff4a02 738 base->LUT_CTRL |= LCDIF_LUT_CTRL_LUT_BYPASS_MASK;
AnnaBridge 161:aa5281ff4a02 739 }
AnnaBridge 161:aa5281ff4a02 740 }
AnnaBridge 161:aa5281ff4a02 741
AnnaBridge 161:aa5281ff4a02 742 /*!
AnnaBridge 161:aa5281ff4a02 743 * @brief Load the LUT value.
AnnaBridge 161:aa5281ff4a02 744 *
AnnaBridge 161:aa5281ff4a02 745 * This function loads the LUT value to the specific LUT memory, user can
AnnaBridge 161:aa5281ff4a02 746 * specify the start entry index.
AnnaBridge 161:aa5281ff4a02 747 *
AnnaBridge 161:aa5281ff4a02 748 * @param base eLCDIF peripheral base address.
AnnaBridge 161:aa5281ff4a02 749 * @param lut Which LUT to load.
AnnaBridge 161:aa5281ff4a02 750 * @param startIndex The start index of the LUT entry to update.
AnnaBridge 161:aa5281ff4a02 751 * @param lutData The LUT data to load.
AnnaBridge 161:aa5281ff4a02 752 * @param count Count of @p lutData.
AnnaBridge 161:aa5281ff4a02 753 * @retval kStatus_Success Initialization success.
AnnaBridge 161:aa5281ff4a02 754 * @retval kStatus_InvalidArgument Wrong argument.
AnnaBridge 161:aa5281ff4a02 755 */
AnnaBridge 161:aa5281ff4a02 756 status_t ELCDIF_UpdateLut(
AnnaBridge 161:aa5281ff4a02 757 LCDIF_Type *base, elcdif_lut_t lut, uint16_t startIndex, const uint32_t *lutData, uint16_t count);
AnnaBridge 161:aa5281ff4a02 758
AnnaBridge 161:aa5281ff4a02 759 /* @} */
AnnaBridge 161:aa5281ff4a02 760 #endif /* FSL_FEATURE_LCDIF_HAS_LUT */
AnnaBridge 161:aa5281ff4a02 761
AnnaBridge 161:aa5281ff4a02 762 #if defined(__cplusplus)
AnnaBridge 161:aa5281ff4a02 763 }
AnnaBridge 161:aa5281ff4a02 764 #endif /* __cplusplus */
AnnaBridge 161:aa5281ff4a02 765
AnnaBridge 161:aa5281ff4a02 766 /* @} */
AnnaBridge 161:aa5281ff4a02 767
AnnaBridge 161:aa5281ff4a02 768 #endif /*_FSL_ELCDIF_H_*/