PDM — Pulse density modulation interface

The pulse density modulation (PDM) peripheral enables input of pulse density modulated signals from external audio interfaces, such as digital microphones. PDM generates the PDM clock and supports single-channel or dual-channel (left and right) data input. Data is transferred directly to RAM buffers using EasyDMA.

The main features of PDM are the following:

The following figure shows the interaction between the PDM interface and up to two digital microphones. EasyDMA reduces the real-time requirements for controlling the PDM target from a low priority CPU execution context. PDM has the necessary digital filter elements to produce pulse code modulation (PCM) samples and allows continuous audio streaming.

Figure 1. PDM module
PDM module

Master clock generator

The PDM clock frequency is adjusted through the PRESCALER register in the master clock. The master clock generator does not add jitter to the selected HFCLK source. It is recommended (but not mandatory) to use the crystal as HFCLK source.

The PDM frequency can be adjusted by using the PRESCALER register, even while the clock generator is running. To select the correct value for PRESCALER, use the following equation:
  • CLK=PCLK32M/PRESCALER when using PCLK32M
  • CLK=ACLK/PRESCALER when using a second CLK source
Note: Depending on the product, ACLK can be connected to different clock sources. For example, ACKL can be connected to a PLL generating a 24 MHz clock.
Table 1. Configuration examples
Requested PDM frequency fpdm [Hz]fsource [Hz]RATIOPRESCALERActual PDM frequency factual [Hz]Sample frequency [Hz]Error [%]
102400032000000 (PCLK32M)64311032258161290.8
128000032000000 (PCLK32M)80251280000160000
80000032000000 (PCLK32M)5040800000160000.0
102400024000000 (ACLK)64231043478163041.9
128000024000000 (ACLK)8019126315715789-1.31
80000024000000 (ACLK)5030800000160000.0

Module operation

By default, bits from the left PDM microphone are sampled on PDM_CLK falling edge, and bits for the right are sampled on the rising edge of PDM_CLK, resulting in two bitstreams. Each bitstream is fed into a digital filter which converts the PDM stream into 16-bit PCM samples, then filters and down-samples them to reach the appropriate sample rate.

The EDGE field in the MODE register allows swapping left and right channels, so that left will be sampled on rising edge, and right on falling.

The PDM module uses EasyDMA to store the samples coming out from the filters into one buffer in RAM. Depending on the mode chosen in the OPERATION field in the MODE register, memory either contains alternating left and right 16-bit samples (Stereo), or only a left (or only right, depending on the value of the EDGE field) 16-bit samples (Mono). To ensure continuous PDM sampling, it is up to the application to update the EasyDMA destination address pointer as the previous buffer is filled.

The continuous transfer can be started or stopped by sending the START and STOP tasks. STOP becomes effective after the current frame has finished transferring, which will generate the STOPPED event. The STOPPED event indicates that all activity in the module is finished, and that the data is available in RAM (EasyDMA has finished transferring as well). Attempting to restart before receiving the STOPPED event may result in unpredictable behavior.

Soft Gain/Mute

A short description of the Gain, Mute, and Soft Gain/Mute functionality is provided below.

Gain

The gain is configurable in the range [-20, 20] dB, using the following registers:
  • GAINL – left channel, in 0.5 dB steps
  • GAINR – right channel, in 0.5 dB steps
  • FILTER.CTRL.GAINADD0P25 – additional gain, one optional +0.25 dB step that applies to both channels

Custom oversampling rates and CIC filter gain compensation

PDM supports gain compensation, for the selected decimation/oversamling ratio (OSR).

The decimation ratio is set in RATIO, as either one of the listed ratios, or the special value Custom. When RATIO=Custom, the actual decimation rate is configured using the register FILTER.CTRL.DECRATIO. When using custom decimation ratios, configure register FILTER.CTRL.CICFILTERMSBCUSTOM to match FILTER.CTRL.DECRATIO.

