nRF5 SDK v17.1.0
Macros | Typedefs | Enumerations | Functions
PDM HAL

Hardware access layer for managing the Pulse Density Modulation (PDM) peripheral. More...

Macros

#define NRF_PDM_GAIN_MINIMUM   0x00
 Minimum value of PDM gain.
 
#define NRF_PDM_GAIN_DEFAULT   0x28
 Default value of PDM gain.
 
#define NRF_PDM_GAIN_MAXIMUM   0x50
 Maximum value of PDM gain.
 

Typedefs

typedef uint8_t nrf_pdm_gain_t
 PDM gain type.
 

Enumerations

enum  nrf_pdm_task_t {
  NRF_PDM_TASK_START = offsetof(NRF_PDM_Type, TASKS_START),
  NRF_PDM_TASK_STOP = offsetof(NRF_PDM_Type, TASKS_STOP)
}
 PDM tasks. More...
 
enum  nrf_pdm_event_t {
  NRF_PDM_EVENT_STARTED = offsetof(NRF_PDM_Type, EVENTS_STARTED),
  NRF_PDM_EVENT_STOPPED = offsetof(NRF_PDM_Type, EVENTS_STOPPED),
  NRF_PDM_EVENT_END = offsetof(NRF_PDM_Type, EVENTS_END)
}
 PDM events. More...
 
enum  nrf_pdm_int_mask_t {
  NRF_PDM_INT_STARTED = PDM_INTENSET_STARTED_Msk,
  NRF_PDM_INT_STOPPED = PDM_INTENSET_STOPPED_Msk,
  NRF_PDM_INT_END = PDM_INTENSET_END_Msk
}
 PDM interrupt masks. More...
 
enum  nrf_pdm_freq_t {
  NRF_PDM_FREQ_1000K = PDM_PDMCLKCTRL_FREQ_1000K,
  NRF_PDM_FREQ_1032K = PDM_PDMCLKCTRL_FREQ_Default,
  NRF_PDM_FREQ_1067K = PDM_PDMCLKCTRL_FREQ_1067K
}
 PDM clock frequency. More...
 
enum  nrf_pdm_mode_t {
  NRF_PDM_MODE_STEREO = PDM_MODE_OPERATION_Stereo,
  NRF_PDM_MODE_MONO = PDM_MODE_OPERATION_Mono
}
 PDM operation mode. More...
 
enum  nrf_pdm_edge_t {
  NRF_PDM_EDGE_LEFTFALLING = PDM_MODE_EDGE_LeftFalling,
  NRF_PDM_EDGE_LEFTRISING = PDM_MODE_EDGE_LeftRising
}
 PDM sampling mode. More...
 

Functions

__STATIC_INLINE void nrf_pdm_task_trigger (nrf_pdm_task_t task)
 Function for triggering a PDM task. More...
 
__STATIC_INLINE uint32_t nrf_pdm_task_address_get (nrf_pdm_task_t task)
 Function for getting the address of a PDM task register. More...
 
__STATIC_INLINE bool nrf_pdm_event_check (nrf_pdm_event_t event)
 Function for retrieving the state of the PDM event. More...
 
__STATIC_INLINE void nrf_pdm_event_clear (nrf_pdm_event_t event)
 Function for clearing a PDM event. More...
 
__STATIC_INLINE volatile uint32_t * nrf_pdm_event_address_get (nrf_pdm_event_t event)
 Function for getting the address of a PDM event register. More...
 
__STATIC_INLINE void nrf_pdm_int_enable (uint32_t int_mask)
 Function for enabling PDM interrupts. More...
 
__STATIC_INLINE bool nrf_pdm_int_enable_check (uint32_t int_mask)
 Function for retrieving the state of PDM interrupts. More...
 
__STATIC_INLINE void nrf_pdm_int_disable (uint32_t int_mask)
 Function for disabling interrupts. More...
 
__STATIC_INLINE void nrf_pdm_subscribe_set (nrf_pdm_task_t task, uint8_t channel)
 Function for setting the subscribe configuration for a given PDM task. More...
 
__STATIC_INLINE void nrf_pdm_subscribe_clear (nrf_pdm_task_t task)
 Function for clearing the subscribe configuration for a given PDM task. More...
 
__STATIC_INLINE void nrf_pdm_publish_set (nrf_pdm_event_t event, uint8_t channel)
 Function for setting the publish configuration for a given PDM event. More...
 
__STATIC_INLINE void nrf_pdm_publish_clear (nrf_pdm_event_t event)
 Function for clearing the publish configuration for a given PDM event. More...
 
__STATIC_INLINE void nrf_pdm_enable (void)
 Function for enabling the PDM peripheral. More...
 
__STATIC_INLINE void nrf_pdm_disable (void)
 Function for disabling the PDM peripheral.
 
