XCORE SDK
XCORE Software Development Kit
Public Member Functions | Static Public Attributes | Protected Attributes | List of all members
mic_array::PdmRxService< BLOCK_SIZE, SubType > Class Template Reference

Used to collect PDM sample data from a port. More...

#include <PdmRx.hpp>

Public Member Functions

void SetPort (port_t p_pdm_mics)
 Set the port from which to collect PDM samples.
 
void ProcessNext ()
 Perform a port read and if a new block has completed, signal.
 
void ThreadEntry ()
 Entry point for PDM processing thread. More...
 

Static Public Attributes

static constexpr unsigned BlockSize = BLOCK_SIZE
 Number of words of PDM data per block.
 

Protected Attributes

port_t p_pdm_mics
 Port from which to collect PDM data.
 
unsigned phase = BLOCK_SIZE
 Number of words left to capture for the current block.
 
uint32_t block_data [2][BLOCK_SIZE]
 Buffers for PDM data blocks.
 
uint32_t * blocks [2] = {&block_data[0][0], &block_data[1][0]}
 PDM block redirection pointers. More...
 

Detailed Description

template<unsigned BLOCK_SIZE, class SubType>
class mic_array::PdmRxService< BLOCK_SIZE, SubType >

Used to collect PDM sample data from a port.

This class is used to collect blocks of PDM data from a port and send the data to a decimator for further processing.

PdmRxService is a base class using CRTP. Subclasses extend PdmRxService providing themselves as the template parameter SubType.

This base class provides the logic for aggregating PDM data taken from a port into blocks, and a subclass is required to provide methods SubType::ReadPort() and SubType::SendBlock().

SubType::ReadPort() is responsible for reading 1 word of data from p_pdm_mics.

SubType::SendBlock() is provided a block of PDM data as a pointer and is responsible for signaling that to the subsequent processing stage. (Called from PdmRx thread or ISR)

SubType::GetPdmBlock() (called from MicArray thread) is responsible for receiving a block of PDM data from SubType::SendBlock() as a pointer, deinterleaving the buffer contents, and returning a pointer to the PDM data in the format expected by the mic array unit's decimator component.

Template Parameters
BLOCK_SIZENumber of words of PDM data per block.
SubTypeSubclass of PdmRxService

Member Function Documentation

◆ ThreadEntry()

template<unsigned BLOCK_SIZE, class SubType >
void mic_array::PdmRxService< BLOCK_SIZE, SubType >::ThreadEntry

Entry point for PDM processing thread.

This function loops forever, calling ProcessNext() with each iteration.

Member Data Documentation

◆ blocks

template<unsigned BLOCK_SIZE, class SubType >
uint32_t* mic_array::PdmRxService< BLOCK_SIZE, SubType >::blocks[2] = {&block_data[0][0], &block_data[1][0]}
protected

PDM block redirection pointers.

Each time a new block of data is ready, a double buffer pointer swap is performed and blocks[1] is passed to SubType::SendBlock() so that it can be signaled to the next processing stage.


The documentation for this class was generated from the following file: