ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_vin_api.h
Go to the documentation of this file.
1
26
27#pragma once
28
29#include <stdint.h>
30
31#include "ra8_err.h"
32#include "ra8_vin_regs.h"
33#include "ra8_vin_types.h"
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/* =============================================================================
40 * Lifecycle
41 * =============================================================================
42 */
43
103[[nodiscard]] ra8_err_t ra8_vin_init(const ra8_vin_config_t* cfg);
104
119[[nodiscard]] ra8_err_t ra8_vin_deinit(void);
120
141[[nodiscard]] ra8_err_t ra8_vin_reset(void);
142
143/* =============================================================================
144 * Capture control
145 * =============================================================================
146 */
147
182
209[[nodiscard]] ra8_err_t ra8_vin_capture_disarm(void);
210
211/* =============================================================================
212 * Geometry / pre-clip / scaling
213 * =============================================================================
214 */
215
240[[nodiscard]] ra8_err_t ra8_vin_set_preclip(const ra8_vin_preclip_t* window);
241
268[[nodiscard]] ra8_err_t ra8_vin_set_uds_scale(const ra8_vin_uds_scale_t* scale);
269
292[[nodiscard]] ra8_err_t ra8_vin_set_uds_passband(uint8_t v_bwidth, uint8_t h_bwidth);
293
316[[nodiscard]] ra8_err_t ra8_vin_set_uds_clip(uint16_t v_size, uint16_t h_size);
317
340[[nodiscard]] ra8_err_t ra8_vin_set_uds_ctrl(const ra8_vin_uds_ctrl_t* ctrl);
341
358[[nodiscard]] ra8_err_t ra8_vin_enable_scaling(bool enable);
359
360/* =============================================================================
361 * LUT (10-to-8-bit conversion)
362 * =============================================================================
363 */
364
398[[nodiscard]] ra8_err_t ra8_vin_lut_program(const uint8_t* y_table,
399 const uint8_t* cb_table,
400 const uint8_t* cr_table,
401 bool enable);
402
403/* =============================================================================
404 * Colour-space conversion
405 * =============================================================================
406 */
407
430[[nodiscard]] ra8_err_t ra8_vin_set_yc_to_rgb(const ra8_vin_yc_to_rgb_t* coeffs);
431
457[[nodiscard]] ra8_err_t ra8_vin_set_rgb_to_yc(uint8_t channel, const ra8_vin_rgb_to_yc_chan_t* row);
458
459/* =============================================================================
460 * Dithering / YUV-444 / DMR
461 * =============================================================================
462 */
463
488[[nodiscard]] ra8_err_t ra8_vin_set_dithering(uint8_t mode, bool direction);
489
511[[nodiscard]] ra8_err_t ra8_vin_set_yuv444_mode(uint8_t mode);
512
530[[nodiscard]] ra8_err_t ra8_vin_set_interlace_mode(uint8_t mode);
531
554[[nodiscard]] ra8_err_t ra8_vin_set_data_mode(const ra8_vin_data_mode_t* mode);
555
556/* =============================================================================
557 * CSI-2 / framebuffers
558 * =============================================================================
559 */
560
579[[nodiscard]] ra8_err_t ra8_vin_set_csi_input(const ra8_vin_csi_input_t* input);
580
600
626[[nodiscard]] ra8_err_t ra8_vin_set_framebuffers(uint32_t mb1, uint32_t mb2, uint32_t mb3);
627
645[[nodiscard]] ra8_err_t ra8_vin_set_uv_offset(uint32_t uv_addr);
646
647/* =============================================================================
648 * Status
649 * =============================================================================
650 */
651
669[[nodiscard]] ra8_err_t ra8_vin_get_status(uint32_t* out_mask);
670
691[[nodiscard]] ra8_err_t ra8_vin_clear_status(uint32_t mask);
692
711
729[[nodiscard]] ra8_err_t ra8_vin_get_line_count(uint16_t* out_count);
730
748[[nodiscard]] ra8_err_t ra8_vin_get_active_buffer(uint8_t* out_id);
749
750/* =============================================================================
751 * Interrupt path
752 * =============================================================================
753 */
754
771[[nodiscard]] ra8_err_t ra8_vin_set_interrupt_enable(uint32_t mask);
772
790[[nodiscard]] ra8_err_t ra8_vin_set_scanline_compare(uint16_t line);
791
810[[nodiscard]] ra8_err_t ra8_vin_attach_handler(ra8_vin_event_fn_t fn, void* ctx);
811
831void ra8_vin_dispatch(void);
832
833/* =============================================================================
834 * Power transition
835 * =============================================================================
836 */
837
857[[nodiscard]] ra8_err_t ra8_vin_enter_stop(void);
858
873[[nodiscard]] ra8_err_t ra8_vin_exit_stop(void);
874
875/* =============================================================================
876 * Sweep 17: dynamic capture window + frame-end IRQ
877 * =============================================================================
878 */
879
917[[nodiscard]] ra8_err_t
918ra8_vin_capture_start(void* buf, uint16_t w, uint16_t h, ra8_vin_input_fmt_t format);
919
936[[nodiscard]] ra8_err_t ra8_vin_capture_stop(void);
937
963[[nodiscard]] ra8_err_t ra8_vin_set_window(uint16_t x, uint16_t y, uint16_t w, uint16_t h);
964
988
989#ifdef __cplusplus
990}
991#endif
Error Code Definitions for ra8-firmware.
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
ra8_err_t ra8_vin_set_window(uint16_t x, uint16_t y, uint16_t w, uint16_t h)
Programme a region-of-interest pre-clip window.
Definition ra8_vin.c:964
ra8_err_t ra8_vin_set_data_mode(const ra8_vin_data_mode_t *mode)
Programme the DMR (Data Mode Register).
Definition ra8_vin.c:677
ra8_err_t ra8_vin_set_yc_to_rgb(const ra8_vin_yc_to_rgb_t *coeffs)
Programme the YC -> RGB matrix coefficients (CSCE1..4).
Definition ra8_vin.c:540
ra8_err_t ra8_vin_deinit(void)
Tear down VIN: stop capture, mask interrupts, drop MSTP.
Definition ra8_vin.c:308
void ra8_vin_dispatch(void)
Snapshot INTS, fire callback, then W1C the latched bits.
Definition ra8_vin.c:849
ra8_err_t ra8_vin_init(const ra8_vin_config_t *cfg)
Initialise VIN with the supplied descriptor.
Definition ra8_vin.c:260
ra8_err_t ra8_vin_enable_scaling(bool enable)
Toggle the MC.SCLE main scaling-enable bit.
Definition ra8_vin.c:499
ra8_err_t ra8_vin_set_uds_ctrl(const ra8_vin_uds_ctrl_t *ctrl)
Programme UDS interpolation control (UDS_CTRL).
Definition ra8_vin.c:472
ra8_err_t ra8_vin_set_scanline_compare(uint16_t line)
Programme the SI (Scanline Interrupt) compare register.
Definition ra8_vin.c:831
ra8_err_t ra8_vin_lut_program(const uint8_t *y_table, const uint8_t *cb_table, const uint8_t *cr_table, bool enable)
Programme all 256 entries of the Y / Cb / Cr conversion LUT.
Definition ra8_vin.c:509
ra8_err_t ra8_vin_set_csi_input(const ra8_vin_csi_input_t *input)
Programme CSI_IFMD (virtual channel + data type + extension).
Definition ra8_vin.c:703
ra8_err_t ra8_vin_exit_stop(void)
Re-enable the VIN clock gate after ra8_vin_enter_stop.
Definition ra8_vin.c:888
ra8_err_t ra8_vin_set_preclip(const ra8_vin_preclip_t *window)
Programme the pre-clip window (SLPRC / ELPRC / SPPRC / EPPRC).
Definition ra8_vin.c:407
ra8_err_t ra8_vin_set_interrupt_enable(uint32_t mask)
Update the IE (Interrupt Enable) mask at runtime.
Definition ra8_vin.c:824
ra8_err_t ra8_vin_set_field_detect(const ra8_vin_field_detect_t *detect)
Programme CSIFLD (field detection).
Definition ra8_vin.c:720
ra8_err_t ra8_vin_set_yuv444_mode(uint8_t mode)
Configure the YUV-444 conversion mode (MC.YUV444).
Definition ra8_vin.c:657
ra8_err_t ra8_vin_set_uds_scale(const ra8_vin_uds_scale_t *scale)
Programme the UDS scaling factor (UDS_SCALE).
Definition ra8_vin.c:429
ra8_err_t ra8_vin_enter_stop(void)
Quiesce VIN and disable its module-stop clock gate.
Definition ra8_vin.c:876
ra8_err_t ra8_vin_set_rgb_to_yc(uint8_t channel, const ra8_vin_rgb_to_yc_chan_t *row)
Programme one row of the RGB -> YC matrix.
Definition ra8_vin.c:609
ra8_err_t ra8_vin_capture_arm(ra8_vin_capture_mode_t mode)
Start a capture operation.
Definition ra8_vin.c:342
ra8_err_t ra8_vin_capture_start(void *buf, uint16_t w, uint16_t h, ra8_vin_input_fmt_t format)
Start a single-frame capture into buf with the supplied geometry.
Definition ra8_vin.c:933
ra8_err_t ra8_vin_capture_disarm(void)
Stop the current capture and drain outstanding AXI traffic.
Definition ra8_vin.c:376
ra8_err_t ra8_vin_get_line_count(uint16_t *out_count)
Read the LC (line count) register.
Definition ra8_vin.c:807
ra8_err_t ra8_vin_attach_handler(ra8_vin_event_fn_t fn, void *ctx)
Attach a VIN event callback (shared between status + error IRQs).
Definition ra8_vin.c:841
ra8_err_t ra8_vin_set_framebuffers(uint32_t mb1, uint32_t mb2, uint32_t mb3)
Re-programme MB1 / MB2 / MB3 (ping-pong framebuffers).
Definition ra8_vin.c:741
ra8_err_t ra8_vin_clear_status(uint32_t mask)
Clear write-1-to-clear bits in the INTS register.
Definition ra8_vin.c:783
ra8_err_t ra8_vin_get_active_buffer(uint8_t *out_id)
Return the active framebuffer index from MS.FBS.
Definition ra8_vin.c:815
ra8_err_t ra8_vin_set_uv_offset(uint32_t uv_addr)
Programme UVAOF (UV plane address offset for YC-separated mode).
Definition ra8_vin.c:765
ra8_err_t ra8_vin_attach_frame_handler(ra8_vin_frame_fn_t fn, void *ctx)
Register the frame-end IRQ callback.
Definition ra8_vin.c:983
ra8_err_t ra8_vin_get_status(uint32_t *out_mask)
Snapshot the INTS register.
Definition ra8_vin.c:775
ra8_err_t ra8_vin_capture_stop(void)
Stop the in-flight capture started via ra8_vin_capture_start.
Definition ra8_vin.c:959
ra8_err_t ra8_vin_set_dithering(uint8_t mode, bool direction)
Configure the dithering mode (MC.DC + MC.DC2).
Definition ra8_vin.c:641
ra8_err_t ra8_vin_set_uds_passband(uint8_t v_bwidth, uint8_t h_bwidth)
Programme the UDS pass-band bandwidth (UDS_PASS_BWIDTH).
Definition ra8_vin.c:448
ra8_err_t ra8_vin_set_interlace_mode(uint8_t mode)
Set the interlace mode (MC.IM).
Definition ra8_vin.c:667
ra8_err_t ra8_vin_reset(void)
Issue a soft reset by re-running the MC.ST settle sequence.
Definition ra8_vin.c:330
ra8_err_t ra8_vin_set_uds_clip(uint16_t v_size, uint16_t h_size)
Programme the UDS output clipping (UDS_CLIP_SIZE).
Definition ra8_vin.c:460
ra8_err_t ra8_vin_get_module_status(ra8_vin_module_status_t *out_status)
Decode the MS register into a typed snapshot.
Definition ra8_vin.c:793
Video Input Module (VIN) register layout for the RA8D2.
Video Input Module (VIN) configuration descriptors and types.
void(* ra8_vin_frame_fn_t)(void *ctx, void *buf, uint32_t len)
Frame-end callback registered via ra8_vin_attach_frame_handler.
ra8_vin_capture_mode_t
Single frame vs.
ra8_vin_input_fmt_t
Camera input format for the MC.INF[2:0] field.
void(* ra8_vin_event_fn_t)(void *ctx, uint32_t status_mask)
VIN event callback (frame complete / overflow / VSYNC).
Initial configuration for ra8_vin_init.
CSI_IFMD parameter view.
Decoded view of the DMR (Data Mode) register.
CSIFLD parameter view.
Decoded snapshot of the MS (Module Status) register.
Pre-clip window (SLPRC / ELPRC / SPPRC / EPPRC).
One RGB-to-YC matrix row (Y, Cb, or Cr).
UDS interpolation control bits.
UDS scaling factors for the V and H axes.
Coefficients for the YC -> RGB matrix (CSCEn).