PDM uses partial gain compensation towards the closest upper power of 2. For the fixed OSR ratios, compensation gain is fixed and pre-calculated in the design. However, when using custom oversampling ratios, the gain compensation must be calculated and configured.

To calculate the additional compensated gain for Custom OSR ratios, please follow the steps below:
  1. Calculate the CIC filter gain:

    gainCIC = OSR5

    where OSR is the oversampling ratio and the CIC filter order is 5.

  2. Determine the closest upper power of 2:

    closePow2 = floor(log2(gainCIC)) + 1

  3. Calculate the required gain compensation:

    gainComp = -20 × log10(gainCIC / 2closePow2) dB

  4. Configure the compensation registers:
    Note: These registers are only active when RATIO = Custom (Custom decimation ratio mode).

Mute

The Mute function is a specific case of the Gain function, where the gain coefficient is set to 0.

This function is controlled using the FILTER.SOFTMUTE register.

Soft Gain/Mute

The Soft Gain/Mute provides the possibility to gradually change the gain setting, to avoid a sudden gain change which may lead to audible clicks.

The Soft Gain/Mute function is controlled using the registers FILTER.SOFTCYCLES (the number of soft cycles at the baseband frequency). If FILTER.SOFTCYCLES is set to Custom, then the actual number of softcycles used is configured using the register FILTER.CTRL.SOFTCYCLES (using a multiplication factor of 32).

Gain Range

The desired gain range is [-20, 20]dB with 0.5 dB steps, with the option to improve gain resolution to 0.25 dB steps.

Decimation filter

In order to convert the incoming data stream into PCM audio samples, a decimation filter is included in the PDM peripheral.

The filter input is a two-channel PDM serial stream (with left channel on clock high, right channel on clock low). Output consists of two 16-bit PCM samples at a sample rate lower than the PDM clock rate and a ratio defined by the RATIO register.

A digital volume control is implemented within the filter stage of each channel. It can attenuate or amplify the output samples in a range of ±20 dB of the default (reset) setting and is defined by GPDM,default = 0 dB. The gain is controlled by the GAINL and GAINR registers. As shown in #concept_eqb_fw2_yr__section_vqt_d1g_xcc, depending on OSR value, internal compensation is added for fixed predefined OSR values and a programmable one is available for custom OSR values.

EasyDMA

Samples are written directly to RAM, meaning EasyDMA must be configured appropriately.

The address pointer for the EasyDMA channel is set in the SAMPLE.PTR register. If the destination address set in SAMPLE.PTR is not pointing to the Data RAM region, an EasyDMA transfer may result in a HardFault or RAM corruption. See Memory for more information about memory regions.

Note: The value programmed in SAMPLE.PTR register must be 32-bit aligned.

DMA transfer supports Stereo (left and right 16-bit samples) and Mono (left only) data transfer as configured in the OPERATION field of the MODE register. The samples are stored as little endian.

Table 2. DMA sample storage
MODE.OPERATIONBits per sampleResult stored per RAM wordPhysical RAM allocated (32-bit words)Result boundary indexes in RAMNote
Stereo32 (2x16)L+Rceil(SAMPLE.MAXCNT/2)

R0=[31:16]

L0=[15:0]

Default
Mono162xLceil(SAMPLE.MAXCNT/2)

L1=[31:16]

L0=[15:0]

The destination buffer in RAM consists of one block, where the size of the block is set in the SAMPLE.MAXCNT register. The sample format is number of bytes used by the samples that will be stored in the memory. The physical RAM allocated is always the following:

(RAM allocation, in bytes)=SAMPLE.MAXCNT * 2;

Sample mapping depends on MODE.OPERATION.

If OPERATION=Stereo, RAM will contain a succession of left and right samples.

If OPERATION=Mono, RAM will contain a succession of left only samples.

For a given value of SAMPLE.MAXCNT, the buffer in RAM can contain half the stereo sampling time as compared to the mono sampling time.

