ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
main.c
Go to the documentation of this file.
1
29
30#include <stdint.h>
31
32#include "ra8_attributes.h"
33#include "ra8_board_ek_ra8d2.h"
34#include "ra8_boot_entry.h"
35#include "ra8_cgc.h"
36#include "ra8_err.h"
37#include "ra8_isr.h"
38#include "ra8_mstp.h"
39#include "ra8_ssie.h"
40#include "ra8_time.h"
41
43typedef enum : uint32_t {
44 k_ssie_loop_baud = 115200U,
46
54
56static const uint8_t s_ssie_loop_log_msg[] = "ssie: loop ok\r\n";
57
62static const uint32_t s_ssie_loop_pattern[16] = {
63 0x00000000U,
64 0x30FB0000U,
65 0x5A820000U,
66 0x76410000U,
67 0x7FFF0000U,
68 0x76410000U,
69 0x5A820000U,
70 0x30FB0000U,
71 0x00000000U,
72 0xCF050000U,
73 0xA57E0000U,
74 0x89BF0000U,
75 0x80010000U,
76 0x89BF0000U,
77 0xA57E0000U,
78 0xCF050000U,
79};
80
98{
99 while (1) {
100 __asm__ volatile("wfi");
101 }
102}
103
122{
123 uint32_t cpuclk0_hz = 0U;
124 if (ra8_cgc_init() != k_ra8_ok) {
126 }
129 }
130 if (ra8_mstp_init() != k_ra8_ok) {
132 }
133 if (ra8_time_init(cpuclk0_hz) != k_ra8_ok) {
135 }
138 }
139}
140
166{
167 const ra8_ssie_cfg_t cfg = {
169 .format = k_ra8_ssie_format_i2s,
170 .data_word = k_ra8_ssie_dwl_16,
171 .system_word = k_ra8_ssie_swl_32,
172 .bclk_div = k_ra8_ssie_bclk_div_32,
173 .use_gpt_clk = false,
174 .long_frame = true,
175 .bckp_rising = false,
176 .lrckp_low = false,
177 .spdp_high = false,
178 .byte_swap = false,
179 .lr_continue = false,
180 .bck_idle_stop = false,
181 .enable_aucke = true,
182 .tx_threshold = (uint8_t)k_ssie_loop_tx_threshold,
183 .rx_threshold = (uint8_t)k_ssie_loop_rx_threshold,
184 };
185 ra8_err_t err = ra8_ssie_init((uint8_t)k_ssie_loop_channel, &cfg);
186 if (err != k_ra8_ok) {
187 return err;
188 }
190 if (err != k_ra8_ok) {
191 return err;
192 }
193 for (uint8_t i = 0U; i < (uint8_t)k_ssie_loop_sample_count; i++) {
195 if (err != k_ra8_ok) {
196 return err;
197 }
198 }
199 return k_ra8_ok;
200}
201
202void main(void)
203{
206
209 }
211 (size_t)(sizeof(s_ssie_loop_log_msg) - 1U)) != k_ra8_ok) {
213 }
214 (void)ra8_ssie_stop((uint8_t)k_ssie_loop_channel);
215 (void)ra8_ssie_deinit((uint8_t)k_ssie_loop_channel);
216
217 while (1) {
218 __asm__ volatile("wfi");
219 }
220}
void main(void)
Secure fallback main entry point.
Definition main.c:37
static const uint32_t s_ssie_loop_pattern[16]
16-entry quantised sine pattern (Q15, two periods) used as the TX-side audio test vector.
Definition main.c:62
static void internal_ssie_loop_panic_halt(void)
Park the processor after an unrecoverable SSIE demo failure.
Definition main.c:97
static const uint8_t s_ssie_loop_log_msg[]
UART diagnostic emitted after a complete SSIE pattern transfer.
Definition main.c:56
static void internal_ssie_loop_setup_or_halt(void)
Initialize clocks, module-stop control, timing, and console.
Definition main.c:121
static ra8_err_t internal_ssie_loop_run(void)
Bring SSIE0 up in controller I2S mode and stream the test pattern.
Definition main.c:165
ssie_loop_chan_t
SSIE channel + FIFO watermarks.
Definition main.c:48
@ k_ssie_loop_channel
Ssie loop channel.
Definition main.c:49
@ k_ssie_loop_sample_count
Ssie loop sample count.
Definition main.c:52
@ k_ssie_loop_tx_threshold
Ssie loop TX threshold.
Definition main.c:50
@ k_ssie_loop_rx_threshold
Ssie loop RX threshold.
Definition main.c:51
ssie_loop_const_t
Demo tunables.
Definition main.c:43
@ k_ssie_loop_baud
Ssie loop baud.
Definition main.c:44
Annotation-attribute framework macros for ra8-firmware.
#define RA8_INTERNAL
Marker that a function is intended to be static (file-local).
Board-support layer for the Renesas EK-RA8D2 v1 evaluation kit.
ra8_err_t ra8_board_uart_console_write(const uint8_t *data, size_t len)
Polled blocking write to the J-Link OB VCOM console.
ra8_err_t ra8_board_uart_console_init(uint32_t baud)
Configure SCI8 + PD02/PD03 as the debug-console UART.
Boot entry points shared between a vector table and its startup code.
High-level Clock Generation Circuit driver.
ra8_err_t ra8_cgc_get_clock_hz(ra8_clock_id_t id, uint32_t *out_hz)
Query the current frequency of a clock-tree domain.
Definition ra8_cgc.c:132
@ k_ra8_clock_id_cpuclk0
Cortex-M85 CPUCLK0.
Definition ra8_cgc.h:70
ra8_err_t ra8_cgc_init(void)
Configure the clock tree to a safe default.
Definition ra8_cgc.c:727
Error Code Definitions for ra8-firmware.
@ k_ra8_ok
Success – operation completed with all postconditions satisfied.
Definition ra8_err.h:119
ra8_err_codes_t ra8_err_t
Canonical error-return type used by every ra8-firmware API.
Definition ra8_err.h:546
NVIC + ICU IELSR allocator.
void ra8_isr_globals_enable(void)
Globally enable maskable interrupts (PRIMASK = 0).
Definition ra8_isr.c:439
Ref-counted Module Stop Control wrapper for the RA8D2.
ra8_err_t ra8_mstp_init(void)
Re-establish the ra8_mstp ref-count table from current hardware state.
Definition ra8_mstp.c:291
Serial Sound Interface Enhanced (SSIE / I2S audio) driver.
ra8_err_t ra8_ssie_init(uint8_t channel, const ra8_ssie_cfg_t *cfg)
Initialise an SSIE channel for I2S / TDM / monaural transfer.
Definition ra8_ssie.c:610
@ k_ra8_ssie_format_i2s
I2S, 2 channels per frame.
Definition ra8_ssie.h:128
@ k_ra8_ssie_swl_32
32-bit system word.
Definition ra8_ssie.h:173
ra8_err_t ra8_ssie_write_sample(uint8_t channel, uint32_t sample)
Push one 32-bit sample into the transmit FIFO.
Definition ra8_ssie.c:771
@ k_ra8_ssie_bclk_div_32
AUDIO_MCK / 32.
Definition ra8_ssie.h:195
@ k_ra8_ssie_dir_tx_rx
Full duplex (TEN | REN).
Definition ra8_ssie.h:212
ra8_err_t ra8_ssie_deinit(uint8_t channel)
Tear down an SSIE channel and gate its clock.
Definition ra8_ssie.c:638
ra8_err_t ra8_ssie_stop(uint8_t channel)
Disable transmission and reception.
Definition ra8_ssie.c:697
@ k_ra8_ssie_dwl_16
16-bit data word.
Definition ra8_ssie.h:153
ra8_err_t ra8_ssie_start(uint8_t channel, ra8_ssie_dir_t dir)
Enable transmission, reception, or full duplex.
Definition ra8_ssie.c:656
@ k_ra8_ssie_role_controller
Bit clock + LR clock are outputs.
Definition ra8_ssie.h:105
SysTick-based tick counter, delay and timestamp helpers.
ra8_err_t ra8_time_init(uint32_t cpu_hz)
Initialise SysTick for a 1 kHz tick interrupt.
Definition ra8_time.c:59
Configuration descriptor for ra8_ssie_init.
Definition ra8_ssie.h:246