__STATIC_INLINE bool nrf_pdm_enable_check (void)
 Function for checking if the PDM peripheral is enabled. More...
 
__STATIC_INLINE void nrf_pdm_mode_set (nrf_pdm_mode_t pdm_mode, nrf_pdm_edge_t pdm_edge)
 Function for setting the PDM operation mode. More...
 
__STATIC_INLINE void nrf_pdm_mode_get (nrf_pdm_mode_t *p_pdm_mode, nrf_pdm_edge_t *p_pdm_edge)
 Function for getting the PDM operation mode. More...
 
__STATIC_INLINE void nrf_pdm_clock_set (nrf_pdm_freq_t pdm_freq)
 Function for setting the PDM clock frequency. More...
 
__STATIC_INLINE nrf_pdm_freq_t nrf_pdm_clock_get (void)
 Function for getting the PDM clock frequency. More...
 
__STATIC_INLINE void nrf_pdm_psel_connect (uint32_t psel_clk, uint32_t psel_din)
 Function for setting up the PDM pins. More...
 
__STATIC_INLINE void nrf_pdm_psel_disconnect (void)
 Function for disconnecting the PDM pins.
 
__STATIC_INLINE void nrf_pdm_gain_set (nrf_pdm_gain_t gain_l, nrf_pdm_gain_t gain_r)
 Function for setting the PDM gain. More...
 
__STATIC_INLINE void nrf_pdm_gain_get (nrf_pdm_gain_t *p_gain_l, nrf_pdm_gain_t *p_gain_r)
 Function for getting the PDM gain. More...
 
__STATIC_INLINE void nrf_pdm_buffer_set (uint32_t *p_buffer, uint32_t num)
 Function for setting the PDM sample buffer. More...
 
__STATIC_INLINE uint32_t * nrf_pdm_buffer_get (void)
 Function for getting the current PDM sample buffer address. More...
 

Detailed Description

Hardware access layer for managing the Pulse Density Modulation (PDM) peripheral.

Enumeration Type Documentation

PDM sampling mode.

Enumerator
NRF_PDM_EDGE_LEFTFALLING 

Left (or mono) is sampled on falling edge of PDM_CLK.

NRF_PDM_EDGE_LEFTRISING 

Left (or mono) is sampled on rising edge of PDM_CLK.

PDM events.

Enumerator
NRF_PDM_EVENT_STARTED 

PDM transfer is started.

NRF_PDM_EVENT_STOPPED 

PDM transfer is finished.

NRF_PDM_EVENT_END 

The PDM has written the last sample specified by SAMPLE.MAXCNT (or the last sample after a STOP task has been received) to Data RAM.

PDM clock frequency.

Enumerator
NRF_PDM_FREQ_1000K 

PDM_CLK = 1.000 MHz.

NRF_PDM_FREQ_1032K 

PDM_CLK = 1.032 MHz.

NRF_PDM_FREQ_1067K 

PDM_CLK = 1.067 MHz.

PDM interrupt masks.

Enumerator
NRF_PDM_INT_STARTED 

Interrupt on EVENTS_STARTED event.

NRF_PDM_INT_STOPPED 

Interrupt on EVENTS_STOPPED event.

NRF_PDM_INT_END 

Interrupt on EVENTS_END event.

PDM operation mode.

Enumerator
NRF_PDM_MODE_STEREO 

Sample and store one pair (Left + Right) of 16-bit samples per RAM word.

NRF_PDM_MODE_MONO 

Sample and store two successive Left samples (16 bit each) per RAM word.

PDM tasks.

Enumerator
NRF_PDM_TASK_START 

Starts continuous PDM transfer.

NRF_PDM_TASK_STOP 

Stops PDM transfer.

Function Documentation

__STATIC_INLINE uint32_t* nrf_pdm_buffer_get ( void  )

Function for getting the current PDM sample buffer address.

Returns
Pointer to the current sample buffer.
__STATIC_INLINE void nrf_pdm_buffer_set ( uint32_t *  p_buffer,
uint32_t  num 
)

Function for setting the PDM sample buffer.

The amount of allocated RAM depends on the operation mode.

  • For stereo mode: N 32-bit words.
  • For mono mode: Ceil(N/2) 32-bit words.
Parameters
[in]p_bufferPointer to the RAM address where samples are to be written with EasyDMA.
[in]numNumber of samples to allocate memory for in EasyDMA mode.
__STATIC_INLINE nrf_pdm_freq_t nrf_pdm_clock_get ( void  )

Function for getting the PDM clock frequency.

Returns
PDM clock frequency.
__STATIC_INLINE void nrf_pdm_clock_set ( nrf_pdm_freq_t  pdm_freq)

Function for setting the PDM clock frequency.