The PDM acquisition can be started by the START task, after the SAMPLE.PTR and SAMPLE.MAXCNT registers have been written. When PDM starts, it will take some time (tPDM,DATA) for the filters to generate valid data. Transients from the PDM microphone itself may also occur. The first few samples (typically around 50) can contain invalid values or transients. It is advised to discard the first few samples after a PDM start.

As soon as the STARTED event is received, the firmware can write the next SAMPLE.PTR value (this register is double-buffered), to ensure continuous operation.

When the buffer in RAM is full of samples, an END event is triggered. The firmware can start processing the data in the buffer. At the same time, PDM starts acquiring data into the new buffer pointed to by SAMPLE.PTR. It sends a new STARTED event, so that the firmware can update SAMPLE.PTR to the next buffer address.

Hardware example

PDM can be configured with a single microphone (mono), or with two microphones.

When a single microphone is used, connect the microphone clock to CLK, and data to DIN. The following figures show a single PDM microphone wired as left.

Figure 2. Left wired microphone

The following figures show a single PDM microphone wired as right.

Figure 3. Right wired microphone

A single microphone (mono) configuration, depending on the microphone’s implementation, either the left or the right channel (sampled at falling or rising CLK edge respectively) will contain reliable data.

If two microphones are used, one of them has to be set as left, the other as right (L/R pin tied high or to GND on the respective microphone). It is strongly recommended to use two identical microphones so their timing in left and right operations match.

Figure 4. Example of two PDM microphones

Pin configuration

The CLK and DIN signals assigned to the PDM peripheral are mapped to physical pins according to the configuration specified in the PSEL.CLK and PSEL.DIN registers respectively. If the CONNECT field in any PSEL register is set to Disconnected, the associated PDM signal will not be connected to the required physical pins and will not operate properly.

The PSEL.CLK and PSEL.DIN registers and their configurations are only used when PDM is enabled, and retained while the device is in System ON mode. See POWER — Power control for more information about power modes. When the peripheral is disabled, the pins behave as regular GPIOs, and use the configuration in their respective OUT bit field and PIN_CNF[n] register.

To ensure correct behavior in the PDM module, the pins used by the PDM module must be configured in the GPIO peripheral as described in GPIO configuration before enabling peripheral before enabling the PDM module. This is to ensure that the pins used by the PDM module are driven correctly if the PDM module itself is temporarily disabled or the device temporarily enters System OFF. This configuration must be retained in the GPIO for the selected I/Os as long as the PDM module is supposed to be connected to an external PDM circuit.

Only one peripheral can be assigned to drive a particular GPIO pin at a time. Failing to do so may result in unpredictable behavior.

Table 3. GPIO configuration before enabling peripheral
PDM signalPDM pinDirectionOutput valueComment
CLKAs specified in PSEL.CLKOutput0
DINAs specified in PSEL.DINInputNot applicable

Registers

Instances

InstanceDomainBase addressTrustZoneSplit accessDescription
MapAttDMA

PDM20 : S
PDM20 : NS

GLOBAL

0x500D0000
0x400D0000

USSSANo

Pulse density modulation (digital microphone) interface PDM20

PDM21 : S
PDM21 : NS

GLOBAL

0x500D1000
0x400D1000

USSSANo

Pulse density modulation (digital microphone) interface PDM21

Configuration

InstanceDomainConfiguration

PDM20 : S
PDM20 : NS

GLOBAL

Use GPIO port P1 or P3

ACLK is the fixed 24 MHz clock PCLK24M

PCLK is the fixed 32 MHz clock PCLK32M

Supports 8, 16, 32, 48 kHz sample rate.

CURRENTAMOUNT register included.

PDM21 : S
PDM21 : NS

GLOBAL

Use GPIO port P1 or P3

ACLK is the fixed 24 MHz clock PCLK24M

PCLK is the fixed 32 MHz clock PCLK32M

Supports 8, 16, 32, 48 kHz sample rate.

CURRENTAMOUNT register included.

Register overview

RegisterOffsetTZDescription
TASKS_START0x000

