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.
TARGET_MIMXRT1050_EVK/TOOLCHAIN_IAR/fsl_elcdif.h@172:65be27845400, 2019-02-20 (annotated)
- 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?
User | Revision | Line number | New 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_*/ |