Parameters
[in]pdm_freqPDM clock frequency.
__STATIC_INLINE void nrf_pdm_enable ( void  )

Function for enabling the PDM peripheral.

The PDM peripheral must be enabled before use.

__STATIC_INLINE bool nrf_pdm_enable_check ( void  )

Function for checking if the PDM peripheral is enabled.

Return values
trueThe PDM peripheral is enabled.
falseThe PDM peripheral is not enabled.
__STATIC_INLINE volatile uint32_t* nrf_pdm_event_address_get ( nrf_pdm_event_t  event)

Function for getting the address of a PDM event register.

Parameters
[in]eventPDM event.
Returns
Address of the specified PDM event.
__STATIC_INLINE bool nrf_pdm_event_check ( nrf_pdm_event_t  event)

Function for retrieving the state of the PDM event.

Parameters
[in]eventEvent to be checked.
Return values
trueThe event has been generated.
falseThe event has not been generated.
__STATIC_INLINE void nrf_pdm_event_clear ( nrf_pdm_event_t  event)

Function for clearing a PDM event.

Parameters
[in]eventPDM event.
__STATIC_INLINE void nrf_pdm_gain_get ( nrf_pdm_gain_t p_gain_l,
nrf_pdm_gain_t p_gain_r 
)

Function for getting the PDM gain.

Parameters
[out]p_gain_lLeft channel gain.
[out]p_gain_rRight channel gain.
__STATIC_INLINE void nrf_pdm_gain_set ( nrf_pdm_gain_t  gain_l,
nrf_pdm_gain_t  gain_r 
)

Function for setting the PDM gain.

Parameters
[in]gain_lLeft channel gain.
[in]gain_rRight channel gain.
__STATIC_INLINE void nrf_pdm_int_disable ( uint32_t  int_mask)

Function for disabling interrupts.

Parameters
[in]int_maskMask of interrupts to be disabled.
__STATIC_INLINE void nrf_pdm_int_enable ( uint32_t  int_mask)

Function for enabling PDM interrupts.

Parameters
[in]int_maskMask of interrupts to be enabled.
__STATIC_INLINE bool nrf_pdm_int_enable_check ( uint32_t  int_mask)

Function for retrieving the state of PDM interrupts.

Parameters
[in]int_maskMask of interrupts to be checked.
Return values
trueAll specified interrupts are enabled.
falseAt least one of the given interrupts is not enabled.
__STATIC_INLINE void nrf_pdm_mode_get ( nrf_pdm_mode_t p_pdm_mode,
nrf_pdm_edge_t p_pdm_edge 
)

Function for getting the PDM operation mode.

Parameters
[out]p_pdm_modePDM operation mode.
[out]p_pdm_edgePDM sampling mode.
__STATIC_INLINE void nrf_pdm_mode_set ( nrf_pdm_mode_t  pdm_mode,
nrf_pdm_edge_t  pdm_edge 
)

Function for setting the PDM operation mode.

Parameters
[in]pdm_modePDM operation mode.
[in]pdm_edgePDM sampling mode.
__STATIC_INLINE void nrf_pdm_psel_connect ( uint32_t  psel_clk,
uint32_t  psel_din 
)

Function for setting up the PDM pins.

Parameters
[in]psel_clkCLK pin number.
[in]psel_dinDIN pin number.
__STATIC_INLINE void nrf_pdm_publish_clear ( nrf_pdm_event_t  event)

Function for clearing the publish configuration for a given PDM event.

Parameters
[in]eventEvent for which to clear the configuration.
__STATIC_INLINE void nrf_pdm_publish_set ( nrf_pdm_event_t  event,
uint8_t  channel 
)

Function for setting the publish configuration for a given PDM event.

Parameters
[in]eventEvent for which to set the configuration.
[in]channelChannel through which to publish the event.
__STATIC_INLINE void nrf_pdm_subscribe_clear ( nrf_pdm_task_t  task)

Function for clearing the subscribe configuration for a given PDM task.

Parameters
[in]taskTask for which to clear the configuration.
__STATIC_INLINE void nrf_pdm_subscribe_set ( nrf_pdm_task_t  task,
uint8_t  channel 
)

Function for setting the subscribe configuration for a given PDM task.

Parameters
[in]taskTask for which to set the configuration.
[in]channelChannel through which to subscribe events.
__STATIC_INLINE uint32_t nrf_pdm_task_address_get ( nrf_pdm_task_t  task)

Function for getting the address of a PDM task register.

Parameters
[in]taskPDM task.
Returns
Address of the specified PDM task.
__STATIC_INLINE void nrf_pdm_task_trigger ( nrf_pdm_task_t  task)

Function for triggering a PDM task.

Parameters
[in]taskPDM task.

Documentation feedback | Developer Zone | Subscribe | Updated