Starts continuous PDM transfer

TASKS_STOP0x004

Stops PDM transfer

SUBSCRIBE_START0x080

Subscribe configuration for task START

SUBSCRIBE_STOP0x084

Subscribe configuration for task STOP

EVENTS_STARTED0x100

PDM transfer has started

EVENTS_STOPPED0x104

PDM transfer has finished

EVENTS_END0x108

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

EVENTS_DMA.BUSERROR0x110

This event is generated if an error occurs during the bus transfer.

PUBLISH_STARTED0x180

Publish configuration for event STARTED

PUBLISH_STOPPED0x184

Publish configuration for event STOPPED

PUBLISH_END0x188

Publish configuration for event END

PUBLISH_DMA.BUSERROR0x190

Publish configuration for event DMA.BUSERROR

INTEN0x300

Enable or disable interrupt

INTENSET0x304

Enable interrupt

INTENCLR0x308

Disable interrupt

INTPEND0x30C

Pending interrupts

ENABLE0x500

PDM module enable register

MODE0x508

Defines the routing of the connected PDM microphone signals

GAINL0x518

Left output gain adjustment

GAINR0x51C

Right output gain adjustment

RATIO0x520

Selects the decimation ratio between PDM_CLK and output sample rate. When RATIO is selected to be "custom", the decimation rate should be set using the FILTER.CTRL field before setting the RATIO to 7

Change PRESCALER.DIVISOR accordingly.

FILTER.CTRL0x524

Aditional PDM configurability

FILTER.HPPOLE0x528

Settings for the high-pass filter

FILTER.HPDISABLE0x52C

High pass filter disable

FILTER.SOFTMUTE0x530

Soft mute function

FILTER.SOFTCYCLES0x534

Soft mute settings

FILTER.SAMPLEDELAY0x538

Input Data Sampling with Number of ckFilterL (double frequency of PDM_CLK) Clock Cycle Delay. Optionally,input sample point can be delayed independently on left and right channels using FILTER:CTRL[20:19] bits

PSEL.CLK0x540

Pin number configuration for PDM CLK signal

PSEL.DIN0x544

Pin number configuration for PDM DIN signal

CLKSELECT0x54C

Master clock generator configuration

SAMPLE.PTR0x560

RAM address pointer to write samples to with EasyDMA

SAMPLE.MAXCNT0x564

Number of bytes to allocate memory for in EasyDMA mode

PRESCALER0x580

The prescaler is used to set the PDM frequency

DMA.TERMINATEONBUSERROR0x700

Terminate the transaction if a BUSERROR event is detected.

DMA.BUSERRORADDRESS0x704

Address of transaction that generated the last BUSERROR event.

TASKS_START

Address offset: 0x000

Starts continuous PDM transfer

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_START

Starts continuous PDM transfer

Trigger

1

Trigger task

TASKS_STOP

Address offset: 0x004

Stops PDM transfer

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

W

TASKS_STOP

Stops PDM transfer

Trigger

1

Trigger task

SUBSCRIBE_START

Address offset: 0x080

Subscribe configuration for task START

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that task START will subscribe to

B

RW

EN

Disabled

0

Disable subscription

Enabled

1

Enable subscription

SUBSCRIBE_STOP

Address offset: 0x084

Subscribe configuration for task STOP

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that task STOP will subscribe to

B

RW

EN

Disabled

0

Disable subscription

Enabled

1

Enable subscription

EVENTS_STARTED

Address offset: 0x100

PDM transfer has started

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_STARTED

PDM transfer has started

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_STOPPED

Address offset: 0x104

PDM transfer has finished

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_STOPPED

PDM transfer has finished

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_END

Address offset: 0x108

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

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

EVENTS_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

NotGenerated

0

Event not generated

Generated

1

Event generated

EVENTS_DMA

Peripheral events.

EVENTS_DMA.BUSERROR

Address offset: 0x110

This event is generated if an error occurs during the bus transfer.

When this event is generated, the address which caused the error can be read from the BUSERRORADDRESS register.

Errors occurring while the EVENTS_BUSERROR register is set are ignored.

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

BUSERROR

This event is generated if an error occurs during the bus transfer.

When this event is generated, the address which caused the error can be read from the BUSERRORADDRESS register.

Errors occurring while the EVENTS_BUSERROR register is set are ignored.

NotGenerated

0

Event not generated

Generated

1

Event generated

PUBLISH_STARTED

Address offset: 0x180

Publish configuration for event STARTED

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that event STARTED will publish to

B

RW

EN

Disabled

0

Disable publishing

Enabled

1

Enable publishing

PUBLISH_STOPPED

Address offset: 0x184

Publish configuration for event STOPPED

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that event STOPPED will publish to

B

RW

EN

Disabled

0

Disable publishing

Enabled

1

Enable publishing

PUBLISH_END

Address offset: 0x188

Publish configuration for event END

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that event END will publish to

B

RW

EN

Disabled

0

Disable publishing

Enabled

1

Enable publishing

PUBLISH_DMA

Publish configuration for events

PUBLISH_DMA.BUSERROR

Address offset: 0x190

Publish configuration for event DMA.BUSERROR

When this event is generated, the address which caused the error can be read from the BUSERRORADDRESS register.

Errors occurring while the EVENTS_BUSERROR register is set are ignored.

Bit number313029282726252423222120191817161514131211109876543210
IDBAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

CHIDX

[0..255]

DPPI channel that event DMA.BUSERROR will publish to

B

RW

EN

Disabled

0

Disable publishing

Enabled

1

Enable publishing

INTEN

Address offset: 0x300

Enable or disable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

STARTED

Enable or disable interrupt for event STARTED

Disabled

0

Disable

Enabled

1

Enable

B

RW

STOPPED

Enable or disable interrupt for event STOPPED

Disabled

0

Disable

Enabled

1

Enable

C

RW

END

Enable or disable interrupt for event END

Disabled

0

Disable

Enabled

1

Enable

D

RW

DMABUSERROR

Enable or disable interrupt for event DMABUSERROR

When this event is generated, the address which caused the error can be read from the BUSERRORADDRESS register.

Errors occurring while the EVENTS_BUSERROR register is set are ignored.

Disabled

0

Disable

Enabled

1

Enable

INTENSET

Address offset: 0x304

Enable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW
W1S

STARTED

Write '1' to enable interrupt for event STARTED

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

B

RW
W1S

STOPPED

Write '1' to enable interrupt for event STOPPED

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

C

RW
W1S

END

Write '1' to enable interrupt for event END

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

D

RW
W1S

DMABUSERROR

Write '1' to enable interrupt for event DMABUSERROR

When this event is generated, the address which caused the error can be read from the BUSERRORADDRESS register.

Errors occurring while the EVENTS_BUSERROR register is set are ignored.

Set

1

Enable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

INTENCLR

Address offset: 0x308

Disable interrupt

Bit number313029282726252423222120191817161514131211109876543210
IDDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW
W1C

STARTED

Write '1' to disable interrupt for event STARTED

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

B

RW
W1C

STOPPED

Write '1' to disable interrupt for event STOPPED

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

C

RW
W1C

END

Write '1' to disable interrupt for event END

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

D

RW
W1C

DMABUSERROR

Write '1' to disable interrupt for event DMABUSERROR

When this event is generated, the address which caused the error can be read from the BUSERRORADDRESS register.

Errors occurring while the EVENTS_BUSERROR register is set are ignored.

Clear

1

Disable

Disabled

0

Read: Disabled

Enabled

1

Read: Enabled

INTPEND

Address offset: 0x30C

Pending interrupts

Bit number313029282726252423222120191817161514131211109876543210
IDDCBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

R

STARTED

Read pending status of interrupt for event STARTED

NotPending

0

Read: Not pending

Pending

1

Read: Pending

B

R

STOPPED

