ra8-firmware 0.1.0
Bare-metal firmware for the Renesas RA8 family (RA8D2 / RA8P1)
Loading...
Searching...
No Matches
ra8_pdm.h
Go to the documentation of this file.
1
36
37#pragma once
38
39#ifdef __cplusplus
40extern "C" {
41#endif
42
43#include <stdint.h>
44
45#include "ra8_err.h"
46
62
76
93typedef struct {
94 uint8_t sinc_order;
95 uint8_t clock_div;
96 uint8_t sinc_dec;
97 uint8_t sinc_range;
98 uint8_t data_shift;
99 uint8_t edge;
100 uint8_t hpf_shift;
101 uint8_t cf_shift;
102 uint8_t lpf_shift;
103 uint8_t rx_threshold;
104 uint16_t hpf_s0;
105 uint16_t hpf_k1;
108 uint16_t lpf_h0;
111
123typedef void (*ra8_pdm_data_callback_t)(void* ctx, const int32_t* samples, uint32_t count);
124
145[[nodiscard]] ra8_err_t ra8_pdm_init(void);
146
162[[nodiscard]] ra8_err_t ra8_pdm_deinit(void);
163
189[[nodiscard]] ra8_err_t ra8_pdm_configure(uint8_t ch, const ra8_pdm_channel_cfg_t* cfg);
190
214[[nodiscard]] ra8_err_t ra8_pdm_start(uint8_t ch);
215
239[[nodiscard]] ra8_err_t ra8_pdm_read_enable(uint8_t ch);
240
268[[nodiscard]] ra8_err_t ra8_pdm_read(uint8_t ch, int32_t* out, uint32_t max, uint32_t* out_count);
269
287[[nodiscard]] ra8_err_t
288ra8_pdm_stream_enable(uint8_t ch, ra8_pdm_data_callback_t callback, void* ctx, uint8_t priority);
289
303[[nodiscard]] ra8_err_t ra8_pdm_stream_disable(uint8_t ch);
304
328[[nodiscard]] ra8_err_t ra8_pdm_stop(uint8_t ch);
329
330#ifdef __cplusplus
331}
332#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_pdm_stop(uint8_t ch)
Stop a channel and wait for its filter to halt.
Definition ra8_pdm.c:332
void(* ra8_pdm_data_callback_t)(void *ctx, const int32_t *samples, uint32_t count)
PDM FIFO data callback invoked from ICU interrupt context.
Definition ra8_pdm.h:123
ra8_pdm_coeff_count_t
Filter-coefficient array lengths (HUM Ch 49.2.21-49.2.35).
Definition ra8_pdm.h:71
@ k_ra8_pdm_hpf_h_count
High-pass filter h(0..1) coefficients.
Definition ra8_pdm.h:72
@ k_ra8_pdm_comp_h_count
Compensation filter h(0..10) coefficients.
Definition ra8_pdm.h:73
@ k_ra8_pdm_lpf_h1_count
Low-pass (half-band) h1(0..19) coefficients.
Definition ra8_pdm.h:74
ra8_err_t ra8_pdm_init(void)
Release the PDM-IF module stop and reset its common bank.
Definition ra8_pdm.c:211
ra8_err_t ra8_pdm_read_enable(uint8_t ch)
Clear status, enable data read and prime the receive FIFO.
Definition ra8_pdm.c:254
ra8_err_t ra8_pdm_configure(uint8_t ch, const ra8_pdm_channel_cfg_t *cfg)
Program a channel's mode, decimation and filter coefficients.
Definition ra8_pdm.c:233
ra8_err_t ra8_pdm_stream_enable(uint8_t ch, ra8_pdm_data_callback_t callback, void *ctx, uint8_t priority)
Enable interrupt-driven FIFO delivery for one running channel.
Definition ra8_pdm.c:294
ra8_pdm_channel_t
PDM-IF channel selectors.
Definition ra8_pdm.h:56
@ k_ra8_pdm_ch_count
Number of channels (bound).
Definition ra8_pdm.h:60
@ k_ra8_pdm_ch1
Channel 1.
Definition ra8_pdm.h:58
@ k_ra8_pdm_ch0
Channel 0.
Definition ra8_pdm.h:57
@ k_ra8_pdm_ch2
Channel 2 (EK-RA8D2 MEMS mic).
Definition ra8_pdm.h:59
ra8_err_t ra8_pdm_stream_disable(uint8_t ch)
Disable interrupt-driven delivery for one channel.
Definition ra8_pdm.c:316
ra8_err_t ra8_pdm_start(uint8_t ch)
Activate a configured channel's filter (start trigger).
Definition ra8_pdm.c:246
ra8_err_t ra8_pdm_deinit(void)
Put the PDM-IF block back into module stop.
Definition ra8_pdm.c:225
ra8_err_t ra8_pdm_read(uint8_t ch, int32_t *out, uint32_t max, uint32_t *out_count)
Drain up to max PCM samples from a channel's FIFO.
Definition ra8_pdm.c:271
One PDM channel's mode + filter configuration.
Definition ra8_pdm.h:93
uint16_t lpf_h0
Low-pass filter coefficient h0.
Definition ra8_pdm.h:108
uint16_t hpf_h[k_ra8_pdm_hpf_h_count]
High-pass filter h(0..1).
Definition ra8_pdm.h:106
uint16_t comp_h[k_ra8_pdm_comp_h_count]
Compensation filter h(0..10).
Definition ra8_pdm.h:107
uint16_t lpf_h1[k_ra8_pdm_lpf_h1_count]
Low-pass filter h1(0..19).
Definition ra8_pdm.h:109
uint8_t hpf_shift
High-pass input shift (PDMDSR.HFIS[1:0]).
Definition ra8_pdm.h:100
uint8_t rx_threshold
Data reception threshold code (PDDBCR.DATRITHR).
Definition ra8_pdm.h:103
uint16_t hpf_k1
High-pass filter coefficient k(1).
Definition ra8_pdm.h:105
uint8_t sinc_order
Sinc filter order 1..4 (PDMDSR.SFMD).
Definition ra8_pdm.h:94
uint8_t data_shift
Data-buffer input shift (PDMDSR.DBIS[3:0]).
Definition ra8_pdm.h:98
uint8_t clock_div
PDM_CLKn divider code (PDSFCR.CKDIV[3:0]).
Definition ra8_pdm.h:95
uint8_t lpf_shift
Low-pass input shift (PDMDSR.LFIS[1:0]).
Definition ra8_pdm.h:102
uint8_t cf_shift
Compensation input shift (PDMDSR.CFIS[1:0]).
Definition ra8_pdm.h:101
uint8_t sinc_dec
Sinc decimation ratio - 1 (PDSFCR.SINCDEC[7:0]).
Definition ra8_pdm.h:96
uint8_t sinc_range
Sinc output clip range (PDSFCR.SINCRNG[4:0]).
Definition ra8_pdm.h:97
uint8_t edge
0: rise-edge ch n; 1: fall-edge ch n-1 (INPSEL).
Definition ra8_pdm.h:99
uint16_t hpf_s0
High-pass filter coefficient s(0).
Definition ra8_pdm.h:104