nRF5 SDK v14.2.0
Macros | Typedefs | Enumerations | Functions

Hardware abstraction layer for accessing the pulse density modulation (PDM) peripheral. More...

Macros

#define NRF_PDM_GAIN_MINIMUM   0x00
 
#define NRF_PDM_GAIN_DEFAULT   0x28
 
#define NRF_PDM_GAIN_MAXIMUM   0x50
 

Typedefs

typedef uint8_t nrf_pdm_gain_t
 

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 pdm_task)
 Function for triggering a PDM task. More...
 
__STATIC_INLINE uint32_t nrf_pdm_task_address_get (nrf_pdm_task_t pdm_task)
 Function for getting the address of a PDM task register. More...
 
__STATIC_INLINE bool nrf_pdm_event_check (nrf_pdm_event_t pdm_event)
 Function for getting the state of a PDM event. More...
 
__STATIC_INLINE void nrf_pdm_event_clear (nrf_pdm_event_t pdm_event)
 Function for clearing a PDM event. More...
 
__STATIC_INLINE volatile uint32_t * nrf_pdm_event_address_get (nrf_pdm_event_t pdm_event)
 Function for getting the address of a PDM event register. More...
 
__STATIC_INLINE void nrf_pdm_int_enable (uint32_t pdm_int_mask)
 Function for enabling PDM interrupts. More...
 
__STATIC_INLINE bool nrf_pdm_int_enable_check (uint32_t pdm_int_mask)
 Function for retrieving the state of PDM interrupts. More...
 
__STATIC_INLINE void nrf_pdm_int_disable (uint32_t pdm_int_mask)
 Function for disabling interrupts. 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.
 
__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 ()
 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 ()
 Function for getting the current PDM sample buffer address. More...
 

Detailed Description

Hardware abstraction layer for accessing 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 has started.

NRF_PDM_EVENT_STOPPED 

PDM transfer has 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 ( )

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.

Parameters
[in]p_bufferPointer to the RAM address where samples should be written with EasyDMA.
[in]numNumber of samples to allocate memory for in EasyDMA mode.

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.
__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
trueIf the PDM peripheral is enabled.
falseIf the PDM peripheral is not enabled.
__STATIC_INLINE volatile uint32_t* nrf_pdm_event_address_get ( nrf_pdm_event_t  pdm_event)

Function for getting the address of a PDM event register.

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

Function for getting the state of a PDM event.

Parameters
[in]pdm_eventPDM event.
Returns
State of the specified PDM event.
__STATIC_INLINE void nrf_pdm_event_clear ( nrf_pdm_event_t  pdm_event)

Function for clearing a PDM event.

Parameters
[in]pdm_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  pdm_int_mask)

Function for disabling interrupts.

Parameters
pdm_int_maskInterrupts to disable.
__STATIC_INLINE void nrf_pdm_int_enable ( uint32_t  pdm_int_mask)

Function for enabling PDM interrupts.

Parameters
[in]pdm_int_maskInterrupts to enable.
__STATIC_INLINE bool nrf_pdm_int_enable_check ( uint32_t  pdm_int_mask)

Function for retrieving the state of PDM interrupts.

Parameters
[in]pdm_int_maskInterrupts to check.
Return values
trueIf all specified interrupts are enabled.
falseIf at 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 uint32_t nrf_pdm_task_address_get ( nrf_pdm_task_t  pdm_task)

Function for getting the address of a PDM task register.

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

Function for triggering a PDM task.

Parameters
[in]pdm_taskPDM task.

Documentation feedback | Developer Zone | Subscribe | Updated