Read pending status of interrupt for event STOPPED

NotPending

0

Read: Not pending

Pending

1

Read: Pending

C

R

END

Read pending status of interrupt for event END

NotPending

0

Read: Not pending

Pending

1

Read: Pending

D

R

DMABUSERROR

Read pending status of interrupt for event DMABUSERROR

When this event is generated, the address which caused the error can be read from the BUSERRORADDRESS register.

Errors occurring while the EVENTS_BUSERROR register is set are ignored.

NotPending

0

Read: Not pending

Pending

1

Read: Pending

ENABLE

Address offset: 0x500

PDM module enable register

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

ENABLE

Enable or disable PDM module

Disabled

0

Disable

Enabled

1

Enable

MODE

Address offset: 0x508

Defines the routing of the connected PDM microphone signals

Bit number313029282726252423222120191817161514131211109876543210
IDBA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

OPERATION

Mono or stereo operation

Stereo

0

Sample and store one pair (left + right) of 16-bit samples per RAM word R=[31:16]; L=[15:0]

Mono

1

Sample and store two successive left samples (16 bits each) per RAM word L1=[31:16]; L0=[15:0]

B

RW

EDGE

Defines on which PDM_CLK edge left (or mono) is sampled.

The right channel is sampled on the opposide edge of the left channel. When EDGE is set to 1 (LeftRising) and stereo input is used the right and left channels are swapped relative to EDGE set to 0 (LeftFalling).

LeftFalling

0

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

LeftRising

1

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

GAINL

Address offset: 0x518

Left output gain adjustment

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAA
Reset 0x0000002800000000000000000000000000101000
IDR/WFieldValue IDValueDescription
A

RW

GAINL

Left output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)

0x00 -20 dB gain adjust

0x01 -19.5 dB gain adjust

(...)

0x27 -0.5 dB gain adjust

0x28 0 dB gain adjust

0x29 +0.5 dB gain adjust

(...)

0x4F +19.5 dB gain adjust

0x50 +20 dB gain adjust

MinGain

0x00

-20 dB gain adjustment (minimum)

DefaultGain

0x28

0 dB gain adjustment

MaxGain

0x50

+20 dB gain adjustment (maximum)

GAINR

Address offset: 0x51C

Right output gain adjustment

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAA
Reset 0x0000002800000000000000000000000000101000
IDR/WFieldValue IDValueDescription
A

RW

GAINR

Right output gain adjustment, in 0.5 dB steps, around the default module gain (see electrical parameters)

MinGain

0x00

-20 dB gain adjustment (minimum)

DefaultGain

0x28

0 dB gain adjustment

MaxGain

0x50

+20 dB gain adjustment (maximum)

RATIO

Address offset: 0x520

Selects the decimation ratio between PDM_CLK and output sample rate. When RATIO is selected to be "custom", the decimation rate should be set using the FILTER.CTRL field before setting the RATIO to 7

Change PRESCALER.DIVISOR accordingly.

Bit number313029282726252423222120191817161514131211109876543210
IDAAA
Reset 0x0000000200000000000000000000000000000010
IDR/WFieldValue IDValueDescription
A

RW

RATIO

Selects the decimation ratio between PDM_CLK and output sample rate

Ratio48

0

Ratio of 48

Ratio50

1

Ratio of 50

Ratio64

2

Ratio of 64

Ratio80

3

Ratio of 80

Ratio96

4

Ratio of 96

Ratio150

5

Ratio of 150

Ratio192

6

Ratio of 192

Custom

7

Custom. The decimation rate can be changed using the FILTER.CTRL[31:25] bits

FILTER.CTRL

Address offset: 0x524

Aditional PDM configurability

Bit number313029282726252423222120191817161514131211109876543210
IDIIIIIIIHHHHGGFFFFEEEEDCBA
Reset 0x4EE0D20001001110111000001101001000000000
IDR/WFieldValue IDValueDescription
A

RW

OVERRIDERIGHTSOFTMUTE

