Video library for GR-PEACH
Dependents: Trace_Program2 GR-PEACH_Camera_in_barcode GR-PEACH_LCD_sample GR-PEACH_LCD_4_3inch_sample ... more
Video library for GR-PEACH.
Hello World!
Import programGR-PEACH_Camera_in
Camera in sample for GR-PEACH. This sample works on GR-LYCHEE besides GR-PEACH.
API
Import library
Interface
See the Pinout page for more details
drivers/vdc5/src/r_vdc5_register.c@0:853f5b7408a7, 2015-06-26 (annotated)
- Committer:
- dkato
- Date:
- Fri Jun 26 02:17:53 2015 +0000
- Revision:
- 0:853f5b7408a7
first commit
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dkato | 0:853f5b7408a7 | 1 | /******************************************************************************* |
dkato | 0:853f5b7408a7 | 2 | * DISCLAIMER |
dkato | 0:853f5b7408a7 | 3 | * This software is supplied by Renesas Electronics Corporation and is only |
dkato | 0:853f5b7408a7 | 4 | * intended for use with Renesas products. No other uses are authorized. This |
dkato | 0:853f5b7408a7 | 5 | * software is owned by Renesas Electronics Corporation and is protected under |
dkato | 0:853f5b7408a7 | 6 | * all applicable laws, including copyright laws. |
dkato | 0:853f5b7408a7 | 7 | * THIS SOFTWARE IS PROVIDED "AS IS" AND RENESAS MAKES NO WARRANTIES REGARDING |
dkato | 0:853f5b7408a7 | 8 | * THIS SOFTWARE, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT |
dkato | 0:853f5b7408a7 | 9 | * LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE |
dkato | 0:853f5b7408a7 | 10 | * AND NON-INFRINGEMENT. ALL SUCH WARRANTIES ARE EXPRESSLY DISCLAIMED. |
dkato | 0:853f5b7408a7 | 11 | * TO THE MAXIMUM EXTENT PERMITTED NOT PROHIBITED BY LAW, NEITHER RENESAS |
dkato | 0:853f5b7408a7 | 12 | * ELECTRONICS CORPORATION NOR ANY OF ITS AFFILIATED COMPANIES SHALL BE LIABLE |
dkato | 0:853f5b7408a7 | 13 | * FOR ANY DIRECT, INDIRECT, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES FOR |
dkato | 0:853f5b7408a7 | 14 | * ANY REASON RELATED TO THIS SOFTWARE, EVEN IF RENESAS OR ITS AFFILIATES HAVE |
dkato | 0:853f5b7408a7 | 15 | * BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. |
dkato | 0:853f5b7408a7 | 16 | * Renesas reserves the right, without notice, to make changes to this software |
dkato | 0:853f5b7408a7 | 17 | * and to discontinue the availability of this software. By using this software, |
dkato | 0:853f5b7408a7 | 18 | * you agree to the additional terms and conditions found by accessing the |
dkato | 0:853f5b7408a7 | 19 | * following link: |
dkato | 0:853f5b7408a7 | 20 | * http://www.renesas.com/disclaimer |
dkato | 0:853f5b7408a7 | 21 | * Copyright (C) 2012 - 2015 Renesas Electronics Corporation. All rights reserved. |
dkato | 0:853f5b7408a7 | 22 | *******************************************************************************/ |
dkato | 0:853f5b7408a7 | 23 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 24 | * @file r_vdc5_register.c |
dkato | 0:853f5b7408a7 | 25 | * @version 1.00 |
dkato | 0:853f5b7408a7 | 26 | * $Rev: 199 $ |
dkato | 0:853f5b7408a7 | 27 | * $Date:: 2014-05-23 16:33:52 +0900#$ |
dkato | 0:853f5b7408a7 | 28 | * @brief VDC5 driver register setup processing |
dkato | 0:853f5b7408a7 | 29 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 30 | |
dkato | 0:853f5b7408a7 | 31 | /****************************************************************************** |
dkato | 0:853f5b7408a7 | 32 | Includes <System Includes> , "Project Includes" |
dkato | 0:853f5b7408a7 | 33 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 34 | #include "r_vdc5.h" |
dkato | 0:853f5b7408a7 | 35 | #include "r_vdc5_user.h" |
dkato | 0:853f5b7408a7 | 36 | #include "r_vdc5_register.h" |
dkato | 0:853f5b7408a7 | 37 | #include "r_vdc5_shared_param.h" |
dkato | 0:853f5b7408a7 | 38 | |
dkato | 0:853f5b7408a7 | 39 | |
dkato | 0:853f5b7408a7 | 40 | /****************************************************************************** |
dkato | 0:853f5b7408a7 | 41 | Macro definitions |
dkato | 0:853f5b7408a7 | 42 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 43 | #define INITIAL_SCALING_PHASE ((uint32_t)2048u) |
dkato | 0:853f5b7408a7 | 44 | #define SCALING_RATIO_SAME_SIZE (4096u) |
dkato | 0:853f5b7408a7 | 45 | /* Vsync signal delay control for OIR */ |
dkato | 0:853f5b7408a7 | 46 | #define OIR_VSYNC_DELAY ((uint32_t)1u) |
dkato | 0:853f5b7408a7 | 47 | |
dkato | 0:853f5b7408a7 | 48 | #define LVDS_LPHYACC_VALUE ((uint32_t)0x0001u) |
dkato | 0:853f5b7408a7 | 49 | |
dkato | 0:853f5b7408a7 | 50 | /* Panel clock frequency division ratio */ |
dkato | 0:853f5b7408a7 | 51 | #define VDC5_REG_CLKDIV_1_1 (1u) |
dkato | 0:853f5b7408a7 | 52 | #define VDC5_REG_CLKDIV_1_2 (2u) |
dkato | 0:853f5b7408a7 | 53 | #define VDC5_REG_CLKDIV_1_3 (3u) |
dkato | 0:853f5b7408a7 | 54 | #define VDC5_REG_CLKDIV_1_4 (4u) |
dkato | 0:853f5b7408a7 | 55 | #define VDC5_REG_CLKDIV_1_5 (5u) |
dkato | 0:853f5b7408a7 | 56 | #define VDC5_REG_CLKDIV_1_6 (6u) |
dkato | 0:853f5b7408a7 | 57 | #define VDC5_REG_CLKDIV_1_7 (7u) |
dkato | 0:853f5b7408a7 | 58 | #define VDC5_REG_CLKDIV_1_8 (8u) |
dkato | 0:853f5b7408a7 | 59 | #define VDC5_REG_CLKDIV_1_9 (9u) |
dkato | 0:853f5b7408a7 | 60 | #define VDC5_REG_CLKDIV_1_12 (12u) |
dkato | 0:853f5b7408a7 | 61 | #define VDC5_REG_CLKDIV_1_16 (16u) |
dkato | 0:853f5b7408a7 | 62 | #define VDC5_REG_CLKDIV_1_24 (24u) |
dkato | 0:853f5b7408a7 | 63 | #define VDC5_REG_CLKDIV_1_32 (32u) |
dkato | 0:853f5b7408a7 | 64 | /* Panel clock select */ |
dkato | 0:853f5b7408a7 | 65 | #define VDC5_REG_ICKSEL_IMG (0x0000u) |
dkato | 0:853f5b7408a7 | 66 | #define VDC5_REG_ICKSEL_IMG_DV (0x0000u) |
dkato | 0:853f5b7408a7 | 67 | #define VDC5_REG_ICKSEL_EXT_0 (0x1000u) |
dkato | 0:853f5b7408a7 | 68 | #define VDC5_REG_ICKSEL_EXT_1 (0x2000u) |
dkato | 0:853f5b7408a7 | 69 | #define VDC5_REG_ICKSEL_PERI (0x3000u) |
dkato | 0:853f5b7408a7 | 70 | #define VDC5_REG_ICKSEL_LVDS (0x0400u) |
dkato | 0:853f5b7408a7 | 71 | #define VDC5_REG_ICKSEL_LVDS_DIV7 (0x0800u) |
dkato | 0:853f5b7408a7 | 72 | /* Output pin edge select */ |
dkato | 0:853f5b7408a7 | 73 | #define VDC5_REG_TCON0_EDGE (0x0040u) |
dkato | 0:853f5b7408a7 | 74 | #define VDC5_REG_TCON1_EDGE (0x0020u) |
dkato | 0:853f5b7408a7 | 75 | #define VDC5_REG_TCON2_EDGE (0x0010u) |
dkato | 0:853f5b7408a7 | 76 | #define VDC5_REG_TCON3_EDGE (0x0008u) |
dkato | 0:853f5b7408a7 | 77 | #define VDC5_REG_TCON4_EDGE (0x0004u) |
dkato | 0:853f5b7408a7 | 78 | #define VDC5_REG_TCON5_EDGE (0x0002u) |
dkato | 0:853f5b7408a7 | 79 | #define VDC5_REG_TCON6_EDGE (0x0001u) |
dkato | 0:853f5b7408a7 | 80 | /* Panel dither output format select */ |
dkato | 0:853f5b7408a7 | 81 | #define VDC5_REG_PATH_FORMAT_RGB888 (0x00000000u) |
dkato | 0:853f5b7408a7 | 82 | #define VDC5_REG_PATH_FORMAT_RGB666 (0x00010000u) |
dkato | 0:853f5b7408a7 | 83 | #define VDC5_REG_PATH_FORMAT_RGB565 (0x00020000u) |
dkato | 0:853f5b7408a7 | 84 | #define VDC5_REG_PATH_FORMAT_NON (0x00000000u) |
dkato | 0:853f5b7408a7 | 85 | /* Calculate scaling ratio use value */ |
dkato | 0:853f5b7408a7 | 86 | #define VDC5_REG_FLOAT_1_0 (1.0f) |
dkato | 0:853f5b7408a7 | 87 | #define VDC5_REG_FLOAT_0_5 (0.5f) |
dkato | 0:853f5b7408a7 | 88 | /* bits per pixel */ |
dkato | 0:853f5b7408a7 | 89 | #define VDC5_REG_BIT_PER_PIXEL_RGB565 (16u) |
dkato | 0:853f5b7408a7 | 90 | #define VDC5_REG_BIT_PER_PIXEL_RGB888 (32u) |
dkato | 0:853f5b7408a7 | 91 | #define VDC5_REG_BIT_PER_PIXEL_ARGB1555 (16u) |
dkato | 0:853f5b7408a7 | 92 | #define VDC5_REG_BIT_PER_PIXEL_ARGB4444 (16u) |
dkato | 0:853f5b7408a7 | 93 | #define VDC5_REG_BIT_PER_PIXEL_ARGB8888 (32u) |
dkato | 0:853f5b7408a7 | 94 | #define VDC5_REG_BIT_PER_PIXEL_CLUT8 (8u) |
dkato | 0:853f5b7408a7 | 95 | #define VDC5_REG_BIT_PER_PIXEL_CLUT4 (4u) |
dkato | 0:853f5b7408a7 | 96 | #define VDC5_REG_BIT_PER_PIXEL_CLUT1 (1u) |
dkato | 0:853f5b7408a7 | 97 | #define VDC5_REG_BIT_PER_PIXEL_YCBCR422 (32u) |
dkato | 0:853f5b7408a7 | 98 | #define VDC5_REG_BIT_PER_PIXEL_YCBCR444 (32u) |
dkato | 0:853f5b7408a7 | 99 | #define VDC5_REG_BIT_PER_PIXEL_RGBA5551 (16u) |
dkato | 0:853f5b7408a7 | 100 | #define VDC5_REG_BIT_PER_PIXEL_RGBA8888 (32u) |
dkato | 0:853f5b7408a7 | 101 | #define VDC5_REG_BIT_PER_PIXEL_VALUE_8 (8u) |
dkato | 0:853f5b7408a7 | 102 | /* Convert the color data from 4 bits value into 8 bits value */ |
dkato | 0:853f5b7408a7 | 103 | #define VDC5_REG_EXTENSION_VALUE_17 (17u) |
dkato | 0:853f5b7408a7 | 104 | /* Convert the color data from 5 bits value into 8 bits value */ |
dkato | 0:853f5b7408a7 | 105 | #define VDC5_REG_EXTENSION_VALUE_263 (263u) |
dkato | 0:853f5b7408a7 | 106 | #define VDC5_REG_EXTENSION_VALUE_32 (32u) |
dkato | 0:853f5b7408a7 | 107 | /* Convert the color data from 6 bits value into 8 bits value */ |
dkato | 0:853f5b7408a7 | 108 | #define VDC5_REG_EXTENSION_VALUE_259 (259u) |
dkato | 0:853f5b7408a7 | 109 | #define VDC5_REG_EXTENSION_VALUE_64 (64u) |
dkato | 0:853f5b7408a7 | 110 | /* Round off */ |
dkato | 0:853f5b7408a7 | 111 | #define VDC5_REG_ROUND_OFF_VALUE_1 (1u) |
dkato | 0:853f5b7408a7 | 112 | #define VDC5_REG_ROUND_OFF_VALUE_2 (2u) |
dkato | 0:853f5b7408a7 | 113 | /* Color mask data */ |
dkato | 0:853f5b7408a7 | 114 | #define VDC5_REG_ALPHA_8BIT (0xFF000000u) |
dkato | 0:853f5b7408a7 | 115 | #define VDC5_REG_RGB_24BIT_MASK (0x00FFFFFFu) |
dkato | 0:853f5b7408a7 | 116 | #define VDC5_REG_COLOR_8BIT_MASK (0x000000FFu) |
dkato | 0:853f5b7408a7 | 117 | #define VDC5_REG_COLOR_6BIT_MASK (0x0000003Fu) |
dkato | 0:853f5b7408a7 | 118 | #define VDC5_REG_COLOR_5BIT_MASK (0x0000001Fu) |
dkato | 0:853f5b7408a7 | 119 | #define VDC5_REG_COLOR_4BIT_MASK (0x0000000Fu) |
dkato | 0:853f5b7408a7 | 120 | #define VDC5_REG_ARGB8888_GB_MASK (0x00FFFF00u) |
dkato | 0:853f5b7408a7 | 121 | |
dkato | 0:853f5b7408a7 | 122 | /* RGB565 bits mask data */ |
dkato | 0:853f5b7408a7 | 123 | #define VDC5_REG_RGB565_R_MASK (0x0000F800u) |
dkato | 0:853f5b7408a7 | 124 | #define VDC5_REG_RGB565_G_MASK (0x000007E0u) |
dkato | 0:853f5b7408a7 | 125 | #define VDC5_REG_RGB565_B_MASK (0x0000001Fu) |
dkato | 0:853f5b7408a7 | 126 | /* ARGB4444 bits mask data */ |
dkato | 0:853f5b7408a7 | 127 | #define VDC5_REG_ARGB4444_R_MASK (0x00000F00u) |
dkato | 0:853f5b7408a7 | 128 | #define VDC5_REG_ARGB4444_G_MASK (0x000000F0u) |
dkato | 0:853f5b7408a7 | 129 | #define VDC5_REG_ARGB4444_B_MASK (0x0000000Fu) |
dkato | 0:853f5b7408a7 | 130 | /* ARGB1555 bits mask data */ |
dkato | 0:853f5b7408a7 | 131 | #define VDC5_REG_ARGB1555_R_MASK (0x00007C00u) |
dkato | 0:853f5b7408a7 | 132 | #define VDC5_REG_ARGB1555_G_MASK (0x000003E0u) |
dkato | 0:853f5b7408a7 | 133 | #define VDC5_REG_ARGB1555_B_MASK (0x0000001Fu) |
dkato | 0:853f5b7408a7 | 134 | /* RGBA5551 bits mask data */ |
dkato | 0:853f5b7408a7 | 135 | #define VDC5_REG_RGBA5551_R_MASK (0x0000F800u) |
dkato | 0:853f5b7408a7 | 136 | #define VDC5_REG_RGBA5551_G_MASK (0x000007C0u) |
dkato | 0:853f5b7408a7 | 137 | #define VDC5_REG_RGBA5551_B_MASK (0x0000003Eu) |
dkato | 0:853f5b7408a7 | 138 | |
dkato | 0:853f5b7408a7 | 139 | /* bit pattern */ |
dkato | 0:853f5b7408a7 | 140 | #define VDC5_REG_BIT31 (0x80000000u) |
dkato | 0:853f5b7408a7 | 141 | #define VDC5_REG_BIT29 (0x20000000u) |
dkato | 0:853f5b7408a7 | 142 | #define VDC5_REG_BIT28 (0x10000000u) |
dkato | 0:853f5b7408a7 | 143 | #define VDC5_REG_BIT24 (0x01000000u) |
dkato | 0:853f5b7408a7 | 144 | #define VDC5_REG_BIT20 (0x00100000u) |
dkato | 0:853f5b7408a7 | 145 | #define VDC5_REG_BIT16 (0x00010000u) |
dkato | 0:853f5b7408a7 | 146 | #define VDC5_REG_BIT15 (0x00008000u) |
dkato | 0:853f5b7408a7 | 147 | #define VDC5_REG_BIT14 (0x00004000u) |
dkato | 0:853f5b7408a7 | 148 | #define VDC5_REG_BIT13 (0x00002000u) |
dkato | 0:853f5b7408a7 | 149 | #define VDC5_REG_BIT12 (0x00001000u) |
dkato | 0:853f5b7408a7 | 150 | #define VDC5_REG_BIT8 (0x00000100u) |
dkato | 0:853f5b7408a7 | 151 | #define VDC5_REG_BIT4 (0x00000010u) |
dkato | 0:853f5b7408a7 | 152 | #define VDC5_REG_BIT2 (0x00000004u) |
dkato | 0:853f5b7408a7 | 153 | #define VDC5_REG_BIT1 (0x00000002u) |
dkato | 0:853f5b7408a7 | 154 | #define VDC5_REG_BIT0 (0x00000001u) |
dkato | 0:853f5b7408a7 | 155 | |
dkato | 0:853f5b7408a7 | 156 | /* shift value */ |
dkato | 0:853f5b7408a7 | 157 | #define VDC5_REG_SHIFT_28 (28u) |
dkato | 0:853f5b7408a7 | 158 | #define VDC5_REG_SHIFT_24 (24u) |
dkato | 0:853f5b7408a7 | 159 | #define VDC5_REG_SHIFT_20 (20u) |
dkato | 0:853f5b7408a7 | 160 | #define VDC5_REG_SHIFT_16 (16u) |
dkato | 0:853f5b7408a7 | 161 | #define VDC5_REG_SHIFT_13 (13u) |
dkato | 0:853f5b7408a7 | 162 | #define VDC5_REG_SHIFT_12 (12u) |
dkato | 0:853f5b7408a7 | 163 | #define VDC5_REG_SHIFT_11 (11u) |
dkato | 0:853f5b7408a7 | 164 | #define VDC5_REG_SHIFT_10 (10u) |
dkato | 0:853f5b7408a7 | 165 | #define VDC5_REG_SHIFT_8 (8u) |
dkato | 0:853f5b7408a7 | 166 | #define VDC5_REG_SHIFT_6 (6u) |
dkato | 0:853f5b7408a7 | 167 | #define VDC5_REG_SHIFT_5 (5u) |
dkato | 0:853f5b7408a7 | 168 | #define VDC5_REG_SHIFT_4 (4u) |
dkato | 0:853f5b7408a7 | 169 | #define VDC5_REG_SHIFT_2 (2u) |
dkato | 0:853f5b7408a7 | 170 | #define VDC5_REG_SHIFT_1 (1u) |
dkato | 0:853f5b7408a7 | 171 | |
dkato | 0:853f5b7408a7 | 172 | /* register set value */ |
dkato | 0:853f5b7408a7 | 173 | #define VDC5_REG_BIT_0XFFFF0000 (0xFFFF0000u) /* scaler_0->scl0_frc2 */ |
dkato | 0:853f5b7408a7 | 174 | /* scaler_1->scl0_frc2 */ |
dkato | 0:853f5b7408a7 | 175 | /* register mask value */ |
dkato | 0:853f5b7408a7 | 176 | #define VDC5_REG_MASK_0XF7FF1C3F (0xF7FF1C3Fu) /* mask img_synthesizer->gr_flm6 */ |
dkato | 0:853f5b7408a7 | 177 | #define VDC5_REG_MASK_0X0000D000 (0x0000D000u) /* mask img_synthesizer->gr_ab1 */ |
dkato | 0:853f5b7408a7 | 178 | #define VDC5_REG_MASK_0X01FF00FF (0x01FF00FFu) /* mask img_synthesizer->gr_ab6 */ |
dkato | 0:853f5b7408a7 | 179 | #define VDC5_REG_MASK_0X0000007F (0x0000007Fu) /* mask output_ctrl->out_clk_phase */ |
dkato | 0:853f5b7408a7 | 180 | #define VDC5_REG_MASK_0X11003313 (0x11003313u) /* mask output_ctrl->out_set */ |
dkato | 0:853f5b7408a7 | 181 | #define VDC5_REG_MASK_0X00030000 (0x00030000u) /* mask output_ctrl->out_pdtha */ |
dkato | 0:853f5b7408a7 | 182 | #define VDC5_REG_MASK_0X0007000D (0x0007000Du) /* mask scaler->scl1_wr1 */ |
dkato | 0:853f5b7408a7 | 183 | #define VDC5_REG_MASK_0X00000300 (0x00000300u) /* mask scaler->scl1_wr5 */ |
dkato | 0:853f5b7408a7 | 184 | #define VDC5_REG_MASK_0X0703FF02 (0x0703FF02u) /* mask regaddr_lvds->lclkselr */ |
dkato | 0:853f5b7408a7 | 185 | #define VDC5_REG_MASK_0X07FF1F30 (0x07FF1F30u) /* mask regaddr_lvds->lpllsetr */ |
dkato | 0:853f5b7408a7 | 186 | #define VDC5_REG_MASK_0X00010301 (0x00010301u) /* mask img_synthesizer->gr_flm1 */ |
dkato | 0:853f5b7408a7 | 187 | #define VDC5_REG_MASK_0X7FFF03FF (0x7FFF03FFu) /* mask img_synthesizer->gr_flm3 */ |
dkato | 0:853f5b7408a7 | 188 | #define VDC5_REG_MASK_0X0000E000 (0x0000E000u) /* mask img_synthesizer->gr_flm6 */ |
dkato | 0:853f5b7408a7 | 189 | #define VDC5_REG_MASK_0X00007F33 (0x00007F33u) /* mask input_ctrl->imgcnt_nr_cnt0 */ |
dkato | 0:853f5b7408a7 | 190 | #define VDC5_REG_MASK_0X00FF0000 (0x00FF0000u) /* mask img_synthesizer->gr_ab7 */ |
dkato | 0:853f5b7408a7 | 191 | #define VDC5_REG_MASK_0X00300000 (0x00300000u) /* mask output_ctrl->out_pdtha */ |
dkato | 0:853f5b7408a7 | 192 | #define VDC5_REG_MASK_0X00003333 (0x00003333u) /* mask output_ctrl->out_pdtha */ |
dkato | 0:853f5b7408a7 | 193 | #define VDC5_REG_MASK_0X00007111 (0x00007111u) /* mask input_ctrl->inp_sel_cnt */ |
dkato | 0:853f5b7408a7 | 194 | #define VDC5_REG_MASK_0X11110113 (0x11110113u) /* mask input_ctrl->inp_ext_sync_cnt */ |
dkato | 0:853f5b7408a7 | 195 | #define VDC5_REG_MASK_0X000007FF (0x000007FFu) /* mask img_synthesizer->gr_flm5 */ |
dkato | 0:853f5b7408a7 | 196 | #define VDC5_REG_MASK_0X0000FFFF (0x0000FFFFu) /* mask scaler->scl0_ds4 */ |
dkato | 0:853f5b7408a7 | 197 | /* caler->scl0_us5 */ |
dkato | 0:853f5b7408a7 | 198 | #define VDC5_REG_MASK_0X00000011 (0x00000011u) /* mask scaler->scl0_ds1 */ |
dkato | 0:853f5b7408a7 | 199 | /* scaler->scl0_us1 */ |
dkato | 0:853f5b7408a7 | 200 | #define VDC5_REG_MASK_0X00000070 (0x00000070u) /* mask scaler->scl1_wr1 */ |
dkato | 0:853f5b7408a7 | 201 | #define VDC5_REG_MASK_0X00000080 (0x00000080u) /* mask scaler->scl1_wr1 */ |
dkato | 0:853f5b7408a7 | 202 | #define VDC5_REG_MASK_0X00003110 (0x00003110u) /* mask output_ctrl->tcon_tim_pola2 */ |
dkato | 0:853f5b7408a7 | 203 | /* output_ctrl->tcon_tim_polb2 */ |
dkato | 0:853f5b7408a7 | 204 | #define VDC5_REG_MASK_0X000000FF (0x000000FFu) /* mask scaler_0->scl0_frc5 */ |
dkato | 0:853f5b7408a7 | 205 | /* scaler_1->scl0_frc5 */ |
dkato | 0:853f5b7408a7 | 206 | #define VDC5_REG_MASK_0X0000003F (0x0000003Fu) /* mask img_synthesizer->gr_flm6 */ |
dkato | 0:853f5b7408a7 | 207 | /* img_qlty_imp->adj_enh_shp1 */ |
dkato | 0:853f5b7408a7 | 208 | #define VDC5_REG_MASK_0XFF000000 (0xFF000000u) /* mask img_synthesizer->gr_ab10 */ |
dkato | 0:853f5b7408a7 | 209 | /* img_synthesizer->gr_ab11 */ |
dkato | 0:853f5b7408a7 | 210 | #define VDC5_REG_MASK_0X00000110 (0x00000110u) /* mask output_ctrl->tcon_tim_sth2 */ |
dkato | 0:853f5b7408a7 | 211 | /* output_ctrl->tcon_tim_stb2 */ |
dkato | 0:853f5b7408a7 | 212 | /* output_ctrl->tcon_tim_cpv2 */ |
dkato | 0:853f5b7408a7 | 213 | #define VDC5_REG_MASK_0X00000007 (0x00000007u) /* mask *(output_pin_regaddr[tcon_pin]) */ |
dkato | 0:853f5b7408a7 | 214 | /* img_synthesizer->gr_flm2 */ |
dkato | 0:853f5b7408a7 | 215 | /* img_synthesizer->gr_flm2 */ |
dkato | 0:853f5b7408a7 | 216 | #define VDC5_REG_MASK_0X07FF0000 (0x07FF0000u) /* mask scaler_0->scl0_frc4 */ |
dkato | 0:853f5b7408a7 | 217 | /* scaler_1->scl0_frc4 */ |
dkato | 0:853f5b7408a7 | 218 | /* img_synthesizer->gr_flm5 */ |
dkato | 0:853f5b7408a7 | 219 | /* img_synthesizer->gr_flm6 */ |
dkato | 0:853f5b7408a7 | 220 | #define VDC5_REG_MASK_0X0FFF0FFF (0x0FFF0FFFu) /* mask */ |
dkato | 0:853f5b7408a7 | 221 | /* scaler->scl0_ds5, scaler->scl0_us6 */ |
dkato | 0:853f5b7408a7 | 222 | /* scaler->scl0_ds5, scaler->scl0_us6 */ |
dkato | 0:853f5b7408a7 | 223 | /* scaler->scl0_ds5, scaler->scl0_us6 */ |
dkato | 0:853f5b7408a7 | 224 | /* scaler->scl0_ds5, scaler->scl0_us6 */ |
dkato | 0:853f5b7408a7 | 225 | /* scaler->scl0_ds5, scaler->scl0_us6 */ |
dkato | 0:853f5b7408a7 | 226 | #define VDC5_REG_MASK_0X00000003 (0x00000003u) /* mask img_synthesizer->gr_ab1 */ |
dkato | 0:853f5b7408a7 | 227 | /* regaddr_lvds->lphyacc */ |
dkato | 0:853f5b7408a7 | 228 | |
dkato | 0:853f5b7408a7 | 229 | |
dkato | 0:853f5b7408a7 | 230 | /****************************************************************************** |
dkato | 0:853f5b7408a7 | 231 | Typedef definitions |
dkato | 0:853f5b7408a7 | 232 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 233 | |
dkato | 0:853f5b7408a7 | 234 | /****************************************************************************** |
dkato | 0:853f5b7408a7 | 235 | Private global variables and functions |
dkato | 0:853f5b7408a7 | 236 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 237 | static void SetVideoExternalInput( |
dkato | 0:853f5b7408a7 | 238 | const vdc5_ext_in_sig_t * const ext_sig_tmp, |
dkato | 0:853f5b7408a7 | 239 | const vdc5_regaddr_input_ctrl_t * const input_ctrl); |
dkato | 0:853f5b7408a7 | 240 | static void SetInitialConnection(const vdc5_channel_t ch); |
dkato | 0:853f5b7408a7 | 241 | static void SetGrapicsBackgroundColor(const vdc5_channel_t ch); |
dkato | 0:853f5b7408a7 | 242 | static void SetScalerBackgroundColor( |
dkato | 0:853f5b7408a7 | 243 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 244 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 245 | const vdc5_color_space_t color_space); |
dkato | 0:853f5b7408a7 | 246 | static void SetLcdTcon_STVA_VS( |
dkato | 0:853f5b7408a7 | 247 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 248 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 249 | static void SetLcdTcon_STVB_VE( |
dkato | 0:853f5b7408a7 | 250 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 251 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 252 | static void SetLcdTcon_STH_HS( |
dkato | 0:853f5b7408a7 | 253 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 254 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 255 | static void SetLcdTcon_STB_HE( |
dkato | 0:853f5b7408a7 | 256 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 257 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 258 | static void SetLcdTcon_CPV_GCK( |
dkato | 0:853f5b7408a7 | 259 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 260 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 261 | static void SetLcdTcon_POLA( |
dkato | 0:853f5b7408a7 | 262 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 263 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 264 | static void SetLcdTcon_POLB( |
dkato | 0:853f5b7408a7 | 265 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 266 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 267 | static void SetLcdTcon_DE( |
dkato | 0:853f5b7408a7 | 268 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 269 | const vdc5_regaddr_output_ctrl_t * const output_ctrl); |
dkato | 0:853f5b7408a7 | 270 | static void SetScalingDown( |
dkato | 0:853f5b7408a7 | 271 | const vdc5_scalingdown_rot_t * const scldw_rot, |
dkato | 0:853f5b7408a7 | 272 | const vdc5_res_inter_t res_inter, |
dkato | 0:853f5b7408a7 | 273 | const vdc5_regaddr_scaler_t * const scaler); |
dkato | 0:853f5b7408a7 | 274 | static void SetScalingUp( |
dkato | 0:853f5b7408a7 | 275 | const vdc5_width_read_fb_t * const w_read_fb, |
dkato | 0:853f5b7408a7 | 276 | const vdc5_period_rect_t * const gr_grc, |
dkato | 0:853f5b7408a7 | 277 | const vdc5_onoff_t adj_sel, |
dkato | 0:853f5b7408a7 | 278 | const vdc5_onoff_t ip_conversion, |
dkato | 0:853f5b7408a7 | 279 | const vdc5_wr_md_t res_ds_wr_md, |
dkato | 0:853f5b7408a7 | 280 | const vdc5_gr_ln_off_dir_t ln_off_dir, |
dkato | 0:853f5b7408a7 | 281 | const vdc5_regaddr_scaler_t * const scaler); |
dkato | 0:853f5b7408a7 | 282 | static uint32_t CalcScalingRatio( |
dkato | 0:853f5b7408a7 | 283 | const uint32_t before_scl, |
dkato | 0:853f5b7408a7 | 284 | const uint32_t after_scl, |
dkato | 0:853f5b7408a7 | 285 | const vdc5_onoff_t adj_sel, |
dkato | 0:853f5b7408a7 | 286 | const vdc5_onoff_t round_up); |
dkato | 0:853f5b7408a7 | 287 | static void SetInputCntrlColorMtx(const vdc5_channel_t ch, const vdc5_scaling_type_t scaling_id); |
dkato | 0:853f5b7408a7 | 288 | static vdc5_onoff_t ConfirmGraphicsEnlargement( |
dkato | 0:853f5b7408a7 | 289 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 290 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 291 | const vdc5_width_read_fb_t * const w_read_fb, |
dkato | 0:853f5b7408a7 | 292 | const vdc5_period_rect_t * const gr_grc); |
dkato | 0:853f5b7408a7 | 293 | static void SetScalerGraphics( |
dkato | 0:853f5b7408a7 | 294 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 295 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 296 | const vdc5_width_read_fb_t * const w_read_fb, |
dkato | 0:853f5b7408a7 | 297 | const vdc5_period_rect_t * const gr_grc, |
dkato | 0:853f5b7408a7 | 298 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 299 | const vdc5_onoff_t gr_enlarge); |
dkato | 0:853f5b7408a7 | 300 | static uint32_t DisplayStartPixelSetting(const uint32_t gr_base, const vdc5_gr_format_t gr_format); |
dkato | 0:853f5b7408a7 | 301 | static vdc5_onoff_t SetCascade( |
dkato | 0:853f5b7408a7 | 302 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 303 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 304 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 305 | const vdc5_onoff_t gr_enlarge); |
dkato | 0:853f5b7408a7 | 306 | static void SetupGraphicsVIN( |
dkato | 0:853f5b7408a7 | 307 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 308 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 309 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 310 | const vdc5_onoff_t gr_enlarge); |
dkato | 0:853f5b7408a7 | 311 | static void ChangeGraphicsVIN( |
dkato | 0:853f5b7408a7 | 312 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 313 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 314 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 315 | const vdc5_onoff_t gr_enlarge); |
dkato | 0:853f5b7408a7 | 316 | static void SetImgQaImproverColorMtx( |
dkato | 0:853f5b7408a7 | 317 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 318 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 319 | const vdc5_color_space_t color_space); |
dkato | 0:853f5b7408a7 | 320 | |
dkato | 0:853f5b7408a7 | 321 | static void SetRwProcAbility_Write_0(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 322 | static void SetRwProcAbility_Write_1(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 323 | static void SetRwProcAbility_Write_OIR(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 324 | static void SetRwProcAbility_Read_0(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 325 | static void SetRwProcAbility_Read_1(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 326 | static void SetRwProcAbility_Read_2(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 327 | static void SetRwProcAbility_Read_3(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 328 | static void SetRwProcAbility_Read_OIR(const vdc5_channel_t ch, const vdc5_onoff_t ability); |
dkato | 0:853f5b7408a7 | 329 | static void SetRegUpdateRwEnable(const vdc5_channel_t ch, const vdc5_layer_id_t layer_id); |
dkato | 0:853f5b7408a7 | 330 | |
dkato | 0:853f5b7408a7 | 331 | static void SetGraphicsDisplayMode( |
dkato | 0:853f5b7408a7 | 332 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 333 | const vdc5_layer_id_t layer_id, |
dkato | 0:853f5b7408a7 | 334 | const vdc5_gr_disp_sel_t * const gr_disp_sel); |
dkato | 0:853f5b7408a7 | 335 | static void SetColorMatrix( |
dkato | 0:853f5b7408a7 | 336 | const vdc5_colormtx_mode_t mtx_mode, |
dkato | 0:853f5b7408a7 | 337 | const uint16_t * const offset, |
dkato | 0:853f5b7408a7 | 338 | const uint16_t * const gain, |
dkato | 0:853f5b7408a7 | 339 | const vdc5_regaddr_color_matrix_t * const color_matrix); |
dkato | 0:853f5b7408a7 | 340 | static void SetImageEnhancementSharpness( |
dkato | 0:853f5b7408a7 | 341 | const vdc5_onoff_t shp_h_on, |
dkato | 0:853f5b7408a7 | 342 | const vdc5_enhance_sharp_t * const sharp_param, |
dkato | 0:853f5b7408a7 | 343 | const vdc5_regaddr_img_qlty_imp_t * const img_qlty_imp); |
dkato | 0:853f5b7408a7 | 344 | static void SetImageEnhancementLti( |
dkato | 0:853f5b7408a7 | 345 | const vdc5_onoff_t lti_h_on, |
dkato | 0:853f5b7408a7 | 346 | const vdc5_enhance_lti_t * const lti_param, |
dkato | 0:853f5b7408a7 | 347 | const vdc5_regaddr_img_qlty_imp_t * const img_qlty_imp); |
dkato | 0:853f5b7408a7 | 348 | static void SetAlphaRectArea( |
dkato | 0:853f5b7408a7 | 349 | const vdc5_pd_disp_rect_t * const pd_disp_rect, |
dkato | 0:853f5b7408a7 | 350 | const vdc5_regaddr_img_synthesizer_t * const img_synthesizer); |
dkato | 0:853f5b7408a7 | 351 | static void SetUndSel(const vdc5_channel_t ch, const vdc5_onoff_t und_sel); |
dkato | 0:853f5b7408a7 | 352 | static uint32_t ColorConversion(const vdc5_gr_format_t gr_format, const uint32_t input_color); |
dkato | 0:853f5b7408a7 | 353 | static uint32_t ColorConversionFrom4to8(const uint32_t color_value); |
dkato | 0:853f5b7408a7 | 354 | static uint32_t ColorConversionFrom5to8(const uint32_t color_value); |
dkato | 0:853f5b7408a7 | 355 | static uint32_t ColorConversionFrom6to8(const uint32_t color_value); |
dkato | 0:853f5b7408a7 | 356 | static uint32_t ColorConversionIntoAgbr(const uint32_t color_value); |
dkato | 0:853f5b7408a7 | 357 | static void Set_Clut(const vdc5_clut_t * const param, volatile uint32_t * regaddr_clut); |
dkato | 0:853f5b7408a7 | 358 | static void Set_StartThreshold_Gamma(const uint8_t * gam_th, volatile uint32_t * const * const gam_area); |
dkato | 0:853f5b7408a7 | 359 | static void Set_GainAdjustment_Gamma(const uint16_t * gam_gain, volatile uint32_t * const * const gam_lut); |
dkato | 0:853f5b7408a7 | 360 | static void Wait_200_usec(void); |
dkato | 0:853f5b7408a7 | 361 | |
dkato | 0:853f5b7408a7 | 362 | /*! Color matrix offset (DC) adjustment (YG, B, and R) */ |
dkato | 0:853f5b7408a7 | 363 | static const uint16_t colormtx_offset_adj[VDC5_COLORMTX_OFFST_NUM] = { |
dkato | 0:853f5b7408a7 | 364 | (uint16_t)VDC5_COLORCONV_DC_OFFSET, (uint16_t)VDC5_COLORCONV_DC_OFFSET, (uint16_t)VDC5_COLORCONV_DC_OFFSET |
dkato | 0:853f5b7408a7 | 365 | }; |
dkato | 0:853f5b7408a7 | 366 | /*! Color matrix signal gain adjustment (GG, GB, GR, BG, BB, BR, RG, RB, and RR) */ |
dkato | 0:853f5b7408a7 | 367 | static const uint16_t colormtx_gain_adj[VDC5_COLORMTX_MODE_NUM][VDC5_COLORMTX_GAIN_NUM] = { |
dkato | 0:853f5b7408a7 | 368 | { /* GBR to GBR */ |
dkato | 0:853f5b7408a7 | 369 | (uint16_t)VDC5_COLORCONV_1TIMES_GAIN, 0, 0, |
dkato | 0:853f5b7408a7 | 370 | 0, (uint16_t)VDC5_COLORCONV_1TIMES_GAIN, 0, |
dkato | 0:853f5b7408a7 | 371 | 0, 0, (uint16_t)VDC5_COLORCONV_1TIMES_GAIN |
dkato | 0:853f5b7408a7 | 372 | }, |
dkato | 0:853f5b7408a7 | 373 | { /* GBR to YCbCr */ |
dkato | 0:853f5b7408a7 | 374 | (uint16_t)VDC5_COLORCONV_Y_G, (uint16_t)VDC5_COLORCONV_Y_B, (uint16_t)VDC5_COLORCONV_Y_R, |
dkato | 0:853f5b7408a7 | 375 | (uint16_t)VDC5_COLORCONV_CB_G, (uint16_t)VDC5_COLORCONV_CB_B, (uint16_t)VDC5_COLORCONV_CB_R, |
dkato | 0:853f5b7408a7 | 376 | (uint16_t)VDC5_COLORCONV_CR_G, (uint16_t)VDC5_COLORCONV_CR_B, (uint16_t)VDC5_COLORCONV_CR_R |
dkato | 0:853f5b7408a7 | 377 | }, |
dkato | 0:853f5b7408a7 | 378 | { /* YCbCr to GBR */ |
dkato | 0:853f5b7408a7 | 379 | (uint16_t)VDC5_COLORCONV_G_Y, (uint16_t)VDC5_COLORCONV_G_CB, (uint16_t)VDC5_COLORCONV_G_CR, |
dkato | 0:853f5b7408a7 | 380 | (uint16_t)VDC5_COLORCONV_B_Y, (uint16_t)VDC5_COLORCONV_B_CB, (uint16_t)VDC5_COLORCONV_B_CR, |
dkato | 0:853f5b7408a7 | 381 | (uint16_t)VDC5_COLORCONV_R_Y, (uint16_t)VDC5_COLORCONV_R_CB, (uint16_t)VDC5_COLORCONV_R_CR |
dkato | 0:853f5b7408a7 | 382 | }, |
dkato | 0:853f5b7408a7 | 383 | { /* YCbCr to YCbCr */ |
dkato | 0:853f5b7408a7 | 384 | (uint16_t)VDC5_COLORCONV_1TIMES_GAIN, 0, 0, |
dkato | 0:853f5b7408a7 | 385 | 0, (uint16_t)VDC5_COLORCONV_1TIMES_GAIN, 0, |
dkato | 0:853f5b7408a7 | 386 | 0, 0, (uint16_t)VDC5_COLORCONV_1TIMES_GAIN |
dkato | 0:853f5b7408a7 | 387 | } |
dkato | 0:853f5b7408a7 | 388 | }; |
dkato | 0:853f5b7408a7 | 389 | |
dkato | 0:853f5b7408a7 | 390 | static void (* const rw_proc_function_tbl[VDC5_LAYER_ID_NUM])(const vdc5_channel_t ch, const vdc5_onoff_t ability) = { |
dkato | 0:853f5b7408a7 | 391 | &SetRwProcAbility_Write_0, /* Write scaler 0 */ |
dkato | 0:853f5b7408a7 | 392 | &SetRwProcAbility_Write_1, /* Write scaler 1 */ |
dkato | 0:853f5b7408a7 | 393 | &SetRwProcAbility_Write_OIR, /* Write OIR */ |
dkato | 0:853f5b7408a7 | 394 | &SetRwProcAbility_Read_0, /* Read graphics 0 */ |
dkato | 0:853f5b7408a7 | 395 | &SetRwProcAbility_Read_1, /* Read graphics 1 */ |
dkato | 0:853f5b7408a7 | 396 | &SetRwProcAbility_Read_2, /* Read graphics 2 */ |
dkato | 0:853f5b7408a7 | 397 | &SetRwProcAbility_Read_3, /* Read graphics 3 */ |
dkato | 0:853f5b7408a7 | 398 | 0, /* Read VIN */ |
dkato | 0:853f5b7408a7 | 399 | &SetRwProcAbility_Read_OIR /* Read OIR */ |
dkato | 0:853f5b7408a7 | 400 | }; |
dkato | 0:853f5b7408a7 | 401 | |
dkato | 0:853f5b7408a7 | 402 | |
dkato | 0:853f5b7408a7 | 403 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 404 | * @brief Sets registers for initialization |
dkato | 0:853f5b7408a7 | 405 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 406 | * @param[in] param : Initialization parameter |
dkato | 0:853f5b7408a7 | 407 | * @retval None |
dkato | 0:853f5b7408a7 | 408 | *****************************************************************************/ |
dkato | 0:853f5b7408a7 | 409 | void VDC5_Initialize (const vdc5_channel_t ch, const vdc5_init_t * const param) |
dkato | 0:853f5b7408a7 | 410 | { |
dkato | 0:853f5b7408a7 | 411 | const vdc5_lvds_t * lvds_tmp; |
dkato | 0:853f5b7408a7 | 412 | const vdc5_regaddr_lvds_t * regaddr_lvds; |
dkato | 0:853f5b7408a7 | 413 | volatile uint32_t counter; |
dkato | 0:853f5b7408a7 | 414 | uint16_t syscnt_panel_clk_tmp; |
dkato | 0:853f5b7408a7 | 415 | volatile uint16_t * syscnt_panel_clk_reg; |
dkato | 0:853f5b7408a7 | 416 | volatile uint32_t * inp_sel_cnt_reg; |
dkato | 0:853f5b7408a7 | 417 | static const uint16_t panel_dcdr_tbl[VDC5_PANEL_CLKDIV_NUM] = { |
dkato | 0:853f5b7408a7 | 418 | /* Panel clock frequency division ratio */ |
dkato | 0:853f5b7408a7 | 419 | (uint16_t)VDC5_REG_CLKDIV_1_1, (uint16_t)VDC5_REG_CLKDIV_1_2, (uint16_t)VDC5_REG_CLKDIV_1_3, (uint16_t)VDC5_REG_CLKDIV_1_4, |
dkato | 0:853f5b7408a7 | 420 | (uint16_t)VDC5_REG_CLKDIV_1_5, (uint16_t)VDC5_REG_CLKDIV_1_6, (uint16_t)VDC5_REG_CLKDIV_1_7, (uint16_t)VDC5_REG_CLKDIV_1_8, |
dkato | 0:853f5b7408a7 | 421 | (uint16_t)VDC5_REG_CLKDIV_1_9, (uint16_t)VDC5_REG_CLKDIV_1_12, (uint16_t)VDC5_REG_CLKDIV_1_16, (uint16_t)VDC5_REG_CLKDIV_1_24, |
dkato | 0:853f5b7408a7 | 422 | (uint16_t)VDC5_REG_CLKDIV_1_32 |
dkato | 0:853f5b7408a7 | 423 | }; |
dkato | 0:853f5b7408a7 | 424 | static const uint16_t panel_icksel_tbl[VDC5_PANEL_ICKSEL_NUM] = { |
dkato | 0:853f5b7408a7 | 425 | /* Panel clock select */ |
dkato | 0:853f5b7408a7 | 426 | (uint16_t)VDC5_REG_ICKSEL_IMG, (uint16_t)VDC5_REG_ICKSEL_IMG_DV, (uint16_t)VDC5_REG_ICKSEL_EXT_0, (uint16_t)VDC5_REG_ICKSEL_EXT_1, |
dkato | 0:853f5b7408a7 | 427 | (uint16_t)VDC5_REG_ICKSEL_PERI, (uint16_t)VDC5_REG_ICKSEL_LVDS, (uint16_t)VDC5_REG_ICKSEL_LVDS_DIV7 |
dkato | 0:853f5b7408a7 | 428 | }; |
dkato | 0:853f5b7408a7 | 429 | |
dkato | 0:853f5b7408a7 | 430 | syscnt_panel_clk_reg = vdc5_regaddr_system_ctrl[ch].syscnt_panel_clk; |
dkato | 0:853f5b7408a7 | 431 | /* Disable */ |
dkato | 0:853f5b7408a7 | 432 | syscnt_panel_clk_tmp = (uint16_t)((uint32_t)*syscnt_panel_clk_reg & (~VDC5_REG_BIT8)); |
dkato | 0:853f5b7408a7 | 433 | *syscnt_panel_clk_reg = syscnt_panel_clk_tmp; |
dkato | 0:853f5b7408a7 | 434 | |
dkato | 0:853f5b7408a7 | 435 | /* LVDS */ |
dkato | 0:853f5b7408a7 | 436 | lvds_tmp = param->lvds; |
dkato | 0:853f5b7408a7 | 437 | if (lvds_tmp != NULL) { |
dkato | 0:853f5b7408a7 | 438 | regaddr_lvds = &vdc5_regaddr_lvds; |
dkato | 0:853f5b7408a7 | 439 | |
dkato | 0:853f5b7408a7 | 440 | /* Output from the LVDS PLL is disabled. */ |
dkato | 0:853f5b7408a7 | 441 | *(regaddr_lvds->lclkselr) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 442 | /* Controls power-down for the LVDS PLL: Power-down state */ |
dkato | 0:853f5b7408a7 | 443 | *(regaddr_lvds->lpllsetr) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 444 | for (counter = 0; counter < (uint32_t)VDC5_LVDS_PLL_WAIT_CYCLE; counter++) { |
dkato | 0:853f5b7408a7 | 445 | /* This is a delay (1 usec) while waiting for PLL PD to settle. */ |
dkato | 0:853f5b7408a7 | 446 | } |
dkato | 0:853f5b7408a7 | 447 | |
dkato | 0:853f5b7408a7 | 448 | /* LPHYACC */ |
dkato | 0:853f5b7408a7 | 449 | *(regaddr_lvds->lphyacc) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 450 | *(regaddr_lvds->lphyacc) |= LVDS_LPHYACC_VALUE; |
dkato | 0:853f5b7408a7 | 451 | /* LCLKSELR: LVDS clock select register */ |
dkato | 0:853f5b7408a7 | 452 | *(regaddr_lvds->lclkselr) &= (uint32_t)~VDC5_REG_MASK_0X0703FF02; |
dkato | 0:853f5b7408a7 | 453 | /* The clock input to frequency divider 1 */ |
dkato | 0:853f5b7408a7 | 454 | *(regaddr_lvds->lclkselr) |= (uint32_t)lvds_tmp->lvds_in_clk_sel << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 455 | /* The frequency dividing value (NIDIV) for frequency divider 1 */ |
dkato | 0:853f5b7408a7 | 456 | *(regaddr_lvds->lclkselr) |= (uint32_t)lvds_tmp->lvds_idiv_set << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 457 | /* Internal parameter setting for LVDS PLL */ |
dkato | 0:853f5b7408a7 | 458 | *(regaddr_lvds->lclkselr) |= (uint32_t)lvds_tmp->lvdspll_tst << VDC5_REG_SHIFT_10; |
dkato | 0:853f5b7408a7 | 459 | /* The frequency dividing value (NODIV) for frequency divider 2 */ |
dkato | 0:853f5b7408a7 | 460 | *(regaddr_lvds->lclkselr) |= (uint32_t)lvds_tmp->lvds_odiv_set << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 461 | if (lvds_tmp->lvds_vdc_sel != VDC5_CHANNEL_0) { |
dkato | 0:853f5b7408a7 | 462 | /* A channel in VDC5 whose data is to be output through the LVDS */ |
dkato | 0:853f5b7408a7 | 463 | *(regaddr_lvds->lclkselr) |= (uint32_t)VDC5_REG_BIT1; |
dkato | 0:853f5b7408a7 | 464 | } |
dkato | 0:853f5b7408a7 | 465 | |
dkato | 0:853f5b7408a7 | 466 | /* LPLLSETR: LVDS PLL setting register */ |
dkato | 0:853f5b7408a7 | 467 | *(regaddr_lvds->lpllsetr) &= (uint32_t)~VDC5_REG_MASK_0X07FF1F30; |
dkato | 0:853f5b7408a7 | 468 | /* The frequency dividing value (NFD) for the feedback frequency */ |
dkato | 0:853f5b7408a7 | 469 | *(regaddr_lvds->lpllsetr) |= (uint32_t)lvds_tmp->lvdspll_fd << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 470 | /* The frequency dividing value (NRD) for the input frequency */ |
dkato | 0:853f5b7408a7 | 471 | *(regaddr_lvds->lpllsetr) |= (uint32_t)lvds_tmp->lvdspll_rd << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 472 | /* The frequency dividing value (NOD) for the output frequency */ |
dkato | 0:853f5b7408a7 | 473 | *(regaddr_lvds->lpllsetr) |= (uint32_t)lvds_tmp->lvdspll_od << VDC5_REG_SHIFT_4; |
dkato | 0:853f5b7408a7 | 474 | |
dkato | 0:853f5b7408a7 | 475 | for (counter = 0; counter < (uint32_t)VDC5_LVDS_PLL_WAIT_CYCLE; counter++) { |
dkato | 0:853f5b7408a7 | 476 | /* This is a delay (1 usec) while waiting for PLL PD to settle. */ |
dkato | 0:853f5b7408a7 | 477 | } |
dkato | 0:853f5b7408a7 | 478 | /* Controls power-down for the LVDS PLL: Normal operation */ |
dkato | 0:853f5b7408a7 | 479 | *(regaddr_lvds->lpllsetr) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 480 | |
dkato | 0:853f5b7408a7 | 481 | /* Wait for 200 usec. */ |
dkato | 0:853f5b7408a7 | 482 | Wait_200_usec(); |
dkato | 0:853f5b7408a7 | 483 | |
dkato | 0:853f5b7408a7 | 484 | /* Output from the LVDS PLL is enabled. */ |
dkato | 0:853f5b7408a7 | 485 | *(regaddr_lvds->lclkselr) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 486 | } |
dkato | 0:853f5b7408a7 | 487 | |
dkato | 0:853f5b7408a7 | 488 | inp_sel_cnt_reg = vdc5_regaddr_input_ctrl[ch].inp_sel_cnt; |
dkato | 0:853f5b7408a7 | 489 | /* Input select */ |
dkato | 0:853f5b7408a7 | 490 | if (param->panel_icksel == VDC5_PANEL_ICKSEL_IMG_DV) { |
dkato | 0:853f5b7408a7 | 491 | *inp_sel_cnt_reg |= (uint32_t)VDC5_REG_BIT20; |
dkato | 0:853f5b7408a7 | 492 | } else { |
dkato | 0:853f5b7408a7 | 493 | *inp_sel_cnt_reg &= (uint32_t)~VDC5_REG_BIT20; |
dkato | 0:853f5b7408a7 | 494 | } |
dkato | 0:853f5b7408a7 | 495 | syscnt_panel_clk_tmp = panel_dcdr_tbl[param->panel_dcdr]; |
dkato | 0:853f5b7408a7 | 496 | syscnt_panel_clk_tmp = (uint16_t)((uint32_t)syscnt_panel_clk_tmp | |
dkato | 0:853f5b7408a7 | 497 | (uint32_t)panel_icksel_tbl[param->panel_icksel]); |
dkato | 0:853f5b7408a7 | 498 | *syscnt_panel_clk_reg = syscnt_panel_clk_tmp; |
dkato | 0:853f5b7408a7 | 499 | /* Enable */ |
dkato | 0:853f5b7408a7 | 500 | syscnt_panel_clk_tmp = (uint16_t)((uint32_t)syscnt_panel_clk_tmp | VDC5_REG_BIT8); |
dkato | 0:853f5b7408a7 | 501 | *syscnt_panel_clk_reg = syscnt_panel_clk_tmp; |
dkato | 0:853f5b7408a7 | 502 | |
dkato | 0:853f5b7408a7 | 503 | } /* End of function VDC5_Initialize() */ |
dkato | 0:853f5b7408a7 | 504 | |
dkato | 0:853f5b7408a7 | 505 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 506 | * @brief Sets registers for termination |
dkato | 0:853f5b7408a7 | 507 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 508 | * @retval None |
dkato | 0:853f5b7408a7 | 509 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 510 | void VDC5_Terminate (const vdc5_channel_t ch) |
dkato | 0:853f5b7408a7 | 511 | { |
dkato | 0:853f5b7408a7 | 512 | volatile uint16_t * syscnt_panel_clk_reg; |
dkato | 0:853f5b7408a7 | 513 | uint16_t syscnt_panel_clk_tmp; |
dkato | 0:853f5b7408a7 | 514 | vdc5_resource_state_t rsrc_state; |
dkato | 0:853f5b7408a7 | 515 | vdc5_onoff_t lvds_ref; |
dkato | 0:853f5b7408a7 | 516 | const vdc5_regaddr_lvds_t * regaddr_lvds; |
dkato | 0:853f5b7408a7 | 517 | volatile uint32_t counter; |
dkato | 0:853f5b7408a7 | 518 | |
dkato | 0:853f5b7408a7 | 519 | syscnt_panel_clk_reg = vdc5_regaddr_system_ctrl[ch].syscnt_panel_clk; |
dkato | 0:853f5b7408a7 | 520 | /* Disable */ |
dkato | 0:853f5b7408a7 | 521 | syscnt_panel_clk_tmp = (uint16_t)((uint32_t)*syscnt_panel_clk_reg & (~VDC5_REG_BIT8)); |
dkato | 0:853f5b7408a7 | 522 | *syscnt_panel_clk_reg = syscnt_panel_clk_tmp; |
dkato | 0:853f5b7408a7 | 523 | |
dkato | 0:853f5b7408a7 | 524 | rsrc_state = VDC5_ShrdPrmGetResource(ch, VDC5_RESOURCE_LVDS_CLK); |
dkato | 0:853f5b7408a7 | 525 | if (rsrc_state != VDC5_RESOURCE_ST_INVALID) { /* LVDS PLL clock is set. */ |
dkato | 0:853f5b7408a7 | 526 | lvds_ref = VDC5_ShrdPrmGetLvdsClkRef(); |
dkato | 0:853f5b7408a7 | 527 | if (lvds_ref == VDC5_OFF) { /* LVDS PLL clock is not referred. */ |
dkato | 0:853f5b7408a7 | 528 | regaddr_lvds = &vdc5_regaddr_lvds; |
dkato | 0:853f5b7408a7 | 529 | |
dkato | 0:853f5b7408a7 | 530 | /* Output from the LVDS PLL is disabled. */ |
dkato | 0:853f5b7408a7 | 531 | *(regaddr_lvds->lclkselr) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 532 | /* Controls power-down for the LVDS PLL: Power-down state */ |
dkato | 0:853f5b7408a7 | 533 | *(regaddr_lvds->lpllsetr) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 534 | for (counter = 0; counter < (uint32_t)VDC5_LVDS_PLL_WAIT_CYCLE; counter++) { |
dkato | 0:853f5b7408a7 | 535 | /* This is a delay (1 usec) while waiting for PLL PD to settle. */ |
dkato | 0:853f5b7408a7 | 536 | } |
dkato | 0:853f5b7408a7 | 537 | } |
dkato | 0:853f5b7408a7 | 538 | } |
dkato | 0:853f5b7408a7 | 539 | } /* End of function VDC5_Terminate() */ |
dkato | 0:853f5b7408a7 | 540 | |
dkato | 0:853f5b7408a7 | 541 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 542 | * @brief Sets registers for video input |
dkato | 0:853f5b7408a7 | 543 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 544 | * @param[in] param : Video input setup parameter |
dkato | 0:853f5b7408a7 | 545 | * @retval None |
dkato | 0:853f5b7408a7 | 546 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 547 | void VDC5_VideoInput (const vdc5_channel_t ch, const vdc5_input_t * const param) |
dkato | 0:853f5b7408a7 | 548 | { |
dkato | 0:853f5b7408a7 | 549 | const vdc5_regaddr_input_ctrl_t * input_ctrl; |
dkato | 0:853f5b7408a7 | 550 | const vdc5_sync_delay_t * dly_tmp; |
dkato | 0:853f5b7408a7 | 551 | const vdc5_ext_in_sig_t * ext_sig_tmp; |
dkato | 0:853f5b7408a7 | 552 | |
dkato | 0:853f5b7408a7 | 553 | input_ctrl = &vdc5_regaddr_input_ctrl[ch]; |
dkato | 0:853f5b7408a7 | 554 | |
dkato | 0:853f5b7408a7 | 555 | /* Input select */ |
dkato | 0:853f5b7408a7 | 556 | if (param->inp_sel == VDC5_INPUT_SEL_VDEC) { |
dkato | 0:853f5b7408a7 | 557 | *(input_ctrl->inp_sel_cnt) &= (uint32_t)~VDC5_REG_BIT20; |
dkato | 0:853f5b7408a7 | 558 | } else { |
dkato | 0:853f5b7408a7 | 559 | *(input_ctrl->inp_sel_cnt) |= (uint32_t)VDC5_REG_BIT20; |
dkato | 0:853f5b7408a7 | 560 | } |
dkato | 0:853f5b7408a7 | 561 | /* Vsync signal 1/2fH and 1/4fH phase timing */ |
dkato | 0:853f5b7408a7 | 562 | *(input_ctrl->inp_vsync_ph_adj) = (uint32_t)param->inp_fh50 << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 563 | *(input_ctrl->inp_vsync_ph_adj) |= (uint32_t)param->inp_fh25; |
dkato | 0:853f5b7408a7 | 564 | |
dkato | 0:853f5b7408a7 | 565 | /* Sync signal delay adjustment */ |
dkato | 0:853f5b7408a7 | 566 | dly_tmp = param->dly; |
dkato | 0:853f5b7408a7 | 567 | if (dly_tmp != NULL) { |
dkato | 0:853f5b7408a7 | 568 | /* Number of lines for delaying Vsync signal and field differentiation signal */ |
dkato | 0:853f5b7408a7 | 569 | *(input_ctrl->inp_dly_adj) = (uint32_t)dly_tmp->inp_vs_dly_l << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 570 | /* Field differentiation signal delay amount */ |
dkato | 0:853f5b7408a7 | 571 | *(input_ctrl->inp_dly_adj) |= (uint32_t)dly_tmp->inp_fld_dly << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 572 | /* Vsync signal delay amount */ |
dkato | 0:853f5b7408a7 | 573 | *(input_ctrl->inp_dly_adj) |= (uint32_t)dly_tmp->inp_vs_dly << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 574 | /* Hsync signal delay amount */ |
dkato | 0:853f5b7408a7 | 575 | *(input_ctrl->inp_dly_adj) |= (uint32_t)dly_tmp->inp_hs_dly; |
dkato | 0:853f5b7408a7 | 576 | } |
dkato | 0:853f5b7408a7 | 577 | |
dkato | 0:853f5b7408a7 | 578 | /* Horizontal noise reduction operating mode, Y/Cb/Cr mode */ |
dkato | 0:853f5b7408a7 | 579 | *(input_ctrl->imgcnt_nr_cnt0) |= (uint32_t)VDC5_REG_BIT20; |
dkato | 0:853f5b7408a7 | 580 | |
dkato | 0:853f5b7408a7 | 581 | /* External input signal */ |
dkato | 0:853f5b7408a7 | 582 | ext_sig_tmp = param->ext_sig; |
dkato | 0:853f5b7408a7 | 583 | if (ext_sig_tmp != NULL) { |
dkato | 0:853f5b7408a7 | 584 | /* Setting external input video signal */ |
dkato | 0:853f5b7408a7 | 585 | SetVideoExternalInput(ext_sig_tmp, input_ctrl); |
dkato | 0:853f5b7408a7 | 586 | |
dkato | 0:853f5b7408a7 | 587 | /* Horizontal noise reduction operating mode, G/B/R mode */ |
dkato | 0:853f5b7408a7 | 588 | if ((ext_sig_tmp->inp_format == VDC5_EXTIN_FORMAT_RGB888) || |
dkato | 0:853f5b7408a7 | 589 | (ext_sig_tmp->inp_format == VDC5_EXTIN_FORMAT_RGB666) || |
dkato | 0:853f5b7408a7 | 590 | (ext_sig_tmp->inp_format == VDC5_EXTIN_FORMAT_RGB565)) { |
dkato | 0:853f5b7408a7 | 591 | *(input_ctrl->imgcnt_nr_cnt0) &= (uint32_t)~VDC5_REG_BIT20; |
dkato | 0:853f5b7408a7 | 592 | } |
dkato | 0:853f5b7408a7 | 593 | } |
dkato | 0:853f5b7408a7 | 594 | |
dkato | 0:853f5b7408a7 | 595 | /* Register update control register (INP_UPDATE) |
dkato | 0:853f5b7408a7 | 596 | b4 INP_EXT_UPDATE |
dkato | 0:853f5b7408a7 | 597 | b0 INP_IMG_UPDATE */ |
dkato | 0:853f5b7408a7 | 598 | *(input_ctrl->inp_update) |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 599 | /* Register update control register (IMGCNT_UPDATE) |
dkato | 0:853f5b7408a7 | 600 | b0 IMGCNT_VEN */ |
dkato | 0:853f5b7408a7 | 601 | *(input_ctrl->imgcnt_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 602 | } /* End of function VDC5_VideoInput() */ |
dkato | 0:853f5b7408a7 | 603 | |
dkato | 0:853f5b7408a7 | 604 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 605 | * @brief Sets registers for sync control |
dkato | 0:853f5b7408a7 | 606 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 607 | * @param[in] param : Sync signal control parameter |
dkato | 0:853f5b7408a7 | 608 | * @retval None |
dkato | 0:853f5b7408a7 | 609 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 610 | void VDC5_SyncControl (const vdc5_channel_t ch, const vdc5_sync_ctrl_t * const param) |
dkato | 0:853f5b7408a7 | 611 | { |
dkato | 0:853f5b7408a7 | 612 | const vdc5_regaddr_scaler_t * scaler_0; |
dkato | 0:853f5b7408a7 | 613 | const vdc5_regaddr_scaler_t * scaler_1; |
dkato | 0:853f5b7408a7 | 614 | const vdc5_regaddr_scaler_t * scaler_oir; |
dkato | 0:853f5b7408a7 | 615 | uint32_t full_scr; |
dkato | 0:853f5b7408a7 | 616 | |
dkato | 0:853f5b7408a7 | 617 | scaler_0 = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0]; |
dkato | 0:853f5b7408a7 | 618 | scaler_1 = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1]; |
dkato | 0:853f5b7408a7 | 619 | scaler_oir = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR]; |
dkato | 0:853f5b7408a7 | 620 | |
dkato | 0:853f5b7408a7 | 621 | if (param->vsync_cpmpe != NULL) { |
dkato | 0:853f5b7408a7 | 622 | /* Frequent Vsync signal masking period */ |
dkato | 0:853f5b7408a7 | 623 | *(scaler_0->scl0_frc1) = (uint32_t)param->vsync_cpmpe->res_vmask << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 624 | *(scaler_1->scl0_frc1) = (uint32_t)param->vsync_cpmpe->res_vmask << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 625 | /* Missing-Sync compensating pulse output wait time */ |
dkato | 0:853f5b7408a7 | 626 | *(scaler_0->scl0_frc2) = (uint32_t)param->vsync_cpmpe->res_vlack << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 627 | *(scaler_1->scl0_frc2) = (uint32_t)param->vsync_cpmpe->res_vlack << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 628 | /* Frequent Vsync signal masking and missing Vsync signal compensation */ |
dkato | 0:853f5b7408a7 | 629 | *(scaler_0->scl0_frc1) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 630 | *(scaler_1->scl0_frc1) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 631 | *(scaler_0->scl0_frc2) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 632 | *(scaler_1->scl0_frc2) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 633 | } else { |
dkato | 0:853f5b7408a7 | 634 | /* Frequent Vsync signal masking and missing Vsync signal compensation are disabled, if unnecessary. */ |
dkato | 0:853f5b7408a7 | 635 | *(scaler_0->scl0_frc1) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 636 | *(scaler_1->scl0_frc1) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 637 | *(scaler_0->scl0_frc2) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 638 | *(scaler_0->scl0_frc2) |= (uint32_t)VDC5_REG_BIT_0XFFFF0000; |
dkato | 0:853f5b7408a7 | 639 | *(scaler_1->scl0_frc2) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 640 | *(scaler_1->scl0_frc2) |= (uint32_t)VDC5_REG_BIT_0XFFFF0000; |
dkato | 0:853f5b7408a7 | 641 | } |
dkato | 0:853f5b7408a7 | 642 | /* In OIR, frequent Vsync signal masking and missing Vsync signal compensation are set to off. */ |
dkato | 0:853f5b7408a7 | 643 | *(scaler_oir->scl0_frc1) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 644 | *(scaler_oir->scl0_frc2) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 645 | |
dkato | 0:853f5b7408a7 | 646 | /* Hsync period setting and free-running Vsync period initialization */ |
dkato | 0:853f5b7408a7 | 647 | *(scaler_0->scl0_frc4) = (uint32_t)param->res_fh; |
dkato | 0:853f5b7408a7 | 648 | *(scaler_1->scl0_frc4) = (uint32_t)param->res_fh; |
dkato | 0:853f5b7408a7 | 649 | *(scaler_oir->scl0_frc4) = (uint32_t)param->res_fh; |
dkato | 0:853f5b7408a7 | 650 | /* Vsync signal output select (free-running Vsync on/off control) */ |
dkato | 0:853f5b7408a7 | 651 | if (param->res_vs_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 652 | *(scaler_0->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 653 | *(scaler_1->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 654 | } else { |
dkato | 0:853f5b7408a7 | 655 | *(scaler_0->scl0_frc3) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 656 | *(scaler_1->scl0_frc3) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 657 | *(scaler_0->scl0_frc4) &= (uint32_t)~VDC5_REG_MASK_0X07FF0000; |
dkato | 0:853f5b7408a7 | 658 | *(scaler_0->scl0_frc4) |= (uint32_t)param->res_fv << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 659 | *(scaler_1->scl0_frc4) &= (uint32_t)~VDC5_REG_MASK_0X07FF0000; |
dkato | 0:853f5b7408a7 | 660 | *(scaler_1->scl0_frc4) |= (uint32_t)param->res_fv << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 661 | } |
dkato | 0:853f5b7408a7 | 662 | /* In OIR, external input Vsync signal is selected automatically. */ |
dkato | 0:853f5b7408a7 | 663 | *(scaler_oir->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 664 | |
dkato | 0:853f5b7408a7 | 665 | /* Sync signal output and full-screen enable signal select: Scaler 0 */ |
dkato | 0:853f5b7408a7 | 666 | *(scaler_0->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 667 | *(scaler_1->scl0_frc3) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 668 | |
dkato | 0:853f5b7408a7 | 669 | /* Vsync signal delay control */ |
dkato | 0:853f5b7408a7 | 670 | *(scaler_0->scl0_frc5) &= (uint32_t)~VDC5_REG_MASK_0X000000FF; |
dkato | 0:853f5b7408a7 | 671 | *(scaler_0->scl0_frc5) |= (uint32_t)param->res_vsdly; |
dkato | 0:853f5b7408a7 | 672 | *(scaler_1->scl0_frc5) &= (uint32_t)~VDC5_REG_MASK_0X000000FF; |
dkato | 0:853f5b7408a7 | 673 | *(scaler_1->scl0_frc5) |= (uint32_t)param->res_vsdly; |
dkato | 0:853f5b7408a7 | 674 | *(scaler_oir->scl0_frc5) &= (uint32_t)~VDC5_REG_MASK_0X000000FF; |
dkato | 0:853f5b7408a7 | 675 | *(scaler_oir->scl0_frc5) |= OIR_VSYNC_DELAY; |
dkato | 0:853f5b7408a7 | 676 | |
dkato | 0:853f5b7408a7 | 677 | /* Full-screen enable signal */ |
dkato | 0:853f5b7408a7 | 678 | full_scr = (uint32_t)param->res_f.vs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 679 | full_scr |= (uint32_t)param->res_f.vw; |
dkato | 0:853f5b7408a7 | 680 | |
dkato | 0:853f5b7408a7 | 681 | *(scaler_0->scl0_frc6) = full_scr; |
dkato | 0:853f5b7408a7 | 682 | *(scaler_1->scl0_frc6) = full_scr; |
dkato | 0:853f5b7408a7 | 683 | *(scaler_oir->scl0_frc6) = full_scr; |
dkato | 0:853f5b7408a7 | 684 | |
dkato | 0:853f5b7408a7 | 685 | full_scr = (uint32_t)param->res_f.hs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 686 | full_scr |= (uint32_t)param->res_f.hw; |
dkato | 0:853f5b7408a7 | 687 | |
dkato | 0:853f5b7408a7 | 688 | *(scaler_0->scl0_frc7) = full_scr; |
dkato | 0:853f5b7408a7 | 689 | *(scaler_1->scl0_frc7) = full_scr; |
dkato | 0:853f5b7408a7 | 690 | *(scaler_oir->scl0_frc7) = full_scr; |
dkato | 0:853f5b7408a7 | 691 | |
dkato | 0:853f5b7408a7 | 692 | /* Register update control register (SC0_SCL0_UPDATE, SC1_SCL0_UPDATE, OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 693 | b8 SCL0_UPDATE |
dkato | 0:853f5b7408a7 | 694 | b4 SCL0_VEN_B */ |
dkato | 0:853f5b7408a7 | 695 | *(scaler_0->scl0_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 696 | *(scaler_1->scl0_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 697 | *(scaler_oir->scl0_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 698 | |
dkato | 0:853f5b7408a7 | 699 | SetInitialConnection(ch); |
dkato | 0:853f5b7408a7 | 700 | |
dkato | 0:853f5b7408a7 | 701 | VDC5_ShrdPrmSetUndSel(ch, VDC5_OFF); |
dkato | 0:853f5b7408a7 | 702 | } /* End of function VDC5_SyncControl() */ |
dkato | 0:853f5b7408a7 | 703 | |
dkato | 0:853f5b7408a7 | 704 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 705 | * @brief Sets registers for display output |
dkato | 0:853f5b7408a7 | 706 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 707 | * @param[in] param : Display output configuration parameter |
dkato | 0:853f5b7408a7 | 708 | * @retval None |
dkato | 0:853f5b7408a7 | 709 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 710 | void VDC5_DisplayOutput (const vdc5_channel_t ch, const vdc5_output_t * const param) |
dkato | 0:853f5b7408a7 | 711 | { |
dkato | 0:853f5b7408a7 | 712 | const vdc5_regaddr_output_ctrl_t * output_ctrl; |
dkato | 0:853f5b7408a7 | 713 | volatile uint32_t * output_pin_regaddr[VDC5_LCD_TCON_PIN_NUM]; |
dkato | 0:853f5b7408a7 | 714 | uint32_t tcon_sig_index; |
dkato | 0:853f5b7408a7 | 715 | const vdc5_lcd_tcon_timing_t * const * lcd_tcon_timing; |
dkato | 0:853f5b7408a7 | 716 | static void (* const tcon_function_tbl[VDC5_LCD_TCONSIG_NUM])( |
dkato | 0:853f5b7408a7 | 717 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 718 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) = { |
dkato | 0:853f5b7408a7 | 719 | &SetLcdTcon_STVA_VS, /* STVA/VS */ |
dkato | 0:853f5b7408a7 | 720 | &SetLcdTcon_STVB_VE, /* STVB/VE */ |
dkato | 0:853f5b7408a7 | 721 | &SetLcdTcon_STH_HS, /* STH_HS */ |
dkato | 0:853f5b7408a7 | 722 | &SetLcdTcon_STB_HE, /* STB_HE */ |
dkato | 0:853f5b7408a7 | 723 | &SetLcdTcon_CPV_GCK, /* CPV_GCK */ |
dkato | 0:853f5b7408a7 | 724 | &SetLcdTcon_POLA, /* POLA */ |
dkato | 0:853f5b7408a7 | 725 | &SetLcdTcon_POLB, /* POLB */ |
dkato | 0:853f5b7408a7 | 726 | &SetLcdTcon_DE /* DE */ |
dkato | 0:853f5b7408a7 | 727 | }; |
dkato | 0:853f5b7408a7 | 728 | const uint32_t output_pin_edge[VDC5_LCD_TCON_PIN_NUM] = { |
dkato | 0:853f5b7408a7 | 729 | VDC5_REG_TCON0_EDGE, VDC5_REG_TCON1_EDGE, VDC5_REG_TCON2_EDGE, VDC5_REG_TCON3_EDGE, |
dkato | 0:853f5b7408a7 | 730 | VDC5_REG_TCON4_EDGE, VDC5_REG_TCON5_EDGE, VDC5_REG_TCON6_EDGE |
dkato | 0:853f5b7408a7 | 731 | }; |
dkato | 0:853f5b7408a7 | 732 | vdc5_lcd_tcon_pin_t tcon_pin_tmp; |
dkato | 0:853f5b7408a7 | 733 | const vdc5_gr_disp_sel_t gr_disp_sel_tbl[VDC5_GR_TYPE_NUM] = { |
dkato | 0:853f5b7408a7 | 734 | /* Graphics display mode for initialization */ |
dkato | 0:853f5b7408a7 | 735 | VDC5_DISPSEL_BACK, /* Graphics 0 */ |
dkato | 0:853f5b7408a7 | 736 | VDC5_DISPSEL_LOWER, /* Graphics 1 */ |
dkato | 0:853f5b7408a7 | 737 | VDC5_DISPSEL_LOWER, /* Graphics 2 */ |
dkato | 0:853f5b7408a7 | 738 | VDC5_DISPSEL_LOWER, /* Graphics 3 */ |
dkato | 0:853f5b7408a7 | 739 | VDC5_DISPSEL_IGNORED, /* VIN */ |
dkato | 0:853f5b7408a7 | 740 | VDC5_DISPSEL_BACK /* OIR */ |
dkato | 0:853f5b7408a7 | 741 | }; |
dkato | 0:853f5b7408a7 | 742 | const uint32_t dither_format[VDC5_LCD_OUTFORMAT_NUM] = { |
dkato | 0:853f5b7408a7 | 743 | /* Panel dither output format select */ |
dkato | 0:853f5b7408a7 | 744 | VDC5_REG_PATH_FORMAT_RGB888, VDC5_REG_PATH_FORMAT_RGB666, |
dkato | 0:853f5b7408a7 | 745 | VDC5_REG_PATH_FORMAT_RGB565, VDC5_REG_PATH_FORMAT_NON |
dkato | 0:853f5b7408a7 | 746 | }; |
dkato | 0:853f5b7408a7 | 747 | |
dkato | 0:853f5b7408a7 | 748 | output_ctrl = &vdc5_regaddr_output_ctrl[ch]; |
dkato | 0:853f5b7408a7 | 749 | |
dkato | 0:853f5b7408a7 | 750 | /* 1/2fH timing */ |
dkato | 0:853f5b7408a7 | 751 | *(output_ctrl->tcon_tim) = (uint32_t)param->tcon_half << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 752 | /* Offset Hsync signal timing */ |
dkato | 0:853f5b7408a7 | 753 | *(output_ctrl->tcon_tim) |= (uint32_t)param->tcon_offset; |
dkato | 0:853f5b7408a7 | 754 | |
dkato | 0:853f5b7408a7 | 755 | /* Create output pin register address table */ |
dkato | 0:853f5b7408a7 | 756 | output_pin_regaddr[VDC5_LCD_TCON_PIN_0] = output_ctrl->tcon_tim_stva2; |
dkato | 0:853f5b7408a7 | 757 | output_pin_regaddr[VDC5_LCD_TCON_PIN_1] = output_ctrl->tcon_tim_stvb2; |
dkato | 0:853f5b7408a7 | 758 | output_pin_regaddr[VDC5_LCD_TCON_PIN_2] = output_ctrl->tcon_tim_sth2; |
dkato | 0:853f5b7408a7 | 759 | output_pin_regaddr[VDC5_LCD_TCON_PIN_3] = output_ctrl->tcon_tim_stb2; |
dkato | 0:853f5b7408a7 | 760 | output_pin_regaddr[VDC5_LCD_TCON_PIN_4] = output_ctrl->tcon_tim_cpv2; |
dkato | 0:853f5b7408a7 | 761 | output_pin_regaddr[VDC5_LCD_TCON_PIN_5] = output_ctrl->tcon_tim_pola2; |
dkato | 0:853f5b7408a7 | 762 | output_pin_regaddr[VDC5_LCD_TCON_PIN_6] = output_ctrl->tcon_tim_polb2; |
dkato | 0:853f5b7408a7 | 763 | |
dkato | 0:853f5b7408a7 | 764 | /* Clear output phase control of LCT_TCON0~6 pin */ |
dkato | 0:853f5b7408a7 | 765 | *(output_ctrl->out_clk_phase) &= (uint32_t)~VDC5_REG_MASK_0X0000007F; |
dkato | 0:853f5b7408a7 | 766 | /* LCD TCON */ |
dkato | 0:853f5b7408a7 | 767 | lcd_tcon_timing = param->outctrl; |
dkato | 0:853f5b7408a7 | 768 | for (tcon_sig_index = 0; tcon_sig_index < VDC5_LCD_TCONSIG_NUM; tcon_sig_index++) { |
dkato | 0:853f5b7408a7 | 769 | if (*lcd_tcon_timing != NULL) { |
dkato | 0:853f5b7408a7 | 770 | /* Setting LCD TCON */ |
dkato | 0:853f5b7408a7 | 771 | tcon_function_tbl[tcon_sig_index](*lcd_tcon_timing, output_ctrl); |
dkato | 0:853f5b7408a7 | 772 | |
dkato | 0:853f5b7408a7 | 773 | tcon_pin_tmp = (*lcd_tcon_timing)->tcon_pin; |
dkato | 0:853f5b7408a7 | 774 | if (tcon_pin_tmp != VDC5_LCD_TCON_PIN_NON) { |
dkato | 0:853f5b7408a7 | 775 | /* LCD TCON output pin select */ |
dkato | 0:853f5b7408a7 | 776 | *(output_pin_regaddr[tcon_pin_tmp]) &= (uint32_t)~VDC5_REG_MASK_0X00000007; |
dkato | 0:853f5b7408a7 | 777 | *(output_pin_regaddr[tcon_pin_tmp]) |= tcon_sig_index; |
dkato | 0:853f5b7408a7 | 778 | /* Output phase control of LCT_TCON pin */ |
dkato | 0:853f5b7408a7 | 779 | if ((*lcd_tcon_timing)->outcnt_edge != VDC5_EDGE_RISING) { |
dkato | 0:853f5b7408a7 | 780 | *(output_ctrl->out_clk_phase) |= output_pin_edge[tcon_pin_tmp]; |
dkato | 0:853f5b7408a7 | 781 | } |
dkato | 0:853f5b7408a7 | 782 | } |
dkato | 0:853f5b7408a7 | 783 | } |
dkato | 0:853f5b7408a7 | 784 | lcd_tcon_timing++; |
dkato | 0:853f5b7408a7 | 785 | } |
dkato | 0:853f5b7408a7 | 786 | |
dkato | 0:853f5b7408a7 | 787 | *(output_ctrl->out_set) &= (uint32_t)~VDC5_REG_MASK_0X11003313; |
dkato | 0:853f5b7408a7 | 788 | /* Bit endian change ON/OFF control */ |
dkato | 0:853f5b7408a7 | 789 | if (param->out_endian_on != VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 790 | *(output_ctrl->out_set) |= (uint32_t)VDC5_REG_BIT28; |
dkato | 0:853f5b7408a7 | 791 | } |
dkato | 0:853f5b7408a7 | 792 | /* B/R signal swap ON/OFF control */ |
dkato | 0:853f5b7408a7 | 793 | if (param->out_swap_on != VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 794 | *(output_ctrl->out_set) |= (uint32_t)VDC5_REG_BIT24; |
dkato | 0:853f5b7408a7 | 795 | } |
dkato | 0:853f5b7408a7 | 796 | /* Output format select */ |
dkato | 0:853f5b7408a7 | 797 | *(output_ctrl->out_set) |= (uint32_t)param->out_format << VDC5_REG_SHIFT_12; |
dkato | 0:853f5b7408a7 | 798 | |
dkato | 0:853f5b7408a7 | 799 | /* Panel dither output format select */ |
dkato | 0:853f5b7408a7 | 800 | *(output_ctrl->out_pdtha) &= (uint32_t)~VDC5_REG_MASK_0X00030000; |
dkato | 0:853f5b7408a7 | 801 | *(output_ctrl->out_pdtha) |= dither_format[param->out_format]; |
dkato | 0:853f5b7408a7 | 802 | |
dkato | 0:853f5b7408a7 | 803 | if (param->out_format == VDC5_LCD_OUTFORMAT_SERIAL_RGB) { |
dkato | 0:853f5b7408a7 | 804 | /* Clock frequency control */ |
dkato | 0:853f5b7408a7 | 805 | *(output_ctrl->out_set) |= (uint32_t)param->out_frq_sel << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 806 | /* Scan direction select */ |
dkato | 0:853f5b7408a7 | 807 | if (param->out_dir_sel != VDC5_LCD_SERIAL_SCAN_FORWARD) { |
dkato | 0:853f5b7408a7 | 808 | *(output_ctrl->out_set) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 809 | } |
dkato | 0:853f5b7408a7 | 810 | /* Clock phase adjustment */ |
dkato | 0:853f5b7408a7 | 811 | *(output_ctrl->out_set) |= (uint32_t)param->out_phase; |
dkato | 0:853f5b7408a7 | 812 | } else { |
dkato | 0:853f5b7408a7 | 813 | /* Clock frequency control */ |
dkato | 0:853f5b7408a7 | 814 | *(output_ctrl->out_set) |= (uint32_t)VDC5_LCD_PARALLEL_CLKFRQ_1 << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 815 | } |
dkato | 0:853f5b7408a7 | 816 | |
dkato | 0:853f5b7408a7 | 817 | /* Output phase control of LCD_DATA23 to LCD_DATA0 pin */ |
dkato | 0:853f5b7408a7 | 818 | if (param->outcnt_lcd_edge == VDC5_EDGE_RISING) { |
dkato | 0:853f5b7408a7 | 819 | *(output_ctrl->out_clk_phase) &= (uint32_t)~VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 820 | } else { |
dkato | 0:853f5b7408a7 | 821 | *(output_ctrl->out_clk_phase) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 822 | } |
dkato | 0:853f5b7408a7 | 823 | |
dkato | 0:853f5b7408a7 | 824 | /* Set background color */ |
dkato | 0:853f5b7408a7 | 825 | SetGrapicsBackgroundColor(ch); |
dkato | 0:853f5b7408a7 | 826 | /* Initialize graphics display mode */ |
dkato | 0:853f5b7408a7 | 827 | SetGraphicsDisplayMode(ch, VDC5_LAYER_ID_ALL, gr_disp_sel_tbl); |
dkato | 0:853f5b7408a7 | 828 | |
dkato | 0:853f5b7408a7 | 829 | /* TCON register update control register (TCON_UPDATE) |
dkato | 0:853f5b7408a7 | 830 | b0 TCON_VEN */ |
dkato | 0:853f5b7408a7 | 831 | *(output_ctrl->tcon_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 832 | /* Register update control register (OUT_UPDATE) |
dkato | 0:853f5b7408a7 | 833 | b0 OUTCNT_VEN */ |
dkato | 0:853f5b7408a7 | 834 | *(output_ctrl->out_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 835 | |
dkato | 0:853f5b7408a7 | 836 | } /* End of function VDC5_DisplayOutput() */ |
dkato | 0:853f5b7408a7 | 837 | |
dkato | 0:853f5b7408a7 | 838 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 839 | * @brief Sets registers for data write control processing |
dkato | 0:853f5b7408a7 | 840 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 841 | * @param[in] scaling_id : Scaling type ID |
dkato | 0:853f5b7408a7 | 842 | * @param[in] param : Data write control parameter |
dkato | 0:853f5b7408a7 | 843 | * @retval None |
dkato | 0:853f5b7408a7 | 844 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 845 | void VDC5_WriteDataControl ( |
dkato | 0:853f5b7408a7 | 846 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 847 | const vdc5_scaling_type_t scaling_id, |
dkato | 0:853f5b7408a7 | 848 | const vdc5_write_t * const param) |
dkato | 0:853f5b7408a7 | 849 | { |
dkato | 0:853f5b7408a7 | 850 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 851 | const vdc5_scalingdown_rot_t * scldw_rot; |
dkato | 0:853f5b7408a7 | 852 | |
dkato | 0:853f5b7408a7 | 853 | scaler = &vdc5_regaddr_scaler[ch][scaling_id]; |
dkato | 0:853f5b7408a7 | 854 | scldw_rot = ¶m->scalingdown_rot; |
dkato | 0:853f5b7408a7 | 855 | |
dkato | 0:853f5b7408a7 | 856 | /* Image area to be captured */ |
dkato | 0:853f5b7408a7 | 857 | *(scaler->scl0_ds2) = (uint32_t)scldw_rot->res.vs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 858 | *(scaler->scl0_ds2) |= (uint32_t)scldw_rot->res.vw; |
dkato | 0:853f5b7408a7 | 859 | *(scaler->scl0_ds3) = (uint32_t)scldw_rot->res.hs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 860 | *(scaler->scl0_ds3) |= (uint32_t)scldw_rot->res.hw; |
dkato | 0:853f5b7408a7 | 861 | |
dkato | 0:853f5b7408a7 | 862 | *(scaler->scl1_wr1) &= (uint32_t)~VDC5_REG_MASK_0X0007000D; |
dkato | 0:853f5b7408a7 | 863 | /* Swap setting in frame buffer writing */ |
dkato | 0:853f5b7408a7 | 864 | *(scaler->scl1_wr1) |= (uint32_t)param->res_wrswa << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 865 | /* Frame buffer video-signal writing format */ |
dkato | 0:853f5b7408a7 | 866 | *(scaler->scl1_wr1) |= (uint32_t)param->res_md << VDC5_REG_SHIFT_2; |
dkato | 0:853f5b7408a7 | 867 | /* Transfer burst length for frame buffer writing */ |
dkato | 0:853f5b7408a7 | 868 | if (param->res_bst_md != VDC5_BST_MD_32BYTE) { |
dkato | 0:853f5b7408a7 | 869 | *(scaler->scl1_wr1) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 870 | } |
dkato | 0:853f5b7408a7 | 871 | |
dkato | 0:853f5b7408a7 | 872 | /* Frame buffer base address */ |
dkato | 0:853f5b7408a7 | 873 | *(scaler->scl1_wr2) = (uint32_t)param->base; |
dkato | 0:853f5b7408a7 | 874 | /* Frame buffer line offset address[byte] */ |
dkato | 0:853f5b7408a7 | 875 | *(scaler->scl1_wr3) = param->ln_off << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 876 | /* Number of frames of buffer to be written to (res_flm_num + 1) */ |
dkato | 0:853f5b7408a7 | 877 | *(scaler->scl1_wr3) |= param->flm_num; |
dkato | 0:853f5b7408a7 | 878 | /* Frame buffer frame offset address [byte] */ |
dkato | 0:853f5b7408a7 | 879 | if (param->flm_num != 0u) { |
dkato | 0:853f5b7408a7 | 880 | *(scaler->scl1_wr4) = param->flm_off; |
dkato | 0:853f5b7408a7 | 881 | } |
dkato | 0:853f5b7408a7 | 882 | |
dkato | 0:853f5b7408a7 | 883 | /* Writing rate */ |
dkato | 0:853f5b7408a7 | 884 | *(scaler->scl1_wr5) &= (uint32_t)~VDC5_REG_MASK_0X00000300; |
dkato | 0:853f5b7408a7 | 885 | *(scaler->scl1_wr5) |= (uint32_t)param->res_fs_rate << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 886 | |
dkato | 0:853f5b7408a7 | 887 | /* Dither correction on/off */ |
dkato | 0:853f5b7408a7 | 888 | if (param->res_dth_on == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 889 | *(scaler->scl1_wr6) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 890 | } else { |
dkato | 0:853f5b7408a7 | 891 | *(scaler->scl1_wr6) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 892 | } |
dkato | 0:853f5b7408a7 | 893 | /* Bit Reduction */ |
dkato | 0:853f5b7408a7 | 894 | if (param->res_md == VDC5_RES_MD_RGB565) { |
dkato | 0:853f5b7408a7 | 895 | /* On */ |
dkato | 0:853f5b7408a7 | 896 | *(scaler->scl1_wr6) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 897 | } else { |
dkato | 0:853f5b7408a7 | 898 | /* Off */ |
dkato | 0:853f5b7408a7 | 899 | *(scaler->scl1_wr6) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 900 | } |
dkato | 0:853f5b7408a7 | 901 | |
dkato | 0:853f5b7408a7 | 902 | if (scaling_id == VDC5_SC_TYPE_OIR) { |
dkato | 0:853f5b7408a7 | 903 | /* OIR */ |
dkato | 0:853f5b7408a7 | 904 | /* Vertical and horizontal width after scaling-down control block */ |
dkato | 0:853f5b7408a7 | 905 | *(scaler->scl0_ds7) = (uint32_t)scldw_rot->res.vw << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 906 | *(scaler->scl0_ds7) |= (uint32_t)scldw_rot->res.hw; |
dkato | 0:853f5b7408a7 | 907 | |
dkato | 0:853f5b7408a7 | 908 | /* Vertical scaling-down and horizontal scaling-down : OFF */ |
dkato | 0:853f5b7408a7 | 909 | *(scaler->scl0_ds1) &= (uint32_t)~VDC5_REG_MASK_0X00000011; |
dkato | 0:853f5b7408a7 | 910 | |
dkato | 0:853f5b7408a7 | 911 | /* Field operating mode select is fixed to progressive */ |
dkato | 0:853f5b7408a7 | 912 | *(scaler->scl1_wr5) &= (uint32_t)~VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 913 | } else { |
dkato | 0:853f5b7408a7 | 914 | /* Scaler 0 or 1 */ |
dkato | 0:853f5b7408a7 | 915 | /* Field determination signal delay control */ |
dkato | 0:853f5b7408a7 | 916 | if (param->flm_num == 0u) { |
dkato | 0:853f5b7408a7 | 917 | /* Frame buffer: One plane */ |
dkato | 0:853f5b7408a7 | 918 | *(scaler->scl0_frc5) &= (uint32_t)~VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 919 | } else { |
dkato | 0:853f5b7408a7 | 920 | /* Frame buffer: Two planes or more */ |
dkato | 0:853f5b7408a7 | 921 | *(scaler->scl0_frc5) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 922 | } |
dkato | 0:853f5b7408a7 | 923 | |
dkato | 0:853f5b7408a7 | 924 | /* Horizontal prefilter */ |
dkato | 0:853f5b7408a7 | 925 | if (scldw_rot->res_pfil_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 926 | *(scaler->scl0_ds4) &= (uint32_t)~VDC5_REG_BIT29; |
dkato | 0:853f5b7408a7 | 927 | } else { |
dkato | 0:853f5b7408a7 | 928 | *(scaler->scl0_ds4) |= (uint32_t)VDC5_REG_BIT29; |
dkato | 0:853f5b7408a7 | 929 | } |
dkato | 0:853f5b7408a7 | 930 | /* Number of valid lines in vertical direction output by scaling-down control block */ |
dkato | 0:853f5b7408a7 | 931 | *(scaler->scl0_ds7) = (uint32_t)scldw_rot->res_out_vw << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 932 | /* Number of valid horizontal pixels output by scaling-down control block */ |
dkato | 0:853f5b7408a7 | 933 | *(scaler->scl0_ds7) |= (uint32_t)scldw_rot->res_out_hw; |
dkato | 0:853f5b7408a7 | 934 | |
dkato | 0:853f5b7408a7 | 935 | /* Scaling-down */ |
dkato | 0:853f5b7408a7 | 936 | SetScalingDown(scldw_rot, param->res_inter, scaler); |
dkato | 0:853f5b7408a7 | 937 | |
dkato | 0:853f5b7408a7 | 938 | /* Frame buffer writing mode for image processing */ |
dkato | 0:853f5b7408a7 | 939 | *(scaler->scl1_wr1) &= (uint32_t)~VDC5_REG_MASK_0X00000070; |
dkato | 0:853f5b7408a7 | 940 | *(scaler->scl1_wr1) |= (uint32_t)scldw_rot->res_ds_wr_md << VDC5_REG_SHIFT_4; |
dkato | 0:853f5b7408a7 | 941 | |
dkato | 0:853f5b7408a7 | 942 | /* Field operating mode select */ |
dkato | 0:853f5b7408a7 | 943 | if (param->res_inter == VDC5_RES_INTER_PROGRESSIVE) { |
dkato | 0:853f5b7408a7 | 944 | /* Progressive */ |
dkato | 0:853f5b7408a7 | 945 | *(scaler->scl1_wr5) &= (uint32_t)~VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 946 | } else { |
dkato | 0:853f5b7408a7 | 947 | /* Interlace */ |
dkato | 0:853f5b7408a7 | 948 | *(scaler->scl1_wr5) |= (uint32_t)VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 949 | } |
dkato | 0:853f5b7408a7 | 950 | /* Write field select */ |
dkato | 0:853f5b7408a7 | 951 | if (param->res_fld_sel == VDC5_RES_FLD_SEL_TOP) { |
dkato | 0:853f5b7408a7 | 952 | /* Top field */ |
dkato | 0:853f5b7408a7 | 953 | *(scaler->scl1_wr5) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 954 | } else { |
dkato | 0:853f5b7408a7 | 955 | /* Bottom field */ |
dkato | 0:853f5b7408a7 | 956 | *(scaler->scl1_wr5) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 957 | } |
dkato | 0:853f5b7408a7 | 958 | |
dkato | 0:853f5b7408a7 | 959 | /* Frame buffer for bottom */ |
dkato | 0:853f5b7408a7 | 960 | if (param->btm_base != NULL) { |
dkato | 0:853f5b7408a7 | 961 | /* SC_RES_TB_ADD_MOD */ |
dkato | 0:853f5b7408a7 | 962 | *(scaler->scl1_wr1) |= (uint32_t)VDC5_REG_MASK_0X00000080; |
dkato | 0:853f5b7408a7 | 963 | |
dkato | 0:853f5b7408a7 | 964 | /* Frame buffer base address */ |
dkato | 0:853f5b7408a7 | 965 | *(scaler->scl1_wr8) = (uint32_t)param->btm_base; |
dkato | 0:853f5b7408a7 | 966 | /* Frame buffer line offset address[byte] */ |
dkato | 0:853f5b7408a7 | 967 | *(scaler->scl1_wr9) = param->ln_off << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 968 | /* Number of frames of buffer to be written to (defined by res_flm_num + 1) */ |
dkato | 0:853f5b7408a7 | 969 | *(scaler->scl1_wr9) |= param->flm_num; |
dkato | 0:853f5b7408a7 | 970 | /* Frame buffer frame offset address */ |
dkato | 0:853f5b7408a7 | 971 | if (param->flm_num != 0u) { |
dkato | 0:853f5b7408a7 | 972 | *(scaler->scl1_wr10) = param->flm_off; |
dkato | 0:853f5b7408a7 | 973 | } |
dkato | 0:853f5b7408a7 | 974 | } else { |
dkato | 0:853f5b7408a7 | 975 | /* SC_RES_TB_ADD_MOD */ |
dkato | 0:853f5b7408a7 | 976 | *(scaler->scl1_wr1) &= (uint32_t)~VDC5_REG_MASK_0X00000080; |
dkato | 0:853f5b7408a7 | 977 | } |
dkato | 0:853f5b7408a7 | 978 | } |
dkato | 0:853f5b7408a7 | 979 | |
dkato | 0:853f5b7408a7 | 980 | /* Register update control register (SC0/SC1/OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 981 | b12 SCL0_VEN_C |
dkato | 0:853f5b7408a7 | 982 | b4 SCL0_VEN_B |
dkato | 0:853f5b7408a7 | 983 | b0 SCL0_VEN_A */ |
dkato | 0:853f5b7408a7 | 984 | *(scaler->scl0_update) |= (uint32_t)(VDC5_REG_BIT12 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 985 | /* Register update control register (SC0/SC1/OIR_SCL1_UPDATE) |
dkato | 0:853f5b7408a7 | 986 | b16 SCL1_UPDATE_A |
dkato | 0:853f5b7408a7 | 987 | b4 SCL1_VEN_B |
dkato | 0:853f5b7408a7 | 988 | b0 SCL1_VEN_A */ |
dkato | 0:853f5b7408a7 | 989 | *(scaler->scl1_update) |= (uint32_t)(VDC5_REG_BIT16 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 990 | |
dkato | 0:853f5b7408a7 | 991 | if (scaling_id != VDC5_SC_TYPE_OIR) { |
dkato | 0:853f5b7408a7 | 992 | SetInputCntrlColorMtx(ch, scaling_id); |
dkato | 0:853f5b7408a7 | 993 | } |
dkato | 0:853f5b7408a7 | 994 | } /* End of function VDC5_WriteDataControl() */ |
dkato | 0:853f5b7408a7 | 995 | |
dkato | 0:853f5b7408a7 | 996 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 997 | * @brief Sets registers for data write change processing |
dkato | 0:853f5b7408a7 | 998 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 999 | * @param[in] scaling_id : Scaling type ID |
dkato | 0:853f5b7408a7 | 1000 | * @param[in] param : Data write change parameter |
dkato | 0:853f5b7408a7 | 1001 | * @retval None |
dkato | 0:853f5b7408a7 | 1002 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1003 | void VDC5_ChangeWriteProcess ( |
dkato | 0:853f5b7408a7 | 1004 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1005 | const vdc5_scaling_type_t scaling_id, |
dkato | 0:853f5b7408a7 | 1006 | const vdc5_write_chg_t * const param) |
dkato | 0:853f5b7408a7 | 1007 | { |
dkato | 0:853f5b7408a7 | 1008 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 1009 | const vdc5_scalingdown_rot_t * scldw_rot; |
dkato | 0:853f5b7408a7 | 1010 | vdc5_res_inter_t res_inter_tmp; |
dkato | 0:853f5b7408a7 | 1011 | |
dkato | 0:853f5b7408a7 | 1012 | scaler = &vdc5_regaddr_scaler[ch][scaling_id]; |
dkato | 0:853f5b7408a7 | 1013 | scldw_rot = ¶m->scalingdown_rot; |
dkato | 0:853f5b7408a7 | 1014 | |
dkato | 0:853f5b7408a7 | 1015 | /* Image area to be captured */ |
dkato | 0:853f5b7408a7 | 1016 | *(scaler->scl0_ds2) = (uint32_t)scldw_rot->res.vs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1017 | *(scaler->scl0_ds2) |= (uint32_t)scldw_rot->res.vw; |
dkato | 0:853f5b7408a7 | 1018 | *(scaler->scl0_ds3) = (uint32_t)scldw_rot->res.hs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1019 | *(scaler->scl0_ds3) |= (uint32_t)scldw_rot->res.hw; |
dkato | 0:853f5b7408a7 | 1020 | |
dkato | 0:853f5b7408a7 | 1021 | if (scaling_id == VDC5_SC_TYPE_OIR) { |
dkato | 0:853f5b7408a7 | 1022 | /* OIR */ |
dkato | 0:853f5b7408a7 | 1023 | /* Vertical and horizontal width after scaling-down control block */ |
dkato | 0:853f5b7408a7 | 1024 | *(scaler->scl0_ds7) = (uint32_t)scldw_rot->res.vw << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1025 | *(scaler->scl0_ds7) |= (uint32_t)scldw_rot->res.hw; |
dkato | 0:853f5b7408a7 | 1026 | } else { |
dkato | 0:853f5b7408a7 | 1027 | /* Scaler 0 or 1 */ |
dkato | 0:853f5b7408a7 | 1028 | /* Horizontal prefilter */ |
dkato | 0:853f5b7408a7 | 1029 | if (scldw_rot->res_pfil_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1030 | *(scaler->scl0_ds4) &= (uint32_t)~VDC5_REG_BIT29; |
dkato | 0:853f5b7408a7 | 1031 | } else { |
dkato | 0:853f5b7408a7 | 1032 | *(scaler->scl0_ds4) |= (uint32_t)VDC5_REG_BIT29; |
dkato | 0:853f5b7408a7 | 1033 | } |
dkato | 0:853f5b7408a7 | 1034 | /* Number of valid lines in vertical direction output by scaling-down control block */ |
dkato | 0:853f5b7408a7 | 1035 | *(scaler->scl0_ds7) = (uint32_t)scldw_rot->res_out_vw << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1036 | /* Number of valid horizontal pixels output by scaling-down control block */ |
dkato | 0:853f5b7408a7 | 1037 | *(scaler->scl0_ds7) |= (uint32_t)scldw_rot->res_out_hw; |
dkato | 0:853f5b7408a7 | 1038 | |
dkato | 0:853f5b7408a7 | 1039 | /* Progressive or interlace */ |
dkato | 0:853f5b7408a7 | 1040 | res_inter_tmp = VDC5_ShrdPrmGetInterlace(ch, scaling_id); |
dkato | 0:853f5b7408a7 | 1041 | /* Scaling-down */ |
dkato | 0:853f5b7408a7 | 1042 | SetScalingDown(scldw_rot, res_inter_tmp, scaler); |
dkato | 0:853f5b7408a7 | 1043 | |
dkato | 0:853f5b7408a7 | 1044 | /* Frame buffer writing mode for image processing */ |
dkato | 0:853f5b7408a7 | 1045 | *(scaler->scl1_wr1) &= (uint32_t)~VDC5_REG_MASK_0X00000070; |
dkato | 0:853f5b7408a7 | 1046 | *(scaler->scl1_wr1) |= (uint32_t)scldw_rot->res_ds_wr_md << VDC5_REG_SHIFT_4; |
dkato | 0:853f5b7408a7 | 1047 | |
dkato | 0:853f5b7408a7 | 1048 | /* Register update control register (SC0/SC1) |
dkato | 0:853f5b7408a7 | 1049 | b4 SCL1_VEN_B |
dkato | 0:853f5b7408a7 | 1050 | b0 SCL1_VEN_A */ |
dkato | 0:853f5b7408a7 | 1051 | *(scaler->scl1_update) |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 1052 | } |
dkato | 0:853f5b7408a7 | 1053 | |
dkato | 0:853f5b7408a7 | 1054 | /* Register update control register (SC0/SC1/OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 1055 | b12 SCL0_VEN_C |
dkato | 0:853f5b7408a7 | 1056 | b4 SCL0_VEN_B |
dkato | 0:853f5b7408a7 | 1057 | b0 SCL0_VEN_A */ |
dkato | 0:853f5b7408a7 | 1058 | *(scaler->scl0_update) |= (uint32_t)(VDC5_REG_BIT12 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 1059 | |
dkato | 0:853f5b7408a7 | 1060 | } /* End of function VDC5_ChangeWriteProcess() */ |
dkato | 0:853f5b7408a7 | 1061 | |
dkato | 0:853f5b7408a7 | 1062 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1063 | * @brief Sets registers for data read control processing |
dkato | 0:853f5b7408a7 | 1064 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1065 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 1066 | * @param[in] param : Data read control parameter |
dkato | 0:853f5b7408a7 | 1067 | * @retval None |
dkato | 0:853f5b7408a7 | 1068 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1069 | void VDC5_ReadDataControl ( |
dkato | 0:853f5b7408a7 | 1070 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1071 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 1072 | const vdc5_read_t * const param) |
dkato | 0:853f5b7408a7 | 1073 | { |
dkato | 0:853f5b7408a7 | 1074 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 1075 | const vdc5_regaddr_img_qlty_imp_t * img_qlty_imp; |
dkato | 0:853f5b7408a7 | 1076 | vdc5_width_read_fb_t * w_read_fb; |
dkato | 0:853f5b7408a7 | 1077 | vdc5_onoff_t graphics_enlargement; |
dkato | 0:853f5b7408a7 | 1078 | vdc5_color_space_t color_space; |
dkato | 0:853f5b7408a7 | 1079 | vdc5_resource_state_t rsrc_state; |
dkato | 0:853f5b7408a7 | 1080 | uint32_t reg_data; |
dkato | 0:853f5b7408a7 | 1081 | |
dkato | 0:853f5b7408a7 | 1082 | w_read_fb = VDC5_ShrdPrmGetFrBuffWidth_Rd(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1083 | |
dkato | 0:853f5b7408a7 | 1084 | graphics_enlargement = ConfirmGraphicsEnlargement(graphics_id, param->gr_flm_sel, w_read_fb, ¶m->gr_grc); |
dkato | 0:853f5b7408a7 | 1085 | |
dkato | 0:853f5b7408a7 | 1086 | if ((graphics_id == VDC5_GR_TYPE_GR0) || |
dkato | 0:853f5b7408a7 | 1087 | (graphics_id == VDC5_GR_TYPE_GR1) || |
dkato | 0:853f5b7408a7 | 1088 | (graphics_id == VDC5_GR_TYPE_OIR)) { |
dkato | 0:853f5b7408a7 | 1089 | SetScalerGraphics(ch, graphics_id, w_read_fb, ¶m->gr_grc, param->gr_flm_sel, graphics_enlargement); |
dkato | 0:853f5b7408a7 | 1090 | } |
dkato | 0:853f5b7408a7 | 1091 | |
dkato | 0:853f5b7408a7 | 1092 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 1093 | |
dkato | 0:853f5b7408a7 | 1094 | *(img_synthesizer->gr_flm1) &= (uint32_t)~VDC5_REG_MASK_0X00010301; |
dkato | 0:853f5b7408a7 | 1095 | /* Line offset address direction of the frame buffer */ |
dkato | 0:853f5b7408a7 | 1096 | if (param->gr_ln_off_dir != VDC5_GR_LN_OFF_DIR_INC) { |
dkato | 0:853f5b7408a7 | 1097 | *(img_synthesizer->gr_flm1) |= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 1098 | } |
dkato | 0:853f5b7408a7 | 1099 | /* Frame buffer address setting signal */ |
dkato | 0:853f5b7408a7 | 1100 | *(img_synthesizer->gr_flm1) |= (uint32_t)param->gr_flm_sel << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 1101 | /* Frame buffer burst transfer mode */ |
dkato | 0:853f5b7408a7 | 1102 | if (param->gr_bst_md != VDC5_BST_MD_32BYTE) { |
dkato | 0:853f5b7408a7 | 1103 | *(img_synthesizer->gr_flm1) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1104 | } |
dkato | 0:853f5b7408a7 | 1105 | /* Sets the frame buffer number for distortion correction */ |
dkato | 0:853f5b7408a7 | 1106 | if (param->gr_flm_sel == VDC5_GR_FLM_SEL_DISTORTION) { |
dkato | 0:853f5b7408a7 | 1107 | if (param->gr_imr_flm_inv == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1108 | *(img_synthesizer->gr_flm1) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1109 | } else { |
dkato | 0:853f5b7408a7 | 1110 | *(img_synthesizer->gr_flm1) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1111 | } |
dkato | 0:853f5b7408a7 | 1112 | } |
dkato | 0:853f5b7408a7 | 1113 | |
dkato | 0:853f5b7408a7 | 1114 | /* Frame buffer base address */ |
dkato | 0:853f5b7408a7 | 1115 | *(img_synthesizer->gr_flm2) = (uint32_t)param->gr_base & (uint32_t)~VDC5_REG_MASK_0X00000007; |
dkato | 0:853f5b7408a7 | 1116 | |
dkato | 0:853f5b7408a7 | 1117 | /* Frame buffer line offset address[byte] */ |
dkato | 0:853f5b7408a7 | 1118 | *(img_synthesizer->gr_flm3) &= (uint32_t)~VDC5_REG_MASK_0X7FFF03FF; |
dkato | 0:853f5b7408a7 | 1119 | *(img_synthesizer->gr_flm3) |= param->gr_ln_off << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1120 | |
dkato | 0:853f5b7408a7 | 1121 | /* The number of lines when reading the addresses repeatedly */ |
dkato | 0:853f5b7408a7 | 1122 | *(img_synthesizer->gr_flm5) = (uint32_t)VDC5_REG_MASK_0X000007FF; |
dkato | 0:853f5b7408a7 | 1123 | /* Number of lines in a frame */ |
dkato | 0:853f5b7408a7 | 1124 | *(img_synthesizer->gr_flm5) |= ((uint32_t)w_read_fb->in_vw - 1u) << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1125 | |
dkato | 0:853f5b7408a7 | 1126 | *(img_synthesizer->gr_flm6) &= (uint32_t)~VDC5_REG_MASK_0XF7FF1C3F; |
dkato | 0:853f5b7408a7 | 1127 | /* Format of the frame buffer read signal */ |
dkato | 0:853f5b7408a7 | 1128 | *(img_synthesizer->gr_flm6) |= (uint32_t)param->gr_format << VDC5_REG_SHIFT_28; |
dkato | 0:853f5b7408a7 | 1129 | /* Width of the horizontal valid period */ |
dkato | 0:853f5b7408a7 | 1130 | *(img_synthesizer->gr_flm6) |= ((uint32_t)w_read_fb->in_hw - 1u) << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1131 | /* Swap setting in frame buffer reading */ |
dkato | 0:853f5b7408a7 | 1132 | *(img_synthesizer->gr_flm6) |= (uint32_t)param->gr_rdswa << VDC5_REG_SHIFT_10; |
dkato | 0:853f5b7408a7 | 1133 | |
dkato | 0:853f5b7408a7 | 1134 | if ((param->gr_flm_sel == VDC5_GR_FLM_SEL_SCALE_DOWN) || (param->gr_flm_sel == VDC5_GR_FLM_SEL_FLM_NUM)) { |
dkato | 0:853f5b7408a7 | 1135 | /* Sets the amount of data to be skipped through */ |
dkato | 0:853f5b7408a7 | 1136 | *(img_synthesizer->gr_flm6) |= DisplayStartPixelSetting((uint32_t)param->gr_base, param->gr_format); |
dkato | 0:853f5b7408a7 | 1137 | } |
dkato | 0:853f5b7408a7 | 1138 | |
dkato | 0:853f5b7408a7 | 1139 | /* Graphics display mode */ |
dkato | 0:853f5b7408a7 | 1140 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 1141 | if ((graphics_id == VDC5_GR_TYPE_GR0) || |
dkato | 0:853f5b7408a7 | 1142 | (graphics_id == VDC5_GR_TYPE_OIR)) { |
dkato | 0:853f5b7408a7 | 1143 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_BACK; |
dkato | 0:853f5b7408a7 | 1144 | } else { |
dkato | 0:853f5b7408a7 | 1145 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_LOWER; |
dkato | 0:853f5b7408a7 | 1146 | } |
dkato | 0:853f5b7408a7 | 1147 | |
dkato | 0:853f5b7408a7 | 1148 | /* Graphics display area */ |
dkato | 0:853f5b7408a7 | 1149 | *(img_synthesizer->gr_ab2) = (uint32_t)param->gr_grc.vs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1150 | *(img_synthesizer->gr_ab2) |= (uint32_t)param->gr_grc.vw; |
dkato | 0:853f5b7408a7 | 1151 | *(img_synthesizer->gr_ab3) = (uint32_t)param->gr_grc.hs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1152 | *(img_synthesizer->gr_ab3) |= (uint32_t)param->gr_grc.hw; |
dkato | 0:853f5b7408a7 | 1153 | |
dkato | 0:853f5b7408a7 | 1154 | /* Initialize alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 1155 | if ((graphics_id == VDC5_GR_TYPE_GR1) || |
dkato | 0:853f5b7408a7 | 1156 | (graphics_id == VDC5_GR_TYPE_GR2) || |
dkato | 0:853f5b7408a7 | 1157 | (graphics_id == VDC5_GR_TYPE_GR3)) { |
dkato | 0:853f5b7408a7 | 1158 | /* Turns off alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 1159 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X0000D000; |
dkato | 0:853f5b7408a7 | 1160 | /* The valid image area for alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 1161 | reg_data = *(img_synthesizer->gr_ab2); |
dkato | 0:853f5b7408a7 | 1162 | *(img_synthesizer->gr_ab4) = reg_data; |
dkato | 0:853f5b7408a7 | 1163 | reg_data = *(img_synthesizer->gr_ab3); |
dkato | 0:853f5b7408a7 | 1164 | *(img_synthesizer->gr_ab5) = reg_data; |
dkato | 0:853f5b7408a7 | 1165 | /* Disable fade-in and fade-out */ |
dkato | 0:853f5b7408a7 | 1166 | *(img_synthesizer->gr_ab6) &= (uint32_t)~VDC5_REG_MASK_0X01FF00FF; |
dkato | 0:853f5b7408a7 | 1167 | /* Set the initial alpha value to '255' */ |
dkato | 0:853f5b7408a7 | 1168 | *(img_synthesizer->gr_ab7) |= (uint32_t)VDC5_REG_MASK_0X00FF0000; |
dkato | 0:853f5b7408a7 | 1169 | } |
dkato | 0:853f5b7408a7 | 1170 | /* Turns off chroma-key processing */ |
dkato | 0:853f5b7408a7 | 1171 | *(img_synthesizer->gr_ab7) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1172 | |
dkato | 0:853f5b7408a7 | 1173 | if ((graphics_id == VDC5_GR_TYPE_GR0) || (graphics_id == VDC5_GR_TYPE_OIR)) { |
dkato | 0:853f5b7408a7 | 1174 | /* Alpha value is set to 255. */ |
dkato | 0:853f5b7408a7 | 1175 | *(img_synthesizer->gr_ab10) |= (uint32_t)VDC5_REG_ALPHA_8BIT; |
dkato | 0:853f5b7408a7 | 1176 | *(img_synthesizer->gr_ab11) |= (uint32_t)VDC5_REG_ALPHA_8BIT; |
dkato | 0:853f5b7408a7 | 1177 | } |
dkato | 0:853f5b7408a7 | 1178 | if ((graphics_id == VDC5_GR_TYPE_GR0) || (graphics_id == VDC5_GR_TYPE_GR1)) { |
dkato | 0:853f5b7408a7 | 1179 | /* Swapping of data read from buffer in the YCbCr422 format */ |
dkato | 0:853f5b7408a7 | 1180 | *(img_synthesizer->gr_flm6) &= (uint32_t)~VDC5_REG_MASK_0X0000E000; |
dkato | 0:853f5b7408a7 | 1181 | if (param->gr_format == VDC5_GR_FORMAT_YCBCR422) { |
dkato | 0:853f5b7408a7 | 1182 | *(img_synthesizer->gr_flm6) |= (uint32_t)param->gr_ycc_swap << VDC5_REG_SHIFT_13; |
dkato | 0:853f5b7408a7 | 1183 | /* The interpolation mode for YCC422 to YCbCr444 conversion is fixed to average interpolation */ |
dkato | 0:853f5b7408a7 | 1184 | *(img_synthesizer->gr_flm6) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1185 | } else { |
dkato | 0:853f5b7408a7 | 1186 | /* If the format of the frame buffer read signal is not YCbCr422, |
dkato | 0:853f5b7408a7 | 1187 | initialize the swapping of data read from buffer in the YCbCr422 format. */ |
dkato | 0:853f5b7408a7 | 1188 | *(img_synthesizer->gr_flm6) |= (uint32_t)VDC5_GR_YCCSWAP_CBY0CRY1 << VDC5_REG_SHIFT_13; |
dkato | 0:853f5b7408a7 | 1189 | } |
dkato | 0:853f5b7408a7 | 1190 | |
dkato | 0:853f5b7408a7 | 1191 | SetupGraphicsVIN(ch, graphics_id, param->gr_flm_sel, graphics_enlargement); |
dkato | 0:853f5b7408a7 | 1192 | |
dkato | 0:853f5b7408a7 | 1193 | color_space = VDC5_ShrdPrmGetColorSpaceFbRd(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1194 | |
dkato | 0:853f5b7408a7 | 1195 | SetScalerBackgroundColor(ch, graphics_id, color_space); |
dkato | 0:853f5b7408a7 | 1196 | SetImgQaImproverColorMtx(ch, graphics_id, color_space); |
dkato | 0:853f5b7408a7 | 1197 | |
dkato | 0:853f5b7408a7 | 1198 | if (graphics_id == VDC5_GR_TYPE_GR0) { |
dkato | 0:853f5b7408a7 | 1199 | img_qlty_imp = &vdc5_regaddr_img_qlty_imp[ch][VDC5_IMG_IMPRV_0]; |
dkato | 0:853f5b7408a7 | 1200 | } else { |
dkato | 0:853f5b7408a7 | 1201 | img_qlty_imp = &vdc5_regaddr_img_qlty_imp[ch][VDC5_IMG_IMPRV_1]; |
dkato | 0:853f5b7408a7 | 1202 | } |
dkato | 0:853f5b7408a7 | 1203 | /* Operating mode */ |
dkato | 0:853f5b7408a7 | 1204 | if (color_space == VDC5_COLOR_SPACE_GBR) { |
dkato | 0:853f5b7408a7 | 1205 | *(img_qlty_imp->adj_enh_tim1) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1206 | } else { |
dkato | 0:853f5b7408a7 | 1207 | *(img_qlty_imp->adj_enh_tim1) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1208 | } |
dkato | 0:853f5b7408a7 | 1209 | /* Register update control register (ADJx_UPDATE) |
dkato | 0:853f5b7408a7 | 1210 | b0 ADJx_VEN */ |
dkato | 0:853f5b7408a7 | 1211 | *(img_qlty_imp->adj_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1212 | } |
dkato | 0:853f5b7408a7 | 1213 | |
dkato | 0:853f5b7408a7 | 1214 | rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_1_RD); |
dkato | 0:853f5b7408a7 | 1215 | if ((graphics_id == VDC5_GR_TYPE_GR0) && (rsrc_state == VDC5_RESOURCE_ST_INVALID)) { |
dkato | 0:853f5b7408a7 | 1216 | /* Graphics 0 is specified when graphics 1 is not used. */ |
dkato | 0:853f5b7408a7 | 1217 | SetImgQaImproverColorMtx(ch, VDC5_GR_TYPE_GR1, VDC5_COLOR_SPACE_GBR); |
dkato | 0:853f5b7408a7 | 1218 | } |
dkato | 0:853f5b7408a7 | 1219 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 1220 | b8 GRx_UPDATE |
dkato | 0:853f5b7408a7 | 1221 | b4 GRx_P_VEN |
dkato | 0:853f5b7408a7 | 1222 | b0 GRx_IBUS_VEN */ |
dkato | 0:853f5b7408a7 | 1223 | *(img_synthesizer->gr_update) |= (uint32_t)(VDC5_REG_BIT8 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 1224 | |
dkato | 0:853f5b7408a7 | 1225 | } /* End of function VDC5_ReadDataControl() */ |
dkato | 0:853f5b7408a7 | 1226 | |
dkato | 0:853f5b7408a7 | 1227 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1228 | * @brief Sets registers for data read change processing |
dkato | 0:853f5b7408a7 | 1229 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1230 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 1231 | * @param[in] param : Data read change parameter |
dkato | 0:853f5b7408a7 | 1232 | * @retval None |
dkato | 0:853f5b7408a7 | 1233 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1234 | void VDC5_ChangeReadProcess ( |
dkato | 0:853f5b7408a7 | 1235 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1236 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 1237 | const vdc5_read_chg_t * const param) |
dkato | 0:853f5b7408a7 | 1238 | { |
dkato | 0:853f5b7408a7 | 1239 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 1240 | vdc5_gr_flm_sel_t gr_flm_sel_tmp; |
dkato | 0:853f5b7408a7 | 1241 | vdc5_period_rect_t * gr_grc_tmp; |
dkato | 0:853f5b7408a7 | 1242 | vdc5_width_read_fb_t * w_read_fb; |
dkato | 0:853f5b7408a7 | 1243 | vdc5_onoff_t graphics_enlargement; |
dkato | 0:853f5b7408a7 | 1244 | vdc5_gr_format_t gr_format_tmp; |
dkato | 0:853f5b7408a7 | 1245 | |
dkato | 0:853f5b7408a7 | 1246 | gr_flm_sel_tmp = VDC5_ShrdPrmGetSelFbAddrSig(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1247 | gr_grc_tmp = VDC5_ShrdPrmGetDisplayArea(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1248 | w_read_fb = VDC5_ShrdPrmGetFrBuffWidth_Rd(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1249 | |
dkato | 0:853f5b7408a7 | 1250 | graphics_enlargement = ConfirmGraphicsEnlargement(graphics_id, gr_flm_sel_tmp, w_read_fb, gr_grc_tmp); |
dkato | 0:853f5b7408a7 | 1251 | |
dkato | 0:853f5b7408a7 | 1252 | if ((graphics_id == VDC5_GR_TYPE_GR0) || |
dkato | 0:853f5b7408a7 | 1253 | (graphics_id == VDC5_GR_TYPE_GR1) || |
dkato | 0:853f5b7408a7 | 1254 | (graphics_id == VDC5_GR_TYPE_OIR)) { |
dkato | 0:853f5b7408a7 | 1255 | SetScalerGraphics(ch, graphics_id, w_read_fb, gr_grc_tmp, gr_flm_sel_tmp, graphics_enlargement); |
dkato | 0:853f5b7408a7 | 1256 | } |
dkato | 0:853f5b7408a7 | 1257 | |
dkato | 0:853f5b7408a7 | 1258 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 1259 | |
dkato | 0:853f5b7408a7 | 1260 | /* Frame buffer base address */ |
dkato | 0:853f5b7408a7 | 1261 | if (param->gr_base != NULL) { |
dkato | 0:853f5b7408a7 | 1262 | *(img_synthesizer->gr_flm2) = (uint32_t)param->gr_base & (uint32_t)~VDC5_REG_MASK_0X00000007; |
dkato | 0:853f5b7408a7 | 1263 | |
dkato | 0:853f5b7408a7 | 1264 | if ((gr_flm_sel_tmp == VDC5_GR_FLM_SEL_SCALE_DOWN) || (gr_flm_sel_tmp == VDC5_GR_FLM_SEL_FLM_NUM)) { |
dkato | 0:853f5b7408a7 | 1265 | gr_format_tmp = VDC5_ShrdPrmGetGraphicsFormat(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1266 | /* Sets the amount of data to be skipped through */ |
dkato | 0:853f5b7408a7 | 1267 | *(img_synthesizer->gr_flm6) &= (uint32_t)~VDC5_REG_MASK_0X0000003F; |
dkato | 0:853f5b7408a7 | 1268 | *(img_synthesizer->gr_flm6) |= DisplayStartPixelSetting((uint32_t)param->gr_base, gr_format_tmp); |
dkato | 0:853f5b7408a7 | 1269 | } |
dkato | 0:853f5b7408a7 | 1270 | } |
dkato | 0:853f5b7408a7 | 1271 | |
dkato | 0:853f5b7408a7 | 1272 | /* Size of the frame buffer to be read */ |
dkato | 0:853f5b7408a7 | 1273 | if (param->width_read_fb != NULL) { |
dkato | 0:853f5b7408a7 | 1274 | /* Number of lines in a frame */ |
dkato | 0:853f5b7408a7 | 1275 | *(img_synthesizer->gr_flm5) &= (uint32_t)~VDC5_REG_MASK_0X07FF0000; |
dkato | 0:853f5b7408a7 | 1276 | *(img_synthesizer->gr_flm5) |= ((uint32_t)param->width_read_fb->in_vw - 1u) << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1277 | /* Width of the horizontal valid period */ |
dkato | 0:853f5b7408a7 | 1278 | *(img_synthesizer->gr_flm6) &= (uint32_t)~VDC5_REG_MASK_0X07FF0000; |
dkato | 0:853f5b7408a7 | 1279 | *(img_synthesizer->gr_flm6) |= ((uint32_t)param->width_read_fb->in_hw - 1u) << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1280 | } |
dkato | 0:853f5b7408a7 | 1281 | |
dkato | 0:853f5b7408a7 | 1282 | /* Graphics display mode */ |
dkato | 0:853f5b7408a7 | 1283 | if (param->gr_disp_sel != NULL) { |
dkato | 0:853f5b7408a7 | 1284 | if (*(param->gr_disp_sel) != VDC5_DISPSEL_IGNORED) { |
dkato | 0:853f5b7408a7 | 1285 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 1286 | *(img_synthesizer->gr_ab1) |= (uint32_t)*(param->gr_disp_sel); |
dkato | 0:853f5b7408a7 | 1287 | } |
dkato | 0:853f5b7408a7 | 1288 | } |
dkato | 0:853f5b7408a7 | 1289 | |
dkato | 0:853f5b7408a7 | 1290 | /* Graphics display area */ |
dkato | 0:853f5b7408a7 | 1291 | if (param->gr_grc != NULL) { |
dkato | 0:853f5b7408a7 | 1292 | *(img_synthesizer->gr_ab2) = (uint32_t)param->gr_grc->vs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1293 | *(img_synthesizer->gr_ab2) |= (uint32_t)param->gr_grc->vw; |
dkato | 0:853f5b7408a7 | 1294 | *(img_synthesizer->gr_ab3) = (uint32_t)param->gr_grc->hs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1295 | *(img_synthesizer->gr_ab3) |= (uint32_t)param->gr_grc->hw; |
dkato | 0:853f5b7408a7 | 1296 | } |
dkato | 0:853f5b7408a7 | 1297 | |
dkato | 0:853f5b7408a7 | 1298 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 1299 | b4 GRx_P_VEN |
dkato | 0:853f5b7408a7 | 1300 | b0 GRx_IBUS_VEN */ |
dkato | 0:853f5b7408a7 | 1301 | *(img_synthesizer->gr_update) |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 1302 | |
dkato | 0:853f5b7408a7 | 1303 | if ((graphics_id == VDC5_GR_TYPE_GR0) || (graphics_id == VDC5_GR_TYPE_GR1)) { |
dkato | 0:853f5b7408a7 | 1304 | ChangeGraphicsVIN(ch, graphics_id, gr_flm_sel_tmp, graphics_enlargement); |
dkato | 0:853f5b7408a7 | 1305 | } |
dkato | 0:853f5b7408a7 | 1306 | } /* End of function VDC5_ChangeReadProcess() */ |
dkato | 0:853f5b7408a7 | 1307 | |
dkato | 0:853f5b7408a7 | 1308 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1309 | * @brief Sets registers for data write/read start processing |
dkato | 0:853f5b7408a7 | 1310 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1311 | * @param[in] layer_id : Layer ID |
dkato | 0:853f5b7408a7 | 1312 | * @param[in] param : Data write/read start parameter |
dkato | 0:853f5b7408a7 | 1313 | * @retval None |
dkato | 0:853f5b7408a7 | 1314 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1315 | void VDC5_StartProcess (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id, const vdc5_start_t * const param) |
dkato | 0:853f5b7408a7 | 1316 | { |
dkato | 0:853f5b7408a7 | 1317 | uint32_t layer_id_num; |
dkato | 0:853f5b7408a7 | 1318 | vdc5_resource_state_t resource_state; |
dkato | 0:853f5b7408a7 | 1319 | vdc5_resource_state_t oir_resrc_st_before; |
dkato | 0:853f5b7408a7 | 1320 | vdc5_resource_state_t oir_resrc_st_after; |
dkato | 0:853f5b7408a7 | 1321 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 1322 | |
dkato | 0:853f5b7408a7 | 1323 | if (param->gr_disp_sel != NULL) { |
dkato | 0:853f5b7408a7 | 1324 | /* Set graphics display mode */ |
dkato | 0:853f5b7408a7 | 1325 | SetGraphicsDisplayMode(ch, layer_id, param->gr_disp_sel); |
dkato | 0:853f5b7408a7 | 1326 | } |
dkato | 0:853f5b7408a7 | 1327 | |
dkato | 0:853f5b7408a7 | 1328 | oir_resrc_st_before = VDC5_ShrdPrmGetOirRwProcEnabled(ch); |
dkato | 0:853f5b7408a7 | 1329 | |
dkato | 0:853f5b7408a7 | 1330 | if (layer_id != VDC5_LAYER_ID_ALL) { |
dkato | 0:853f5b7408a7 | 1331 | rw_proc_function_tbl[layer_id](ch, VDC5_ON); |
dkato | 0:853f5b7408a7 | 1332 | } else { |
dkato | 0:853f5b7408a7 | 1333 | for (layer_id_num = 0; layer_id_num < (uint32_t)VDC5_LAYER_ID_NUM; layer_id_num++) { |
dkato | 0:853f5b7408a7 | 1334 | resource_state = VDC5_ShrdPrmGetRwProcReady(ch, (vdc5_layer_id_t)layer_id_num); |
dkato | 0:853f5b7408a7 | 1335 | if (resource_state != VDC5_RESOURCE_ST_INVALID) { |
dkato | 0:853f5b7408a7 | 1336 | rw_proc_function_tbl[layer_id_num](ch, VDC5_ON); |
dkato | 0:853f5b7408a7 | 1337 | } |
dkato | 0:853f5b7408a7 | 1338 | } |
dkato | 0:853f5b7408a7 | 1339 | } |
dkato | 0:853f5b7408a7 | 1340 | SetRegUpdateRwEnable(ch, layer_id); |
dkato | 0:853f5b7408a7 | 1341 | |
dkato | 0:853f5b7408a7 | 1342 | oir_resrc_st_after = VDC5_ShrdPrmGetOirRwProcEnabled(ch); |
dkato | 0:853f5b7408a7 | 1343 | |
dkato | 0:853f5b7408a7 | 1344 | /* OIR */ |
dkato | 0:853f5b7408a7 | 1345 | if ((oir_resrc_st_before == VDC5_RESOURCE_ST_INVALID) && |
dkato | 0:853f5b7408a7 | 1346 | (oir_resrc_st_after != VDC5_RESOURCE_ST_INVALID)) { |
dkato | 0:853f5b7408a7 | 1347 | scaler = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR]; |
dkato | 0:853f5b7408a7 | 1348 | *(scaler->scl0_frc3) |= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 1349 | /* Register update control register (OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 1350 | b8 SCL0_UPDATE */ |
dkato | 0:853f5b7408a7 | 1351 | *(scaler->scl0_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1352 | } |
dkato | 0:853f5b7408a7 | 1353 | } /* End of function VDC5_StartProcess() */ |
dkato | 0:853f5b7408a7 | 1354 | |
dkato | 0:853f5b7408a7 | 1355 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1356 | * @brief Sets registers for data write/read stop processing |
dkato | 0:853f5b7408a7 | 1357 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1358 | * @param[in] layer_id : Layer ID |
dkato | 0:853f5b7408a7 | 1359 | * @retval None |
dkato | 0:853f5b7408a7 | 1360 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1361 | void VDC5_StopProcess (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id) |
dkato | 0:853f5b7408a7 | 1362 | { |
dkato | 0:853f5b7408a7 | 1363 | uint32_t layer_id_num; |
dkato | 0:853f5b7408a7 | 1364 | vdc5_resource_state_t resource_state; |
dkato | 0:853f5b7408a7 | 1365 | vdc5_resource_state_t oir_resrc_st_before; |
dkato | 0:853f5b7408a7 | 1366 | vdc5_resource_state_t oir_resrc_st_after; |
dkato | 0:853f5b7408a7 | 1367 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 1368 | |
dkato | 0:853f5b7408a7 | 1369 | oir_resrc_st_before = VDC5_ShrdPrmGetOirRwProcEnabled(ch); |
dkato | 0:853f5b7408a7 | 1370 | |
dkato | 0:853f5b7408a7 | 1371 | if (layer_id != VDC5_LAYER_ID_ALL) { |
dkato | 0:853f5b7408a7 | 1372 | rw_proc_function_tbl[layer_id](ch, VDC5_OFF); |
dkato | 0:853f5b7408a7 | 1373 | } else { |
dkato | 0:853f5b7408a7 | 1374 | for (layer_id_num = 0; layer_id_num < (uint32_t)VDC5_LAYER_ID_NUM; layer_id_num++) { |
dkato | 0:853f5b7408a7 | 1375 | resource_state = VDC5_ShrdPrmGetRwProcEnabled(ch, (vdc5_layer_id_t)layer_id_num); |
dkato | 0:853f5b7408a7 | 1376 | if (resource_state != VDC5_RESOURCE_ST_INVALID) { |
dkato | 0:853f5b7408a7 | 1377 | rw_proc_function_tbl[layer_id_num](ch, VDC5_OFF); |
dkato | 0:853f5b7408a7 | 1378 | } |
dkato | 0:853f5b7408a7 | 1379 | } |
dkato | 0:853f5b7408a7 | 1380 | } |
dkato | 0:853f5b7408a7 | 1381 | SetRegUpdateRwEnable(ch, layer_id); |
dkato | 0:853f5b7408a7 | 1382 | |
dkato | 0:853f5b7408a7 | 1383 | oir_resrc_st_after = VDC5_ShrdPrmGetOirRwProcEnabled(ch); |
dkato | 0:853f5b7408a7 | 1384 | |
dkato | 0:853f5b7408a7 | 1385 | /* OIR */ |
dkato | 0:853f5b7408a7 | 1386 | if ((oir_resrc_st_before != VDC5_RESOURCE_ST_INVALID) && |
dkato | 0:853f5b7408a7 | 1387 | (oir_resrc_st_after == VDC5_RESOURCE_ST_INVALID)) { |
dkato | 0:853f5b7408a7 | 1388 | scaler = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR]; |
dkato | 0:853f5b7408a7 | 1389 | *(scaler->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 1390 | /* Register update control register (OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 1391 | b8 SCL0_UPDATE */ |
dkato | 0:853f5b7408a7 | 1392 | *(scaler->scl0_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1393 | } |
dkato | 0:853f5b7408a7 | 1394 | } /* End of function VDC5_StopProcess() */ |
dkato | 0:853f5b7408a7 | 1395 | |
dkato | 0:853f5b7408a7 | 1396 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1397 | * @brief Sets registers for data write/read control release processing |
dkato | 0:853f5b7408a7 | 1398 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1399 | * @param[in] layer_id : Layer ID |
dkato | 0:853f5b7408a7 | 1400 | * @retval None |
dkato | 0:853f5b7408a7 | 1401 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1402 | void VDC5_ReleaseDataControl (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id) |
dkato | 0:853f5b7408a7 | 1403 | { |
dkato | 0:853f5b7408a7 | 1404 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 1405 | vdc5_resource_state_t resource_state; |
dkato | 0:853f5b7408a7 | 1406 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer_vin; |
dkato | 0:853f5b7408a7 | 1407 | |
dkato | 0:853f5b7408a7 | 1408 | resource_state = VDC5_ShrdPrmGetRwProcReady(ch, VDC5_LAYER_ID_1_RD); |
dkato | 0:853f5b7408a7 | 1409 | if ((layer_id == VDC5_LAYER_ID_1_RD) || |
dkato | 0:853f5b7408a7 | 1410 | ((layer_id == VDC5_LAYER_ID_ALL) && (resource_state!= VDC5_RESOURCE_ST_INVALID))) { |
dkato | 0:853f5b7408a7 | 1411 | SetInitialConnection(ch); |
dkato | 0:853f5b7408a7 | 1412 | |
dkato | 0:853f5b7408a7 | 1413 | /* Use Vsync and enable signal output from scaler 0 */ |
dkato | 0:853f5b7408a7 | 1414 | scaler = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0]; |
dkato | 0:853f5b7408a7 | 1415 | *(scaler->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1416 | /* Register update control register (SC0_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 1417 | b8 SCL0_UPDATE */ |
dkato | 0:853f5b7408a7 | 1418 | *(scaler->scl0_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1419 | |
dkato | 0:853f5b7408a7 | 1420 | scaler = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1]; |
dkato | 0:853f5b7408a7 | 1421 | *(scaler->scl0_frc3) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1422 | /* Register update control register (SC1_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 1423 | b8 SCL0_UPDATE */ |
dkato | 0:853f5b7408a7 | 1424 | *(scaler->scl0_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1425 | |
dkato | 0:853f5b7408a7 | 1426 | /* Initialize the color matrix in the image quality improver (scaler 1 output) */ |
dkato | 0:853f5b7408a7 | 1427 | SetImgQaImproverColorMtx(ch, VDC5_GR_TYPE_GR1, VDC5_COLOR_SPACE_GBR); |
dkato | 0:853f5b7408a7 | 1428 | } |
dkato | 0:853f5b7408a7 | 1429 | |
dkato | 0:853f5b7408a7 | 1430 | resource_state = VDC5_ShrdPrmGetRwProcReady(ch, VDC5_LAYER_ID_0_RD); |
dkato | 0:853f5b7408a7 | 1431 | if ((layer_id == VDC5_LAYER_ID_0_RD) || |
dkato | 0:853f5b7408a7 | 1432 | ((layer_id == VDC5_LAYER_ID_ALL) && (resource_state!= VDC5_RESOURCE_ST_INVALID))) { |
dkato | 0:853f5b7408a7 | 1433 | img_synthesizer_vin = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_VIN]; |
dkato | 0:853f5b7408a7 | 1434 | |
dkato | 0:853f5b7408a7 | 1435 | /* Turns off alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 1436 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 1437 | /* Selection of lower-layer plane in scaler, graphics 1 is used as lower-layer graphics. */ |
dkato | 0:853f5b7408a7 | 1438 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 1439 | /* Graphics display mode in VIN */ |
dkato | 0:853f5b7408a7 | 1440 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 1441 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_DISPSEL_LOWER; |
dkato | 0:853f5b7408a7 | 1442 | /* Disable fade-in and fade-out */ |
dkato | 0:853f5b7408a7 | 1443 | *(img_synthesizer_vin->gr_ab6) &= (uint32_t)~VDC5_REG_MASK_0X01FF00FF; |
dkato | 0:853f5b7408a7 | 1444 | /* Set the initial alpha value to '255' */ |
dkato | 0:853f5b7408a7 | 1445 | *(img_synthesizer_vin->gr_ab7) |= (uint32_t)VDC5_REG_MASK_0X00FF0000; |
dkato | 0:853f5b7408a7 | 1446 | |
dkato | 0:853f5b7408a7 | 1447 | /* Graphics register update control register (GR_VIN_UPDATE) |
dkato | 0:853f5b7408a7 | 1448 | b8 GR_VIN_UPDATE |
dkato | 0:853f5b7408a7 | 1449 | b4 GR_VIN_P_VEN */ |
dkato | 0:853f5b7408a7 | 1450 | *(img_synthesizer_vin->gr_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 1451 | } |
dkato | 0:853f5b7408a7 | 1452 | } /* End of function VDC5_ReleaseDataControl() */ |
dkato | 0:853f5b7408a7 | 1453 | |
dkato | 0:853f5b7408a7 | 1454 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1455 | * @brief Sets registers for noise reduction |
dkato | 0:853f5b7408a7 | 1456 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1457 | * @param[in] nr1d_on : Noise reduction ON/OFF setting |
dkato | 0:853f5b7408a7 | 1458 | * @param[in] param : Noise reduction setup parameter |
dkato | 0:853f5b7408a7 | 1459 | * @retval None |
dkato | 0:853f5b7408a7 | 1460 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1461 | void VDC5_VideoNoiseReduction ( |
dkato | 0:853f5b7408a7 | 1462 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1463 | const vdc5_onoff_t nr1d_on, |
dkato | 0:853f5b7408a7 | 1464 | const vdc5_noise_reduction_t * const param) |
dkato | 0:853f5b7408a7 | 1465 | { |
dkato | 0:853f5b7408a7 | 1466 | const vdc5_regaddr_input_ctrl_t * input_ctrl; |
dkato | 0:853f5b7408a7 | 1467 | const vdc5_nr_param_t * nr_param; |
dkato | 0:853f5b7408a7 | 1468 | |
dkato | 0:853f5b7408a7 | 1469 | input_ctrl = &vdc5_regaddr_input_ctrl[ch]; |
dkato | 0:853f5b7408a7 | 1470 | |
dkato | 0:853f5b7408a7 | 1471 | if (param != NULL) { |
dkato | 0:853f5b7408a7 | 1472 | /* Y/G signal noise reduction parameter */ |
dkato | 0:853f5b7408a7 | 1473 | nr_param = ¶m->y; |
dkato | 0:853f5b7408a7 | 1474 | *(input_ctrl->imgcnt_nr_cnt0) &= (uint32_t)~VDC5_REG_MASK_0X00007F33; |
dkato | 0:853f5b7408a7 | 1475 | /* Maximum value of coring (absolute value) */ |
dkato | 0:853f5b7408a7 | 1476 | *(input_ctrl->imgcnt_nr_cnt0) |= nr_param->nr1d_th << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 1477 | /* TAP select */ |
dkato | 0:853f5b7408a7 | 1478 | *(input_ctrl->imgcnt_nr_cnt0) |= (uint32_t)nr_param->nr1d_tap << VDC5_REG_SHIFT_4; |
dkato | 0:853f5b7408a7 | 1479 | /* Noise reduction gain adjustment */ |
dkato | 0:853f5b7408a7 | 1480 | *(input_ctrl->imgcnt_nr_cnt0) |= (uint32_t)nr_param->nr1d_gain; |
dkato | 0:853f5b7408a7 | 1481 | |
dkato | 0:853f5b7408a7 | 1482 | /* Cb/B signal noise reduction parameter */ |
dkato | 0:853f5b7408a7 | 1483 | nr_param = ¶m->cb; |
dkato | 0:853f5b7408a7 | 1484 | /* Maximum value of coring (absolute value) */ |
dkato | 0:853f5b7408a7 | 1485 | *(input_ctrl->imgcnt_nr_cnt1) = nr_param->nr1d_th << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 1486 | /* TAP select */ |
dkato | 0:853f5b7408a7 | 1487 | *(input_ctrl->imgcnt_nr_cnt1) |= (uint32_t)nr_param->nr1d_tap << VDC5_REG_SHIFT_20; |
dkato | 0:853f5b7408a7 | 1488 | /* Noise reduction gain adjustment */ |
dkato | 0:853f5b7408a7 | 1489 | *(input_ctrl->imgcnt_nr_cnt1) |= (uint32_t)nr_param->nr1d_gain << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1490 | |
dkato | 0:853f5b7408a7 | 1491 | /* Cr/R signal noise reduction parameter */ |
dkato | 0:853f5b7408a7 | 1492 | nr_param = ¶m->cr; |
dkato | 0:853f5b7408a7 | 1493 | /* Maximum value of coring (absolute value) */ |
dkato | 0:853f5b7408a7 | 1494 | *(input_ctrl->imgcnt_nr_cnt1) |= nr_param->nr1d_th << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 1495 | /* TAP select */ |
dkato | 0:853f5b7408a7 | 1496 | *(input_ctrl->imgcnt_nr_cnt1) |= (uint32_t)nr_param->nr1d_tap << VDC5_REG_SHIFT_4; |
dkato | 0:853f5b7408a7 | 1497 | /* Noise reduction gain adjustment */ |
dkato | 0:853f5b7408a7 | 1498 | *(input_ctrl->imgcnt_nr_cnt1) |= (uint32_t)nr_param->nr1d_gain; |
dkato | 0:853f5b7408a7 | 1499 | } |
dkato | 0:853f5b7408a7 | 1500 | |
dkato | 0:853f5b7408a7 | 1501 | if (nr1d_on == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1502 | *(input_ctrl->imgcnt_nr_cnt0) &= (uint32_t)~VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 1503 | } else { |
dkato | 0:853f5b7408a7 | 1504 | *(input_ctrl->imgcnt_nr_cnt0) |= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 1505 | } |
dkato | 0:853f5b7408a7 | 1506 | |
dkato | 0:853f5b7408a7 | 1507 | /* Register update control register (IMGCNT_UPDATE) |
dkato | 0:853f5b7408a7 | 1508 | b0 IMGCNT_VEN */ |
dkato | 0:853f5b7408a7 | 1509 | *(input_ctrl->imgcnt_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1510 | |
dkato | 0:853f5b7408a7 | 1511 | } /* End of function VDC5_VideoNoiseReduction() */ |
dkato | 0:853f5b7408a7 | 1512 | |
dkato | 0:853f5b7408a7 | 1513 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1514 | * @brief Sets registers for color matrix |
dkato | 0:853f5b7408a7 | 1515 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1516 | * @param[in] param : Color matrix setup parameter |
dkato | 0:853f5b7408a7 | 1517 | * @retval None |
dkato | 0:853f5b7408a7 | 1518 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1519 | void VDC5_ImageColorMatrix (const vdc5_channel_t ch, const vdc5_color_matrix_t * const param) |
dkato | 0:853f5b7408a7 | 1520 | { |
dkato | 0:853f5b7408a7 | 1521 | SetColorMatrix(param->mtx_mode, param->offset, param->gain, &vdc5_regaddr_color_matrix[ch][param->module]); |
dkato | 0:853f5b7408a7 | 1522 | } /* End of function VDC5_ImageColorMatrix() */ |
dkato | 0:853f5b7408a7 | 1523 | |
dkato | 0:853f5b7408a7 | 1524 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1525 | * @brief Sets registers for image enhancement processing |
dkato | 0:853f5b7408a7 | 1526 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1527 | * @param[in] imgimprv_id : Image quality improver ID |
dkato | 0:853f5b7408a7 | 1528 | * @param[in] shp_h_on : Sharpness ON/OFF setting |
dkato | 0:853f5b7408a7 | 1529 | * @param[in] sharp_param : Sharpness setup parameter |
dkato | 0:853f5b7408a7 | 1530 | * @param[in] lti_h_on : LTI ON/OFF setting |
dkato | 0:853f5b7408a7 | 1531 | * @param[in] lti_param : LTI setup parameter |
dkato | 0:853f5b7408a7 | 1532 | * @param[in] enh_area : Enhancer-enabled area setup parameter |
dkato | 0:853f5b7408a7 | 1533 | * @retval None |
dkato | 0:853f5b7408a7 | 1534 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1535 | void VDC5_ImageEnhancement ( |
dkato | 0:853f5b7408a7 | 1536 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1537 | const vdc5_imgimprv_id_t imgimprv_id, |
dkato | 0:853f5b7408a7 | 1538 | const vdc5_onoff_t shp_h_on, |
dkato | 0:853f5b7408a7 | 1539 | const vdc5_enhance_sharp_t * const sharp_param, |
dkato | 0:853f5b7408a7 | 1540 | const vdc5_onoff_t lti_h_on, |
dkato | 0:853f5b7408a7 | 1541 | const vdc5_enhance_lti_t * const lti_param, |
dkato | 0:853f5b7408a7 | 1542 | const vdc5_period_rect_t * const enh_area) |
dkato | 0:853f5b7408a7 | 1543 | { |
dkato | 0:853f5b7408a7 | 1544 | const vdc5_regaddr_img_qlty_imp_t * img_qlty_imp; |
dkato | 0:853f5b7408a7 | 1545 | |
dkato | 0:853f5b7408a7 | 1546 | img_qlty_imp = &vdc5_regaddr_img_qlty_imp[ch][imgimprv_id]; |
dkato | 0:853f5b7408a7 | 1547 | |
dkato | 0:853f5b7408a7 | 1548 | /* Sharpness */ |
dkato | 0:853f5b7408a7 | 1549 | SetImageEnhancementSharpness(shp_h_on, sharp_param, img_qlty_imp); |
dkato | 0:853f5b7408a7 | 1550 | |
dkato | 0:853f5b7408a7 | 1551 | /* LTI */ |
dkato | 0:853f5b7408a7 | 1552 | SetImageEnhancementLti(lti_h_on, lti_param, img_qlty_imp); |
dkato | 0:853f5b7408a7 | 1553 | |
dkato | 0:853f5b7408a7 | 1554 | /* Enhancer area */ |
dkato | 0:853f5b7408a7 | 1555 | if (enh_area != NULL) { |
dkato | 0:853f5b7408a7 | 1556 | *(img_qlty_imp->adj_enh_tim2) = (uint32_t)enh_area->vs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1557 | *(img_qlty_imp->adj_enh_tim2) |= (uint32_t)enh_area->vw; |
dkato | 0:853f5b7408a7 | 1558 | *(img_qlty_imp->adj_enh_tim3) = (uint32_t)enh_area->hs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1559 | *(img_qlty_imp->adj_enh_tim3) |= (uint32_t)enh_area->hw; |
dkato | 0:853f5b7408a7 | 1560 | } |
dkato | 0:853f5b7408a7 | 1561 | |
dkato | 0:853f5b7408a7 | 1562 | /* Register update control register (ADJx_UPDATE) |
dkato | 0:853f5b7408a7 | 1563 | b0 ADJx_VEN */ |
dkato | 0:853f5b7408a7 | 1564 | *(img_qlty_imp->adj_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1565 | |
dkato | 0:853f5b7408a7 | 1566 | } /* End of function VDC5_ImageEnhancement() */ |
dkato | 0:853f5b7408a7 | 1567 | |
dkato | 0:853f5b7408a7 | 1568 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1569 | * @brief Sets registers for black stretch |
dkato | 0:853f5b7408a7 | 1570 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1571 | * @param[in] imgimprv_id : Image quality improver ID |
dkato | 0:853f5b7408a7 | 1572 | * @param[in] bkstr_on : Black stretch ON/OFF setting |
dkato | 0:853f5b7408a7 | 1573 | * @param[in] param : Black stretch setup parameter |
dkato | 0:853f5b7408a7 | 1574 | * @retval None |
dkato | 0:853f5b7408a7 | 1575 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1576 | void VDC5_ImageBlackStretch ( |
dkato | 0:853f5b7408a7 | 1577 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1578 | const vdc5_imgimprv_id_t imgimprv_id, |
dkato | 0:853f5b7408a7 | 1579 | const vdc5_onoff_t bkstr_on, |
dkato | 0:853f5b7408a7 | 1580 | const vdc5_black_t * const param) |
dkato | 0:853f5b7408a7 | 1581 | { |
dkato | 0:853f5b7408a7 | 1582 | const vdc5_regaddr_img_qlty_imp_t * img_qlty_imp; |
dkato | 0:853f5b7408a7 | 1583 | |
dkato | 0:853f5b7408a7 | 1584 | img_qlty_imp = &vdc5_regaddr_img_qlty_imp[ch][imgimprv_id]; |
dkato | 0:853f5b7408a7 | 1585 | |
dkato | 0:853f5b7408a7 | 1586 | if (param != NULL) { |
dkato | 0:853f5b7408a7 | 1587 | /* Black stretch start point */ |
dkato | 0:853f5b7408a7 | 1588 | *(img_qlty_imp->adj_bkstr_set) = (uint32_t)((uint32_t)param->bkstr_st << VDC5_REG_SHIFT_20); |
dkato | 0:853f5b7408a7 | 1589 | /* Black stretch depth */ |
dkato | 0:853f5b7408a7 | 1590 | *(img_qlty_imp->adj_bkstr_set) |= (uint32_t)((uint32_t)param->bkstr_d << VDC5_REG_SHIFT_16); |
dkato | 0:853f5b7408a7 | 1591 | /* Black stretch time constant (T1) */ |
dkato | 0:853f5b7408a7 | 1592 | *(img_qlty_imp->adj_bkstr_set) |= (uint32_t)((uint32_t)param->bkstr_t1 << VDC5_REG_SHIFT_8); |
dkato | 0:853f5b7408a7 | 1593 | /* Black stretch time constant (T2) */ |
dkato | 0:853f5b7408a7 | 1594 | *(img_qlty_imp->adj_bkstr_set) |= (uint32_t)param->bkstr_t2; |
dkato | 0:853f5b7408a7 | 1595 | } |
dkato | 0:853f5b7408a7 | 1596 | |
dkato | 0:853f5b7408a7 | 1597 | if (bkstr_on == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1598 | *(img_qlty_imp->adj_bkstr_set) &= (uint32_t)~VDC5_REG_BIT24; |
dkato | 0:853f5b7408a7 | 1599 | } else { |
dkato | 0:853f5b7408a7 | 1600 | *(img_qlty_imp->adj_bkstr_set) |= (uint32_t)VDC5_REG_BIT24; |
dkato | 0:853f5b7408a7 | 1601 | } |
dkato | 0:853f5b7408a7 | 1602 | |
dkato | 0:853f5b7408a7 | 1603 | /* Register update control register (ADJx_UPDATE) |
dkato | 0:853f5b7408a7 | 1604 | b0 ADJx_VEN */ |
dkato | 0:853f5b7408a7 | 1605 | *(img_qlty_imp->adj_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1606 | |
dkato | 0:853f5b7408a7 | 1607 | } /* End of function VDC5_ImageBlackStretch() */ |
dkato | 0:853f5b7408a7 | 1608 | |
dkato | 0:853f5b7408a7 | 1609 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1610 | * @brief Sets registers for alpha blending |
dkato | 0:853f5b7408a7 | 1611 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1612 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 1613 | * @param[in] param : Alpha blending setup parameter |
dkato | 0:853f5b7408a7 | 1614 | * @retval None |
dkato | 0:853f5b7408a7 | 1615 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1616 | void VDC5_AlphaBlending ( |
dkato | 0:853f5b7408a7 | 1617 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1618 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 1619 | const vdc5_alpha_blending_t * const param) |
dkato | 0:853f5b7408a7 | 1620 | { |
dkato | 0:853f5b7408a7 | 1621 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 1622 | |
dkato | 0:853f5b7408a7 | 1623 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 1624 | |
dkato | 0:853f5b7408a7 | 1625 | /* Alpha signal of the ARGB1555/ARGB5551 format */ |
dkato | 0:853f5b7408a7 | 1626 | if (param->alpha_1bit != NULL) { |
dkato | 0:853f5b7408a7 | 1627 | *(img_synthesizer->gr_ab10) &= (uint32_t)~VDC5_REG_MASK_0XFF000000; |
dkato | 0:853f5b7408a7 | 1628 | *(img_synthesizer->gr_ab10) |= (uint32_t)param->alpha_1bit->gr_a0 << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 1629 | *(img_synthesizer->gr_ab11) &= (uint32_t)~VDC5_REG_MASK_0XFF000000; |
dkato | 0:853f5b7408a7 | 1630 | *(img_synthesizer->gr_ab11) |= (uint32_t)param->alpha_1bit->gr_a1 << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 1631 | } |
dkato | 0:853f5b7408a7 | 1632 | |
dkato | 0:853f5b7408a7 | 1633 | /* Premultiplication processing at alpha blending in one-pixel */ |
dkato | 0:853f5b7408a7 | 1634 | if (param->alpha_pixel != NULL) { |
dkato | 0:853f5b7408a7 | 1635 | if (param->alpha_pixel->gr_acalc_md == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1636 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_BIT14; |
dkato | 0:853f5b7408a7 | 1637 | } else { |
dkato | 0:853f5b7408a7 | 1638 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_REG_BIT14; |
dkato | 0:853f5b7408a7 | 1639 | } |
dkato | 0:853f5b7408a7 | 1640 | } |
dkato | 0:853f5b7408a7 | 1641 | |
dkato | 0:853f5b7408a7 | 1642 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 1643 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 1644 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1645 | |
dkato | 0:853f5b7408a7 | 1646 | } /* End of function VDC5_AlphaBlending() */ |
dkato | 0:853f5b7408a7 | 1647 | |
dkato | 0:853f5b7408a7 | 1648 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1649 | * @brief Sets registers for rectangle alpha blending |
dkato | 0:853f5b7408a7 | 1650 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1651 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 1652 | * @param[in] gr_arc_on : ON/OFF setting for alpha blending in a rectangular area |
dkato | 0:853f5b7408a7 | 1653 | * @param[in] param : Setup parameter for alpha blending in a rectangular area |
dkato | 0:853f5b7408a7 | 1654 | * @retval None |
dkato | 0:853f5b7408a7 | 1655 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1656 | void VDC5_AlphaBlendingRect ( |
dkato | 0:853f5b7408a7 | 1657 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1658 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 1659 | const vdc5_onoff_t gr_arc_on, |
dkato | 0:853f5b7408a7 | 1660 | const vdc5_alpha_blending_rect_t * const param) |
dkato | 0:853f5b7408a7 | 1661 | { |
dkato | 0:853f5b7408a7 | 1662 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 1663 | const vdc5_alpha_rect_t * alpha_rect_tmp; |
dkato | 0:853f5b7408a7 | 1664 | uint32_t arc_coef; |
dkato | 0:853f5b7408a7 | 1665 | |
dkato | 0:853f5b7408a7 | 1666 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 1667 | |
dkato | 0:853f5b7408a7 | 1668 | /* Alpha blending on/off control in a rectangular area */ |
dkato | 0:853f5b7408a7 | 1669 | if (gr_arc_on == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1670 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 1671 | } else { |
dkato | 0:853f5b7408a7 | 1672 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 1673 | } |
dkato | 0:853f5b7408a7 | 1674 | |
dkato | 0:853f5b7408a7 | 1675 | if (param != NULL) { |
dkato | 0:853f5b7408a7 | 1676 | /* Selection of lower-layer plane in scaler */ |
dkato | 0:853f5b7408a7 | 1677 | if (param->scl_und_sel != NULL) { |
dkato | 0:853f5b7408a7 | 1678 | SetUndSel(ch, param->scl_und_sel->gr_vin_scl_und_sel); |
dkato | 0:853f5b7408a7 | 1679 | } |
dkato | 0:853f5b7408a7 | 1680 | /* Rectangular area subjected to alpha blending */ |
dkato | 0:853f5b7408a7 | 1681 | SetAlphaRectArea(param->gr_arc, img_synthesizer); |
dkato | 0:853f5b7408a7 | 1682 | |
dkato | 0:853f5b7408a7 | 1683 | /* Alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 1684 | alpha_rect_tmp = param->alpha_rect; |
dkato | 0:853f5b7408a7 | 1685 | if (alpha_rect_tmp != NULL) { |
dkato | 0:853f5b7408a7 | 1686 | if (graphics_id != VDC5_GR_TYPE_VIN) { |
dkato | 0:853f5b7408a7 | 1687 | /* Multiplication processing with current alpha at alpha blending in a rectangular area (on/off) */ |
dkato | 0:853f5b7408a7 | 1688 | if (alpha_rect_tmp->gr_arc_mul == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1689 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_BIT15; |
dkato | 0:853f5b7408a7 | 1690 | } else { |
dkato | 0:853f5b7408a7 | 1691 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_REG_BIT15; |
dkato | 0:853f5b7408a7 | 1692 | } |
dkato | 0:853f5b7408a7 | 1693 | } |
dkato | 0:853f5b7408a7 | 1694 | /* Alpha coefficient for alpha blending in a rectangular area (-255 to 255) */ |
dkato | 0:853f5b7408a7 | 1695 | if (alpha_rect_tmp->gr_arc_coef < 0) { |
dkato | 0:853f5b7408a7 | 1696 | arc_coef = (uint32_t)(alpha_rect_tmp->gr_arc_coef * (-1)); /* Conversion into absolute value */ |
dkato | 0:853f5b7408a7 | 1697 | /* Subtraction of the alpha coefficient */ |
dkato | 0:853f5b7408a7 | 1698 | *(img_synthesizer->gr_ab6) = (uint32_t)VDC5_REG_BIT24; |
dkato | 0:853f5b7408a7 | 1699 | } else { |
dkato | 0:853f5b7408a7 | 1700 | arc_coef = (uint32_t)alpha_rect_tmp->gr_arc_coef; |
dkato | 0:853f5b7408a7 | 1701 | /* Addition of the alpha coefficient */ |
dkato | 0:853f5b7408a7 | 1702 | *(img_synthesizer->gr_ab6) = (uint32_t)0x00000000u; |
dkato | 0:853f5b7408a7 | 1703 | } |
dkato | 0:853f5b7408a7 | 1704 | *(img_synthesizer->gr_ab6) |= arc_coef << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1705 | /* Frame rate for alpha blending in a rectangular area (gr_arc_rate + 1) */ |
dkato | 0:853f5b7408a7 | 1706 | *(img_synthesizer->gr_ab6) |= (uint32_t)alpha_rect_tmp->gr_arc_rate; |
dkato | 0:853f5b7408a7 | 1707 | /* Initial alpha value for alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 1708 | *(img_synthesizer->gr_ab7) &= (uint32_t)~VDC5_REG_MASK_0X00FF0000; |
dkato | 0:853f5b7408a7 | 1709 | *(img_synthesizer->gr_ab7) |= (uint32_t)alpha_rect_tmp->gr_arc_def << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1710 | } |
dkato | 0:853f5b7408a7 | 1711 | } |
dkato | 0:853f5b7408a7 | 1712 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 1713 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 1714 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1715 | |
dkato | 0:853f5b7408a7 | 1716 | } /* End of function VDC5_AlphaBlending() */ |
dkato | 0:853f5b7408a7 | 1717 | |
dkato | 0:853f5b7408a7 | 1718 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1719 | * @brief Sets registers for chroma-key |
dkato | 0:853f5b7408a7 | 1720 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1721 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 1722 | * @param[in] gr_ck_on : Chroma-key ON/OFF setting |
dkato | 0:853f5b7408a7 | 1723 | * @param[in] param : Chroma-key setup parameter |
dkato | 0:853f5b7408a7 | 1724 | * @retval None |
dkato | 0:853f5b7408a7 | 1725 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1726 | void VDC5_Chromakey ( |
dkato | 0:853f5b7408a7 | 1727 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1728 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 1729 | const vdc5_onoff_t gr_ck_on, |
dkato | 0:853f5b7408a7 | 1730 | const vdc5_chromakey_t * const param) |
dkato | 0:853f5b7408a7 | 1731 | { |
dkato | 0:853f5b7408a7 | 1732 | vdc5_gr_format_t gr_format_tmp; |
dkato | 0:853f5b7408a7 | 1733 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 1734 | |
dkato | 0:853f5b7408a7 | 1735 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 1736 | |
dkato | 0:853f5b7408a7 | 1737 | if (param != NULL) { |
dkato | 0:853f5b7408a7 | 1738 | gr_format_tmp = VDC5_ShrdPrmGetGraphicsFormat(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1739 | if ((gr_format_tmp == VDC5_GR_FORMAT_CLUT1) || |
dkato | 0:853f5b7408a7 | 1740 | (gr_format_tmp == VDC5_GR_FORMAT_CLUT4) || |
dkato | 0:853f5b7408a7 | 1741 | (gr_format_tmp == VDC5_GR_FORMAT_CLUT8)) { |
dkato | 0:853f5b7408a7 | 1742 | *(img_synthesizer->gr_ab8) = (uint32_t)(param->ck_color << VDC5_REG_SHIFT_24); |
dkato | 0:853f5b7408a7 | 1743 | *(img_synthesizer->gr_ab9) = ColorConversionIntoAgbr(param->rep_color & VDC5_REG_RGB_24BIT_MASK); |
dkato | 0:853f5b7408a7 | 1744 | } else { |
dkato | 0:853f5b7408a7 | 1745 | /* Color conversion from gr_format_tmp into RGB888 format */ |
dkato | 0:853f5b7408a7 | 1746 | *(img_synthesizer->gr_ab8) = ColorConversion(gr_format_tmp, param->ck_color); |
dkato | 0:853f5b7408a7 | 1747 | *(img_synthesizer->gr_ab9) = ColorConversion(gr_format_tmp, param->rep_color); |
dkato | 0:853f5b7408a7 | 1748 | } |
dkato | 0:853f5b7408a7 | 1749 | if ((graphics_id == VDC5_GR_TYPE_GR0) || (graphics_id == VDC5_GR_TYPE_OIR)) { |
dkato | 0:853f5b7408a7 | 1750 | /* Alpha value is set to 255. */ |
dkato | 0:853f5b7408a7 | 1751 | *(img_synthesizer->gr_ab9) |= (uint32_t)VDC5_REG_ALPHA_8BIT; |
dkato | 0:853f5b7408a7 | 1752 | } else { |
dkato | 0:853f5b7408a7 | 1753 | *(img_synthesizer->gr_ab9) |= (uint32_t)param->rep_alpha << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 1754 | } |
dkato | 0:853f5b7408a7 | 1755 | } |
dkato | 0:853f5b7408a7 | 1756 | |
dkato | 0:853f5b7408a7 | 1757 | if (gr_ck_on == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1758 | *(img_synthesizer->gr_ab7) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1759 | } else { |
dkato | 0:853f5b7408a7 | 1760 | *(img_synthesizer->gr_ab7) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1761 | } |
dkato | 0:853f5b7408a7 | 1762 | |
dkato | 0:853f5b7408a7 | 1763 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 1764 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 1765 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1766 | |
dkato | 0:853f5b7408a7 | 1767 | } /* End of function VDC5_Chromakey() */ |
dkato | 0:853f5b7408a7 | 1768 | |
dkato | 0:853f5b7408a7 | 1769 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1770 | * @brief Sets registers for CLUT |
dkato | 0:853f5b7408a7 | 1771 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1772 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 1773 | * @param[in] param : CLUT setup parameter |
dkato | 0:853f5b7408a7 | 1774 | * @retval None |
dkato | 0:853f5b7408a7 | 1775 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1776 | void VDC5_CLUT (const vdc5_channel_t ch, const vdc5_graphics_type_t graphics_id, const vdc5_clut_t * const param) |
dkato | 0:853f5b7408a7 | 1777 | { |
dkato | 0:853f5b7408a7 | 1778 | vdc5_gr_format_t gr_format_tmp; |
dkato | 0:853f5b7408a7 | 1779 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 1780 | |
dkato | 0:853f5b7408a7 | 1781 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 1782 | |
dkato | 0:853f5b7408a7 | 1783 | gr_format_tmp = VDC5_ShrdPrmGetGraphicsFormat(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 1784 | if (gr_format_tmp == VDC5_GR_FORMAT_CLUT1) { |
dkato | 0:853f5b7408a7 | 1785 | if (param->color_num == ((uint32_t)1u)) { |
dkato | 0:853f5b7408a7 | 1786 | *(img_synthesizer->gr_ab10) = ColorConversionIntoAgbr(param->clut[0]); |
dkato | 0:853f5b7408a7 | 1787 | if ((graphics_id == VDC5_GR_TYPE_GR0) || (graphics_id == VDC5_GR_TYPE_OIR)) { |
dkato | 0:853f5b7408a7 | 1788 | /* Alpha value is set to 255. */ |
dkato | 0:853f5b7408a7 | 1789 | *(img_synthesizer->gr_ab10) |= (uint32_t)VDC5_REG_ALPHA_8BIT; |
dkato | 0:853f5b7408a7 | 1790 | } |
dkato | 0:853f5b7408a7 | 1791 | } else { |
dkato | 0:853f5b7408a7 | 1792 | *(img_synthesizer->gr_ab10) = ColorConversionIntoAgbr(param->clut[0]); |
dkato | 0:853f5b7408a7 | 1793 | *(img_synthesizer->gr_ab11) = ColorConversionIntoAgbr(param->clut[1]); |
dkato | 0:853f5b7408a7 | 1794 | if ((graphics_id == VDC5_GR_TYPE_GR0) || (graphics_id == VDC5_GR_TYPE_OIR)) { |
dkato | 0:853f5b7408a7 | 1795 | /* Alpha value is set to 255. */ |
dkato | 0:853f5b7408a7 | 1796 | *(img_synthesizer->gr_ab10) |= (uint32_t)VDC5_REG_ALPHA_8BIT; |
dkato | 0:853f5b7408a7 | 1797 | *(img_synthesizer->gr_ab11) |= (uint32_t)VDC5_REG_ALPHA_8BIT; |
dkato | 0:853f5b7408a7 | 1798 | } |
dkato | 0:853f5b7408a7 | 1799 | } |
dkato | 0:853f5b7408a7 | 1800 | } else { /* CLUT4 or CLUT8 */ |
dkato | 0:853f5b7408a7 | 1801 | Set_Clut(param, vdc5_regaddr_clut[ch][graphics_id]); |
dkato | 0:853f5b7408a7 | 1802 | |
dkato | 0:853f5b7408a7 | 1803 | /* CLUT table control register (GRx_CLUT) |
dkato | 0:853f5b7408a7 | 1804 | b16 GRx_CLT_SEL - CLUT table select signal - XOR, flip signal */ |
dkato | 0:853f5b7408a7 | 1805 | *(img_synthesizer->gr_clut) ^= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 1806 | } |
dkato | 0:853f5b7408a7 | 1807 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 1808 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 1809 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1810 | |
dkato | 0:853f5b7408a7 | 1811 | } /* End of function VDC5_CLUT() */ |
dkato | 0:853f5b7408a7 | 1812 | |
dkato | 0:853f5b7408a7 | 1813 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1814 | * @brief Sets registers for display calibration |
dkato | 0:853f5b7408a7 | 1815 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1816 | * @param[in] param : Display calibration parameter |
dkato | 0:853f5b7408a7 | 1817 | * @retval None |
dkato | 0:853f5b7408a7 | 1818 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1819 | void VDC5_DisplayCalibration (const vdc5_channel_t ch, const vdc5_disp_calibration_t * const param) |
dkato | 0:853f5b7408a7 | 1820 | { |
dkato | 0:853f5b7408a7 | 1821 | const vdc5_calibr_bright_t * bright_tmp; |
dkato | 0:853f5b7408a7 | 1822 | const vdc5_calibr_contrast_t * contrast_tmp; |
dkato | 0:853f5b7408a7 | 1823 | const vdc5_calibr_dither_t * panel_dither_tmp; |
dkato | 0:853f5b7408a7 | 1824 | const vdc5_regaddr_output_ctrl_t * output_ctrl; |
dkato | 0:853f5b7408a7 | 1825 | |
dkato | 0:853f5b7408a7 | 1826 | output_ctrl = &vdc5_regaddr_output_ctrl[ch]; |
dkato | 0:853f5b7408a7 | 1827 | |
dkato | 0:853f5b7408a7 | 1828 | /* Correction circuit sequence control */ |
dkato | 0:853f5b7408a7 | 1829 | if (param->route == VDC5_CALIBR_ROUTE_BCG) { |
dkato | 0:853f5b7408a7 | 1830 | *(output_ctrl->out_clk_phase) &= (uint32_t)~VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 1831 | } else { |
dkato | 0:853f5b7408a7 | 1832 | *(output_ctrl->out_clk_phase) |= (uint32_t)VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 1833 | } |
dkato | 0:853f5b7408a7 | 1834 | |
dkato | 0:853f5b7408a7 | 1835 | /* Brightness (DC) adjustment */ |
dkato | 0:853f5b7408a7 | 1836 | bright_tmp = param->bright; |
dkato | 0:853f5b7408a7 | 1837 | if (bright_tmp != NULL) { |
dkato | 0:853f5b7408a7 | 1838 | *(output_ctrl->out_bright1) = (uint32_t)bright_tmp->pbrt_g; |
dkato | 0:853f5b7408a7 | 1839 | *(output_ctrl->out_bright2) = (uint32_t)bright_tmp->pbrt_b << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1840 | *(output_ctrl->out_bright2) |= (uint32_t)bright_tmp->pbrt_r; |
dkato | 0:853f5b7408a7 | 1841 | } |
dkato | 0:853f5b7408a7 | 1842 | |
dkato | 0:853f5b7408a7 | 1843 | /* Contrast (gain) adjustment */ |
dkato | 0:853f5b7408a7 | 1844 | contrast_tmp = param->contrast; |
dkato | 0:853f5b7408a7 | 1845 | if (contrast_tmp != NULL) { |
dkato | 0:853f5b7408a7 | 1846 | *(output_ctrl->out_contrast) = (uint32_t)contrast_tmp->cont_g << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 1847 | *(output_ctrl->out_contrast) |= (uint32_t)contrast_tmp->cont_b << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 1848 | *(output_ctrl->out_contrast) |= (uint32_t)contrast_tmp->cont_r; |
dkato | 0:853f5b7408a7 | 1849 | } |
dkato | 0:853f5b7408a7 | 1850 | |
dkato | 0:853f5b7408a7 | 1851 | /* Panel dithering */ |
dkato | 0:853f5b7408a7 | 1852 | panel_dither_tmp = param->panel_dither; |
dkato | 0:853f5b7408a7 | 1853 | if (panel_dither_tmp != NULL) { |
dkato | 0:853f5b7408a7 | 1854 | *(output_ctrl->out_pdtha) &= (uint32_t)~VDC5_REG_MASK_0X00300000; |
dkato | 0:853f5b7408a7 | 1855 | *(output_ctrl->out_pdtha) |= (uint32_t)panel_dither_tmp->pdth_sel << VDC5_REG_SHIFT_20; |
dkato | 0:853f5b7408a7 | 1856 | if (panel_dither_tmp->pdth_sel == VDC5_PDTH_MD_2X2) { |
dkato | 0:853f5b7408a7 | 1857 | *(output_ctrl->out_pdtha) &= (uint32_t)~VDC5_REG_MASK_0X00003333; |
dkato | 0:853f5b7408a7 | 1858 | *(output_ctrl->out_pdtha) |= (uint32_t)panel_dither_tmp->pdth_pa << VDC5_REG_SHIFT_12; |
dkato | 0:853f5b7408a7 | 1859 | *(output_ctrl->out_pdtha) |= (uint32_t)panel_dither_tmp->pdth_pb << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 1860 | *(output_ctrl->out_pdtha) |= (uint32_t)panel_dither_tmp->pdth_pc << VDC5_REG_SHIFT_4; |
dkato | 0:853f5b7408a7 | 1861 | *(output_ctrl->out_pdtha) |= (uint32_t)panel_dither_tmp->pdth_pd; |
dkato | 0:853f5b7408a7 | 1862 | } |
dkato | 0:853f5b7408a7 | 1863 | } |
dkato | 0:853f5b7408a7 | 1864 | |
dkato | 0:853f5b7408a7 | 1865 | /* Register update control register (OUT_UPDATE) |
dkato | 0:853f5b7408a7 | 1866 | b0 OUTCNT_VEN */ |
dkato | 0:853f5b7408a7 | 1867 | *(output_ctrl->out_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1868 | |
dkato | 0:853f5b7408a7 | 1869 | } /* End of function VDC5_DisplayCalibration() */ |
dkato | 0:853f5b7408a7 | 1870 | |
dkato | 0:853f5b7408a7 | 1871 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1872 | * @brief Sets registers for gamma correction |
dkato | 0:853f5b7408a7 | 1873 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1874 | * @param[in] gam_on : Gamma correction ON/OFF setting |
dkato | 0:853f5b7408a7 | 1875 | * @param[in] param : Gamma correction setup parameter |
dkato | 0:853f5b7408a7 | 1876 | * @retval None |
dkato | 0:853f5b7408a7 | 1877 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1878 | void VDC5_GammaCorrection ( |
dkato | 0:853f5b7408a7 | 1879 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 1880 | const vdc5_onoff_t gam_on, |
dkato | 0:853f5b7408a7 | 1881 | const vdc5_gamma_correction_t * const param) |
dkato | 0:853f5b7408a7 | 1882 | { |
dkato | 0:853f5b7408a7 | 1883 | const vdc5_regaddr_gamma_t * gamma; |
dkato | 0:853f5b7408a7 | 1884 | |
dkato | 0:853f5b7408a7 | 1885 | gamma = &vdc5_regaddr_gamma[ch]; |
dkato | 0:853f5b7408a7 | 1886 | |
dkato | 0:853f5b7408a7 | 1887 | /* Gamma correction on/off control */ |
dkato | 0:853f5b7408a7 | 1888 | *(gamma->gam_sw) = (gam_on == VDC5_OFF) ? 0x0000u : 0x0001u; |
dkato | 0:853f5b7408a7 | 1889 | |
dkato | 0:853f5b7408a7 | 1890 | if (param != NULL) { |
dkato | 0:853f5b7408a7 | 1891 | /* Start threshold of area 1 to 31 of G signal */ |
dkato | 0:853f5b7408a7 | 1892 | Set_StartThreshold_Gamma(param->gam_g_th, gamma->gam_g_area); |
dkato | 0:853f5b7408a7 | 1893 | /* Gain adjustment of area 0 to 31 of G signal */ |
dkato | 0:853f5b7408a7 | 1894 | Set_GainAdjustment_Gamma(param->gam_g_gain, gamma->gam_g_lut); |
dkato | 0:853f5b7408a7 | 1895 | /* Register update control register G (GAM_G_UPDATE) |
dkato | 0:853f5b7408a7 | 1896 | b0 GAM_G_VEN */ |
dkato | 0:853f5b7408a7 | 1897 | *(gamma->gam_g_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1898 | |
dkato | 0:853f5b7408a7 | 1899 | /* Start threshold of area 1 to 31 of B signal */ |
dkato | 0:853f5b7408a7 | 1900 | Set_StartThreshold_Gamma(param->gam_b_th, gamma->gam_b_area); |
dkato | 0:853f5b7408a7 | 1901 | /* Gain adjustment of area 0 to 31 of B signal */ |
dkato | 0:853f5b7408a7 | 1902 | Set_GainAdjustment_Gamma(param->gam_b_gain, gamma->gam_b_lut); |
dkato | 0:853f5b7408a7 | 1903 | /* Register update control register B (GAM_B_UPDATE) |
dkato | 0:853f5b7408a7 | 1904 | b0 GAM_B_VEN */ |
dkato | 0:853f5b7408a7 | 1905 | *(gamma->gam_b_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1906 | |
dkato | 0:853f5b7408a7 | 1907 | /* Start threshold of area 1 to 31 of R signal */ |
dkato | 0:853f5b7408a7 | 1908 | Set_StartThreshold_Gamma(param->gam_r_th, gamma->gam_r_area); |
dkato | 0:853f5b7408a7 | 1909 | /* Gain adjustment of area 0 to 31 of R signal */ |
dkato | 0:853f5b7408a7 | 1910 | Set_GainAdjustment_Gamma(param->gam_r_gain, gamma->gam_r_lut); |
dkato | 0:853f5b7408a7 | 1911 | /* Register update control register R (GAM_R_UPDATE) |
dkato | 0:853f5b7408a7 | 1912 | b0 GAM_R_VEN */ |
dkato | 0:853f5b7408a7 | 1913 | *(gamma->gam_r_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1914 | } |
dkato | 0:853f5b7408a7 | 1915 | } /* End of function VDC5_GammaCorrection() */ |
dkato | 0:853f5b7408a7 | 1916 | |
dkato | 0:853f5b7408a7 | 1917 | /****************************************************************************** |
dkato | 0:853f5b7408a7 | 1918 | Local Functions |
dkato | 0:853f5b7408a7 | 1919 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1920 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1921 | * @brief Sets external input video signal |
dkato | 0:853f5b7408a7 | 1922 | * @param[in] ext_sig_tmp : External input signal parameter |
dkato | 0:853f5b7408a7 | 1923 | * @param[in] input_ctrl : Input controller registers |
dkato | 0:853f5b7408a7 | 1924 | * @retval None |
dkato | 0:853f5b7408a7 | 1925 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1926 | static void SetVideoExternalInput ( |
dkato | 0:853f5b7408a7 | 1927 | const vdc5_ext_in_sig_t * const ext_sig_tmp, |
dkato | 0:853f5b7408a7 | 1928 | const vdc5_regaddr_input_ctrl_t * const input_ctrl) |
dkato | 0:853f5b7408a7 | 1929 | { |
dkato | 0:853f5b7408a7 | 1930 | *(input_ctrl->inp_sel_cnt) &= (uint32_t)~VDC5_REG_MASK_0X00007111; |
dkato | 0:853f5b7408a7 | 1931 | /* External input format select */ |
dkato | 0:853f5b7408a7 | 1932 | if (ext_sig_tmp->inp_format == VDC5_EXTIN_FORMAT_YCBCR444) { |
dkato | 0:853f5b7408a7 | 1933 | *(input_ctrl->inp_sel_cnt) |= (uint32_t)VDC5_EXTIN_FORMAT_RGB888 << VDC5_REG_SHIFT_12; |
dkato | 0:853f5b7408a7 | 1934 | } else { |
dkato | 0:853f5b7408a7 | 1935 | *(input_ctrl->inp_sel_cnt) |= (uint32_t)ext_sig_tmp->inp_format << VDC5_REG_SHIFT_12; |
dkato | 0:853f5b7408a7 | 1936 | } |
dkato | 0:853f5b7408a7 | 1937 | /* Clock edge select for capturing external input video image signals */ |
dkato | 0:853f5b7408a7 | 1938 | if (ext_sig_tmp->inp_pxd_edge != VDC5_EDGE_RISING) { |
dkato | 0:853f5b7408a7 | 1939 | *(input_ctrl->inp_sel_cnt) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1940 | } |
dkato | 0:853f5b7408a7 | 1941 | /* Clock edge select for capturing external input Vsync signals */ |
dkato | 0:853f5b7408a7 | 1942 | if (ext_sig_tmp->inp_vs_edge != VDC5_EDGE_RISING) { |
dkato | 0:853f5b7408a7 | 1943 | *(input_ctrl->inp_sel_cnt) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1944 | } |
dkato | 0:853f5b7408a7 | 1945 | /* Clock edge select for capturing external input Hsync signals */ |
dkato | 0:853f5b7408a7 | 1946 | if (ext_sig_tmp->inp_hs_edge != VDC5_EDGE_RISING) { |
dkato | 0:853f5b7408a7 | 1947 | *(input_ctrl->inp_sel_cnt) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 1948 | } |
dkato | 0:853f5b7408a7 | 1949 | |
dkato | 0:853f5b7408a7 | 1950 | *(input_ctrl->inp_ext_sync_cnt) &= (uint32_t)~VDC5_REG_MASK_0X11110113; |
dkato | 0:853f5b7408a7 | 1951 | /* External input bit endian change on/off control */ |
dkato | 0:853f5b7408a7 | 1952 | if (ext_sig_tmp->inp_endian_on != VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1953 | *(input_ctrl->inp_ext_sync_cnt) |= (uint32_t)VDC5_REG_BIT28; |
dkato | 0:853f5b7408a7 | 1954 | } |
dkato | 0:853f5b7408a7 | 1955 | /* External input B/R signal swap on/off control */ |
dkato | 0:853f5b7408a7 | 1956 | if (ext_sig_tmp->inp_swap_on != VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 1957 | *(input_ctrl->inp_ext_sync_cnt) |= (uint32_t)VDC5_REG_BIT24; |
dkato | 0:853f5b7408a7 | 1958 | } |
dkato | 0:853f5b7408a7 | 1959 | /* External input Vsync signal DV_VSYNC inversion control */ |
dkato | 0:853f5b7408a7 | 1960 | if (ext_sig_tmp->inp_vs_inv != VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 1961 | *(input_ctrl->inp_ext_sync_cnt) |= (uint32_t)VDC5_REG_BIT20; |
dkato | 0:853f5b7408a7 | 1962 | } |
dkato | 0:853f5b7408a7 | 1963 | /* External input Hsync signal DV_HSYNC inversion control */ |
dkato | 0:853f5b7408a7 | 1964 | if (ext_sig_tmp->inp_hs_inv != VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 1965 | *(input_ctrl->inp_ext_sync_cnt) |= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 1966 | } |
dkato | 0:853f5b7408a7 | 1967 | /* Reference select for external input BT.656 Hsync signal */ |
dkato | 0:853f5b7408a7 | 1968 | if (ext_sig_tmp->inp_h_edge_sel != VDC5_EXTIN_REF_H_EAV) { |
dkato | 0:853f5b7408a7 | 1969 | *(input_ctrl->inp_ext_sync_cnt) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1970 | } |
dkato | 0:853f5b7408a7 | 1971 | /* Number of lines for BT.656 external input */ |
dkato | 0:853f5b7408a7 | 1972 | if (ext_sig_tmp->inp_f525_625 != VDC5_EXTIN_LINE_525) { |
dkato | 0:853f5b7408a7 | 1973 | *(input_ctrl->inp_ext_sync_cnt) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 1974 | } |
dkato | 0:853f5b7408a7 | 1975 | /* Y/Cb/Y/Cr data string start timing to Hsync reference */ |
dkato | 0:853f5b7408a7 | 1976 | *(input_ctrl->inp_ext_sync_cnt) |= (uint32_t)ext_sig_tmp->inp_h_pos; |
dkato | 0:853f5b7408a7 | 1977 | } /* End of function SetVideoExternalInput() */ |
dkato | 0:853f5b7408a7 | 1978 | |
dkato | 0:853f5b7408a7 | 1979 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 1980 | * @brief Initializes cascaded connection |
dkato | 0:853f5b7408a7 | 1981 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 1982 | * @retval None |
dkato | 0:853f5b7408a7 | 1983 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 1984 | static void SetInitialConnection (const vdc5_channel_t ch) |
dkato | 0:853f5b7408a7 | 1985 | { |
dkato | 0:853f5b7408a7 | 1986 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 1987 | |
dkato | 0:853f5b7408a7 | 1988 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1]; |
dkato | 0:853f5b7408a7 | 1989 | |
dkato | 0:853f5b7408a7 | 1990 | /* Cascade ON */ |
dkato | 0:853f5b7408a7 | 1991 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_REG_BIT28; |
dkato | 0:853f5b7408a7 | 1992 | /* Graphics register update control register (GR1_UPDATE) |
dkato | 0:853f5b7408a7 | 1993 | b8 GR1_UPDATE */ |
dkato | 0:853f5b7408a7 | 1994 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 1995 | |
dkato | 0:853f5b7408a7 | 1996 | VDC5_ShrdPrmSetCascade(ch, VDC5_ON); |
dkato | 0:853f5b7408a7 | 1997 | |
dkato | 0:853f5b7408a7 | 1998 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_VIN]; |
dkato | 0:853f5b7408a7 | 1999 | |
dkato | 0:853f5b7408a7 | 2000 | /* Turns off alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 2001 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_BIT12; |
dkato | 0:853f5b7408a7 | 2002 | /* Selection of lower-layer plane in scaler, graphics 1 is used as lower-layer graphics. */ |
dkato | 0:853f5b7408a7 | 2003 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 2004 | /* Graphics display mode in VIN */ |
dkato | 0:853f5b7408a7 | 2005 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 2006 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_LOWER; |
dkato | 0:853f5b7408a7 | 2007 | /* Disable fade-in and fade-out */ |
dkato | 0:853f5b7408a7 | 2008 | *(img_synthesizer->gr_ab6) &= (uint32_t)~VDC5_REG_MASK_0X01FF00FF; |
dkato | 0:853f5b7408a7 | 2009 | /* Set the initial alpha value to '255' */ |
dkato | 0:853f5b7408a7 | 2010 | *(img_synthesizer->gr_ab7) |= (uint32_t)VDC5_REG_MASK_0X00FF0000; |
dkato | 0:853f5b7408a7 | 2011 | /* Graphics register update control register (GR_VIN_UPDATE) |
dkato | 0:853f5b7408a7 | 2012 | b8 GR_VIN_UPDATE |
dkato | 0:853f5b7408a7 | 2013 | b4 GR_VIN_P_VEN */ |
dkato | 0:853f5b7408a7 | 2014 | *(img_synthesizer->gr_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 2015 | |
dkato | 0:853f5b7408a7 | 2016 | } /* End of function SetInitialConnection() */ |
dkato | 0:853f5b7408a7 | 2017 | |
dkato | 0:853f5b7408a7 | 2018 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2019 | * @brief Sets background color for graphics |
dkato | 0:853f5b7408a7 | 2020 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2021 | * @retval None |
dkato | 0:853f5b7408a7 | 2022 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2023 | static void SetGrapicsBackgroundColor (const vdc5_channel_t ch) |
dkato | 0:853f5b7408a7 | 2024 | { |
dkato | 0:853f5b7408a7 | 2025 | uint32_t bg_color_tmp; |
dkato | 0:853f5b7408a7 | 2026 | uint32_t bg_color_conv; |
dkato | 0:853f5b7408a7 | 2027 | volatile uint32_t * bg_color_reg; |
dkato | 0:853f5b7408a7 | 2028 | volatile uint32_t * update_reg; |
dkato | 0:853f5b7408a7 | 2029 | vdc5_graphics_type_t gr_type_index; |
dkato | 0:853f5b7408a7 | 2030 | |
dkato | 0:853f5b7408a7 | 2031 | /* Background color in 24-bit RGB color format or CrYCb format */ |
dkato | 0:853f5b7408a7 | 2032 | bg_color_tmp = VDC5_ShrdPrmGetBgColor(ch, VDC5_COLOR_SPACE_GBR); |
dkato | 0:853f5b7408a7 | 2033 | /* Conversion from RGB into GBR / from CrYCb into YCbCr */ |
dkato | 0:853f5b7408a7 | 2034 | bg_color_conv = ColorConversionIntoAgbr(bg_color_tmp); |
dkato | 0:853f5b7408a7 | 2035 | bg_color_conv &= (uint32_t)VDC5_REG_RGB_24BIT_MASK; |
dkato | 0:853f5b7408a7 | 2036 | |
dkato | 0:853f5b7408a7 | 2037 | /* GR2, GR3, VIN, OIR */ |
dkato | 0:853f5b7408a7 | 2038 | for (gr_type_index = VDC5_GR_TYPE_GR2; gr_type_index < VDC5_GR_TYPE_NUM; gr_type_index++) { |
dkato | 0:853f5b7408a7 | 2039 | /* Background color in GBR format (GRx_BASE) */ |
dkato | 0:853f5b7408a7 | 2040 | bg_color_reg = vdc5_regaddr_img_synthesizer[ch][gr_type_index].gr_base; |
dkato | 0:853f5b7408a7 | 2041 | *bg_color_reg = bg_color_conv; |
dkato | 0:853f5b7408a7 | 2042 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 2043 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 2044 | update_reg = vdc5_regaddr_img_synthesizer[ch][gr_type_index].gr_update; |
dkato | 0:853f5b7408a7 | 2045 | *update_reg |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2046 | } |
dkato | 0:853f5b7408a7 | 2047 | /* For OIR */ |
dkato | 0:853f5b7408a7 | 2048 | /* Background color in RGB format (OIR_SCL0_OVR1) */ |
dkato | 0:853f5b7408a7 | 2049 | bg_color_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR].scl0_ovr1; |
dkato | 0:853f5b7408a7 | 2050 | *bg_color_reg = bg_color_tmp; |
dkato | 0:853f5b7408a7 | 2051 | /* Register update control register (OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 2052 | b4 SCL0_VEN_B */ |
dkato | 0:853f5b7408a7 | 2053 | update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR].scl0_update; |
dkato | 0:853f5b7408a7 | 2054 | *update_reg |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2055 | } /* End of function SetGrapicsBackgroundColor() */ |
dkato | 0:853f5b7408a7 | 2056 | |
dkato | 0:853f5b7408a7 | 2057 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2058 | * @brief Sets background color for scaler 0, scaler 1, graphics 0, and graphics 1 |
dkato | 0:853f5b7408a7 | 2059 | * |
dkato | 0:853f5b7408a7 | 2060 | * Description:<br> |
dkato | 0:853f5b7408a7 | 2061 | * This function should be called only when graphics 0 or graphics 1 is selected. |
dkato | 0:853f5b7408a7 | 2062 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2063 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 2064 | * @param[in] color_space : Color space (GBR or YCbCr) |
dkato | 0:853f5b7408a7 | 2065 | * @retval None |
dkato | 0:853f5b7408a7 | 2066 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2067 | static void SetScalerBackgroundColor ( |
dkato | 0:853f5b7408a7 | 2068 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 2069 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 2070 | const vdc5_color_space_t color_space) |
dkato | 0:853f5b7408a7 | 2071 | { |
dkato | 0:853f5b7408a7 | 2072 | volatile uint32_t * scl0_update_reg; |
dkato | 0:853f5b7408a7 | 2073 | volatile uint32_t * scl0_ovr1_reg; |
dkato | 0:853f5b7408a7 | 2074 | volatile uint32_t * gr_base_reg; |
dkato | 0:853f5b7408a7 | 2075 | volatile uint32_t * gr_update_reg; |
dkato | 0:853f5b7408a7 | 2076 | uint32_t bg_color_tmp; |
dkato | 0:853f5b7408a7 | 2077 | uint32_t bg_color_conv; |
dkato | 0:853f5b7408a7 | 2078 | |
dkato | 0:853f5b7408a7 | 2079 | if (graphics_id == VDC5_GR_TYPE_GR0) { |
dkato | 0:853f5b7408a7 | 2080 | scl0_ovr1_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0].scl0_ovr1; |
dkato | 0:853f5b7408a7 | 2081 | scl0_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0].scl0_update; |
dkato | 0:853f5b7408a7 | 2082 | gr_base_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0].gr_base; |
dkato | 0:853f5b7408a7 | 2083 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0].gr_update; |
dkato | 0:853f5b7408a7 | 2084 | } else { |
dkato | 0:853f5b7408a7 | 2085 | /* graphics_id == VDC5_GR_TYPE_GR1 */ |
dkato | 0:853f5b7408a7 | 2086 | scl0_ovr1_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1].scl0_ovr1; |
dkato | 0:853f5b7408a7 | 2087 | scl0_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1].scl0_update; |
dkato | 0:853f5b7408a7 | 2088 | gr_base_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1].gr_base; |
dkato | 0:853f5b7408a7 | 2089 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1].gr_update; |
dkato | 0:853f5b7408a7 | 2090 | } |
dkato | 0:853f5b7408a7 | 2091 | /* Background color in 24-bit RGB color format or CrYCb format */ |
dkato | 0:853f5b7408a7 | 2092 | bg_color_tmp = VDC5_ShrdPrmGetBgColor(ch, color_space); |
dkato | 0:853f5b7408a7 | 2093 | /* Conversion from RGB into GBR / from CrYCb into YCbCr */ |
dkato | 0:853f5b7408a7 | 2094 | bg_color_conv = ColorConversionIntoAgbr(bg_color_tmp); |
dkato | 0:853f5b7408a7 | 2095 | bg_color_conv &= (uint32_t)VDC5_REG_RGB_24BIT_MASK; |
dkato | 0:853f5b7408a7 | 2096 | |
dkato | 0:853f5b7408a7 | 2097 | /* Background color in RGB format or CrYCb format */ |
dkato | 0:853f5b7408a7 | 2098 | *scl0_ovr1_reg = bg_color_tmp; |
dkato | 0:853f5b7408a7 | 2099 | /* Register update control register |
dkato | 0:853f5b7408a7 | 2100 | b4 SCL0_VEN_B */ |
dkato | 0:853f5b7408a7 | 2101 | *scl0_update_reg |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2102 | |
dkato | 0:853f5b7408a7 | 2103 | /* Background color in GBR format or YCbCr format */ |
dkato | 0:853f5b7408a7 | 2104 | *gr_base_reg = bg_color_conv; |
dkato | 0:853f5b7408a7 | 2105 | /* Graphics register update control register |
dkato | 0:853f5b7408a7 | 2106 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 2107 | *gr_update_reg |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2108 | } /* End of function SetScalerBackgroundColor() */ |
dkato | 0:853f5b7408a7 | 2109 | |
dkato | 0:853f5b7408a7 | 2110 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2111 | * @brief Sets LCD TCON - STVA/VS |
dkato | 0:853f5b7408a7 | 2112 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2113 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2114 | * @retval None |
dkato | 0:853f5b7408a7 | 2115 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2116 | static void SetLcdTcon_STVA_VS ( |
dkato | 0:853f5b7408a7 | 2117 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2118 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2119 | { |
dkato | 0:853f5b7408a7 | 2120 | /* Signal pulse start position */ |
dkato | 0:853f5b7408a7 | 2121 | *(output_ctrl->tcon_tim_stva1) = (uint32_t)lcd_tcon->tcon_hsvs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2122 | /* Pulse width */ |
dkato | 0:853f5b7408a7 | 2123 | *(output_ctrl->tcon_tim_stva1) |= (uint32_t)lcd_tcon->tcon_hwvw; |
dkato | 0:853f5b7408a7 | 2124 | |
dkato | 0:853f5b7408a7 | 2125 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2126 | if (lcd_tcon->tcon_inv == VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 2127 | *(output_ctrl->tcon_tim_stva2) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2128 | } else { |
dkato | 0:853f5b7408a7 | 2129 | *(output_ctrl->tcon_tim_stva2) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2130 | } |
dkato | 0:853f5b7408a7 | 2131 | } /* End of function SetLcdTcon_STVA_VS() */ |
dkato | 0:853f5b7408a7 | 2132 | |
dkato | 0:853f5b7408a7 | 2133 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2134 | * @brief Sets LCD TCON - STVB/VE |
dkato | 0:853f5b7408a7 | 2135 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2136 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2137 | * @retval None |
dkato | 0:853f5b7408a7 | 2138 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2139 | static void SetLcdTcon_STVB_VE ( |
dkato | 0:853f5b7408a7 | 2140 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2141 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2142 | { |
dkato | 0:853f5b7408a7 | 2143 | /* Signal pulse start position */ |
dkato | 0:853f5b7408a7 | 2144 | *(output_ctrl->tcon_tim_stvb1) = (uint32_t)lcd_tcon->tcon_hsvs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2145 | /* Pulse width */ |
dkato | 0:853f5b7408a7 | 2146 | *(output_ctrl->tcon_tim_stvb1) |= (uint32_t)lcd_tcon->tcon_hwvw; |
dkato | 0:853f5b7408a7 | 2147 | |
dkato | 0:853f5b7408a7 | 2148 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2149 | if (lcd_tcon->tcon_inv == VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 2150 | *(output_ctrl->tcon_tim_stvb2) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2151 | } else { |
dkato | 0:853f5b7408a7 | 2152 | *(output_ctrl->tcon_tim_stvb2) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2153 | } |
dkato | 0:853f5b7408a7 | 2154 | } /* End of function SetLcdTcon_STVB_VE() */ |
dkato | 0:853f5b7408a7 | 2155 | |
dkato | 0:853f5b7408a7 | 2156 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2157 | * @brief Sets LCD TCON - STH/HS |
dkato | 0:853f5b7408a7 | 2158 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2159 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2160 | * @retval None |
dkato | 0:853f5b7408a7 | 2161 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2162 | static void SetLcdTcon_STH_HS ( |
dkato | 0:853f5b7408a7 | 2163 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2164 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2165 | { |
dkato | 0:853f5b7408a7 | 2166 | /* Signal pulse start position */ |
dkato | 0:853f5b7408a7 | 2167 | *(output_ctrl->tcon_tim_sth1) = (uint32_t)lcd_tcon->tcon_hsvs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2168 | /* Pulse width */ |
dkato | 0:853f5b7408a7 | 2169 | *(output_ctrl->tcon_tim_sth1) |= (uint32_t)lcd_tcon->tcon_hwvw; |
dkato | 0:853f5b7408a7 | 2170 | |
dkato | 0:853f5b7408a7 | 2171 | *(output_ctrl->tcon_tim_sth2) &= (uint32_t)~VDC5_REG_MASK_0X00000110; |
dkato | 0:853f5b7408a7 | 2172 | /* Signal operating reference select */ |
dkato | 0:853f5b7408a7 | 2173 | if (lcd_tcon->tcon_hs_sel != VDC5_LCD_TCON_REFSEL_HSYNC) { |
dkato | 0:853f5b7408a7 | 2174 | *(output_ctrl->tcon_tim_sth2) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2175 | } |
dkato | 0:853f5b7408a7 | 2176 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2177 | if (lcd_tcon->tcon_inv != VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 2178 | *(output_ctrl->tcon_tim_sth2) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2179 | } |
dkato | 0:853f5b7408a7 | 2180 | } /* End of function SetLcdTcon_STH_HS() */ |
dkato | 0:853f5b7408a7 | 2181 | |
dkato | 0:853f5b7408a7 | 2182 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2183 | * @brief Sets LCD TCON - STB/HE |
dkato | 0:853f5b7408a7 | 2184 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2185 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2186 | * @retval None |
dkato | 0:853f5b7408a7 | 2187 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2188 | static void SetLcdTcon_STB_HE ( |
dkato | 0:853f5b7408a7 | 2189 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2190 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2191 | { |
dkato | 0:853f5b7408a7 | 2192 | /* Signal pulse start position */ |
dkato | 0:853f5b7408a7 | 2193 | *(output_ctrl->tcon_tim_stb1) = (uint32_t)lcd_tcon->tcon_hsvs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2194 | /* Pulse width */ |
dkato | 0:853f5b7408a7 | 2195 | *(output_ctrl->tcon_tim_stb1) |= (uint32_t)lcd_tcon->tcon_hwvw; |
dkato | 0:853f5b7408a7 | 2196 | |
dkato | 0:853f5b7408a7 | 2197 | *(output_ctrl->tcon_tim_stb2) &= (uint32_t)~VDC5_REG_MASK_0X00000110; |
dkato | 0:853f5b7408a7 | 2198 | /* Signal operating reference select */ |
dkato | 0:853f5b7408a7 | 2199 | if (lcd_tcon->tcon_hs_sel != VDC5_LCD_TCON_REFSEL_HSYNC) { |
dkato | 0:853f5b7408a7 | 2200 | *(output_ctrl->tcon_tim_stb2) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2201 | } |
dkato | 0:853f5b7408a7 | 2202 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2203 | if (lcd_tcon->tcon_inv != VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 2204 | *(output_ctrl->tcon_tim_stb2) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2205 | } |
dkato | 0:853f5b7408a7 | 2206 | } /* End of function SetLcdTcon_STB_HE() */ |
dkato | 0:853f5b7408a7 | 2207 | |
dkato | 0:853f5b7408a7 | 2208 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2209 | * @brief Sets LCD TCON - CPV/GCK |
dkato | 0:853f5b7408a7 | 2210 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2211 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2212 | * @retval None |
dkato | 0:853f5b7408a7 | 2213 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2214 | static void SetLcdTcon_CPV_GCK ( |
dkato | 0:853f5b7408a7 | 2215 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2216 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2217 | { |
dkato | 0:853f5b7408a7 | 2218 | /* Signal pulse start position */ |
dkato | 0:853f5b7408a7 | 2219 | *(output_ctrl->tcon_tim_cpv1) = (uint32_t)lcd_tcon->tcon_hsvs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2220 | /* Pulse width */ |
dkato | 0:853f5b7408a7 | 2221 | *(output_ctrl->tcon_tim_cpv1) |= (uint32_t)lcd_tcon->tcon_hwvw; |
dkato | 0:853f5b7408a7 | 2222 | |
dkato | 0:853f5b7408a7 | 2223 | *(output_ctrl->tcon_tim_cpv2) &= (uint32_t)~VDC5_REG_MASK_0X00000110; |
dkato | 0:853f5b7408a7 | 2224 | /* Signal operating reference select */ |
dkato | 0:853f5b7408a7 | 2225 | if (lcd_tcon->tcon_hs_sel != VDC5_LCD_TCON_REFSEL_HSYNC) { |
dkato | 0:853f5b7408a7 | 2226 | *(output_ctrl->tcon_tim_cpv2) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2227 | } |
dkato | 0:853f5b7408a7 | 2228 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2229 | if (lcd_tcon->tcon_inv != VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 2230 | *(output_ctrl->tcon_tim_cpv2) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2231 | } |
dkato | 0:853f5b7408a7 | 2232 | } /* End of function SetLcdTcon_CPV_GCK() */ |
dkato | 0:853f5b7408a7 | 2233 | |
dkato | 0:853f5b7408a7 | 2234 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2235 | * @brief Sets LCD TCON - POLA |
dkato | 0:853f5b7408a7 | 2236 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2237 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2238 | * @retval None |
dkato | 0:853f5b7408a7 | 2239 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2240 | static void SetLcdTcon_POLA ( |
dkato | 0:853f5b7408a7 | 2241 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2242 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2243 | { |
dkato | 0:853f5b7408a7 | 2244 | /* Signal pulse start position */ |
dkato | 0:853f5b7408a7 | 2245 | *(output_ctrl->tcon_tim_pola1) = (uint32_t)lcd_tcon->tcon_hsvs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2246 | /* Pulse width */ |
dkato | 0:853f5b7408a7 | 2247 | *(output_ctrl->tcon_tim_pola1) |= (uint32_t)lcd_tcon->tcon_hwvw; |
dkato | 0:853f5b7408a7 | 2248 | |
dkato | 0:853f5b7408a7 | 2249 | *(output_ctrl->tcon_tim_pola2) &= (uint32_t)~VDC5_REG_MASK_0X00003110; |
dkato | 0:853f5b7408a7 | 2250 | /* POLA/POLB signal generation mode select */ |
dkato | 0:853f5b7408a7 | 2251 | *(output_ctrl->tcon_tim_pola2) |= (uint32_t)lcd_tcon->tcon_md << VDC5_REG_SHIFT_12; |
dkato | 0:853f5b7408a7 | 2252 | /* Signal operating reference select */ |
dkato | 0:853f5b7408a7 | 2253 | if (lcd_tcon->tcon_hs_sel != VDC5_LCD_TCON_REFSEL_HSYNC) { |
dkato | 0:853f5b7408a7 | 2254 | *(output_ctrl->tcon_tim_pola2) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2255 | } |
dkato | 0:853f5b7408a7 | 2256 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2257 | if (lcd_tcon->tcon_inv != VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 2258 | *(output_ctrl->tcon_tim_pola2) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2259 | } |
dkato | 0:853f5b7408a7 | 2260 | } /* End of function SetLcdTcon_POLA() */ |
dkato | 0:853f5b7408a7 | 2261 | |
dkato | 0:853f5b7408a7 | 2262 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2263 | * @brief Sets LCD TCON - POLB |
dkato | 0:853f5b7408a7 | 2264 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2265 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2266 | * @retval None |
dkato | 0:853f5b7408a7 | 2267 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2268 | static void SetLcdTcon_POLB ( |
dkato | 0:853f5b7408a7 | 2269 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2270 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2271 | { |
dkato | 0:853f5b7408a7 | 2272 | /* Signal pulse start position */ |
dkato | 0:853f5b7408a7 | 2273 | *(output_ctrl->tcon_tim_polb1) = (uint32_t)lcd_tcon->tcon_hsvs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2274 | /* Pulse width */ |
dkato | 0:853f5b7408a7 | 2275 | *(output_ctrl->tcon_tim_polb1) |= (uint32_t)lcd_tcon->tcon_hwvw; |
dkato | 0:853f5b7408a7 | 2276 | |
dkato | 0:853f5b7408a7 | 2277 | *(output_ctrl->tcon_tim_polb2) &= (uint32_t)~VDC5_REG_MASK_0X00003110; |
dkato | 0:853f5b7408a7 | 2278 | /* POLA/POLB signal generation mode select */ |
dkato | 0:853f5b7408a7 | 2279 | *(output_ctrl->tcon_tim_polb2) |= (uint32_t)lcd_tcon->tcon_md << VDC5_REG_SHIFT_12; |
dkato | 0:853f5b7408a7 | 2280 | /* Signal operating reference select */ |
dkato | 0:853f5b7408a7 | 2281 | if (lcd_tcon->tcon_hs_sel != VDC5_LCD_TCON_REFSEL_HSYNC) { |
dkato | 0:853f5b7408a7 | 2282 | *(output_ctrl->tcon_tim_polb2) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2283 | } |
dkato | 0:853f5b7408a7 | 2284 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2285 | if (lcd_tcon->tcon_inv != VDC5_SIG_POL_NOT_INVERTED) { |
dkato | 0:853f5b7408a7 | 2286 | *(output_ctrl->tcon_tim_polb2) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2287 | } |
dkato | 0:853f5b7408a7 | 2288 | } /* End of function SetLcdTcon_POLB() */ |
dkato | 0:853f5b7408a7 | 2289 | |
dkato | 0:853f5b7408a7 | 2290 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2291 | * @brief Sets LCD TCON - DE |
dkato | 0:853f5b7408a7 | 2292 | * @param[in] lcd_tcon : LCD TCON timing signal parameter |
dkato | 0:853f5b7408a7 | 2293 | * @param[in] output_ctrl : Output controller registers |
dkato | 0:853f5b7408a7 | 2294 | * @retval None |
dkato | 0:853f5b7408a7 | 2295 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2296 | static void SetLcdTcon_DE ( |
dkato | 0:853f5b7408a7 | 2297 | const vdc5_lcd_tcon_timing_t * const lcd_tcon, |
dkato | 0:853f5b7408a7 | 2298 | const vdc5_regaddr_output_ctrl_t * const output_ctrl) |
dkato | 0:853f5b7408a7 | 2299 | { |
dkato | 0:853f5b7408a7 | 2300 | /* Polarity inversion control of signal */ |
dkato | 0:853f5b7408a7 | 2301 | *(output_ctrl->tcon_tim_de) = (lcd_tcon->tcon_inv == VDC5_SIG_POL_NOT_INVERTED) ? (uint32_t)0u : (uint32_t)1u; |
dkato | 0:853f5b7408a7 | 2302 | |
dkato | 0:853f5b7408a7 | 2303 | } /* End of function SetLcdTcon_DE() */ |
dkato | 0:853f5b7408a7 | 2304 | |
dkato | 0:853f5b7408a7 | 2305 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2306 | * @brief Sets scaling-down |
dkato | 0:853f5b7408a7 | 2307 | * @param[in] scldw_rot : Scaling-down and rotation parameter |
dkato | 0:853f5b7408a7 | 2308 | * @param[in] res_inter : Field operating mode select |
dkato | 0:853f5b7408a7 | 2309 | * @param[in] scaler : Scaler registers |
dkato | 0:853f5b7408a7 | 2310 | * @retval None |
dkato | 0:853f5b7408a7 | 2311 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2312 | static void SetScalingDown ( |
dkato | 0:853f5b7408a7 | 2313 | const vdc5_scalingdown_rot_t * const scldw_rot, |
dkato | 0:853f5b7408a7 | 2314 | const vdc5_res_inter_t res_inter, |
dkato | 0:853f5b7408a7 | 2315 | const vdc5_regaddr_scaler_t * const scaler) |
dkato | 0:853f5b7408a7 | 2316 | { |
dkato | 0:853f5b7408a7 | 2317 | uint32_t vw_before_scld; /* Vertical width before scaling-down */ |
dkato | 0:853f5b7408a7 | 2318 | uint32_t hw_before_scld; /* Horizontal width before scaling-down */ |
dkato | 0:853f5b7408a7 | 2319 | uint32_t vw_after_scld; /* Vertical width after scaling-down */ |
dkato | 0:853f5b7408a7 | 2320 | uint32_t hw_after_scld; /* Horizontal width after scaling-down */ |
dkato | 0:853f5b7408a7 | 2321 | uint32_t scaling_ratio; |
dkato | 0:853f5b7408a7 | 2322 | |
dkato | 0:853f5b7408a7 | 2323 | vw_before_scld = (uint32_t)scldw_rot->res.vw; |
dkato | 0:853f5b7408a7 | 2324 | hw_before_scld = (uint32_t)scldw_rot->res.hw; |
dkato | 0:853f5b7408a7 | 2325 | |
dkato | 0:853f5b7408a7 | 2326 | vw_after_scld = (uint32_t)scldw_rot->res_out_vw; |
dkato | 0:853f5b7408a7 | 2327 | hw_after_scld = (uint32_t)scldw_rot->res_out_hw; |
dkato | 0:853f5b7408a7 | 2328 | |
dkato | 0:853f5b7408a7 | 2329 | /* Vertical scaling-down: ON, vertical scaling-up: OFF */ |
dkato | 0:853f5b7408a7 | 2330 | *(scaler->scl0_ds1) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2331 | *(scaler->scl0_us1) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2332 | if (vw_before_scld > vw_after_scld) { |
dkato | 0:853f5b7408a7 | 2333 | scaling_ratio = CalcScalingRatio(vw_before_scld, vw_after_scld, scldw_rot->adj_sel, VDC5_OFF); |
dkato | 0:853f5b7408a7 | 2334 | |
dkato | 0:853f5b7408a7 | 2335 | *(scaler->scl0_ds6) = scaling_ratio; |
dkato | 0:853f5b7408a7 | 2336 | } else { |
dkato | 0:853f5b7408a7 | 2337 | *(scaler->scl0_ds6) = (uint32_t)SCALING_RATIO_SAME_SIZE; |
dkato | 0:853f5b7408a7 | 2338 | } |
dkato | 0:853f5b7408a7 | 2339 | |
dkato | 0:853f5b7408a7 | 2340 | /* Horizontal scaling-down */ |
dkato | 0:853f5b7408a7 | 2341 | if (hw_before_scld > hw_after_scld) { |
dkato | 0:853f5b7408a7 | 2342 | /* ON */ |
dkato | 0:853f5b7408a7 | 2343 | *(scaler->scl0_ds1) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 2344 | |
dkato | 0:853f5b7408a7 | 2345 | scaling_ratio = CalcScalingRatio(hw_before_scld, hw_after_scld, VDC5_ON, VDC5_ON); |
dkato | 0:853f5b7408a7 | 2346 | |
dkato | 0:853f5b7408a7 | 2347 | *(scaler->scl0_ds4) &= (uint32_t)~VDC5_REG_MASK_0X0000FFFF; |
dkato | 0:853f5b7408a7 | 2348 | *(scaler->scl0_ds4) |= scaling_ratio; |
dkato | 0:853f5b7408a7 | 2349 | } else { |
dkato | 0:853f5b7408a7 | 2350 | /* OFF */ |
dkato | 0:853f5b7408a7 | 2351 | *(scaler->scl0_ds1) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 2352 | } |
dkato | 0:853f5b7408a7 | 2353 | |
dkato | 0:853f5b7408a7 | 2354 | /* Initial scaling phase */ |
dkato | 0:853f5b7408a7 | 2355 | *(scaler->scl0_ds5) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2356 | *(scaler->scl0_us6) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2357 | if (res_inter != VDC5_RES_INTER_PROGRESSIVE) { |
dkato | 0:853f5b7408a7 | 2358 | /* Top */ |
dkato | 0:853f5b7408a7 | 2359 | *(scaler->scl0_ds5) |= INITIAL_SCALING_PHASE << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2360 | } |
dkato | 0:853f5b7408a7 | 2361 | |
dkato | 0:853f5b7408a7 | 2362 | } /* End of function SetScalingDown() */ |
dkato | 0:853f5b7408a7 | 2363 | |
dkato | 0:853f5b7408a7 | 2364 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2365 | * @brief Sets scaling-up |
dkato | 0:853f5b7408a7 | 2366 | * @param[in] w_read_fb : Size of the frame buffer to be read |
dkato | 0:853f5b7408a7 | 2367 | * @param[in] gr_grc : Graphics display area |
dkato | 0:853f5b7408a7 | 2368 | * @param[in] adj_sel : Folding handling (on/off) |
dkato | 0:853f5b7408a7 | 2369 | * @param[in] ip_conversion : IP conversion on/off |
dkato | 0:853f5b7408a7 | 2370 | * @param[in] res_ds_wr_md : Frame buffer writing mode for image processing |
dkato | 0:853f5b7408a7 | 2371 | * @param[in] ln_off_dir : Line offset address direction of the frame buffer |
dkato | 0:853f5b7408a7 | 2372 | * @param[in] scaler : Scaler registers |
dkato | 0:853f5b7408a7 | 2373 | * @retval None |
dkato | 0:853f5b7408a7 | 2374 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2375 | static void SetScalingUp ( |
dkato | 0:853f5b7408a7 | 2376 | const vdc5_width_read_fb_t * const w_read_fb, |
dkato | 0:853f5b7408a7 | 2377 | const vdc5_period_rect_t * const gr_grc, |
dkato | 0:853f5b7408a7 | 2378 | const vdc5_onoff_t adj_sel, |
dkato | 0:853f5b7408a7 | 2379 | const vdc5_onoff_t ip_conversion, |
dkato | 0:853f5b7408a7 | 2380 | const vdc5_wr_md_t res_ds_wr_md, |
dkato | 0:853f5b7408a7 | 2381 | const vdc5_gr_ln_off_dir_t ln_off_dir, |
dkato | 0:853f5b7408a7 | 2382 | const vdc5_regaddr_scaler_t * const scaler) |
dkato | 0:853f5b7408a7 | 2383 | { |
dkato | 0:853f5b7408a7 | 2384 | uint32_t w_before_scl; /* Width before scaling-up */ |
dkato | 0:853f5b7408a7 | 2385 | uint32_t w_after_scl; /* Width after scaling-up */ |
dkato | 0:853f5b7408a7 | 2386 | uint32_t scaling_ratio; |
dkato | 0:853f5b7408a7 | 2387 | vdc5_onoff_t vscl_up; /* Vertical scaling-up */ |
dkato | 0:853f5b7408a7 | 2388 | |
dkato | 0:853f5b7408a7 | 2389 | vscl_up = VDC5_OFF; |
dkato | 0:853f5b7408a7 | 2390 | |
dkato | 0:853f5b7408a7 | 2391 | /* Vertical scaling-up */ |
dkato | 0:853f5b7408a7 | 2392 | w_before_scl = (uint32_t)w_read_fb->in_vw; |
dkato | 0:853f5b7408a7 | 2393 | w_after_scl = (uint32_t)gr_grc->vw; |
dkato | 0:853f5b7408a7 | 2394 | if (w_before_scl < w_after_scl) { |
dkato | 0:853f5b7408a7 | 2395 | /* Vertical scaling-down: OFF, vertical scaling-up: ON */ |
dkato | 0:853f5b7408a7 | 2396 | *(scaler->scl0_ds1) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2397 | *(scaler->scl0_us1) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2398 | |
dkato | 0:853f5b7408a7 | 2399 | scaling_ratio = CalcScalingRatio(w_before_scl, w_after_scl, adj_sel, VDC5_OFF); |
dkato | 0:853f5b7408a7 | 2400 | *(scaler->scl0_ds6) = scaling_ratio; |
dkato | 0:853f5b7408a7 | 2401 | |
dkato | 0:853f5b7408a7 | 2402 | vscl_up = VDC5_ON; |
dkato | 0:853f5b7408a7 | 2403 | } else { |
dkato | 0:853f5b7408a7 | 2404 | /* Vertical scaling-up: OFF */ |
dkato | 0:853f5b7408a7 | 2405 | *(scaler->scl0_us1) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2406 | } |
dkato | 0:853f5b7408a7 | 2407 | |
dkato | 0:853f5b7408a7 | 2408 | /* Horizontal scaling-up */ |
dkato | 0:853f5b7408a7 | 2409 | w_before_scl = (uint32_t)w_read_fb->in_hw; |
dkato | 0:853f5b7408a7 | 2410 | w_after_scl = (uint32_t)gr_grc->hw; |
dkato | 0:853f5b7408a7 | 2411 | if (w_before_scl < w_after_scl) { |
dkato | 0:853f5b7408a7 | 2412 | /* Horizontal scaling-up: ON */ |
dkato | 0:853f5b7408a7 | 2413 | *(scaler->scl0_us1) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 2414 | |
dkato | 0:853f5b7408a7 | 2415 | scaling_ratio = CalcScalingRatio(w_before_scl, w_after_scl, adj_sel, VDC5_OFF); |
dkato | 0:853f5b7408a7 | 2416 | |
dkato | 0:853f5b7408a7 | 2417 | *(scaler->scl0_us5) &= (uint32_t)~VDC5_REG_MASK_0X0000FFFF; |
dkato | 0:853f5b7408a7 | 2418 | *(scaler->scl0_us5) |= scaling_ratio; |
dkato | 0:853f5b7408a7 | 2419 | } else { |
dkato | 0:853f5b7408a7 | 2420 | /* Horizontal scaling-up: OFF */ |
dkato | 0:853f5b7408a7 | 2421 | *(scaler->scl0_us1) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 2422 | } |
dkato | 0:853f5b7408a7 | 2423 | |
dkato | 0:853f5b7408a7 | 2424 | /* Initial scaling phase */ |
dkato | 0:853f5b7408a7 | 2425 | if (ip_conversion == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2426 | *(scaler->scl0_ds5) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2427 | *(scaler->scl0_us6) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2428 | } else { |
dkato | 0:853f5b7408a7 | 2429 | if (vscl_up != VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2430 | switch (res_ds_wr_md) { |
dkato | 0:853f5b7408a7 | 2431 | case VDC5_WR_MD_ROT_90DEG: |
dkato | 0:853f5b7408a7 | 2432 | *(scaler->scl0_ds5) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2433 | *(scaler->scl0_us6) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2434 | /* US_HB */ |
dkato | 0:853f5b7408a7 | 2435 | *(scaler->scl0_us6) |= INITIAL_SCALING_PHASE; |
dkato | 0:853f5b7408a7 | 2436 | break; |
dkato | 0:853f5b7408a7 | 2437 | case VDC5_WR_MD_ROT_180DEG: |
dkato | 0:853f5b7408a7 | 2438 | if (ln_off_dir == VDC5_GR_LN_OFF_DIR_INC) { |
dkato | 0:853f5b7408a7 | 2439 | *(scaler->scl0_ds5) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2440 | *(scaler->scl0_us6) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2441 | /* BTM */ |
dkato | 0:853f5b7408a7 | 2442 | *(scaler->scl0_ds5) |= INITIAL_SCALING_PHASE; |
dkato | 0:853f5b7408a7 | 2443 | } |
dkato | 0:853f5b7408a7 | 2444 | break; |
dkato | 0:853f5b7408a7 | 2445 | case VDC5_WR_MD_ROT_270DEG: |
dkato | 0:853f5b7408a7 | 2446 | *(scaler->scl0_ds5) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2447 | *(scaler->scl0_us6) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2448 | /* US_HT */ |
dkato | 0:853f5b7408a7 | 2449 | *(scaler->scl0_us6) |= INITIAL_SCALING_PHASE << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2450 | break; |
dkato | 0:853f5b7408a7 | 2451 | default: /* Normal or horizontal mirroring */ |
dkato | 0:853f5b7408a7 | 2452 | if (ln_off_dir == VDC5_GR_LN_OFF_DIR_DEC) { |
dkato | 0:853f5b7408a7 | 2453 | *(scaler->scl0_ds5) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2454 | *(scaler->scl0_us6) &= (uint32_t)~VDC5_REG_MASK_0X0FFF0FFF; |
dkato | 0:853f5b7408a7 | 2455 | /* BTM */ |
dkato | 0:853f5b7408a7 | 2456 | *(scaler->scl0_ds5) |= INITIAL_SCALING_PHASE; |
dkato | 0:853f5b7408a7 | 2457 | } |
dkato | 0:853f5b7408a7 | 2458 | break; |
dkato | 0:853f5b7408a7 | 2459 | } |
dkato | 0:853f5b7408a7 | 2460 | } |
dkato | 0:853f5b7408a7 | 2461 | } |
dkato | 0:853f5b7408a7 | 2462 | } /* End of function SetScalingUp() */ |
dkato | 0:853f5b7408a7 | 2463 | |
dkato | 0:853f5b7408a7 | 2464 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2465 | * @brief Calculates scaling ratio |
dkato | 0:853f5b7408a7 | 2466 | * |
dkato | 0:853f5b7408a7 | 2467 | * Description:<br> |
dkato | 0:853f5b7408a7 | 2468 | * In this function, the overflow in calculation is not considered. |
dkato | 0:853f5b7408a7 | 2469 | * before_scl and after_scl are 11bit width, so the overflow does not occur. |
dkato | 0:853f5b7408a7 | 2470 | * @param[in] before_scl : Size before scaling |
dkato | 0:853f5b7408a7 | 2471 | * @param[in] after_scl : Size after scaling |
dkato | 0:853f5b7408a7 | 2472 | * @param[in] adj_sel : Handling for lack of last-input pixel/line, or folding handling |
dkato | 0:853f5b7408a7 | 2473 | * @param[in] round_up : Round-up on/off |
dkato | 0:853f5b7408a7 | 2474 | * @retval Scaling ratio |
dkato | 0:853f5b7408a7 | 2475 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2476 | static uint32_t CalcScalingRatio ( |
dkato | 0:853f5b7408a7 | 2477 | const uint32_t before_scl, |
dkato | 0:853f5b7408a7 | 2478 | const uint32_t after_scl, |
dkato | 0:853f5b7408a7 | 2479 | const vdc5_onoff_t adj_sel, |
dkato | 0:853f5b7408a7 | 2480 | const vdc5_onoff_t round_up) |
dkato | 0:853f5b7408a7 | 2481 | { |
dkato | 0:853f5b7408a7 | 2482 | float32_t ratio; |
dkato | 0:853f5b7408a7 | 2483 | float32_t sigma; |
dkato | 0:853f5b7408a7 | 2484 | int32_t ratio_int; |
dkato | 0:853f5b7408a7 | 2485 | uint32_t scaling_ratio; |
dkato | 0:853f5b7408a7 | 2486 | |
dkato | 0:853f5b7408a7 | 2487 | /* When parameter checking is not performed, |
dkato | 0:853f5b7408a7 | 2488 | following checks are necessary to avoid a division by zero exception and a negative number. */ |
dkato | 0:853f5b7408a7 | 2489 | if ((after_scl == 0u) || (after_scl == 1u)) { |
dkato | 0:853f5b7408a7 | 2490 | scaling_ratio = (uint32_t)SCALING_RATIO_SAME_SIZE; |
dkato | 0:853f5b7408a7 | 2491 | } else { |
dkato | 0:853f5b7408a7 | 2492 | /* ratio = before_scl * 4096.0 / after_scl */ |
dkato | 0:853f5b7408a7 | 2493 | ratio = (float32_t)before_scl * (float32_t)SCALING_RATIO_SAME_SIZE; |
dkato | 0:853f5b7408a7 | 2494 | ratio /= (float32_t)after_scl; |
dkato | 0:853f5b7408a7 | 2495 | |
dkato | 0:853f5b7408a7 | 2496 | if (adj_sel != VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2497 | sigma = ratio * ((float32_t)after_scl - (float32_t)VDC5_REG_FLOAT_1_0); |
dkato | 0:853f5b7408a7 | 2498 | sigma -= ((float32_t)before_scl - (float32_t)VDC5_REG_FLOAT_1_0) * (float32_t)SCALING_RATIO_SAME_SIZE; |
dkato | 0:853f5b7408a7 | 2499 | sigma /= ((float32_t)after_scl - (float32_t)VDC5_REG_FLOAT_1_0); |
dkato | 0:853f5b7408a7 | 2500 | ratio -= sigma; |
dkato | 0:853f5b7408a7 | 2501 | } |
dkato | 0:853f5b7408a7 | 2502 | |
dkato | 0:853f5b7408a7 | 2503 | if (round_up == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2504 | /* Round off */ |
dkato | 0:853f5b7408a7 | 2505 | ratio += (float32_t)VDC5_REG_FLOAT_0_5; |
dkato | 0:853f5b7408a7 | 2506 | ratio_int = (int32_t)ratio; |
dkato | 0:853f5b7408a7 | 2507 | } else { |
dkato | 0:853f5b7408a7 | 2508 | /* Round up */ |
dkato | 0:853f5b7408a7 | 2509 | ratio_int = (int32_t)ratio; |
dkato | 0:853f5b7408a7 | 2510 | if ((float32_t)ratio_int < ratio) { |
dkato | 0:853f5b7408a7 | 2511 | ratio_int++; |
dkato | 0:853f5b7408a7 | 2512 | } |
dkato | 0:853f5b7408a7 | 2513 | } |
dkato | 0:853f5b7408a7 | 2514 | scaling_ratio = (uint32_t)ratio_int; |
dkato | 0:853f5b7408a7 | 2515 | } |
dkato | 0:853f5b7408a7 | 2516 | return scaling_ratio; |
dkato | 0:853f5b7408a7 | 2517 | } /* End of function CalcScalingRatio() */ |
dkato | 0:853f5b7408a7 | 2518 | |
dkato | 0:853f5b7408a7 | 2519 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2520 | * @brief Sets color matrix in the input controller |
dkato | 0:853f5b7408a7 | 2521 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2522 | * @param[in] scaling_id : Scaling type ID |
dkato | 0:853f5b7408a7 | 2523 | * @retval None |
dkato | 0:853f5b7408a7 | 2524 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2525 | static void SetInputCntrlColorMtx (const vdc5_channel_t ch, const vdc5_scaling_type_t scaling_id) |
dkato | 0:853f5b7408a7 | 2526 | { |
dkato | 0:853f5b7408a7 | 2527 | vdc5_channel_t channel; |
dkato | 0:853f5b7408a7 | 2528 | vdc5_color_space_t color_space_input; |
dkato | 0:853f5b7408a7 | 2529 | vdc5_color_space_t color_space_fb; |
dkato | 0:853f5b7408a7 | 2530 | vdc5_colormtx_mode_t mtx_mode_tmp; |
dkato | 0:853f5b7408a7 | 2531 | const uint16_t * offset_tmp; |
dkato | 0:853f5b7408a7 | 2532 | const uint16_t * gain_tmp; |
dkato | 0:853f5b7408a7 | 2533 | |
dkato | 0:853f5b7408a7 | 2534 | if (scaling_id == VDC5_SC_TYPE_SC0) { |
dkato | 0:853f5b7408a7 | 2535 | channel = ch; |
dkato | 0:853f5b7408a7 | 2536 | } else { |
dkato | 0:853f5b7408a7 | 2537 | channel = (ch == VDC5_CHANNEL_0) ? VDC5_CHANNEL_1 : VDC5_CHANNEL_0; |
dkato | 0:853f5b7408a7 | 2538 | } |
dkato | 0:853f5b7408a7 | 2539 | color_space_input = VDC5_ShrdPrmGetColorSpace(channel); |
dkato | 0:853f5b7408a7 | 2540 | color_space_fb = VDC5_ShrdPrmGetColorSpaceFbWr(ch, scaling_id); |
dkato | 0:853f5b7408a7 | 2541 | /* Color matrix operating mode */ |
dkato | 0:853f5b7408a7 | 2542 | if (color_space_input == VDC5_COLOR_SPACE_GBR) { |
dkato | 0:853f5b7408a7 | 2543 | if (color_space_fb == VDC5_COLOR_SPACE_GBR) { |
dkato | 0:853f5b7408a7 | 2544 | /* GBR to GBR */ |
dkato | 0:853f5b7408a7 | 2545 | mtx_mode_tmp = VDC5_COLORMTX_GBR_GBR; |
dkato | 0:853f5b7408a7 | 2546 | } else { |
dkato | 0:853f5b7408a7 | 2547 | /* GBR to YCbCr */ |
dkato | 0:853f5b7408a7 | 2548 | mtx_mode_tmp = VDC5_COLORMTX_GBR_YCBCR; |
dkato | 0:853f5b7408a7 | 2549 | } |
dkato | 0:853f5b7408a7 | 2550 | } else { |
dkato | 0:853f5b7408a7 | 2551 | if (color_space_fb == VDC5_COLOR_SPACE_GBR) { |
dkato | 0:853f5b7408a7 | 2552 | /* YCbCr to GBR */ |
dkato | 0:853f5b7408a7 | 2553 | mtx_mode_tmp = VDC5_COLORMTX_YCBCR_GBR; |
dkato | 0:853f5b7408a7 | 2554 | } else { |
dkato | 0:853f5b7408a7 | 2555 | /* YCbCr to YCbCr */ |
dkato | 0:853f5b7408a7 | 2556 | mtx_mode_tmp = VDC5_COLORMTX_YCBCR_YCBCR; |
dkato | 0:853f5b7408a7 | 2557 | } |
dkato | 0:853f5b7408a7 | 2558 | } |
dkato | 0:853f5b7408a7 | 2559 | /* Color matrix offset (DC) adjustment (YG, B, and R) */ |
dkato | 0:853f5b7408a7 | 2560 | offset_tmp = colormtx_offset_adj; |
dkato | 0:853f5b7408a7 | 2561 | /* Color matrix signal gain adjustment (GG, GB, GR, BG, BB, BR, RG, RB, and RR) */ |
dkato | 0:853f5b7408a7 | 2562 | gain_tmp = colormtx_gain_adj[mtx_mode_tmp]; |
dkato | 0:853f5b7408a7 | 2563 | |
dkato | 0:853f5b7408a7 | 2564 | SetColorMatrix(mtx_mode_tmp, offset_tmp, gain_tmp, &vdc5_regaddr_color_matrix[channel][VDC5_COLORMTX_IMGCNT]); |
dkato | 0:853f5b7408a7 | 2565 | |
dkato | 0:853f5b7408a7 | 2566 | } /* End of function SetInputCntrlColorMtx() */ |
dkato | 0:853f5b7408a7 | 2567 | |
dkato | 0:853f5b7408a7 | 2568 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2569 | * @brief Confirms whether the graphics enlargement will occur or not |
dkato | 0:853f5b7408a7 | 2570 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 2571 | * @param[in] gr_flm_sel : Frame buffer address setting signal |
dkato | 0:853f5b7408a7 | 2572 | * @param[in] w_read_fb : Size of the frame buffer to be read |
dkato | 0:853f5b7408a7 | 2573 | * @param[in] gr_grc : Graphics display area |
dkato | 0:853f5b7408a7 | 2574 | * @retval Graphics enlargement on/off |
dkato | 0:853f5b7408a7 | 2575 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2576 | static vdc5_onoff_t ConfirmGraphicsEnlargement ( |
dkato | 0:853f5b7408a7 | 2577 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 2578 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 2579 | const vdc5_width_read_fb_t * const w_read_fb, |
dkato | 0:853f5b7408a7 | 2580 | const vdc5_period_rect_t * const gr_grc) |
dkato | 0:853f5b7408a7 | 2581 | { |
dkato | 0:853f5b7408a7 | 2582 | vdc5_onoff_t graphics_enlargement; |
dkato | 0:853f5b7408a7 | 2583 | |
dkato | 0:853f5b7408a7 | 2584 | graphics_enlargement = VDC5_OFF; |
dkato | 0:853f5b7408a7 | 2585 | if (gr_flm_sel == VDC5_GR_FLM_SEL_FLM_NUM) { |
dkato | 0:853f5b7408a7 | 2586 | if ((graphics_id == VDC5_GR_TYPE_GR0) || (graphics_id == VDC5_GR_TYPE_GR1)) { |
dkato | 0:853f5b7408a7 | 2587 | if (((uint32_t)w_read_fb->in_vw < (uint32_t)gr_grc->vw) || |
dkato | 0:853f5b7408a7 | 2588 | ((uint32_t)w_read_fb->in_hw < (uint32_t)gr_grc->hw)) { |
dkato | 0:853f5b7408a7 | 2589 | graphics_enlargement = VDC5_ON; |
dkato | 0:853f5b7408a7 | 2590 | } |
dkato | 0:853f5b7408a7 | 2591 | } |
dkato | 0:853f5b7408a7 | 2592 | } else { |
dkato | 0:853f5b7408a7 | 2593 | if (((uint32_t)w_read_fb->in_vw < (uint32_t)gr_grc->vw) || ((uint32_t)w_read_fb->in_hw < (uint32_t)gr_grc->hw)) { |
dkato | 0:853f5b7408a7 | 2594 | graphics_enlargement = VDC5_ON; |
dkato | 0:853f5b7408a7 | 2595 | } |
dkato | 0:853f5b7408a7 | 2596 | } |
dkato | 0:853f5b7408a7 | 2597 | return graphics_enlargement; |
dkato | 0:853f5b7408a7 | 2598 | } /* End of function ConfirmGraphicsEnlargement() */ |
dkato | 0:853f5b7408a7 | 2599 | |
dkato | 0:853f5b7408a7 | 2600 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2601 | * @brief Sets scaler for graphics |
dkato | 0:853f5b7408a7 | 2602 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2603 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 2604 | * @param[in] w_read_fb : Size of the frame buffer to be read |
dkato | 0:853f5b7408a7 | 2605 | * @param[in] gr_grc : Graphics display area |
dkato | 0:853f5b7408a7 | 2606 | * @param[in] gr_flm_sel : Frame buffer address setting signal |
dkato | 0:853f5b7408a7 | 2607 | * @param[in] gr_enlarge : Graphics enlargement on/off |
dkato | 0:853f5b7408a7 | 2608 | * @retval None |
dkato | 0:853f5b7408a7 | 2609 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2610 | static void SetScalerGraphics ( |
dkato | 0:853f5b7408a7 | 2611 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 2612 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 2613 | const vdc5_width_read_fb_t * const w_read_fb, |
dkato | 0:853f5b7408a7 | 2614 | const vdc5_period_rect_t * const gr_grc, |
dkato | 0:853f5b7408a7 | 2615 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 2616 | const vdc5_onoff_t gr_enlarge) |
dkato | 0:853f5b7408a7 | 2617 | { |
dkato | 0:853f5b7408a7 | 2618 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 2619 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 2620 | vdc5_scaling_type_t scaling_id; |
dkato | 0:853f5b7408a7 | 2621 | vdc5_res_inter_t res_inter_tmp; |
dkato | 0:853f5b7408a7 | 2622 | vdc5_wr_md_t res_ds_wr_md_tmp; |
dkato | 0:853f5b7408a7 | 2623 | vdc5_onoff_t adj_sel_tmp; |
dkato | 0:853f5b7408a7 | 2624 | vdc5_onoff_t ip_conversion; |
dkato | 0:853f5b7408a7 | 2625 | uint32_t reg_data; |
dkato | 0:853f5b7408a7 | 2626 | vdc5_gr_ln_off_dir_t ln_off_dir; |
dkato | 0:853f5b7408a7 | 2627 | |
dkato | 0:853f5b7408a7 | 2628 | if (graphics_id == VDC5_GR_TYPE_GR0) { |
dkato | 0:853f5b7408a7 | 2629 | /* Scaler 0 */ |
dkato | 0:853f5b7408a7 | 2630 | scaling_id = VDC5_SC_TYPE_SC0; |
dkato | 0:853f5b7408a7 | 2631 | } else if (graphics_id == VDC5_GR_TYPE_GR1) { |
dkato | 0:853f5b7408a7 | 2632 | /* Scaler 1 */ |
dkato | 0:853f5b7408a7 | 2633 | scaling_id = VDC5_SC_TYPE_SC1; |
dkato | 0:853f5b7408a7 | 2634 | } else { |
dkato | 0:853f5b7408a7 | 2635 | /* OIR */ |
dkato | 0:853f5b7408a7 | 2636 | scaling_id = VDC5_SC_TYPE_OIR; |
dkato | 0:853f5b7408a7 | 2637 | } |
dkato | 0:853f5b7408a7 | 2638 | |
dkato | 0:853f5b7408a7 | 2639 | scaler = &vdc5_regaddr_scaler[ch][scaling_id]; |
dkato | 0:853f5b7408a7 | 2640 | |
dkato | 0:853f5b7408a7 | 2641 | if ((gr_flm_sel == VDC5_GR_FLM_SEL_FLM_NUM) && (gr_enlarge == VDC5_OFF)) { |
dkato | 0:853f5b7408a7 | 2642 | /* Normal graphics display */ |
dkato | 0:853f5b7408a7 | 2643 | /* Sync signals from the graphics processing block */ |
dkato | 0:853f5b7408a7 | 2644 | *(scaler->scl0_us8) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2645 | |
dkato | 0:853f5b7408a7 | 2646 | /* Register update control register (SC0_SCL0_UPDATE, SC1_SCL0_UPDATE, OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 2647 | b13 SCL0_VEN_D |
dkato | 0:853f5b7408a7 | 2648 | b4 SCL0_VEN_B */ |
dkato | 0:853f5b7408a7 | 2649 | *(scaler->scl0_update) |= (uint32_t)(VDC5_REG_BIT13 | VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 2650 | } else { |
dkato | 0:853f5b7408a7 | 2651 | /* Video image or graphics enlargement */ |
dkato | 0:853f5b7408a7 | 2652 | if (graphics_id == VDC5_GR_TYPE_OIR) { |
dkato | 0:853f5b7408a7 | 2653 | /* Turn the vertical scaling-up and the horizontal scaling-up off */ |
dkato | 0:853f5b7408a7 | 2654 | *(scaler->scl0_us1) &= (uint32_t)~VDC5_REG_MASK_0X00000011; |
dkato | 0:853f5b7408a7 | 2655 | /* Sync signals from the graphics processing block */ |
dkato | 0:853f5b7408a7 | 2656 | *(scaler->scl0_us8) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2657 | } else { |
dkato | 0:853f5b7408a7 | 2658 | /* Sync signals from the scaling-up control block */ |
dkato | 0:853f5b7408a7 | 2659 | *(scaler->scl0_us8) &= (uint32_t)~VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 2660 | |
dkato | 0:853f5b7408a7 | 2661 | /* Graphics display area */ |
dkato | 0:853f5b7408a7 | 2662 | *(scaler->scl0_us2) = (uint32_t)gr_grc->vs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2663 | *(scaler->scl0_us2) |= (uint32_t)gr_grc->vw; |
dkato | 0:853f5b7408a7 | 2664 | *(scaler->scl0_us3) = (uint32_t)gr_grc->hs << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2665 | *(scaler->scl0_us3) |= (uint32_t)gr_grc->hw; |
dkato | 0:853f5b7408a7 | 2666 | |
dkato | 0:853f5b7408a7 | 2667 | *(scaler->scl0_us4) = (uint32_t)w_read_fb->in_vw << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 2668 | *(scaler->scl0_us4) |= (uint32_t)w_read_fb->in_hw; |
dkato | 0:853f5b7408a7 | 2669 | |
dkato | 0:853f5b7408a7 | 2670 | res_ds_wr_md_tmp = VDC5_ShrdPrmGetWritingMode(ch, scaling_id); |
dkato | 0:853f5b7408a7 | 2671 | adj_sel_tmp = VDC5_ShrdPrmGetMeasureFolding(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 2672 | ip_conversion = VDC5_OFF; |
dkato | 0:853f5b7408a7 | 2673 | if ((gr_flm_sel == VDC5_GR_FLM_SEL_SCALE_DOWN) || (gr_flm_sel == VDC5_GR_FLM_SEL_POINTER_BUFF)) { |
dkato | 0:853f5b7408a7 | 2674 | res_inter_tmp = VDC5_ShrdPrmGetInterlace(ch, scaling_id); |
dkato | 0:853f5b7408a7 | 2675 | if (res_inter_tmp != VDC5_RES_INTER_PROGRESSIVE) { |
dkato | 0:853f5b7408a7 | 2676 | ip_conversion = VDC5_ON; |
dkato | 0:853f5b7408a7 | 2677 | } |
dkato | 0:853f5b7408a7 | 2678 | } |
dkato | 0:853f5b7408a7 | 2679 | |
dkato | 0:853f5b7408a7 | 2680 | ln_off_dir = VDC5_ShrdPrmGetLineOfsAddrDir(ch, graphics_id); |
dkato | 0:853f5b7408a7 | 2681 | /* Scaling-up */ |
dkato | 0:853f5b7408a7 | 2682 | SetScalingUp(w_read_fb, gr_grc, adj_sel_tmp, ip_conversion, res_ds_wr_md_tmp, ln_off_dir, scaler); |
dkato | 0:853f5b7408a7 | 2683 | } |
dkato | 0:853f5b7408a7 | 2684 | /* Register update control register (SC0_SCL0_UPDATE, SC1_SCL0_UPDATE, OIR_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 2685 | b13 SCL0_VEN_D |
dkato | 0:853f5b7408a7 | 2686 | b8 SCL0_UPDATE |
dkato | 0:853f5b7408a7 | 2687 | b4 SCL0_VEN_B |
dkato | 0:853f5b7408a7 | 2688 | b0 SCL0_VEN_A */ |
dkato | 0:853f5b7408a7 | 2689 | *(scaler->scl0_update) |= (uint32_t)(VDC5_REG_BIT13 | VDC5_REG_BIT8 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 2690 | } |
dkato | 0:853f5b7408a7 | 2691 | |
dkato | 0:853f5b7408a7 | 2692 | if (gr_flm_sel != VDC5_GR_FLM_SEL_FLM_NUM) { |
dkato | 0:853f5b7408a7 | 2693 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 2694 | /* Frame buffer frame offset address */ |
dkato | 0:853f5b7408a7 | 2695 | reg_data = *(scaler->scl1_wr4); |
dkato | 0:853f5b7408a7 | 2696 | *(img_synthesizer->gr_flm4) = reg_data; |
dkato | 0:853f5b7408a7 | 2697 | |
dkato | 0:853f5b7408a7 | 2698 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 2699 | b0 GRx_IBUS_VEN */ |
dkato | 0:853f5b7408a7 | 2700 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 2701 | } |
dkato | 0:853f5b7408a7 | 2702 | } /* End of function SetScalerGraphics() */ |
dkato | 0:853f5b7408a7 | 2703 | |
dkato | 0:853f5b7408a7 | 2704 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2705 | * @brief Gets the amount of data to be skipped through |
dkato | 0:853f5b7408a7 | 2706 | * @param[in] gr_base : Frame buffer base address |
dkato | 0:853f5b7408a7 | 2707 | * @param[in] gr_format : Graphics format |
dkato | 0:853f5b7408a7 | 2708 | * @retval The amount of data to be skipped through |
dkato | 0:853f5b7408a7 | 2709 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2710 | static uint32_t DisplayStartPixelSetting (const uint32_t gr_base, const vdc5_gr_format_t gr_format) |
dkato | 0:853f5b7408a7 | 2711 | { |
dkato | 0:853f5b7408a7 | 2712 | uint32_t gr_sta_pos; |
dkato | 0:853f5b7408a7 | 2713 | static const uint32_t bits_per_pixel[VDC5_GR_FORMAT_NUM] = { |
dkato | 0:853f5b7408a7 | 2714 | VDC5_REG_BIT_PER_PIXEL_RGB565, /* RGB565 */ |
dkato | 0:853f5b7408a7 | 2715 | VDC5_REG_BIT_PER_PIXEL_RGB888, /* RGB888 */ |
dkato | 0:853f5b7408a7 | 2716 | VDC5_REG_BIT_PER_PIXEL_ARGB1555, /* ARGB1555 */ |
dkato | 0:853f5b7408a7 | 2717 | VDC5_REG_BIT_PER_PIXEL_ARGB4444, /* ARGB4444 */ |
dkato | 0:853f5b7408a7 | 2718 | VDC5_REG_BIT_PER_PIXEL_ARGB8888, /* ARGB8888 */ |
dkato | 0:853f5b7408a7 | 2719 | VDC5_REG_BIT_PER_PIXEL_CLUT8, /* CLUT8 */ |
dkato | 0:853f5b7408a7 | 2720 | VDC5_REG_BIT_PER_PIXEL_CLUT4, /* CLUT4 */ |
dkato | 0:853f5b7408a7 | 2721 | VDC5_REG_BIT_PER_PIXEL_CLUT1, /* CLUT1 */ |
dkato | 0:853f5b7408a7 | 2722 | VDC5_REG_BIT_PER_PIXEL_YCBCR422, /* YCbCr422: In the YCbCr422 format, 32 bits are used for two pixels. */ |
dkato | 0:853f5b7408a7 | 2723 | VDC5_REG_BIT_PER_PIXEL_YCBCR444, /* YCbCr444 */ |
dkato | 0:853f5b7408a7 | 2724 | VDC5_REG_BIT_PER_PIXEL_RGBA5551, /* RGBA5551 */ |
dkato | 0:853f5b7408a7 | 2725 | VDC5_REG_BIT_PER_PIXEL_RGBA8888 /* RGBA8888 */ |
dkato | 0:853f5b7408a7 | 2726 | }; |
dkato | 0:853f5b7408a7 | 2727 | |
dkato | 0:853f5b7408a7 | 2728 | gr_sta_pos = gr_base & (uint32_t)VDC5_REG_MASK_0X00000007; |
dkato | 0:853f5b7408a7 | 2729 | gr_sta_pos *= (uint32_t)VDC5_REG_BIT_PER_PIXEL_VALUE_8; |
dkato | 0:853f5b7408a7 | 2730 | gr_sta_pos /= bits_per_pixel[gr_format]; |
dkato | 0:853f5b7408a7 | 2731 | gr_sta_pos &= (uint32_t)VDC5_REG_MASK_0X0000003F; |
dkato | 0:853f5b7408a7 | 2732 | |
dkato | 0:853f5b7408a7 | 2733 | return gr_sta_pos; |
dkato | 0:853f5b7408a7 | 2734 | } /* End of function DisplayStartPixelSetting() */ |
dkato | 0:853f5b7408a7 | 2735 | |
dkato | 0:853f5b7408a7 | 2736 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2737 | * @brief Sets cascaded connection |
dkato | 0:853f5b7408a7 | 2738 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2739 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 2740 | * @param[in] gr_flm_sel : Frame buffer address setting signal |
dkato | 0:853f5b7408a7 | 2741 | * @param[in] gr_enlarge : Graphics enlargement on/off |
dkato | 0:853f5b7408a7 | 2742 | * @retval Cascade ON/OFF |
dkato | 0:853f5b7408a7 | 2743 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2744 | static vdc5_onoff_t SetCascade ( |
dkato | 0:853f5b7408a7 | 2745 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 2746 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 2747 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 2748 | const vdc5_onoff_t gr_enlarge) |
dkato | 0:853f5b7408a7 | 2749 | { |
dkato | 0:853f5b7408a7 | 2750 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 2751 | const vdc5_regaddr_scaler_t * scaler_0; |
dkato | 0:853f5b7408a7 | 2752 | const vdc5_regaddr_scaler_t * scaler_1; |
dkato | 0:853f5b7408a7 | 2753 | vdc5_res_vs_in_sel_t res_vs_in_sel_tmp; |
dkato | 0:853f5b7408a7 | 2754 | vdc5_onoff_t cascade; |
dkato | 0:853f5b7408a7 | 2755 | |
dkato | 0:853f5b7408a7 | 2756 | cascade = VDC5_ShrdPrmGetCascade(ch); |
dkato | 0:853f5b7408a7 | 2757 | /* Cascade */ |
dkato | 0:853f5b7408a7 | 2758 | if (graphics_id == VDC5_GR_TYPE_GR1) { |
dkato | 0:853f5b7408a7 | 2759 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1]; |
dkato | 0:853f5b7408a7 | 2760 | scaler_0 = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0]; |
dkato | 0:853f5b7408a7 | 2761 | scaler_1 = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1]; |
dkato | 0:853f5b7408a7 | 2762 | |
dkato | 0:853f5b7408a7 | 2763 | if ((gr_flm_sel != VDC5_GR_FLM_SEL_FLM_NUM) || (gr_enlarge != VDC5_OFF)) { |
dkato | 0:853f5b7408a7 | 2764 | /* Video image or graphics enlargement */ |
dkato | 0:853f5b7408a7 | 2765 | /* Cascade OFF */ |
dkato | 0:853f5b7408a7 | 2766 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_BIT28; |
dkato | 0:853f5b7408a7 | 2767 | |
dkato | 0:853f5b7408a7 | 2768 | cascade = VDC5_OFF; |
dkato | 0:853f5b7408a7 | 2769 | /* Get sync signal output and full-screen enable signal select */ |
dkato | 0:853f5b7408a7 | 2770 | res_vs_in_sel_tmp = VDC5_ShrdPrmGetVsInSel(ch); |
dkato | 0:853f5b7408a7 | 2771 | if (res_vs_in_sel_tmp == VDC5_RES_VS_IN_SEL_SC0) { |
dkato | 0:853f5b7408a7 | 2772 | /* Use Vsync and enable signal output from scaler 0 */ |
dkato | 0:853f5b7408a7 | 2773 | *(scaler_0->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2774 | *(scaler_1->scl0_frc3) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2775 | } else { |
dkato | 0:853f5b7408a7 | 2776 | /* Use Vsync and enable signal output from scaler 1 */ |
dkato | 0:853f5b7408a7 | 2777 | *(scaler_0->scl0_frc3) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2778 | *(scaler_1->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2779 | } |
dkato | 0:853f5b7408a7 | 2780 | } else { |
dkato | 0:853f5b7408a7 | 2781 | /* Cascade ON */ |
dkato | 0:853f5b7408a7 | 2782 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_REG_BIT28; |
dkato | 0:853f5b7408a7 | 2783 | |
dkato | 0:853f5b7408a7 | 2784 | cascade = VDC5_ON; |
dkato | 0:853f5b7408a7 | 2785 | /* Use Vsync and enable signal output from scaler 0 */ |
dkato | 0:853f5b7408a7 | 2786 | *(scaler_0->scl0_frc3) &= (uint32_t)~VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2787 | } |
dkato | 0:853f5b7408a7 | 2788 | VDC5_ShrdPrmSetCascade(ch, cascade); |
dkato | 0:853f5b7408a7 | 2789 | |
dkato | 0:853f5b7408a7 | 2790 | /* Register update control register (SC0_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 2791 | b8 SCL0_UPDATE */ |
dkato | 0:853f5b7408a7 | 2792 | *(scaler_0->scl0_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2793 | /* Register update control register (SC1_SCL0_UPDATE) |
dkato | 0:853f5b7408a7 | 2794 | b8 SCL0_UPDATE */ |
dkato | 0:853f5b7408a7 | 2795 | *(scaler_1->scl0_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2796 | /* Graphics register update control register (GR1_UPDATE) |
dkato | 0:853f5b7408a7 | 2797 | b8 GR1_UPDATE */ |
dkato | 0:853f5b7408a7 | 2798 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT8; |
dkato | 0:853f5b7408a7 | 2799 | } |
dkato | 0:853f5b7408a7 | 2800 | return cascade; |
dkato | 0:853f5b7408a7 | 2801 | } /* End of function SetCascade() */ |
dkato | 0:853f5b7408a7 | 2802 | |
dkato | 0:853f5b7408a7 | 2803 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2804 | * @brief Sets VIN synthesizer |
dkato | 0:853f5b7408a7 | 2805 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2806 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 2807 | * @param[in] gr_flm_sel : Frame buffer address setting signal |
dkato | 0:853f5b7408a7 | 2808 | * @param[in] gr_enlarge : Graphics enlargement on/off |
dkato | 0:853f5b7408a7 | 2809 | * @retval None |
dkato | 0:853f5b7408a7 | 2810 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2811 | static void SetupGraphicsVIN ( |
dkato | 0:853f5b7408a7 | 2812 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 2813 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 2814 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 2815 | const vdc5_onoff_t gr_enlarge) |
dkato | 0:853f5b7408a7 | 2816 | { |
dkato | 0:853f5b7408a7 | 2817 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 2818 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer_vin; |
dkato | 0:853f5b7408a7 | 2819 | vdc5_onoff_t cascade; |
dkato | 0:853f5b7408a7 | 2820 | vdc5_resource_state_t rsrc_state; |
dkato | 0:853f5b7408a7 | 2821 | vdc5_onoff_t und_sel; |
dkato | 0:853f5b7408a7 | 2822 | uint32_t reg_data; |
dkato | 0:853f5b7408a7 | 2823 | |
dkato | 0:853f5b7408a7 | 2824 | /* Cascade */ |
dkato | 0:853f5b7408a7 | 2825 | cascade = SetCascade(ch, graphics_id, gr_flm_sel, gr_enlarge); |
dkato | 0:853f5b7408a7 | 2826 | |
dkato | 0:853f5b7408a7 | 2827 | /* Display area for VIN */ |
dkato | 0:853f5b7408a7 | 2828 | rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_0_RD); |
dkato | 0:853f5b7408a7 | 2829 | if ((cascade == VDC5_OFF) && |
dkato | 0:853f5b7408a7 | 2830 | ((rsrc_state != VDC5_RESOURCE_ST_INVALID) || (graphics_id == VDC5_GR_TYPE_GR0))) { |
dkato | 0:853f5b7408a7 | 2831 | /* Cascade connection OFF and graphics 0 is used */ |
dkato | 0:853f5b7408a7 | 2832 | img_synthesizer_vin = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_VIN]; |
dkato | 0:853f5b7408a7 | 2833 | |
dkato | 0:853f5b7408a7 | 2834 | und_sel = VDC5_ShrdPrmGetUndSel(ch); |
dkato | 0:853f5b7408a7 | 2835 | if (und_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2836 | /* Graphics 1 is allocated to the upper-layer. */ |
dkato | 0:853f5b7408a7 | 2837 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 2838 | |
dkato | 0:853f5b7408a7 | 2839 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1]; |
dkato | 0:853f5b7408a7 | 2840 | } else { |
dkato | 0:853f5b7408a7 | 2841 | /* Graphics 0 is allocated to the upper-layer. */ |
dkato | 0:853f5b7408a7 | 2842 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 2843 | |
dkato | 0:853f5b7408a7 | 2844 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0]; |
dkato | 0:853f5b7408a7 | 2845 | } |
dkato | 0:853f5b7408a7 | 2846 | /* Graphics display mode in VIN */ |
dkato | 0:853f5b7408a7 | 2847 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 2848 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_DISPSEL_BLEND; |
dkato | 0:853f5b7408a7 | 2849 | /* Copy the graphics display area in the upper-layer to the VIN display area. */ |
dkato | 0:853f5b7408a7 | 2850 | reg_data = *(img_synthesizer->gr_ab2); |
dkato | 0:853f5b7408a7 | 2851 | *(img_synthesizer_vin->gr_ab2) = reg_data; |
dkato | 0:853f5b7408a7 | 2852 | reg_data = *(img_synthesizer->gr_ab3); |
dkato | 0:853f5b7408a7 | 2853 | *(img_synthesizer_vin->gr_ab3) = reg_data; |
dkato | 0:853f5b7408a7 | 2854 | /* The valid image area for alpha blending in a rectangular area */ |
dkato | 0:853f5b7408a7 | 2855 | reg_data = *(img_synthesizer_vin->gr_ab2); |
dkato | 0:853f5b7408a7 | 2856 | *(img_synthesizer_vin->gr_ab4) = reg_data; |
dkato | 0:853f5b7408a7 | 2857 | reg_data = *(img_synthesizer_vin->gr_ab3); |
dkato | 0:853f5b7408a7 | 2858 | *(img_synthesizer_vin->gr_ab5) = reg_data; |
dkato | 0:853f5b7408a7 | 2859 | |
dkato | 0:853f5b7408a7 | 2860 | /* Graphics register update control register (GR_VIN_UPDATE) |
dkato | 0:853f5b7408a7 | 2861 | b8 GR_VIN_UPDATE |
dkato | 0:853f5b7408a7 | 2862 | b4 GR_VIN_P_VEN */ |
dkato | 0:853f5b7408a7 | 2863 | *(img_synthesizer_vin->gr_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 2864 | } |
dkato | 0:853f5b7408a7 | 2865 | } /* End of function SetupGraphicsVIN() */ |
dkato | 0:853f5b7408a7 | 2866 | |
dkato | 0:853f5b7408a7 | 2867 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2868 | * @brief Changes VIN synthesizer settings |
dkato | 0:853f5b7408a7 | 2869 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2870 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 2871 | * @param[in] gr_flm_sel : Frame buffer address setting signal |
dkato | 0:853f5b7408a7 | 2872 | * @param[in] gr_enlarge : Graphics enlargement on/off |
dkato | 0:853f5b7408a7 | 2873 | * @retval None |
dkato | 0:853f5b7408a7 | 2874 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2875 | static void ChangeGraphicsVIN ( |
dkato | 0:853f5b7408a7 | 2876 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 2877 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 2878 | const vdc5_gr_flm_sel_t gr_flm_sel, |
dkato | 0:853f5b7408a7 | 2879 | const vdc5_onoff_t gr_enlarge) |
dkato | 0:853f5b7408a7 | 2880 | { |
dkato | 0:853f5b7408a7 | 2881 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 2882 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer_vin; |
dkato | 0:853f5b7408a7 | 2883 | vdc5_onoff_t cascade; |
dkato | 0:853f5b7408a7 | 2884 | vdc5_onoff_t cascade_prev; |
dkato | 0:853f5b7408a7 | 2885 | vdc5_resource_state_t rsrc_state; |
dkato | 0:853f5b7408a7 | 2886 | vdc5_onoff_t und_sel; |
dkato | 0:853f5b7408a7 | 2887 | uint32_t reg_data; |
dkato | 0:853f5b7408a7 | 2888 | |
dkato | 0:853f5b7408a7 | 2889 | /* Cascade */ |
dkato | 0:853f5b7408a7 | 2890 | cascade_prev = VDC5_ShrdPrmGetCascade(ch); |
dkato | 0:853f5b7408a7 | 2891 | cascade = SetCascade(ch, graphics_id, gr_flm_sel, gr_enlarge); |
dkato | 0:853f5b7408a7 | 2892 | |
dkato | 0:853f5b7408a7 | 2893 | /* Display area for VIN */ |
dkato | 0:853f5b7408a7 | 2894 | rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_0_RD); |
dkato | 0:853f5b7408a7 | 2895 | if (rsrc_state != VDC5_RESOURCE_ST_INVALID) { |
dkato | 0:853f5b7408a7 | 2896 | /* Graphics 0 is used */ |
dkato | 0:853f5b7408a7 | 2897 | img_synthesizer_vin = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_VIN]; |
dkato | 0:853f5b7408a7 | 2898 | if (cascade == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2899 | /* Cascade connection is OFF */ |
dkato | 0:853f5b7408a7 | 2900 | und_sel = VDC5_ShrdPrmGetUndSel(ch); |
dkato | 0:853f5b7408a7 | 2901 | if (und_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2902 | /* Graphics 1 is allocated to the upper-layer. */ |
dkato | 0:853f5b7408a7 | 2903 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 2904 | |
dkato | 0:853f5b7408a7 | 2905 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1]; |
dkato | 0:853f5b7408a7 | 2906 | } else { |
dkato | 0:853f5b7408a7 | 2907 | /* Graphics 0 is allocated to the upper-layer. */ |
dkato | 0:853f5b7408a7 | 2908 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 2909 | |
dkato | 0:853f5b7408a7 | 2910 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0]; |
dkato | 0:853f5b7408a7 | 2911 | } |
dkato | 0:853f5b7408a7 | 2912 | /* Graphics display mode in VIN */ |
dkato | 0:853f5b7408a7 | 2913 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 2914 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_DISPSEL_BLEND; |
dkato | 0:853f5b7408a7 | 2915 | /* Copy the graphics display area in the upper-layer to the VIN display area. */ |
dkato | 0:853f5b7408a7 | 2916 | reg_data = *(img_synthesizer->gr_ab2); |
dkato | 0:853f5b7408a7 | 2917 | *(img_synthesizer_vin->gr_ab2) = reg_data; |
dkato | 0:853f5b7408a7 | 2918 | reg_data = *(img_synthesizer->gr_ab3); |
dkato | 0:853f5b7408a7 | 2919 | *(img_synthesizer_vin->gr_ab3) = reg_data; |
dkato | 0:853f5b7408a7 | 2920 | } else { |
dkato | 0:853f5b7408a7 | 2921 | /* Cascade connection is ON */ |
dkato | 0:853f5b7408a7 | 2922 | if (cascade_prev == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2923 | /* Cascade connection was turned on in this function. */ |
dkato | 0:853f5b7408a7 | 2924 | /* Selection of lower-layer plane in scaler is set to 1. */ |
dkato | 0:853f5b7408a7 | 2925 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 2926 | /* Graphics display mode in VIN */ |
dkato | 0:853f5b7408a7 | 2927 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 2928 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_DISPSEL_LOWER; |
dkato | 0:853f5b7408a7 | 2929 | } |
dkato | 0:853f5b7408a7 | 2930 | } |
dkato | 0:853f5b7408a7 | 2931 | /* Graphics register update control register (GR_VIN_UPDATE) |
dkato | 0:853f5b7408a7 | 2932 | b8 GR_VIN_UPDATE |
dkato | 0:853f5b7408a7 | 2933 | b4 GR_VIN_P_VEN */ |
dkato | 0:853f5b7408a7 | 2934 | *(img_synthesizer_vin->gr_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 2935 | } |
dkato | 0:853f5b7408a7 | 2936 | } /* End of function ChangeGraphicsVIN() */ |
dkato | 0:853f5b7408a7 | 2937 | |
dkato | 0:853f5b7408a7 | 2938 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2939 | * @brief Sets color matrix in the image quality improver |
dkato | 0:853f5b7408a7 | 2940 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2941 | * @param[in] graphics_id : Graphics type ID |
dkato | 0:853f5b7408a7 | 2942 | * @param[in] color_space : Color space (GBR or YCbCr) |
dkato | 0:853f5b7408a7 | 2943 | * @retval None |
dkato | 0:853f5b7408a7 | 2944 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2945 | static void SetImgQaImproverColorMtx ( |
dkato | 0:853f5b7408a7 | 2946 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 2947 | const vdc5_graphics_type_t graphics_id, |
dkato | 0:853f5b7408a7 | 2948 | const vdc5_color_space_t color_space) |
dkato | 0:853f5b7408a7 | 2949 | { |
dkato | 0:853f5b7408a7 | 2950 | vdc5_colormtx_module_t module_tmp; |
dkato | 0:853f5b7408a7 | 2951 | vdc5_colormtx_mode_t mtx_mode_tmp; |
dkato | 0:853f5b7408a7 | 2952 | const uint16_t * offset_tmp; |
dkato | 0:853f5b7408a7 | 2953 | const uint16_t * gain_tmp; |
dkato | 0:853f5b7408a7 | 2954 | |
dkato | 0:853f5b7408a7 | 2955 | /* Color matrix operating mode */ |
dkato | 0:853f5b7408a7 | 2956 | if (color_space == VDC5_COLOR_SPACE_GBR) { |
dkato | 0:853f5b7408a7 | 2957 | mtx_mode_tmp = VDC5_COLORMTX_GBR_GBR; |
dkato | 0:853f5b7408a7 | 2958 | } else { |
dkato | 0:853f5b7408a7 | 2959 | mtx_mode_tmp = VDC5_COLORMTX_YCBCR_GBR; |
dkato | 0:853f5b7408a7 | 2960 | } |
dkato | 0:853f5b7408a7 | 2961 | /* Color matrix module */ |
dkato | 0:853f5b7408a7 | 2962 | module_tmp = (graphics_id == VDC5_GR_TYPE_GR0) ? VDC5_COLORMTX_ADJ_0 : VDC5_COLORMTX_ADJ_1; |
dkato | 0:853f5b7408a7 | 2963 | /* Color matrix offset (DC) adjustment (YG, B, and R) */ |
dkato | 0:853f5b7408a7 | 2964 | offset_tmp = colormtx_offset_adj; |
dkato | 0:853f5b7408a7 | 2965 | /* Color matrix signal gain adjustment (GG, GB, GR, BG, BB, BR, RG, RB, and RR) */ |
dkato | 0:853f5b7408a7 | 2966 | gain_tmp = colormtx_gain_adj[mtx_mode_tmp]; |
dkato | 0:853f5b7408a7 | 2967 | |
dkato | 0:853f5b7408a7 | 2968 | SetColorMatrix(mtx_mode_tmp, offset_tmp, gain_tmp, &vdc5_regaddr_color_matrix[ch][module_tmp]); |
dkato | 0:853f5b7408a7 | 2969 | |
dkato | 0:853f5b7408a7 | 2970 | } /* End of function SetImgQaImproverColorMtx() */ |
dkato | 0:853f5b7408a7 | 2971 | |
dkato | 0:853f5b7408a7 | 2972 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 2973 | * @brief Activates/deactivates frame buffer writing for scaler 0 |
dkato | 0:853f5b7408a7 | 2974 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 2975 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 2976 | * @retval None |
dkato | 0:853f5b7408a7 | 2977 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 2978 | static void SetRwProcAbility_Write_0 (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 2979 | { |
dkato | 0:853f5b7408a7 | 2980 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 2981 | volatile uint32_t dummy_read; |
dkato | 0:853f5b7408a7 | 2982 | uint32_t reg_data; |
dkato | 0:853f5b7408a7 | 2983 | |
dkato | 0:853f5b7408a7 | 2984 | /* SC0/GR0 writing */ |
dkato | 0:853f5b7408a7 | 2985 | scaler = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0]; |
dkato | 0:853f5b7408a7 | 2986 | |
dkato | 0:853f5b7408a7 | 2987 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 2988 | /* SC0 frame buffer writing is disabled */ |
dkato | 0:853f5b7408a7 | 2989 | *(scaler->scl1_wr5) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 2990 | |
dkato | 0:853f5b7408a7 | 2991 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_0_WR); |
dkato | 0:853f5b7408a7 | 2992 | } else { |
dkato | 0:853f5b7408a7 | 2993 | /* SC0 frame buffer writing is enabled */ |
dkato | 0:853f5b7408a7 | 2994 | *(scaler->scl1_wr5) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 2995 | /* Reset and reset cancellation of the pointer buffer with dummy read */ |
dkato | 0:853f5b7408a7 | 2996 | *(scaler->scl1_pbuf_cnt) |= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 2997 | reg_data = *(scaler->scl1_pbuf_cnt); |
dkato | 0:853f5b7408a7 | 2998 | dummy_read = reg_data; |
dkato | 0:853f5b7408a7 | 2999 | *(scaler->scl1_pbuf_cnt) &= (uint32_t)~VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 3000 | reg_data = *(scaler->scl1_pbuf_cnt); |
dkato | 0:853f5b7408a7 | 3001 | dummy_read = reg_data; |
dkato | 0:853f5b7408a7 | 3002 | |
dkato | 0:853f5b7408a7 | 3003 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_0_WR); |
dkato | 0:853f5b7408a7 | 3004 | } |
dkato | 0:853f5b7408a7 | 3005 | } /* End of function SetRwProcAbility_Write_0() */ |
dkato | 0:853f5b7408a7 | 3006 | |
dkato | 0:853f5b7408a7 | 3007 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3008 | * @brief Activates/deactivates frame buffer writing for scaler 1 |
dkato | 0:853f5b7408a7 | 3009 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3010 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 3011 | * @retval None |
dkato | 0:853f5b7408a7 | 3012 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3013 | static void SetRwProcAbility_Write_1 (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 3014 | { |
dkato | 0:853f5b7408a7 | 3015 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 3016 | volatile uint32_t dummy_read; |
dkato | 0:853f5b7408a7 | 3017 | uint32_t reg_data; |
dkato | 0:853f5b7408a7 | 3018 | |
dkato | 0:853f5b7408a7 | 3019 | /* SC1/GR1 writing */ |
dkato | 0:853f5b7408a7 | 3020 | scaler = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1]; |
dkato | 0:853f5b7408a7 | 3021 | |
dkato | 0:853f5b7408a7 | 3022 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3023 | /* SC1 frame buffer writing is disabled */ |
dkato | 0:853f5b7408a7 | 3024 | *(scaler->scl1_wr5) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3025 | |
dkato | 0:853f5b7408a7 | 3026 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_1_WR); |
dkato | 0:853f5b7408a7 | 3027 | } else { |
dkato | 0:853f5b7408a7 | 3028 | /* SC1 frame buffer writing is enabled */ |
dkato | 0:853f5b7408a7 | 3029 | *(scaler->scl1_wr5) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3030 | /* Reset and reset cancellation of the pointer buffer with dummy read */ |
dkato | 0:853f5b7408a7 | 3031 | *(scaler->scl1_pbuf_cnt) |= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 3032 | reg_data = *(scaler->scl1_pbuf_cnt); |
dkato | 0:853f5b7408a7 | 3033 | dummy_read = reg_data; |
dkato | 0:853f5b7408a7 | 3034 | *(scaler->scl1_pbuf_cnt) &= (uint32_t)~VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 3035 | reg_data = *(scaler->scl1_pbuf_cnt); |
dkato | 0:853f5b7408a7 | 3036 | dummy_read = reg_data; |
dkato | 0:853f5b7408a7 | 3037 | |
dkato | 0:853f5b7408a7 | 3038 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_1_WR); |
dkato | 0:853f5b7408a7 | 3039 | } |
dkato | 0:853f5b7408a7 | 3040 | } /* End of function SetRwProcAbility_Write_1() */ |
dkato | 0:853f5b7408a7 | 3041 | |
dkato | 0:853f5b7408a7 | 3042 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3043 | * @brief Activates/deactivates frame buffer writing for OIR |
dkato | 0:853f5b7408a7 | 3044 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3045 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 3046 | * @retval None |
dkato | 0:853f5b7408a7 | 3047 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3048 | static void SetRwProcAbility_Write_OIR (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 3049 | { |
dkato | 0:853f5b7408a7 | 3050 | const vdc5_regaddr_scaler_t * scaler; |
dkato | 0:853f5b7408a7 | 3051 | |
dkato | 0:853f5b7408a7 | 3052 | /* OIR writing */ |
dkato | 0:853f5b7408a7 | 3053 | scaler = &vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR]; |
dkato | 0:853f5b7408a7 | 3054 | |
dkato | 0:853f5b7408a7 | 3055 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3056 | /* OIR frame buffer writing is disabled */ |
dkato | 0:853f5b7408a7 | 3057 | *(scaler->scl1_wr5) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3058 | |
dkato | 0:853f5b7408a7 | 3059 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_OIR_WR); |
dkato | 0:853f5b7408a7 | 3060 | } else { |
dkato | 0:853f5b7408a7 | 3061 | /* OIR frame buffer writing is enabled */ |
dkato | 0:853f5b7408a7 | 3062 | *(scaler->scl1_wr5) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3063 | |
dkato | 0:853f5b7408a7 | 3064 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_OIR_WR); |
dkato | 0:853f5b7408a7 | 3065 | } |
dkato | 0:853f5b7408a7 | 3066 | } /* End of function SetRwProcAbility_Write_OIR() */ |
dkato | 0:853f5b7408a7 | 3067 | |
dkato | 0:853f5b7408a7 | 3068 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3069 | * @brief Activates/deactivates frame buffer reading for graphics 0 |
dkato | 0:853f5b7408a7 | 3070 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3071 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 3072 | * @retval None |
dkato | 0:853f5b7408a7 | 3073 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3074 | static void SetRwProcAbility_Read_0 (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 3075 | { |
dkato | 0:853f5b7408a7 | 3076 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 3077 | |
dkato | 0:853f5b7408a7 | 3078 | /* SC0/GR0 reading */ |
dkato | 0:853f5b7408a7 | 3079 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0]; |
dkato | 0:853f5b7408a7 | 3080 | |
dkato | 0:853f5b7408a7 | 3081 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3082 | /* GR0 frame buffer reading is disabled */ |
dkato | 0:853f5b7408a7 | 3083 | *(img_synthesizer->gr_flm_rd) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3084 | /* Graphics display mode */ |
dkato | 0:853f5b7408a7 | 3085 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 3086 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_BACK; |
dkato | 0:853f5b7408a7 | 3087 | |
dkato | 0:853f5b7408a7 | 3088 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_0_RD); |
dkato | 0:853f5b7408a7 | 3089 | } else { |
dkato | 0:853f5b7408a7 | 3090 | /* GR0 frame buffer reading is enabled */ |
dkato | 0:853f5b7408a7 | 3091 | *(img_synthesizer->gr_flm_rd) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3092 | |
dkato | 0:853f5b7408a7 | 3093 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_0_RD); |
dkato | 0:853f5b7408a7 | 3094 | } |
dkato | 0:853f5b7408a7 | 3095 | } /* End of function SetRwProcAbility_Read_0() */ |
dkato | 0:853f5b7408a7 | 3096 | |
dkato | 0:853f5b7408a7 | 3097 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3098 | * @brief Activates/deactivates frame buffer reading for graphics 1 |
dkato | 0:853f5b7408a7 | 3099 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3100 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 3101 | * @retval None |
dkato | 0:853f5b7408a7 | 3102 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3103 | static void SetRwProcAbility_Read_1 (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 3104 | { |
dkato | 0:853f5b7408a7 | 3105 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 3106 | |
dkato | 0:853f5b7408a7 | 3107 | /* SC1/GR1 reading */ |
dkato | 0:853f5b7408a7 | 3108 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1]; |
dkato | 0:853f5b7408a7 | 3109 | |
dkato | 0:853f5b7408a7 | 3110 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3111 | /* GR1 frame buffer reading is disabled */ |
dkato | 0:853f5b7408a7 | 3112 | *(img_synthesizer->gr_flm_rd) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3113 | /* Graphics display mode */ |
dkato | 0:853f5b7408a7 | 3114 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 3115 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_LOWER; |
dkato | 0:853f5b7408a7 | 3116 | |
dkato | 0:853f5b7408a7 | 3117 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_1_RD); |
dkato | 0:853f5b7408a7 | 3118 | } else { |
dkato | 0:853f5b7408a7 | 3119 | /* GR1 frame buffer reading is enabled */ |
dkato | 0:853f5b7408a7 | 3120 | *(img_synthesizer->gr_flm_rd) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3121 | |
dkato | 0:853f5b7408a7 | 3122 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_1_RD); |
dkato | 0:853f5b7408a7 | 3123 | } |
dkato | 0:853f5b7408a7 | 3124 | } /* End of function SetRwProcAbility_Read_1() */ |
dkato | 0:853f5b7408a7 | 3125 | |
dkato | 0:853f5b7408a7 | 3126 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3127 | * @brief Activates/deactivates frame buffer reading for graphics 2 |
dkato | 0:853f5b7408a7 | 3128 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3129 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 3130 | * @retval None |
dkato | 0:853f5b7408a7 | 3131 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3132 | static void SetRwProcAbility_Read_2 (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 3133 | { |
dkato | 0:853f5b7408a7 | 3134 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 3135 | |
dkato | 0:853f5b7408a7 | 3136 | /* GR2 reading */ |
dkato | 0:853f5b7408a7 | 3137 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR2]; |
dkato | 0:853f5b7408a7 | 3138 | |
dkato | 0:853f5b7408a7 | 3139 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3140 | /* GR2 frame buffer reading is disabled */ |
dkato | 0:853f5b7408a7 | 3141 | *(img_synthesizer->gr_flm_rd) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3142 | /* Graphics display mode */ |
dkato | 0:853f5b7408a7 | 3143 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 3144 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_LOWER; |
dkato | 0:853f5b7408a7 | 3145 | |
dkato | 0:853f5b7408a7 | 3146 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_2_RD); |
dkato | 0:853f5b7408a7 | 3147 | } else { |
dkato | 0:853f5b7408a7 | 3148 | /* GR2 frame buffer reading is enabled */ |
dkato | 0:853f5b7408a7 | 3149 | *(img_synthesizer->gr_flm_rd) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3150 | |
dkato | 0:853f5b7408a7 | 3151 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_2_RD); |
dkato | 0:853f5b7408a7 | 3152 | } |
dkato | 0:853f5b7408a7 | 3153 | } /* End of function SetRwProcAbility_Read_2() */ |
dkato | 0:853f5b7408a7 | 3154 | |
dkato | 0:853f5b7408a7 | 3155 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3156 | * @brief Activates/deactivates frame buffer reading for graphics 3 |
dkato | 0:853f5b7408a7 | 3157 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3158 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 3159 | * @retval None |
dkato | 0:853f5b7408a7 | 3160 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3161 | static void SetRwProcAbility_Read_3 (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 3162 | { |
dkato | 0:853f5b7408a7 | 3163 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 3164 | |
dkato | 0:853f5b7408a7 | 3165 | /* GR3 reading */ |
dkato | 0:853f5b7408a7 | 3166 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR3]; |
dkato | 0:853f5b7408a7 | 3167 | |
dkato | 0:853f5b7408a7 | 3168 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3169 | /* GR3 frame buffer reading is disabled */ |
dkato | 0:853f5b7408a7 | 3170 | *(img_synthesizer->gr_flm_rd) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3171 | /* Graphics display mode */ |
dkato | 0:853f5b7408a7 | 3172 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 3173 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_LOWER; |
dkato | 0:853f5b7408a7 | 3174 | |
dkato | 0:853f5b7408a7 | 3175 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_3_RD); |
dkato | 0:853f5b7408a7 | 3176 | } else { |
dkato | 0:853f5b7408a7 | 3177 | /* GR3 frame buffer reading is enabled */ |
dkato | 0:853f5b7408a7 | 3178 | *(img_synthesizer->gr_flm_rd) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3179 | |
dkato | 0:853f5b7408a7 | 3180 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_3_RD); |
dkato | 0:853f5b7408a7 | 3181 | } |
dkato | 0:853f5b7408a7 | 3182 | } /* End of function SetRwProcAbility_Read_3() */ |
dkato | 0:853f5b7408a7 | 3183 | |
dkato | 0:853f5b7408a7 | 3184 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3185 | * @brief Activates/deactivates frame buffer reading for OIR |
dkato | 0:853f5b7408a7 | 3186 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3187 | * @param[in] ability : Ability to enable read/write access to the memory |
dkato | 0:853f5b7408a7 | 3188 | * @retval None |
dkato | 0:853f5b7408a7 | 3189 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3190 | static void SetRwProcAbility_Read_OIR (const vdc5_channel_t ch, const vdc5_onoff_t ability) |
dkato | 0:853f5b7408a7 | 3191 | { |
dkato | 0:853f5b7408a7 | 3192 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 3193 | |
dkato | 0:853f5b7408a7 | 3194 | /* OIR reading */ |
dkato | 0:853f5b7408a7 | 3195 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_OIR]; |
dkato | 0:853f5b7408a7 | 3196 | |
dkato | 0:853f5b7408a7 | 3197 | if (ability == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3198 | /* OIR frame buffer reading is disabled */ |
dkato | 0:853f5b7408a7 | 3199 | *(img_synthesizer->gr_flm_rd) &= (uint32_t)~VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3200 | /* Graphics display mode */ |
dkato | 0:853f5b7408a7 | 3201 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 3202 | *(img_synthesizer->gr_ab1) |= (uint32_t)VDC5_DISPSEL_BACK; |
dkato | 0:853f5b7408a7 | 3203 | |
dkato | 0:853f5b7408a7 | 3204 | VDC5_ShrdPrmSetRwProcDisable(ch, VDC5_LAYER_ID_OIR_RD); |
dkato | 0:853f5b7408a7 | 3205 | } else { |
dkato | 0:853f5b7408a7 | 3206 | /* OIR frame buffer reading is enabled */ |
dkato | 0:853f5b7408a7 | 3207 | *(img_synthesizer->gr_flm_rd) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3208 | |
dkato | 0:853f5b7408a7 | 3209 | VDC5_ShrdPrmSetRwProcEnable(ch, VDC5_LAYER_ID_OIR_RD); |
dkato | 0:853f5b7408a7 | 3210 | } |
dkato | 0:853f5b7408a7 | 3211 | } /* End of function SetRwProcAbility_Read_OIR() */ |
dkato | 0:853f5b7408a7 | 3212 | |
dkato | 0:853f5b7408a7 | 3213 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3214 | * @brief Sets register update control register to update the frame buffer |
dkato | 0:853f5b7408a7 | 3215 | * read and write enable settings. |
dkato | 0:853f5b7408a7 | 3216 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3217 | * @param[in] layer_id : Layer ID |
dkato | 0:853f5b7408a7 | 3218 | * @retval None |
dkato | 0:853f5b7408a7 | 3219 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3220 | static void SetRegUpdateRwEnable (const vdc5_channel_t ch, const vdc5_layer_id_t layer_id) |
dkato | 0:853f5b7408a7 | 3221 | { |
dkato | 0:853f5b7408a7 | 3222 | volatile uint32_t * scl1_update_reg; |
dkato | 0:853f5b7408a7 | 3223 | volatile uint32_t * gr_update_reg; |
dkato | 0:853f5b7408a7 | 3224 | |
dkato | 0:853f5b7408a7 | 3225 | switch (layer_id) { |
dkato | 0:853f5b7408a7 | 3226 | case VDC5_LAYER_ID_0_WR: /* Layer 0, write process */ |
dkato | 0:853f5b7408a7 | 3227 | scl1_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0].scl1_update; |
dkato | 0:853f5b7408a7 | 3228 | *scl1_update_reg |= (uint32_t)(VDC5_REG_BIT20 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3229 | break; |
dkato | 0:853f5b7408a7 | 3230 | case VDC5_LAYER_ID_1_WR: /* Layer 1, write process */ |
dkato | 0:853f5b7408a7 | 3231 | scl1_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1].scl1_update; |
dkato | 0:853f5b7408a7 | 3232 | *scl1_update_reg |= (uint32_t)(VDC5_REG_BIT20 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3233 | break; |
dkato | 0:853f5b7408a7 | 3234 | case VDC5_LAYER_ID_OIR_WR: /* Layer OIR, write process */ |
dkato | 0:853f5b7408a7 | 3235 | scl1_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR].scl1_update; |
dkato | 0:853f5b7408a7 | 3236 | *scl1_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3237 | break; |
dkato | 0:853f5b7408a7 | 3238 | case VDC5_LAYER_ID_0_RD: /* Layer 0, read process */ |
dkato | 0:853f5b7408a7 | 3239 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0].gr_update; |
dkato | 0:853f5b7408a7 | 3240 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3241 | break; |
dkato | 0:853f5b7408a7 | 3242 | case VDC5_LAYER_ID_1_RD: /* Layer 1, read process */ |
dkato | 0:853f5b7408a7 | 3243 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1].gr_update; |
dkato | 0:853f5b7408a7 | 3244 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3245 | break; |
dkato | 0:853f5b7408a7 | 3246 | case VDC5_LAYER_ID_2_RD: /* Layer 2, read process */ |
dkato | 0:853f5b7408a7 | 3247 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR2].gr_update; |
dkato | 0:853f5b7408a7 | 3248 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3249 | break; |
dkato | 0:853f5b7408a7 | 3250 | case VDC5_LAYER_ID_3_RD: /* Layer 3, read process */ |
dkato | 0:853f5b7408a7 | 3251 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR3].gr_update; |
dkato | 0:853f5b7408a7 | 3252 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3253 | break; |
dkato | 0:853f5b7408a7 | 3254 | case VDC5_LAYER_ID_OIR_RD: /* Layer OIR, read process */ |
dkato | 0:853f5b7408a7 | 3255 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_OIR].gr_update; |
dkato | 0:853f5b7408a7 | 3256 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3257 | break; |
dkato | 0:853f5b7408a7 | 3258 | |
dkato | 0:853f5b7408a7 | 3259 | case VDC5_LAYER_ID_ALL: /* All */ |
dkato | 0:853f5b7408a7 | 3260 | /* Register update control register (SCx_SCL1_UPDATE) |
dkato | 0:853f5b7408a7 | 3261 | b20 SCL1_UPDATE_B |
dkato | 0:853f5b7408a7 | 3262 | b4 SCL1_VEN_B |
dkato | 0:853f5b7408a7 | 3263 | b0 SCL1_VEN_A */ |
dkato | 0:853f5b7408a7 | 3264 | scl1_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC0].scl1_update; |
dkato | 0:853f5b7408a7 | 3265 | *scl1_update_reg |= (uint32_t)(VDC5_REG_BIT20 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3266 | scl1_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_SC1].scl1_update; |
dkato | 0:853f5b7408a7 | 3267 | *scl1_update_reg |= (uint32_t)(VDC5_REG_BIT20 | VDC5_REG_BIT4 | VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3268 | /* Register update control register (OIR_SCL1_UPDATE) |
dkato | 0:853f5b7408a7 | 3269 | b4 SCL1_VEN_B |
dkato | 0:853f5b7408a7 | 3270 | b0 SCL1_VEN_A */ |
dkato | 0:853f5b7408a7 | 3271 | scl1_update_reg = vdc5_regaddr_scaler[ch][VDC5_SC_TYPE_OIR].scl1_update; |
dkato | 0:853f5b7408a7 | 3272 | *scl1_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3273 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 3274 | b4 GRx_P_VEN |
dkato | 0:853f5b7408a7 | 3275 | b0 GRx_IBUS_VEN */ |
dkato | 0:853f5b7408a7 | 3276 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0].gr_update; |
dkato | 0:853f5b7408a7 | 3277 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3278 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1].gr_update; |
dkato | 0:853f5b7408a7 | 3279 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3280 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR2].gr_update; |
dkato | 0:853f5b7408a7 | 3281 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3282 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR3].gr_update; |
dkato | 0:853f5b7408a7 | 3283 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3284 | gr_update_reg = vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_OIR].gr_update; |
dkato | 0:853f5b7408a7 | 3285 | *gr_update_reg |= (uint32_t)(VDC5_REG_BIT4|VDC5_REG_BIT0); |
dkato | 0:853f5b7408a7 | 3286 | break; |
dkato | 0:853f5b7408a7 | 3287 | |
dkato | 0:853f5b7408a7 | 3288 | default: |
dkato | 0:853f5b7408a7 | 3289 | /* DO NOTHING */ |
dkato | 0:853f5b7408a7 | 3290 | break; |
dkato | 0:853f5b7408a7 | 3291 | } |
dkato | 0:853f5b7408a7 | 3292 | } /* End of function SetRegUpdateRwEnable() */ |
dkato | 0:853f5b7408a7 | 3293 | |
dkato | 0:853f5b7408a7 | 3294 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3295 | * @brief Sets graphics display mode |
dkato | 0:853f5b7408a7 | 3296 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3297 | * @param[in] layer_id : Layer ID |
dkato | 0:853f5b7408a7 | 3298 | * @param[in] gr_disp_sel : Graphics display mode |
dkato | 0:853f5b7408a7 | 3299 | * @retval None |
dkato | 0:853f5b7408a7 | 3300 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3301 | static void SetGraphicsDisplayMode ( |
dkato | 0:853f5b7408a7 | 3302 | const vdc5_channel_t ch, |
dkato | 0:853f5b7408a7 | 3303 | const vdc5_layer_id_t layer_id, |
dkato | 0:853f5b7408a7 | 3304 | const vdc5_gr_disp_sel_t * const gr_disp_sel) |
dkato | 0:853f5b7408a7 | 3305 | { |
dkato | 0:853f5b7408a7 | 3306 | uint32_t graphics_id; |
dkato | 0:853f5b7408a7 | 3307 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 3308 | |
dkato | 0:853f5b7408a7 | 3309 | if (layer_id == VDC5_LAYER_ID_ALL) { |
dkato | 0:853f5b7408a7 | 3310 | for (graphics_id = 0; graphics_id < VDC5_GR_TYPE_NUM; graphics_id++) { |
dkato | 0:853f5b7408a7 | 3311 | if ((graphics_id != VDC5_GR_TYPE_VIN) && (gr_disp_sel[graphics_id] != VDC5_DISPSEL_IGNORED)) { |
dkato | 0:853f5b7408a7 | 3312 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 3313 | |
dkato | 0:853f5b7408a7 | 3314 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 3315 | *(img_synthesizer->gr_ab1) |= (uint32_t)gr_disp_sel[graphics_id]; |
dkato | 0:853f5b7408a7 | 3316 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 3317 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 3318 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 3319 | } |
dkato | 0:853f5b7408a7 | 3320 | } |
dkato | 0:853f5b7408a7 | 3321 | } else if ((layer_id >= VDC5_LAYER_ID_0_RD) && (layer_id <= VDC5_LAYER_ID_OIR_RD)) { |
dkato | 0:853f5b7408a7 | 3322 | if (*gr_disp_sel != VDC5_DISPSEL_IGNORED) { |
dkato | 0:853f5b7408a7 | 3323 | graphics_id = (uint32_t)(layer_id - VDC5_SC_TYPE_NUM); |
dkato | 0:853f5b7408a7 | 3324 | |
dkato | 0:853f5b7408a7 | 3325 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][graphics_id]; |
dkato | 0:853f5b7408a7 | 3326 | |
dkato | 0:853f5b7408a7 | 3327 | *(img_synthesizer->gr_ab1) &= (uint32_t)~VDC5_REG_MASK_0X00000003; |
dkato | 0:853f5b7408a7 | 3328 | *(img_synthesizer->gr_ab1) |= (uint32_t)*gr_disp_sel; |
dkato | 0:853f5b7408a7 | 3329 | /* Graphics register update control register (GRx_UPDATE) |
dkato | 0:853f5b7408a7 | 3330 | b4 GRx_P_VEN */ |
dkato | 0:853f5b7408a7 | 3331 | *(img_synthesizer->gr_update) |= (uint32_t)VDC5_REG_BIT4; |
dkato | 0:853f5b7408a7 | 3332 | } |
dkato | 0:853f5b7408a7 | 3333 | } else { |
dkato | 0:853f5b7408a7 | 3334 | /* Do nothing */ |
dkato | 0:853f5b7408a7 | 3335 | } |
dkato | 0:853f5b7408a7 | 3336 | } /* End of function SetGraphicsDisplayMode() */ |
dkato | 0:853f5b7408a7 | 3337 | |
dkato | 0:853f5b7408a7 | 3338 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3339 | * @brief Sets color matrix |
dkato | 0:853f5b7408a7 | 3340 | * @param[in] mtx_mode : Operating mode |
dkato | 0:853f5b7408a7 | 3341 | * @param[in] offset : Offset (DC) adjustment of Y/G, B, and R signal |
dkato | 0:853f5b7408a7 | 3342 | * @param[in] gain : GG, GB, GR, BG, BB, BR, RG, RB, and RR signal gain adjustment |
dkato | 0:853f5b7408a7 | 3343 | * @param[in] color_matrix : Color matrix registers |
dkato | 0:853f5b7408a7 | 3344 | * @retval None |
dkato | 0:853f5b7408a7 | 3345 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3346 | static void SetColorMatrix ( |
dkato | 0:853f5b7408a7 | 3347 | const vdc5_colormtx_mode_t mtx_mode, |
dkato | 0:853f5b7408a7 | 3348 | const uint16_t * const offset, |
dkato | 0:853f5b7408a7 | 3349 | const uint16_t * const gain, |
dkato | 0:853f5b7408a7 | 3350 | const vdc5_regaddr_color_matrix_t * const color_matrix) |
dkato | 0:853f5b7408a7 | 3351 | { |
dkato | 0:853f5b7408a7 | 3352 | /* Operating mode */ |
dkato | 0:853f5b7408a7 | 3353 | *(color_matrix->mtx_mode) = (uint32_t)mtx_mode; |
dkato | 0:853f5b7408a7 | 3354 | |
dkato | 0:853f5b7408a7 | 3355 | /* Offset (DC) adjustment of Y/G, B, and R signal and |
dkato | 0:853f5b7408a7 | 3356 | GG, GB, GR, BG, BB, BR, RG, RB, and RR signal gain adjustment */ |
dkato | 0:853f5b7408a7 | 3357 | *(color_matrix->mtx_yg_adj0) = (uint32_t)offset[VDC5_COLORMTX_OFFST_YG] << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3358 | *(color_matrix->mtx_yg_adj0) |= (uint32_t)gain[VDC5_COLORMTX_GAIN_GG]; |
dkato | 0:853f5b7408a7 | 3359 | *(color_matrix->mtx_yg_adj1) = (uint32_t)gain[VDC5_COLORMTX_GAIN_GB] << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3360 | *(color_matrix->mtx_yg_adj1) |= (uint32_t)gain[VDC5_COLORMTX_GAIN_GR]; |
dkato | 0:853f5b7408a7 | 3361 | *(color_matrix->mtx_cbb_adj0) = (uint32_t)offset[VDC5_COLORMTX_OFFST_B] << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3362 | *(color_matrix->mtx_cbb_adj0) |= (uint32_t)gain[VDC5_COLORMTX_GAIN_BG]; |
dkato | 0:853f5b7408a7 | 3363 | *(color_matrix->mtx_cbb_adj1) = (uint32_t)gain[VDC5_COLORMTX_GAIN_BB] << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3364 | *(color_matrix->mtx_cbb_adj1) |= (uint32_t)gain[VDC5_COLORMTX_GAIN_BR]; |
dkato | 0:853f5b7408a7 | 3365 | *(color_matrix->mtx_crr_adj0) = (uint32_t)offset[VDC5_COLORMTX_OFFST_R] << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3366 | *(color_matrix->mtx_crr_adj0) |= (uint32_t)gain[VDC5_COLORMTX_GAIN_RG]; |
dkato | 0:853f5b7408a7 | 3367 | *(color_matrix->mtx_crr_adj1) = (uint32_t)gain[VDC5_COLORMTX_GAIN_RB] << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3368 | *(color_matrix->mtx_crr_adj1) |= (uint32_t)gain[VDC5_COLORMTX_GAIN_RR]; |
dkato | 0:853f5b7408a7 | 3369 | |
dkato | 0:853f5b7408a7 | 3370 | /* Register update control register (IMGCNT_UPDATE/ADJx_UPDATE) |
dkato | 0:853f5b7408a7 | 3371 | b0 IMGCNT_VEN/ADJx_VEN */ |
dkato | 0:853f5b7408a7 | 3372 | *(color_matrix->mtx_update) |= (uint32_t)VDC5_REG_BIT0; |
dkato | 0:853f5b7408a7 | 3373 | |
dkato | 0:853f5b7408a7 | 3374 | } /* End of function SetColorMatrix() */ |
dkato | 0:853f5b7408a7 | 3375 | |
dkato | 0:853f5b7408a7 | 3376 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3377 | * @brief Sets sharpness |
dkato | 0:853f5b7408a7 | 3378 | * @param[in] shp_h_on : Sharpness ON/OFF setting |
dkato | 0:853f5b7408a7 | 3379 | * @param[in] sharp_param : Sharpness ON/OFF setting |
dkato | 0:853f5b7408a7 | 3380 | * @param[in] img_qlty_imp : Image quality improver registers |
dkato | 0:853f5b7408a7 | 3381 | * @retval None |
dkato | 0:853f5b7408a7 | 3382 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3383 | static void SetImageEnhancementSharpness ( |
dkato | 0:853f5b7408a7 | 3384 | const vdc5_onoff_t shp_h_on, |
dkato | 0:853f5b7408a7 | 3385 | const vdc5_enhance_sharp_t * const sharp_param, |
dkato | 0:853f5b7408a7 | 3386 | const vdc5_regaddr_img_qlty_imp_t * const img_qlty_imp) |
dkato | 0:853f5b7408a7 | 3387 | { |
dkato | 0:853f5b7408a7 | 3388 | const vdc5_sharpness_ctrl_t * sharpness_ctrl; |
dkato | 0:853f5b7408a7 | 3389 | |
dkato | 0:853f5b7408a7 | 3390 | if (sharp_param != NULL) { |
dkato | 0:853f5b7408a7 | 3391 | /* H1, adjacent pixel used as reference */ |
dkato | 0:853f5b7408a7 | 3392 | sharpness_ctrl = &sharp_param->hrz_sharp[VDC5_IMGENH_SHARP_H1]; |
dkato | 0:853f5b7408a7 | 3393 | /* Active sharpness range */ |
dkato | 0:853f5b7408a7 | 3394 | *(img_qlty_imp->adj_enh_shp1) &= (uint32_t)~VDC5_REG_MASK_0X0000003F; |
dkato | 0:853f5b7408a7 | 3395 | *(img_qlty_imp->adj_enh_shp1) |= (uint32_t)sharpness_ctrl->shp_core; |
dkato | 0:853f5b7408a7 | 3396 | /* Sharpness correction value clipping and sharpness edge amplitude value gain */ |
dkato | 0:853f5b7408a7 | 3397 | *(img_qlty_imp->adj_enh_shp2) = (uint32_t)sharpness_ctrl->shp_clip_o << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 3398 | *(img_qlty_imp->adj_enh_shp2) |= (uint32_t)sharpness_ctrl->shp_clip_u << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3399 | *(img_qlty_imp->adj_enh_shp2) |= (uint32_t)sharpness_ctrl->shp_gain_o << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 3400 | *(img_qlty_imp->adj_enh_shp2) |= (uint32_t)sharpness_ctrl->shp_gain_u; |
dkato | 0:853f5b7408a7 | 3401 | |
dkato | 0:853f5b7408a7 | 3402 | /* H2, second adjacent pixel used as reference */ |
dkato | 0:853f5b7408a7 | 3403 | sharpness_ctrl = &sharp_param->hrz_sharp[VDC5_IMGENH_SHARP_H2]; |
dkato | 0:853f5b7408a7 | 3404 | /* LPF selection for folding prevention before H2 edge detection */ |
dkato | 0:853f5b7408a7 | 3405 | if (sharp_param->shp_h2_lpf_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3406 | *(img_qlty_imp->adj_enh_shp3) = (uint32_t)0x00000000u; |
dkato | 0:853f5b7408a7 | 3407 | } else { |
dkato | 0:853f5b7408a7 | 3408 | *(img_qlty_imp->adj_enh_shp3) = (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 3409 | } |
dkato | 0:853f5b7408a7 | 3410 | /* Active sharpness range */ |
dkato | 0:853f5b7408a7 | 3411 | *(img_qlty_imp->adj_enh_shp3) |= (uint32_t)sharpness_ctrl->shp_core; |
dkato | 0:853f5b7408a7 | 3412 | /* Sharpness correction value clipping and sharpness edge amplitude value gain */ |
dkato | 0:853f5b7408a7 | 3413 | *(img_qlty_imp->adj_enh_shp4) = (uint32_t)sharpness_ctrl->shp_clip_o << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 3414 | *(img_qlty_imp->adj_enh_shp4) |= (uint32_t)sharpness_ctrl->shp_clip_u << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3415 | *(img_qlty_imp->adj_enh_shp4) |= (uint32_t)sharpness_ctrl->shp_gain_o << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 3416 | *(img_qlty_imp->adj_enh_shp4) |= (uint32_t)sharpness_ctrl->shp_gain_u; |
dkato | 0:853f5b7408a7 | 3417 | |
dkato | 0:853f5b7408a7 | 3418 | /* H3, third adjacent pixel used as reference */ |
dkato | 0:853f5b7408a7 | 3419 | sharpness_ctrl = &sharp_param->hrz_sharp[VDC5_IMGENH_SHARP_H3]; |
dkato | 0:853f5b7408a7 | 3420 | /* Active sharpness range */ |
dkato | 0:853f5b7408a7 | 3421 | *(img_qlty_imp->adj_enh_shp5) = (uint32_t)sharpness_ctrl->shp_core; |
dkato | 0:853f5b7408a7 | 3422 | /* Sharpness correction value clipping and sharpness edge amplitude value gain */ |
dkato | 0:853f5b7408a7 | 3423 | *(img_qlty_imp->adj_enh_shp6) = (uint32_t)sharpness_ctrl->shp_clip_o << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 3424 | *(img_qlty_imp->adj_enh_shp6) |= (uint32_t)sharpness_ctrl->shp_clip_u << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3425 | *(img_qlty_imp->adj_enh_shp6) |= (uint32_t)sharpness_ctrl->shp_gain_o << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 3426 | *(img_qlty_imp->adj_enh_shp6) |= (uint32_t)sharpness_ctrl->shp_gain_u; |
dkato | 0:853f5b7408a7 | 3427 | } |
dkato | 0:853f5b7408a7 | 3428 | |
dkato | 0:853f5b7408a7 | 3429 | if (shp_h_on == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3430 | *(img_qlty_imp->adj_enh_shp1) &= (uint32_t)~VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 3431 | } else { |
dkato | 0:853f5b7408a7 | 3432 | *(img_qlty_imp->adj_enh_shp1) |= (uint32_t)VDC5_REG_BIT16; |
dkato | 0:853f5b7408a7 | 3433 | } |
dkato | 0:853f5b7408a7 | 3434 | } /* End of function SetImageEnhancementSharpness() */ |
dkato | 0:853f5b7408a7 | 3435 | |
dkato | 0:853f5b7408a7 | 3436 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3437 | * @brief Sets LTI |
dkato | 0:853f5b7408a7 | 3438 | * @param[in] lti_h_on : LTI ON/OFF setting |
dkato | 0:853f5b7408a7 | 3439 | * @param[in] lti_param : LTI setup parameter |
dkato | 0:853f5b7408a7 | 3440 | * @param[in] img_qlty_imp : Image quality improver registers |
dkato | 0:853f5b7408a7 | 3441 | * @retval None |
dkato | 0:853f5b7408a7 | 3442 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3443 | static void SetImageEnhancementLti ( |
dkato | 0:853f5b7408a7 | 3444 | const vdc5_onoff_t lti_h_on, |
dkato | 0:853f5b7408a7 | 3445 | const vdc5_enhance_lti_t * const lti_param, |
dkato | 0:853f5b7408a7 | 3446 | const vdc5_regaddr_img_qlty_imp_t * const img_qlty_imp) |
dkato | 0:853f5b7408a7 | 3447 | { |
dkato | 0:853f5b7408a7 | 3448 | const vdc5_lti_ctrl_t * lti_ctrl; |
dkato | 0:853f5b7408a7 | 3449 | |
dkato | 0:853f5b7408a7 | 3450 | if (lti_param != NULL) { |
dkato | 0:853f5b7408a7 | 3451 | /* H2, second adjacent pixel used as reference */ |
dkato | 0:853f5b7408a7 | 3452 | lti_ctrl = <i_param->lti[VDC5_IMGENH_LTI1]; |
dkato | 0:853f5b7408a7 | 3453 | /* LPF selection for folding prevention before H2 edge detection */ |
dkato | 0:853f5b7408a7 | 3454 | if (lti_param->lti_h2_lpf_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3455 | *(img_qlty_imp->adj_enh_lti1) = (uint32_t)0x00000000u; |
dkato | 0:853f5b7408a7 | 3456 | } else { |
dkato | 0:853f5b7408a7 | 3457 | *(img_qlty_imp->adj_enh_lti1) = (uint32_t)VDC5_REG_BIT24; |
dkato | 0:853f5b7408a7 | 3458 | } |
dkato | 0:853f5b7408a7 | 3459 | /* Median filter LTI correction threshold */ |
dkato | 0:853f5b7408a7 | 3460 | *(img_qlty_imp->adj_enh_lti1) |= (uint32_t)((uint32_t)lti_ctrl->lti_inc_zero << VDC5_REG_SHIFT_16); |
dkato | 0:853f5b7408a7 | 3461 | /* LTI edge amplitude value gain */ |
dkato | 0:853f5b7408a7 | 3462 | *(img_qlty_imp->adj_enh_lti1) |= (uint32_t)((uint32_t)lti_ctrl->lti_gain << VDC5_REG_SHIFT_8); |
dkato | 0:853f5b7408a7 | 3463 | /* LTI coring (maximum core value of 255) */ |
dkato | 0:853f5b7408a7 | 3464 | *(img_qlty_imp->adj_enh_lti1) |= (uint32_t)lti_ctrl->lti_core; |
dkato | 0:853f5b7408a7 | 3465 | |
dkato | 0:853f5b7408a7 | 3466 | /* H4, fourth adjacent pixel used as reference */ |
dkato | 0:853f5b7408a7 | 3467 | lti_ctrl = <i_param->lti[VDC5_IMGENH_LTI2]; |
dkato | 0:853f5b7408a7 | 3468 | /* Median filter reference pixel select */ |
dkato | 0:853f5b7408a7 | 3469 | if (lti_param->lti_h4_median_tap_sel == VDC5_LTI_MDFIL_SEL_ADJ2) { |
dkato | 0:853f5b7408a7 | 3470 | *(img_qlty_imp->adj_enh_lti2) = (uint32_t)0x00000000u; |
dkato | 0:853f5b7408a7 | 3471 | } else { |
dkato | 0:853f5b7408a7 | 3472 | *(img_qlty_imp->adj_enh_lti2) = (uint32_t)VDC5_REG_BIT24; |
dkato | 0:853f5b7408a7 | 3473 | } |
dkato | 0:853f5b7408a7 | 3474 | /* Median filter LTI correction threshold */ |
dkato | 0:853f5b7408a7 | 3475 | *(img_qlty_imp->adj_enh_lti2) |= (uint32_t)((uint32_t)lti_ctrl->lti_inc_zero << VDC5_REG_SHIFT_16); |
dkato | 0:853f5b7408a7 | 3476 | /* LTI edge amplitude value gain */ |
dkato | 0:853f5b7408a7 | 3477 | *(img_qlty_imp->adj_enh_lti2) |= (uint32_t)((uint32_t)lti_ctrl->lti_gain << VDC5_REG_SHIFT_8); |
dkato | 0:853f5b7408a7 | 3478 | /* LTI coring (maximum core value of 255) */ |
dkato | 0:853f5b7408a7 | 3479 | *(img_qlty_imp->adj_enh_lti2) |= (uint32_t)lti_ctrl->lti_core; |
dkato | 0:853f5b7408a7 | 3480 | } |
dkato | 0:853f5b7408a7 | 3481 | |
dkato | 0:853f5b7408a7 | 3482 | if (lti_h_on == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3483 | *(img_qlty_imp->adj_enh_lti1) &= (uint32_t)~VDC5_REG_BIT31; |
dkato | 0:853f5b7408a7 | 3484 | } else { |
dkato | 0:853f5b7408a7 | 3485 | *(img_qlty_imp->adj_enh_lti1) |= (uint32_t)VDC5_REG_BIT31; |
dkato | 0:853f5b7408a7 | 3486 | } |
dkato | 0:853f5b7408a7 | 3487 | } /* End of function SetImageEnhancementLti() */ |
dkato | 0:853f5b7408a7 | 3488 | |
dkato | 0:853f5b7408a7 | 3489 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3490 | * @brief Sets alpha blending area of a rectangle |
dkato | 0:853f5b7408a7 | 3491 | * @param[in] pd_disp_rect : Rectangular area for alpha blending |
dkato | 0:853f5b7408a7 | 3492 | * @param[in] img_synthesizer : Image synthesizer registers |
dkato | 0:853f5b7408a7 | 3493 | * @retval None |
dkato | 0:853f5b7408a7 | 3494 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3495 | static void SetAlphaRectArea ( |
dkato | 0:853f5b7408a7 | 3496 | const vdc5_pd_disp_rect_t * const pd_disp_rect, |
dkato | 0:853f5b7408a7 | 3497 | const vdc5_regaddr_img_synthesizer_t * const img_synthesizer) |
dkato | 0:853f5b7408a7 | 3498 | { |
dkato | 0:853f5b7408a7 | 3499 | uint32_t v_start; |
dkato | 0:853f5b7408a7 | 3500 | uint32_t h_start; |
dkato | 0:853f5b7408a7 | 3501 | |
dkato | 0:853f5b7408a7 | 3502 | if (pd_disp_rect != NULL) { |
dkato | 0:853f5b7408a7 | 3503 | v_start = *(img_synthesizer->gr_ab2) >> VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3504 | h_start = *(img_synthesizer->gr_ab3) >> VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3505 | |
dkato | 0:853f5b7408a7 | 3506 | v_start += (uint32_t)pd_disp_rect->vs_rel; |
dkato | 0:853f5b7408a7 | 3507 | h_start += (uint32_t)pd_disp_rect->hs_rel; |
dkato | 0:853f5b7408a7 | 3508 | /* If the start position exceeds the maximum bit width, the value should be saturated. */ |
dkato | 0:853f5b7408a7 | 3509 | if ((v_start & (uint32_t)~VDC5_REG_MASK_0X000007FF) != 0u) { |
dkato | 0:853f5b7408a7 | 3510 | v_start = (uint32_t)VDC5_REG_MASK_0X000007FF; |
dkato | 0:853f5b7408a7 | 3511 | } |
dkato | 0:853f5b7408a7 | 3512 | if ((h_start & (uint32_t)~VDC5_REG_MASK_0X000007FF) != 0u) { |
dkato | 0:853f5b7408a7 | 3513 | h_start = (uint32_t)VDC5_REG_MASK_0X000007FF; |
dkato | 0:853f5b7408a7 | 3514 | } |
dkato | 0:853f5b7408a7 | 3515 | |
dkato | 0:853f5b7408a7 | 3516 | *(img_synthesizer->gr_ab4) = (v_start << VDC5_REG_SHIFT_16) | (uint32_t)pd_disp_rect->vw_rel; |
dkato | 0:853f5b7408a7 | 3517 | *(img_synthesizer->gr_ab5) = (h_start << VDC5_REG_SHIFT_16) | (uint32_t)pd_disp_rect->hw_rel; |
dkato | 0:853f5b7408a7 | 3518 | } |
dkato | 0:853f5b7408a7 | 3519 | } /* End of function SetAlphaRectArea() */ |
dkato | 0:853f5b7408a7 | 3520 | |
dkato | 0:853f5b7408a7 | 3521 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3522 | * @brief Sets upper-layer and lower-layer plane in scaler |
dkato | 0:853f5b7408a7 | 3523 | * @param[in] ch : Channel |
dkato | 0:853f5b7408a7 | 3524 | * @param[in] und_sel : Selection of lower-layer plane in scaler |
dkato | 0:853f5b7408a7 | 3525 | * @retval None |
dkato | 0:853f5b7408a7 | 3526 | *****************************************************************************/ |
dkato | 0:853f5b7408a7 | 3527 | static void SetUndSel (const vdc5_channel_t ch, const vdc5_onoff_t und_sel) |
dkato | 0:853f5b7408a7 | 3528 | { |
dkato | 0:853f5b7408a7 | 3529 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer; |
dkato | 0:853f5b7408a7 | 3530 | const vdc5_regaddr_img_synthesizer_t * img_synthesizer_vin; |
dkato | 0:853f5b7408a7 | 3531 | vdc5_onoff_t current_und_sel; |
dkato | 0:853f5b7408a7 | 3532 | vdc5_onoff_t cascade; |
dkato | 0:853f5b7408a7 | 3533 | vdc5_resource_state_t rsrc_state; |
dkato | 0:853f5b7408a7 | 3534 | uint32_t reg_data; |
dkato | 0:853f5b7408a7 | 3535 | |
dkato | 0:853f5b7408a7 | 3536 | current_und_sel = VDC5_ShrdPrmGetUndSel(ch); |
dkato | 0:853f5b7408a7 | 3537 | if (und_sel != current_und_sel) { |
dkato | 0:853f5b7408a7 | 3538 | VDC5_ShrdPrmSetUndSel(ch, und_sel); |
dkato | 0:853f5b7408a7 | 3539 | |
dkato | 0:853f5b7408a7 | 3540 | cascade = VDC5_ShrdPrmGetCascade(ch); |
dkato | 0:853f5b7408a7 | 3541 | rsrc_state = VDC5_ShrdPrmGetLayerResource(ch, VDC5_LAYER_ID_0_RD); |
dkato | 0:853f5b7408a7 | 3542 | if ((cascade == VDC5_OFF) && (rsrc_state != VDC5_RESOURCE_ST_INVALID)) { |
dkato | 0:853f5b7408a7 | 3543 | /* Cascade connection OFF and graphics 0 is used */ |
dkato | 0:853f5b7408a7 | 3544 | img_synthesizer_vin = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_VIN]; |
dkato | 0:853f5b7408a7 | 3545 | if (und_sel == VDC5_OFF) { |
dkato | 0:853f5b7408a7 | 3546 | /* Graphics 1 is allocated to the upper-layer. */ |
dkato | 0:853f5b7408a7 | 3547 | *(img_synthesizer_vin->gr_ab1) &= (uint32_t)~VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 3548 | |
dkato | 0:853f5b7408a7 | 3549 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR1]; |
dkato | 0:853f5b7408a7 | 3550 | } else { |
dkato | 0:853f5b7408a7 | 3551 | /* Graphics 0 is allocated to the upper-layer. */ |
dkato | 0:853f5b7408a7 | 3552 | *(img_synthesizer_vin->gr_ab1) |= (uint32_t)VDC5_REG_BIT2; |
dkato | 0:853f5b7408a7 | 3553 | |
dkato | 0:853f5b7408a7 | 3554 | img_synthesizer = &vdc5_regaddr_img_synthesizer[ch][VDC5_GR_TYPE_GR0]; |
dkato | 0:853f5b7408a7 | 3555 | } |
dkato | 0:853f5b7408a7 | 3556 | /* Copy the graphics display area in the upper-layer to the VIN display area. */ |
dkato | 0:853f5b7408a7 | 3557 | reg_data = *(img_synthesizer->gr_ab2); |
dkato | 0:853f5b7408a7 | 3558 | *(img_synthesizer_vin->gr_ab2) = reg_data; |
dkato | 0:853f5b7408a7 | 3559 | reg_data = *(img_synthesizer->gr_ab3); |
dkato | 0:853f5b7408a7 | 3560 | *(img_synthesizer_vin->gr_ab3) = reg_data; |
dkato | 0:853f5b7408a7 | 3561 | |
dkato | 0:853f5b7408a7 | 3562 | /* Graphics register update control register (GR_VIN_UPDATE) |
dkato | 0:853f5b7408a7 | 3563 | b8 GR_VIN_UPDATE |
dkato | 0:853f5b7408a7 | 3564 | b4 GR_VIN_P_VEN */ |
dkato | 0:853f5b7408a7 | 3565 | *(img_synthesizer_vin->gr_update) |= (uint32_t)(VDC5_REG_BIT8|VDC5_REG_BIT4); |
dkato | 0:853f5b7408a7 | 3566 | } |
dkato | 0:853f5b7408a7 | 3567 | } |
dkato | 0:853f5b7408a7 | 3568 | } /* End of function SetUndSel() */ |
dkato | 0:853f5b7408a7 | 3569 | |
dkato | 0:853f5b7408a7 | 3570 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3571 | * @brief Converts the color format from gr_format format into 24-bit RGB888 format |
dkato | 0:853f5b7408a7 | 3572 | * @param[in] gr_format : Color format |
dkato | 0:853f5b7408a7 | 3573 | * @param[in] input_color : Color data |
dkato | 0:853f5b7408a7 | 3574 | * @retval RGB888 color data |
dkato | 0:853f5b7408a7 | 3575 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3576 | static uint32_t ColorConversion (const vdc5_gr_format_t gr_format, const uint32_t input_color) |
dkato | 0:853f5b7408a7 | 3577 | { |
dkato | 0:853f5b7408a7 | 3578 | uint32_t red; |
dkato | 0:853f5b7408a7 | 3579 | uint32_t green; |
dkato | 0:853f5b7408a7 | 3580 | uint32_t blue; |
dkato | 0:853f5b7408a7 | 3581 | uint32_t conv_color; |
dkato | 0:853f5b7408a7 | 3582 | |
dkato | 0:853f5b7408a7 | 3583 | conv_color = 0; |
dkato | 0:853f5b7408a7 | 3584 | switch (gr_format) { |
dkato | 0:853f5b7408a7 | 3585 | case VDC5_GR_FORMAT_RGB565: |
dkato | 0:853f5b7408a7 | 3586 | red = ColorConversionFrom5to8((uint32_t)((input_color & VDC5_REG_RGB565_R_MASK) >> VDC5_REG_SHIFT_11)); |
dkato | 0:853f5b7408a7 | 3587 | green = ColorConversionFrom6to8((uint32_t)((input_color & VDC5_REG_RGB565_G_MASK) >> VDC5_REG_SHIFT_5)); |
dkato | 0:853f5b7408a7 | 3588 | blue = ColorConversionFrom5to8((uint32_t)(input_color & VDC5_REG_RGB565_B_MASK)); |
dkato | 0:853f5b7408a7 | 3589 | conv_color = (green << VDC5_REG_SHIFT_16) | (blue << VDC5_REG_SHIFT_8) | red; |
dkato | 0:853f5b7408a7 | 3590 | break; |
dkato | 0:853f5b7408a7 | 3591 | case VDC5_GR_FORMAT_RGB888: |
dkato | 0:853f5b7408a7 | 3592 | conv_color = ColorConversionIntoAgbr(input_color); |
dkato | 0:853f5b7408a7 | 3593 | break; |
dkato | 0:853f5b7408a7 | 3594 | case VDC5_GR_FORMAT_ARGB1555: |
dkato | 0:853f5b7408a7 | 3595 | red = ColorConversionFrom5to8((uint32_t)((input_color & VDC5_REG_ARGB1555_R_MASK) >> VDC5_REG_SHIFT_10)); |
dkato | 0:853f5b7408a7 | 3596 | green = ColorConversionFrom5to8((uint32_t)((input_color & VDC5_REG_ARGB1555_G_MASK) >> VDC5_REG_SHIFT_5)); |
dkato | 0:853f5b7408a7 | 3597 | blue = ColorConversionFrom5to8((uint32_t)(input_color & VDC5_REG_ARGB1555_B_MASK)); |
dkato | 0:853f5b7408a7 | 3598 | conv_color = (green << VDC5_REG_SHIFT_16) | (blue << VDC5_REG_SHIFT_8) | red; |
dkato | 0:853f5b7408a7 | 3599 | break; |
dkato | 0:853f5b7408a7 | 3600 | case VDC5_GR_FORMAT_ARGB4444: |
dkato | 0:853f5b7408a7 | 3601 | red = ColorConversionFrom4to8((uint32_t)((input_color & VDC5_REG_ARGB4444_R_MASK) >> VDC5_REG_SHIFT_8)); |
dkato | 0:853f5b7408a7 | 3602 | green = ColorConversionFrom4to8((uint32_t)((input_color & VDC5_REG_ARGB4444_G_MASK) >> VDC5_REG_SHIFT_4)); |
dkato | 0:853f5b7408a7 | 3603 | blue = ColorConversionFrom4to8((uint32_t)(input_color & VDC5_REG_ARGB4444_B_MASK)); |
dkato | 0:853f5b7408a7 | 3604 | conv_color = (green << VDC5_REG_SHIFT_16) | (blue << VDC5_REG_SHIFT_8) | red; |
dkato | 0:853f5b7408a7 | 3605 | break; |
dkato | 0:853f5b7408a7 | 3606 | case VDC5_GR_FORMAT_ARGB8888: |
dkato | 0:853f5b7408a7 | 3607 | conv_color = ColorConversionIntoAgbr((uint32_t)(input_color & VDC5_REG_RGB_24BIT_MASK)); |
dkato | 0:853f5b7408a7 | 3608 | break; |
dkato | 0:853f5b7408a7 | 3609 | case VDC5_GR_FORMAT_RGBA5551: |
dkato | 0:853f5b7408a7 | 3610 | red = ColorConversionFrom5to8((uint32_t)((input_color & VDC5_REG_RGBA5551_R_MASK) >> VDC5_REG_SHIFT_11)); |
dkato | 0:853f5b7408a7 | 3611 | green = ColorConversionFrom5to8((uint32_t)((input_color & VDC5_REG_RGBA5551_G_MASK) >> VDC5_REG_SHIFT_6)); |
dkato | 0:853f5b7408a7 | 3612 | blue = ColorConversionFrom5to8((uint32_t)((input_color & VDC5_REG_RGBA5551_B_MASK) >> VDC5_REG_SHIFT_1)); |
dkato | 0:853f5b7408a7 | 3613 | conv_color = (green << VDC5_REG_SHIFT_16) | (blue << VDC5_REG_SHIFT_8) | red; |
dkato | 0:853f5b7408a7 | 3614 | break; |
dkato | 0:853f5b7408a7 | 3615 | case VDC5_GR_FORMAT_RGBA8888: |
dkato | 0:853f5b7408a7 | 3616 | conv_color = ColorConversionIntoAgbr((uint32_t)((input_color >> VDC5_REG_SHIFT_8) & VDC5_REG_RGB_24BIT_MASK)); |
dkato | 0:853f5b7408a7 | 3617 | break; |
dkato | 0:853f5b7408a7 | 3618 | default: |
dkato | 0:853f5b7408a7 | 3619 | /* DO NOTHING */ |
dkato | 0:853f5b7408a7 | 3620 | break; |
dkato | 0:853f5b7408a7 | 3621 | } |
dkato | 0:853f5b7408a7 | 3622 | return conv_color; |
dkato | 0:853f5b7408a7 | 3623 | } /* End of function ColorConversion() */ |
dkato | 0:853f5b7408a7 | 3624 | |
dkato | 0:853f5b7408a7 | 3625 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3626 | * @brief Converts the color data from 4 bits value into 8 bits value |
dkato | 0:853f5b7408a7 | 3627 | * @param[in] color_value : 4-bit color data |
dkato | 0:853f5b7408a7 | 3628 | * @retval 8-bit color data |
dkato | 0:853f5b7408a7 | 3629 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3630 | static uint32_t ColorConversionFrom4to8 (const uint32_t color_value) |
dkato | 0:853f5b7408a7 | 3631 | { |
dkato | 0:853f5b7408a7 | 3632 | uint32_t color; |
dkato | 0:853f5b7408a7 | 3633 | |
dkato | 0:853f5b7408a7 | 3634 | color = color_value & (uint32_t)VDC5_REG_COLOR_4BIT_MASK; |
dkato | 0:853f5b7408a7 | 3635 | color *= (uint32_t)VDC5_REG_EXTENSION_VALUE_17; |
dkato | 0:853f5b7408a7 | 3636 | |
dkato | 0:853f5b7408a7 | 3637 | return color; |
dkato | 0:853f5b7408a7 | 3638 | } /* End of function ColorConversionFrom4to8() */ |
dkato | 0:853f5b7408a7 | 3639 | |
dkato | 0:853f5b7408a7 | 3640 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3641 | * @brief Converts the color data from 5 bits value into 8 bits value |
dkato | 0:853f5b7408a7 | 3642 | * @param[in] color_value : 5-bit color data |
dkato | 0:853f5b7408a7 | 3643 | * @retval 8-bit color data |
dkato | 0:853f5b7408a7 | 3644 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3645 | static uint32_t ColorConversionFrom5to8 (const uint32_t color_value) |
dkato | 0:853f5b7408a7 | 3646 | { |
dkato | 0:853f5b7408a7 | 3647 | uint32_t color; |
dkato | 0:853f5b7408a7 | 3648 | |
dkato | 0:853f5b7408a7 | 3649 | color = color_value & (uint32_t)VDC5_REG_COLOR_5BIT_MASK; |
dkato | 0:853f5b7408a7 | 3650 | color *= (uint32_t)(VDC5_REG_EXTENSION_VALUE_263 * VDC5_REG_ROUND_OFF_VALUE_2); |
dkato | 0:853f5b7408a7 | 3651 | color /= (uint32_t)VDC5_REG_EXTENSION_VALUE_32; |
dkato | 0:853f5b7408a7 | 3652 | /* Round off */ |
dkato | 0:853f5b7408a7 | 3653 | color += (uint32_t)VDC5_REG_ROUND_OFF_VALUE_1; |
dkato | 0:853f5b7408a7 | 3654 | color /= (uint32_t)VDC5_REG_ROUND_OFF_VALUE_2; |
dkato | 0:853f5b7408a7 | 3655 | |
dkato | 0:853f5b7408a7 | 3656 | return color; |
dkato | 0:853f5b7408a7 | 3657 | } /* End of function ColorConversionFrom5to8() */ |
dkato | 0:853f5b7408a7 | 3658 | |
dkato | 0:853f5b7408a7 | 3659 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3660 | * @brief Converts the color data from 6 bits value into 8 bits value |
dkato | 0:853f5b7408a7 | 3661 | * @param[in] color_value : 6-bit color data |
dkato | 0:853f5b7408a7 | 3662 | * @retval 8-bit color data |
dkato | 0:853f5b7408a7 | 3663 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3664 | static uint32_t ColorConversionFrom6to8 (const uint32_t color_value) |
dkato | 0:853f5b7408a7 | 3665 | { |
dkato | 0:853f5b7408a7 | 3666 | uint32_t color; |
dkato | 0:853f5b7408a7 | 3667 | |
dkato | 0:853f5b7408a7 | 3668 | color = color_value & (uint32_t)VDC5_REG_COLOR_6BIT_MASK; |
dkato | 0:853f5b7408a7 | 3669 | color *= (uint32_t)(VDC5_REG_EXTENSION_VALUE_259 * VDC5_REG_ROUND_OFF_VALUE_2); |
dkato | 0:853f5b7408a7 | 3670 | color /= (uint32_t)VDC5_REG_EXTENSION_VALUE_64; |
dkato | 0:853f5b7408a7 | 3671 | /* Round off */ |
dkato | 0:853f5b7408a7 | 3672 | color += (uint32_t)VDC5_REG_ROUND_OFF_VALUE_1; |
dkato | 0:853f5b7408a7 | 3673 | color /= (uint32_t)VDC5_REG_ROUND_OFF_VALUE_2; |
dkato | 0:853f5b7408a7 | 3674 | |
dkato | 0:853f5b7408a7 | 3675 | return color; |
dkato | 0:853f5b7408a7 | 3676 | } /* End of function ColorConversionFrom6to8() */ |
dkato | 0:853f5b7408a7 | 3677 | |
dkato | 0:853f5b7408a7 | 3678 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3679 | * @brief Converts the color data from ARGB8888 format into AGBR8888 format |
dkato | 0:853f5b7408a7 | 3680 | * @param[in] color_value : ARGB8888 color data |
dkato | 0:853f5b7408a7 | 3681 | * @retval AGBR8888 color data |
dkato | 0:853f5b7408a7 | 3682 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3683 | static uint32_t ColorConversionIntoAgbr (const uint32_t color_value) |
dkato | 0:853f5b7408a7 | 3684 | { |
dkato | 0:853f5b7408a7 | 3685 | uint32_t color_bgr; |
dkato | 0:853f5b7408a7 | 3686 | uint32_t color_dat; |
dkato | 0:853f5b7408a7 | 3687 | |
dkato | 0:853f5b7408a7 | 3688 | /* Green and blue */ |
dkato | 0:853f5b7408a7 | 3689 | color_bgr = (uint32_t)(color_value << VDC5_REG_SHIFT_8); |
dkato | 0:853f5b7408a7 | 3690 | color_bgr &= (uint32_t)VDC5_REG_ARGB8888_GB_MASK; |
dkato | 0:853f5b7408a7 | 3691 | /* Alpha */ |
dkato | 0:853f5b7408a7 | 3692 | color_dat = (uint32_t)(color_value & VDC5_REG_ALPHA_8BIT); |
dkato | 0:853f5b7408a7 | 3693 | color_bgr |= color_dat; |
dkato | 0:853f5b7408a7 | 3694 | /* Red */ |
dkato | 0:853f5b7408a7 | 3695 | color_dat = (uint32_t)((color_value >> VDC5_REG_SHIFT_16) & VDC5_REG_COLOR_8BIT_MASK); |
dkato | 0:853f5b7408a7 | 3696 | color_bgr |= color_dat; |
dkato | 0:853f5b7408a7 | 3697 | |
dkato | 0:853f5b7408a7 | 3698 | return color_bgr; |
dkato | 0:853f5b7408a7 | 3699 | } /* End of function ColorConversionIntoAgbr() */ |
dkato | 0:853f5b7408a7 | 3700 | |
dkato | 0:853f5b7408a7 | 3701 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3702 | * @brief Sets color lookup table (CLUT) |
dkato | 0:853f5b7408a7 | 3703 | * @param[in] param : CLUT parameter |
dkato | 0:853f5b7408a7 | 3704 | * @param[out] regaddr_clut : CLUT register top address |
dkato | 0:853f5b7408a7 | 3705 | * @retval None |
dkato | 0:853f5b7408a7 | 3706 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3707 | static void Set_Clut (const vdc5_clut_t * const param, volatile uint32_t * regaddr_clut) |
dkato | 0:853f5b7408a7 | 3708 | { |
dkato | 0:853f5b7408a7 | 3709 | uint32_t data_len; |
dkato | 0:853f5b7408a7 | 3710 | const uint32_t * clut_tmp; |
dkato | 0:853f5b7408a7 | 3711 | |
dkato | 0:853f5b7408a7 | 3712 | clut_tmp = param->clut; |
dkato | 0:853f5b7408a7 | 3713 | for (data_len = 0; data_len < param->color_num; data_len++) { |
dkato | 0:853f5b7408a7 | 3714 | *regaddr_clut = *clut_tmp; |
dkato | 0:853f5b7408a7 | 3715 | regaddr_clut++; |
dkato | 0:853f5b7408a7 | 3716 | clut_tmp++; |
dkato | 0:853f5b7408a7 | 3717 | } |
dkato | 0:853f5b7408a7 | 3718 | } /* End of function Set_Clut() */ |
dkato | 0:853f5b7408a7 | 3719 | |
dkato | 0:853f5b7408a7 | 3720 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3721 | * @brief Sets start threshold for gamma correction |
dkato | 0:853f5b7408a7 | 3722 | * @param[in] gam_th : Start threshold of area 1 to 31 |
dkato | 0:853f5b7408a7 | 3723 | * @param[out] gam_area : Gamma correction registers for start threshold |
dkato | 0:853f5b7408a7 | 3724 | * @retval None |
dkato | 0:853f5b7408a7 | 3725 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3726 | static void Set_StartThreshold_Gamma (const uint8_t * gam_th, volatile uint32_t * const * const gam_area) |
dkato | 0:853f5b7408a7 | 3727 | { |
dkato | 0:853f5b7408a7 | 3728 | uint32_t reg_index; |
dkato | 0:853f5b7408a7 | 3729 | |
dkato | 0:853f5b7408a7 | 3730 | if (gam_th != NULL) { |
dkato | 0:853f5b7408a7 | 3731 | *(gam_area[0]) = (uint32_t)*gam_th << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3732 | gam_th++; |
dkato | 0:853f5b7408a7 | 3733 | *(gam_area[0]) |= (uint32_t)*gam_th << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 3734 | gam_th++; |
dkato | 0:853f5b7408a7 | 3735 | *(gam_area[0]) |= (uint32_t)*gam_th; |
dkato | 0:853f5b7408a7 | 3736 | gam_th++; |
dkato | 0:853f5b7408a7 | 3737 | |
dkato | 0:853f5b7408a7 | 3738 | for (reg_index = 1; reg_index < VDC5_GAM_AREA_REG_NUM; reg_index++) { |
dkato | 0:853f5b7408a7 | 3739 | *(gam_area[reg_index]) = (uint32_t)*gam_th << VDC5_REG_SHIFT_24; |
dkato | 0:853f5b7408a7 | 3740 | gam_th++; |
dkato | 0:853f5b7408a7 | 3741 | *(gam_area[reg_index]) |= (uint32_t)*gam_th << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3742 | gam_th++; |
dkato | 0:853f5b7408a7 | 3743 | *(gam_area[reg_index]) |= (uint32_t)*gam_th << VDC5_REG_SHIFT_8; |
dkato | 0:853f5b7408a7 | 3744 | gam_th++; |
dkato | 0:853f5b7408a7 | 3745 | *(gam_area[reg_index]) |= (uint32_t)*gam_th; |
dkato | 0:853f5b7408a7 | 3746 | gam_th++; |
dkato | 0:853f5b7408a7 | 3747 | } |
dkato | 0:853f5b7408a7 | 3748 | } |
dkato | 0:853f5b7408a7 | 3749 | } /* End of function Set_StartThreshold_Gamma() */ |
dkato | 0:853f5b7408a7 | 3750 | |
dkato | 0:853f5b7408a7 | 3751 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3752 | * @brief Sets gain adjustment for gamma correction |
dkato | 0:853f5b7408a7 | 3753 | * @param[in] gam_gain : Gain adjustment of area 0 to 31 |
dkato | 0:853f5b7408a7 | 3754 | * @param[out] gam_lut : Gamma correction registers for gain adjustment |
dkato | 0:853f5b7408a7 | 3755 | * @retval None |
dkato | 0:853f5b7408a7 | 3756 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3757 | static void Set_GainAdjustment_Gamma (const uint16_t * gam_gain, volatile uint32_t * const * const gam_lut) |
dkato | 0:853f5b7408a7 | 3758 | { |
dkato | 0:853f5b7408a7 | 3759 | uint32_t reg_index; |
dkato | 0:853f5b7408a7 | 3760 | |
dkato | 0:853f5b7408a7 | 3761 | if (gam_gain != NULL) { |
dkato | 0:853f5b7408a7 | 3762 | for (reg_index = 0; reg_index < VDC5_GAM_LUT_REG_NUM; reg_index++) { |
dkato | 0:853f5b7408a7 | 3763 | *(gam_lut[reg_index]) = (uint32_t)*gam_gain << VDC5_REG_SHIFT_16; |
dkato | 0:853f5b7408a7 | 3764 | gam_gain++; |
dkato | 0:853f5b7408a7 | 3765 | *(gam_lut[reg_index]) |= (uint32_t)*gam_gain; |
dkato | 0:853f5b7408a7 | 3766 | gam_gain++; |
dkato | 0:853f5b7408a7 | 3767 | } |
dkato | 0:853f5b7408a7 | 3768 | } |
dkato | 0:853f5b7408a7 | 3769 | } /* End of function Set_GainAdjustment_Gamma() */ |
dkato | 0:853f5b7408a7 | 3770 | |
dkato | 0:853f5b7408a7 | 3771 | /**************************************************************************//** |
dkato | 0:853f5b7408a7 | 3772 | * @brief Waits for 200 usec |
dkato | 0:853f5b7408a7 | 3773 | * @param[in] void |
dkato | 0:853f5b7408a7 | 3774 | * @retval None |
dkato | 0:853f5b7408a7 | 3775 | ******************************************************************************/ |
dkato | 0:853f5b7408a7 | 3776 | static void Wait_200_usec (void) |
dkato | 0:853f5b7408a7 | 3777 | { |
dkato | 0:853f5b7408a7 | 3778 | volatile uint32_t counter; |
dkato | 0:853f5b7408a7 | 3779 | |
dkato | 0:853f5b7408a7 | 3780 | for (counter = 0; counter < (uint32_t)VDC5_LVDS_PLL_WAIT_200USEC; counter++) { |
dkato | 0:853f5b7408a7 | 3781 | /* Wait for 200 usec. */ |
dkato | 0:853f5b7408a7 | 3782 | } |
dkato | 0:853f5b7408a7 | 3783 | } /* End of function Wait_200_usec() */ |
dkato | 0:853f5b7408a7 | 3784 |