ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_glcdc_regs.h
Go to the documentation of this file.
1
37
38#pragma once
39
40#ifdef __cplusplus
41extern "C" {
42#endif
43
44#include <stdint.h>
45
46#include "ra8_attributes.h"
47
48typedef enum : uintptr_t {
49 k_ra8_glcdc_base_addr = 0x40342000UL,
50 k_ra8_mipi_dsi_base_addr = 0x40346000UL,
51 k_ra8_mipi_phy_base_addr = 0x40346C00UL,
52 k_ra8_mipi_csi_base_addr = 0x40347000UL,
53 k_ra8_ceu_base_addr = 0x40348000UL,
55
66typedef enum : uint16_t {
67 /* ---- Graphics 1 CLUT planes ------------------------------------------ */
72
73 /* ---- Background block ------------------------------------------------ */
81
82 /* ---- Graphics layer 0 (GR[0]) ---------------------------------------- */
102
103 /* ---- Graphics layer 1 (GR[1]) ---------------------------------------- */
123
124 /* ---- Gamma correction (GAM[0..2]) ------------------------------------ */
128
129 /* ---- Output control block (OUT) -------------------------------------- */
138
139 /* ---- Timing control block (TCON) ------------------------------------- */
150
151 /* ---- System control block (SYSCNT) ----------------------------------- */
158
177
184static inline volatile uint32_t* ra8_glcdc_reg32(ra8_glcdc_block_off_t offset)
185{
186 return (volatile uint32_t*)(k_ra8_glcdc_base_addr + (uint16_t)offset);
187}
188
189/* =============================================================================
190 * Gamma correction register block (HUM Ch 63 "GLCDC" p 3789-3793)
191 * =============================================================================
192 *
193 * Each of the three color channels (R=GAM[0], G=GAM[1], B=GAM[2]) occupies
194 * exactly 64 bytes starting at the k_ra8_glcdc_off_gamN base. The block
195 * contains:
196 * - LUT[8] at offset 0x00: eight 32-bit registers, each holding two 11-bit
197 * gain coefficients (GAIN0 in bits[26:16], GAIN1 in bits[10:0]).
198 * - AREA[8] at offset 0x20: eight 32-bit registers, each holding two 10-bit
199 * area/threshold values (TH1 in bits[25:16], TH2 in bits[9:0]).
200 * The global gamma-enable switch (GAMSW.GAMON, bit 0) lives in the shared
201 * OUT control block at k_ra8_glcdc_off_out_gamsw (0x13D8).
202 */
203
216typedef struct {
217 volatile uint32_t LUT[8];
218 volatile uint32_t AREA[8];
220
222typedef enum : uint8_t {
225
226static_assert(sizeof(ra8_glcdc_gam_t) == (uint32_t)k_ra8_glcdc_gam_block_bytes,
227 "ra8_glcdc_gam_t must be 64 bytes");
228
248
257typedef enum : uint32_t {
258 k_ra8_glcdc_gamsw_gamon = 0x00000001UL,
260
273static inline volatile ra8_glcdc_gam_t* ra8_glcdc_gam_regs(uint8_t channel_idx)
274{
275 static const uint16_t local_gam_base[3] = {
276 (uint16_t)k_ra8_glcdc_off_gam0,
277 (uint16_t)k_ra8_glcdc_off_gam1,
278 (uint16_t)k_ra8_glcdc_off_gam2,
279 };
280 return (volatile ra8_glcdc_gam_t*)(k_ra8_glcdc_base_addr + local_gam_base[channel_idx]);
281}
282
283/* =============================================================================
284 * EK-RA8D2 panel timings (1024 x 600, 7-inch parallel TFT)
285 * =============================================================================
286 *
287 * Values taken from the FSP `board_ra8d2_ek.c` panel descriptor and
288 * the panel datasheet in `docs/reference/`. These are the nominal
289 * values; a real driver should read the selected panel descriptor
290 * at runtime.
291 */
292
303
304typedef enum : uint32_t {
307
308#ifdef __cplusplus
309}
310#endif
Annotation-attribute framework macros for ra8-firmware.
#define RA8_HW_REGISTER_ACCESS
Mark an MMIO accessor function (returns volatile register pointer).
static volatile ra8_glcdc_gam_t * ra8_glcdc_gam_regs(uint8_t channel_idx)
Return a volatile pointer to a per-channel gamma register block.
ra8_glcdc_ek_clk_t
@ k_ra8_glcdc_ek_pixel_clk_hz
~51.2 MHz pixel clock.
ra8_glcdc_block_off_t
Absolute register offsets inside the GLCDC window.
@ k_ra8_glcdc_off_tcon_stha1
TCON.STHA1.
@ k_ra8_glcdc_off_gr2_ab5
GR[1].AB5: alpha rect H size+pos.
@ k_ra8_glcdc_off_gr1_flm1
GR[0].FLM1: burst mode.
@ k_ra8_glcdc_off_gr1_base
GR[0].BASE: layer bg colour.
@ k_ra8_glcdc_off_out_set
OUT.SET: output interface.
@ k_ra8_glcdc_off_gr2_ab6
GR[1].AB6: fade rate / coef.
@ k_ra8_glcdc_off_gr2_ab2
GR[1].AB2: graphics V size + pos.
@ k_ra8_glcdc_off_gr2_ab9
GR[1].AB9: chroma-key replace col.
@ k_ra8_glcdc_off_gam0
GAM[0] block base (Red channel).
@ k_ra8_glcdc_off_gr2_mon
GR[1].MON.
@ k_ra8_glcdc_off_gr1_ab6
GR[0].AB6: fade rate / coef.
@ k_ra8_glcdc_off_gr2_saddr
GR[1].FLM2.BASE.
@ k_ra8_glcdc_off_panel_clk
SYSCNT.PANEL_CLK.
@ k_ra8_glcdc_off_gr1_ab1
GR[0].AB1: alpha blend ctrl 1.
@ k_ra8_glcdc_off_sys_stat
SYSCNT.STMON.
@ k_ra8_glcdc_off_bg_vsize
BG.VSIZE: vertical valid size.
@ k_ra8_glcdc_off_out_gamsw
OUT.GAMSW: gamma enable switch.
@ k_ra8_glcdc_off_bg_en
BG.EN: module enable.
@ k_ra8_glcdc_off_bg_mon
BG.MON: status monitor.
@ k_ra8_glcdc_off_out_contrast
OUT.CONTRAST.
@ k_ra8_glcdc_off_gr2_ab1
GR[1].AB1.
@ k_ra8_glcdc_off_gam2
GAM[2] block base (Blue channel).
@ k_ra8_glcdc_off_gr2_clut1
GR2_CLUT1[256] @ 0x0C00.
@ k_ra8_glcdc_off_bg_per
BG.PERI: free-running period.
@ k_ra8_glcdc_off_gr2_ab8
GR[1].AB8: chroma-key key colour.
@ k_ra8_glcdc_off_gr1_saddr
GR[0].FLM2.BASE: framebuffer addr.
@ k_ra8_glcdc_off_gr1_ab7
GR[0].AB7: chroma-key on, def alf.
@ k_ra8_glcdc_off_gr1_ab4
GR[0].AB4: alpha rect V size+pos.
@ k_ra8_glcdc_off_gam1
GAM[1] block base (Green channel).
@ k_ra8_glcdc_off_gr1_ab2
GR[0].AB2: graphics V size + pos.
@ k_ra8_glcdc_off_gr1_mon
GR[0].MON: status monitor.
@ k_ra8_glcdc_off_gr2_clutint
GR[1].CLUTINT.
@ k_ra8_glcdc_off_gr1_line
GR[0].FLM5: datanum + lnnum.
@ k_ra8_glcdc_off_gr1_en
GR[0].VEN: register update ctrl.
@ k_ra8_glcdc_off_gr1_ab5
GR[0].AB5: alpha rect H size+pos.
@ k_ra8_glcdc_off_tcon_de
TCON.DE.
@ k_ra8_glcdc_off_gr2_ab4
GR[1].AB4: alpha rect V size+pos.
@ k_ra8_glcdc_off_gr1_fmt
GR[0].FLM6.FORMAT: pixel format.
@ k_ra8_glcdc_off_tcon_tim
TCON.TIM: reference timing.
@ k_ra8_glcdc_off_gr2_clut0
GR2_CLUT0[256] @ 0x0800.
@ k_ra8_glcdc_off_bg_sync
BG.SYNC: sync position.
@ k_ra8_glcdc_off_gr2_flmrd
GR[1].FLMRD.
@ k_ra8_glcdc_off_out_vlatch
OUT.VLATCH.
@ k_ra8_glcdc_off_gr2_flm1
GR[1].FLM1.
@ k_ra8_glcdc_off_bg_hsize
BG.HSIZE: horizontal valid size.
@ k_ra8_glcdc_off_panel_dtha
OUT.PDTHA: panel dither.
@ k_ra8_glcdc_off_gr2_line
GR[1].FLM5.
@ k_ra8_glcdc_off_out_bright2
OUT.BRIGHT2.
@ k_ra8_glcdc_off_tcon_sthb2
TCON.STHB2.
@ k_ra8_glcdc_off_gr2_en
GR[1].VEN.
@ k_ra8_glcdc_off_tcon_stha2
TCON.STHA2.
@ k_ra8_glcdc_off_sys_clr
SYSCNT.STCLR.
@ k_ra8_glcdc_off_tcon_stvb2
TCON.STVB2.
@ k_ra8_glcdc_off_gr1_clutint
GR[0].CLUTINT: CLUT swap + line.
@ k_ra8_glcdc_off_gr1_clut1
GR1_CLUT1[256] @ 0x0400.
@ k_ra8_glcdc_off_gr2_fmt
GR[1].FLM6.FORMAT.
@ k_ra8_glcdc_off_gr2_size
GR[1].AB3: graphics H size + pos.
@ k_ra8_glcdc_off_gr2_base
GR[1].BASE.
@ k_ra8_glcdc_off_gr1_ab8
GR[0].AB8: chroma-key key colour.
@ k_ra8_glcdc_off_gr1_size
GR[0].AB3: graphics H size + pos.
@ k_ra8_glcdc_off_sys_cfg
SYSCNT.DTCTEN (state detection).
@ k_ra8_glcdc_off_sys_intr
SYSCNT.INTEN.
@ k_ra8_glcdc_off_gr1_ab9
GR[0].AB9: chroma-key replace col.
@ k_ra8_glcdc_off_tcon_stvb1
TCON.STVB1.
@ k_ra8_glcdc_off_out_bright1
OUT.BRIGHT1.
@ k_ra8_glcdc_off_gr1_clut0
GR1_CLUT0[256] @ 0x0000.
@ k_ra8_glcdc_off_tcon_stva2
TCON.STVA2.
@ k_ra8_glcdc_off_gr1_flmrd
GR[0].FLMRD: frame buffer read en.
@ k_ra8_glcdc_off_out_clkphase
OUT.CLKPHASE.
@ k_ra8_glcdc_off_bg_bgc
BG.BGC: background colour.
@ k_ra8_glcdc_off_tcon_stva1
TCON.STVA1.
@ k_ra8_glcdc_off_gr2_ab7
GR[1].AB7: chroma-key on, def alf.
@ k_ra8_glcdc_off_gr1_flm3
GR[0].FLM3: line offset bytes.
@ k_ra8_glcdc_off_tcon_sthb1
TCON.STHB1.
@ k_ra8_glcdc_off_gr2_flm3
GR[1].FLM3.
static volatile uint32_t * ra8_glcdc_reg32(ra8_glcdc_block_off_t offset)
Pointer to a 32-bit register inside the GLCDC block.
ra8_glcdc_gamsw_bits_t
Bit mask for the output-stage gamma-switch register (GAMSW).
@ k_ra8_glcdc_gamsw_gamon
GAMSW.GAMON: global gamma enable.
ra8_display_addr_t
@ k_ra8_mipi_csi_base_addr
RA8 mipi csi base address.
@ k_ra8_mipi_phy_base_addr
RA8 mipi PHY base address.
@ k_ra8_ceu_base_addr
RA8 CEU base address.
@ k_ra8_glcdc_base_addr
RA8 GLCDC base address.
@ k_ra8_mipi_dsi_base_addr
RA8 mipi dsi base address.
ra8_glcdc_pixel_fmt_t
Pixel format codes written to GRn_FLM6.FORMAT[30:28].
@ k_ra8_glcdc_fmt_clut4
4-bit CLUT.
@ k_ra8_glcdc_fmt_clut1
1-bit CLUT.
@ k_ra8_glcdc_fmt_rgb888
24-bit RGB (packed).
@ k_ra8_glcdc_fmt_argb1555
16-bit ARGB1555.
@ k_ra8_glcdc_fmt_clut8
8-bit CLUT.
@ k_ra8_glcdc_fmt_argb8888
32-bit ARGB.
@ k_ra8_glcdc_fmt_rgb565
16-bit RGB565.
@ k_ra8_glcdc_fmt_argb4444
16-bit ARGB4444.
ra8_glcdc_gam_field_t
Shift and mask constants for the gamma LUT and AREA register fields.
@ k_ra8_glcdc_gam_area_th_h_shift
AREA TH1 bit-shift.
@ k_ra8_glcdc_gam_area_th_l_mask
AREA TH2 10-bit mask.
@ k_ra8_glcdc_gam_lut_gain_l_mask
LUT GAIN1 11-bit mask.
@ k_ra8_glcdc_gam_lut_gain_h_shift
LUT GAIN0 bit-shift.
ra8_glcdc_gam_size_t
Byte size of one channel's GAM register block (LUT[8] + AREA[8]).
@ k_ra8_glcdc_gam_block_bytes
sizeof(ra8_glcdc_gam_t).
ra8_glcdc_ek_timing_t
@ k_ra8_glcdc_ek_v_front
RA8 GLCDC ek v front.
@ k_ra8_glcdc_ek_v_sync
RA8 GLCDC ek v sync.
@ k_ra8_glcdc_ek_v_back
RA8 GLCDC ek v back.
@ k_ra8_glcdc_ek_v_active
RA8 GLCDC ek v active.
@ k_ra8_glcdc_ek_h_sync
RA8 GLCDC ek h sync.
@ k_ra8_glcdc_ek_h_back
RA8 GLCDC ek h back.
@ k_ra8_glcdc_ek_h_active
RA8 GLCDC ek h active.
@ k_ra8_glcdc_ek_h_front
RA8 GLCDC ek h front.
Per-channel gamma correction register block (HUM Ch 63 p 3789-3793).
volatile uint32_t LUT[8]
Gain-pair registers LUT[0..7].
volatile uint32_t AREA[8]
Threshold-pair registers AREA[0..7].