Override soft mute enable for right channel

Available only in Stereo mode

Disable

0

No action

Enable

1

override and disable soft mute

B

RW

OVERRIDELEFTSOFTMUTE

Override soft mute enable for left channel

Available only in Stereo mode

Disable

0

No action

Enable

1

override and disable soft mute

C

RW

GAINADD0P25

Add +0.25dB to the gain stage

Option to add 0.25dB to the gain stage

Disable

0

Nothing added

Enable

1

+0.25dB added

D

RW

MINORSTEP025CUSTOM

Compensates Gain with +0.25dB

Applicable when custon decimation ratio us used (RATIO=Custom)

Disable

0

Nothing added

Enable

1

+0.25dB added

E

RW

MINORSTEP050CUSTOM

[0..12]

Compensates Gain with +0.5dB steps

Applicable when custon decimation ratio us used (RATIO=Custom)

F

RW

SOFTCYCLES

[0..15]

Custom number of cycles for soft gain/mute function

32*(Multiplication+1) steps

The steps represent one clock cycle at baseband signal frequency; applicable when FILTER.SOFTCYCLES=Custom

G

RW

DATASAMPLEDELAY

Input data sampling point delay in PDM_CLK cycels

Can be used to configure sample delay independently on left and right channel

NoDelay

0

No added delay

DelayOnLeft

1

1 clock cycle delay on left channel

DelayOnRight

2

1 clock cycle delay on right channel

DelayOnBoth

3

1 clock cycle delay on both channels

H

RW

CICFILTERMSBCUSTOM

Defines MSB for CIC fliter when RATIO is set to "Custom"

The value of MSB is 20 + value configured in this field

Range0

0

OSR range low 4 OSR range high 32

Range1

1

OSR range low 34 OSR range high 36

Range2

2

OSR range low 38 OSR range high 42

Range3

3

OSR range low 44 OSR range high 48

Range4

4

OSR range low 50 OSR range high 54

Range5

5

OSR range low 56 OSR range high 64

Range6

6

OSR range low 66 OSR range high 72

Range7

7

OSR range low 74 OSR range high 84

Range8

8

OSR range low 86 OSR range high 96

Range9

9

OSR range low 98 OSR range high 110

Range10

10

OSR range low 112 OSR range high 128

Range11

11

OSR range low 130 OSR range high 146

Range12

12

OSR range low 148 OSR range high 168

Range13

13

OSR range low 170 OSR range high 194

Range14

14

OSR range low 196 OSR range high 222

Range15

15

OSR range low 224 OSR range high 256

I

RW

DECRATIO

[2..127]

Configures decimation ratio to any even number between 6 and 256

Decimation rate is 2x(DECRATIO+1)

FILTER.HPPOLE

Address offset: 0x528

Settings for the high-pass filter

Bit number313029282726252423222120191817161514131211109876543210
IDAAAA
Reset 0x0000000500000000000000000000000000000101
IDR/WFieldValue IDValueDescription
A

RW

HPPOLE

Settings for the high-pass filter -3dB gain pole, assuming filter source clock of 16KHz

p0p16

15

0.16 Hz

p0p32

14

0.32 Hz

p0p64

13

0.64 Hz

p1p25

12

1.25 Hz

p2p5

11

2.5 Hz

p5

10

5 Hz

p10

9

10 Hz

p20

8

20 Hz

p40

7

40 Hz

p79

6

79 Hz

p157

5

157 Hz

p310

4

310 Hz

p603

3

603 Hz

p1152

2

1152 Hz

p2110

1

2110 Hz

FILTER.HPDISABLE

Address offset: 0x52C

High pass filter disable

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000100000000000000000000000000000001
IDR/WFieldValue IDValueDescription
A

RW

DISABLE

High pass filter disable

Enable

0

High pass filter enabled

Disable

1

High pass filter disabled

FILTER.SOFTMUTE

Address offset: 0x530

Soft mute function

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

ENABLE

Soft mute function

Disabled

0

Disable soft mute function

Enabled

1

Enable soft mute function

FILTER.SOFTCYCLES

Address offset: 0x534

Soft mute settings

Bit number313029282726252423222120191817161514131211109876543210
IDAAA
Reset 0x0000000200000000000000000000000000000010
IDR/WFieldValue IDValueDescription
A

RW

DISABLE

Soft mute settings: amount of cycles for transition

s2

0

2 filter source clock cycles

s8

1

8 filter source clock cycles

s32

2

32 filter source clock cycles

s64

3

64 filter source clock cycles

s128

4

128 filter source clock cycles

s256

5

256 filter source clock cycles

s512

6

512 filter source clock cycles

Custom

7

The number of cycles can be set using FILTER.CTRL[17:14] bits

custom

7

See the Custom enumerator

This enumerator is deprecated.

FILTER.SAMPLEDELAY

Address offset: 0x538

Input Data Sampling with Number of ckFilterL (double frequency of PDM_CLK) Clock Cycle Delay. Optionally,input sample point can be delayed independently on left and right channels using FILTER:CTRL[20:19] bits

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

DELAY

Input Data Sampling with Number of ckFilterL (double frequency of PDM_CLK) Clock Cycle Delay

NoDelay

0

No delay

Delay1Ck

1

1 Cycle

PSEL.CLK

Address offset: 0x540

Pin number configuration for PDM CLK signal

Bit number313029282726252423222120191817161514131211109876543210
IDCBBBAAAAA
Reset 0xFFFFFFFF11111111111111111111111111111111
IDR/WFieldValue IDValueDescription
A

RW

PIN

[0..31]

Pin number

B

RW

PORT

[0..7]

Port number

C

RW

CONNECT

Connection

Disconnected

1

Disconnect

Connected

0

Connect

PSEL.DIN

Address offset: 0x544

Pin number configuration for PDM DIN signal

Bit number313029282726252423222120191817161514131211109876543210
IDCBBBAAAAA
Reset 0xFFFFFFFF11111111111111111111111111111111
IDR/WFieldValue IDValueDescription
A

RW

PIN

[0..31]

Pin number

B

RW

PORT

[0..7]

Port number

C

RW

CONNECT

Connection

Disconnected

1

Disconnect

Connected

0

Connect

CLKSELECT

Address offset: 0x54C

Master clock generator configuration

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

SRC

Master clock source selection

PCLK32M

0

32 MHz peripheral clock

ACLK

1

24 MHz peripheral clock

SAMPLE.PTR

Address offset: 0x560

RAM address pointer to write samples to with EasyDMA

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

SAMPLEPTR

Address to write PCM samples to over DMA

Note: See the memory chapter for details about which memories are available for EasyDMA.

SAMPLE.MAXCNT

Address offset: 0x564

Number of bytes to allocate memory for in EasyDMA mode

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

BUFFSIZE

[0..32767]

Length of DMA RAM allocation in number of bytes

PRESCALER

Address offset: 0x580

The prescaler is used to set the PDM frequency

The prescaler divides the clock by DIVISOR to make the PDM clock. The resulting frequency is given by the frequency of the 'core clock' divided by DIVISOR.

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAA
Reset 0x0000000400000000000000000000000000000100
IDR/WFieldValue IDValueDescription
A

RW

DIVISOR

4..126

Core clock to PDM divisor

DMA.TERMINATEONBUSERROR

Address offset: 0x700

Terminate the transaction if a BUSERROR event is detected.

Bit number313029282726252423222120191817161514131211109876543210
IDA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

RW

ENABLE

Disabled

0

Disable

Enabled

1

Enable

DMA.BUSERRORADDRESS

Address offset: 0x704

Address of transaction that generated the last BUSERROR event.

Bit number313029282726252423222120191817161514131211109876543210
IDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Reset 0x0000000000000000000000000000000000000000
IDR/WFieldValue IDValueDescription
A

R

ADDRESS