PRS - Peripheral Reflex System#

Peripheral Reflex System (PRS) Peripheral API.

This module contains functions to control the PRS peripheral of Silicon Labs 32-bit MCUs and SoCs. The PRS allows configurable, fast, and autonomous communication between peripherals on the MCU or SoC.

Enumerations#

enum
prsTypeAsync
prsTypeSync
}

PRS Channel type.

enum
prsEdgeOff
prsEdgePos
prsEdgeNeg
prsEdgeBoth
}

Edge detection type.

enum
prsSignalNone = PRS_CH_CTRL_SOURCESEL_NONE | (0x0 << _PRS_CH_CTRL_SIGSEL_SHIFT)
prsSignalSW = PRS_CH_CTRL_SOURCESEL_NONE | (0x1 << _PRS_CH_CTRL_SIGSEL_SHIFT)
prsSignalPRS_CH0 = PRS_PRS_CH0
prsSignalPRS_CH1 = PRS_PRS_CH1
prsSignalPRS_CH2 = PRS_PRS_CH2
prsSignalPRS_CH3 = PRS_PRS_CH3
prsSignalPRS_CH4 = PRS_PRS_CH4
prsSignalPRS_CH5 = PRS_PRS_CH5
prsSignalPRS_CH6 = PRS_PRS_CH6
prsSignalPRS_CH7 = PRS_PRS_CH7
prsSignalPRS_CH8 = PRS_PRS_CH8
prsSignalPRS_CH9 = PRS_PRS_CH9
prsSignalPRS_CH10 = PRS_PRS_CH10
prsSignalPRS_CH11 = PRS_PRS_CH11
prsSignalADC0_SINGLE = PRS_ADC0_SINGLE
prsSignalADC0_SCAN = PRS_ADC0_SCAN
prsSignalTIMER0_UF = PRS_TIMER0_UF
prsSignalTIMER0_OF = PRS_TIMER0_OF
prsSignalTIMER0_CC0 = PRS_TIMER0_CC0
prsSignalTIMER0_CC1 = PRS_TIMER0_CC1
prsSignalTIMER0_CC2 = PRS_TIMER0_CC2
prsSignalTIMER1_UF = PRS_TIMER1_UF
prsSignalTIMER1_OF = PRS_TIMER1_OF
prsSignalTIMER1_CC0 = PRS_TIMER1_CC0
prsSignalTIMER1_CC1 = PRS_TIMER1_CC1
prsSignalTIMER1_CC2 = PRS_TIMER1_CC2
prsSignalLETIMER0_CH0 = PRS_LETIMER0_CH0
prsSignalLETIMER0_CH1 = PRS_LETIMER0_CH1
prsSignalPCNT0_TCC = PRS_PCNT0_TCC
prsSignalPCNT0_UFOF = PRS_PCNT0_UFOF
prsSignalPCNT0_DIR = PRS_PCNT0_DIR
prsSignalCRYOTIMER_PERIOD = PRS_CRYOTIMER_PERIOD
prsSignalRTCC_CCV0 = PRS_RTCC_CCV0
prsSignalRTCC_CCV1 = PRS_RTCC_CCV1
prsSignalRTCC_CCV2 = PRS_RTCC_CCV2
prsSignalACMP0_OUT = PRS_ACMP0_OUT
prsSignalACMP1_OUT = PRS_ACMP1_OUT
prsSignalUSART0_TXC = PRS_USART0_TXC
prsSignalUSART0_RXDATAV = PRS_USART0_RXDATAV
prsSignalUSART0_IRTX = PRS_USART0_IRTX
prsSignalUSART0_RTS = PRS_USART0_RTS
prsSignalUSART0_TX = PRS_USART0_TX
prsSignalUSART0_CS = PRS_USART0_CS
prsSignalUSART1_TXC = PRS_USART1_TXC
prsSignalUSART1_RXDATAV = PRS_USART1_RXDATAV
prsSignalUSART1_RTS = PRS_USART1_RTS
prsSignalUSART1_TX = PRS_USART1_TX
prsSignalUSART1_CS = PRS_USART1_CS
prsSignalCM4_TXEV = PRS_CM4_TXEV
prsSignalGPIO_PIN0 = PRS_GPIO_PIN0
prsSignalGPIO_PIN1 = PRS_GPIO_PIN1
prsSignalGPIO_PIN2 = PRS_GPIO_PIN2
prsSignalGPIO_PIN3 = PRS_GPIO_PIN3
prsSignalGPIO_PIN4 = PRS_GPIO_PIN4
prsSignalGPIO_PIN5 = PRS_GPIO_PIN5
prsSignalGPIO_PIN6 = PRS_GPIO_PIN6
prsSignalGPIO_PIN7 = PRS_GPIO_PIN7
prsSignalGPIO_PIN8 = PRS_GPIO_PIN8
prsSignalGPIO_PIN9 = PRS_GPIO_PIN9
prsSignalGPIO_PIN10 = PRS_GPIO_PIN10
prsSignalGPIO_PIN11 = PRS_GPIO_PIN11
prsSignalGPIO_PIN12 = PRS_GPIO_PIN12
prsSignalGPIO_PIN13 = PRS_GPIO_PIN13
prsSignalGPIO_PIN14 = PRS_GPIO_PIN14
prsSignalGPIO_PIN15 = PRS_GPIO_PIN15
prsSignalMODEM_FRAMEDET = PRS_MODEM_FRAMEDET
prsSignalMODEM_TIMDET = PRS_MODEM_TIMDET
prsSignalMODEM_SYNCSENT = PRS_MODEM_SYNCSENT
prsSignalMODEM_PRESENT = PRS_MODEM_PRESENT
prsSignalMODEM_ANT0 = PRS_MODEM_ANT0
prsSignalMODEM_ANT1 = PRS_MODEM_ANT1
prsSignalMODEM_FRAMESENT = PRS_MODEM_FRAMESENT
prsSignalMODEM_PREDET = PRS_MODEM_PREDET
prsSignalPROTIMER_LBTR = PRS_PROTIMER_LBTR
prsSignalPROTIMER_LBTF = PRS_PROTIMER_LBTF
prsSignalPROTIMER_LBTS = PRS_PROTIMER_LBTS
prsSignalRAC_ACTIVE = PRS_RAC_ACTIVE
prsSignalRAC_LNAEN = PRS_RAC_LNAEN
prsSignalRAC_PAEN = PRS_RAC_PAEN
prsSignalRAC_RX = PRS_RAC_RX
prsSignalRAC_TX = PRS_RAC_TX
}

PRS Signal.

Functions#

void
PRS_LevelSet(uint32_t level, uint32_t mask)

Set level control bit for one or more channels.

uint32_t

Get level control bit for all channels.

uint32_t
PRS_Values(PRS_ChType_t type)

Get the PRS channel values for all channels.

bool
PRS_ChannelValue(unsigned int ch, PRS_ChType_t type)

Get the PRS channel value for a single channel.

void
PRS_PulseTrigger(uint32_t channels)

Trigger a high pulse (one HFPERCLK) for one or more channels.

void
PRS_ChannelLevelSet(unsigned int ch, bool level)

Set the PRS channel level for one asynchronous PRS channel.

void
PRS_ChannelPulse(unsigned int ch)

Trigger a pulse on one PRS channel.

void
PRS_SourceSignalSet(unsigned int ch, uint32_t source, uint32_t signal, PRS_Edge_TypeDef edge)

Set a source and signal for a channel.

void
PRS_SourceAsyncSignalSet(unsigned int ch, uint32_t source, uint32_t signal)

Set the source and asynchronous signal for a channel.

void
PRS_GpioOutputLocation(unsigned int ch, unsigned int location)

Send the output of a PRS channel to a GPIO pin.

int
PRS_GetFreeChannel(PRS_ChType_t type)

Search for the first free PRS channel.

void
PRS_Reset(void)

Reset all PRS channels.

void
PRS_ConnectSignal(unsigned int ch, PRS_ChType_t type, PRS_Signal_t signal)

Connect a PRS signal to a channel.

Macros#

#define
PRS_SYNC_CHAN_COUNT PRS_CHAN_COUNT

PRS Synchronous channel count.

#define
PRS_ASYNC_CHAN_COUNT PRS_CHAN_COUNT

PRS Asynchronous channel count.

#define

PRS asynchronous support.

Enumeration Documentation#

PRS_ChType_t#

PRS_ChType_t

PRS Channel type.

Enumerator
prsTypeAsync

Asynchronous channel type.

prsTypeSync

Synchronous channel type.


Definition at line 102 of file platform/emlib/inc/em_prs.h

PRS_Edge_TypeDef#

PRS_Edge_TypeDef

Edge detection type.

Enumerator
prsEdgeOff

Leave signal as is.

prsEdgePos

Generate pulses on positive edge.

prsEdgeNeg

Generate pulses on negative edge.

prsEdgeBoth

Generate pulses on both edges.


Definition at line 108 of file platform/emlib/inc/em_prs.h

PRS_Signal_t#

PRS_Signal_t

PRS Signal.

Enumerator
prsSignalNone

No Signal.

prsSignalSW

Software-reserved Signal.

prsSignalPRS_CH0

PRS_CH0 signal.

prsSignalPRS_CH1

PRS_CH1 signal.

prsSignalPRS_CH2

PRS_CH2 signal.

prsSignalPRS_CH3

PRS_CH3 signal.

prsSignalPRS_CH4

PRS_CH4 signal.

prsSignalPRS_CH5

PRS_CH5 signal.

prsSignalPRS_CH6

PRS_CH6 signal.

prsSignalPRS_CH7

PRS_CH7 signal.

prsSignalPRS_CH8

PRS_CH8 signal.

prsSignalPRS_CH9

PRS_CH9 signal.

prsSignalPRS_CH10

PRS_CH10 signal.

prsSignalPRS_CH11

PRS_CH11 signal.

prsSignalADC0_SINGLE

ADC0_SINGLE signal.

prsSignalADC0_SCAN

ADC0_SCAN signal.

prsSignalTIMER0_UF

TIMER0 underflow Signal.

prsSignalTIMER0_OF

TIMER0 overflow Signal.

prsSignalTIMER0_CC0

TIMER0 capture/compare channel 0 Signal.

prsSignalTIMER0_CC1

TIMER0 capture/compare channel 1 Signal.

prsSignalTIMER0_CC2

TIMER0 capture/compare channel 2 Signal.

prsSignalTIMER1_UF

TIMER1 underflow Signal.

prsSignalTIMER1_OF

TIMER1 overflow Signal.

prsSignalTIMER1_CC0

TIMER1 capture/compare channel 0 Signal.

prsSignalTIMER1_CC1

TIMER1 capture/compare channel 1 Signal.

prsSignalTIMER1_CC2

TIMER1 capture/compare channel 2 Signal.

prsSignalLETIMER0_CH0

LETIMER0 channel 0 Signal.

prsSignalLETIMER0_CH1

LETIMER0 channel 1 Signal.

prsSignalPCNT0_TCC

PCNT0_TCC Signal.

prsSignalPCNT0_UFOF

PCNT0_TCC Signal.

prsSignalPCNT0_DIR

PCNT0_TCC Signal.

prsSignalCRYOTIMER_PERIOD

CRYOTIMER_PERIOD Signal.

prsSignalRTCC_CCV0

RTCC capture/compare channel 0 Signal.

prsSignalRTCC_CCV1

RTCC capture/compare channel 1 Signal.

prsSignalRTCC_CCV2

RTCC capture/compare channel 2 Signal.

prsSignalACMP0_OUT

ACMP0 Signal.

prsSignalACMP1_OUT

ACMP1 output Signal.

prsSignalUSART0_TXC

USART0 TX complete Signal.

prsSignalUSART0_RXDATAV

USART0 RX data available Signal.

prsSignalUSART0_IRTX

USART0 IR TX Signal.

prsSignalUSART0_RTS

USART0 RTS Signal.

prsSignalUSART0_TX

USART0 TX Signal.

prsSignalUSART0_CS

USART0 chip select Signal.

prsSignalUSART1_TXC

USART1 TX complete Signal.

prsSignalUSART1_RXDATAV

USART1 RX data available Signal.

prsSignalUSART1_RTS

USART1 RTS Signal.

prsSignalUSART1_TX

USART1 TX Signal.

prsSignalUSART1_CS

USART1 chip select Signal.

prsSignalCM4_TXEV

TXEV Signal.

prsSignalGPIO_PIN0

GPIO Pin 0 Signal.

prsSignalGPIO_PIN1

GPIO Pin 1 Signal.

prsSignalGPIO_PIN2

GPIO Pin 2 Signal.

prsSignalGPIO_PIN3

GPIO Pin 3 Signal.

prsSignalGPIO_PIN4

GPIO Pin 4 Signal.

prsSignalGPIO_PIN5

GPIO Pin 5 Signal.

prsSignalGPIO_PIN6

GPIO Pin 6 Signal.

prsSignalGPIO_PIN7

GPIO Pin 7 Signal.

prsSignalGPIO_PIN8

GPIO Pin 8 Signal.

prsSignalGPIO_PIN9

GPIO Pin 9 Signal.

prsSignalGPIO_PIN10

GPIO Pin 10 Signal.

prsSignalGPIO_PIN11

GPIO Pin 11 Signal.

prsSignalGPIO_PIN12

GPIO Pin 12 Signal.

prsSignalGPIO_PIN13

GPIO Pin 13 Signal.

prsSignalGPIO_PIN14

GPIO Pin 14 Signal.

prsSignalGPIO_PIN15

GPIO Pin 15 Signal.

prsSignalMODEM_FRAMEDET

MODEM_FRAMEDET Signal.

prsSignalMODEM_TIMDET

MODEM_TIMDET Signal.

prsSignalMODEM_SYNCSENT

MODEM_SYNCSENT Signal.

prsSignalMODEM_PRESENT

MODEM_PRESENT Signal.

prsSignalMODEM_ANT0

MODEM_ANT0 Signal.

prsSignalMODEM_ANT1

MODEM_ANT1 Signal.

prsSignalMODEM_FRAMESENT

MODEM_FRAMESENT Signal.

prsSignalMODEM_PREDET

MODEM_PREDET Signal.

prsSignalPROTIMER_LBTR

PROTIMER_LBTR Signal.

prsSignalPROTIMER_LBTF

PROTIMER_LBTF Signal.

prsSignalPROTIMER_LBTS

PROTIMER_LBTS Signal.

prsSignalRAC_ACTIVE

RAC_ACTIVE Signal.

prsSignalRAC_LNAEN

RAC_LNAEN Signal.

prsSignalRAC_PAEN

RAC_PAEN Signal.

prsSignalRAC_RX

RAC_RX Signal.

prsSignalRAC_TX

RAC_TX Signal.


Definition at line 138 of file platform/emlib/inc/em_prs.h

Function Documentation#

PRS_LevelSet#

void PRS_LevelSet (uint32_t level, uint32_t mask)

Set level control bit for one or more channels.

Parameters
[in]level

Level to use for channels indicated by mask. Use logical OR combination of PRS_SWLEVEL_CHnLEVEL defines for channels to set high level, otherwise 0.

[in]mask

Mask indicating which channels to set level for. Use logical OR combination of PRS_SWLEVEL_CHnLEVEL defines.

The level value for a channel is XORed with both the pulse possibly issued by PRS_PulseTrigger() and the PRS input signal selected for the channel(s).


Definition at line 1010 of file platform/emlib/inc/em_prs.h

PRS_LevelGet#

uint32_t PRS_LevelGet (void)

Get level control bit for all channels.

Parameters
N/A

Returns

  • The current software level configuration.


Definition at line 1026 of file platform/emlib/inc/em_prs.h

PRS_Values#

uint32_t PRS_Values (PRS_ChType_t type)

Get the PRS channel values for all channels.

Parameters
[in]type

PRS channel type. This can be either prsTypeAsync or prsTypeSync.

Returns

  • The current PRS channel output values for all channels as a bitset.


Definition at line 1047 of file platform/emlib/inc/em_prs.h

PRS_ChannelValue#

bool PRS_ChannelValue (unsigned int ch, PRS_ChType_t type)

Get the PRS channel value for a single channel.

Parameters
[in]ch

PRS channel number.

[in]type

PRS channel type. This can be either prsTypeAsync or prsTypeSync.

Returns

  • The current PRS channel output value. This is either 0 or 1.


Definition at line 1075 of file platform/emlib/inc/em_prs.h

PRS_PulseTrigger#

void PRS_PulseTrigger (uint32_t channels)

Trigger a high pulse (one HFPERCLK) for one or more channels.

Parameters
[in]channels

Logical ORed combination of channels to trigger a pulse for. Use PRS_SWPULSE_CHnPULSE defines.

Setting a bit for a channel causes the bit in the register to remain high for one HFPERCLK cycle. Pulse is XORed with both the corresponding bit in PRS SWLEVEL register and the PRS input signal selected for the channel(s).


Definition at line 1095 of file platform/emlib/inc/em_prs.h

PRS_ChannelLevelSet#

void PRS_ChannelLevelSet (unsigned int ch, bool level)

Set the PRS channel level for one asynchronous PRS channel.

Parameters
[in]ch

PRS channel number.

[in]level

true to set the level high (1) and false to set the level low (0).


Definition at line 1114 of file platform/emlib/inc/em_prs.h

PRS_ChannelPulse#

void PRS_ChannelPulse (unsigned int ch)

Trigger a pulse on one PRS channel.

Parameters
[in]ch

PRS channel number.


Definition at line 1126 of file platform/emlib/inc/em_prs.h

PRS_SourceSignalSet#

void PRS_SourceSignalSet (unsigned int ch, uint32_t source, uint32_t signal, PRS_Edge_TypeDef edge)

Set a source and signal for a channel.

Parameters
[in]ch

A channel to define the signal and source for.

[in]source

A source to select for the channel. Use one of PRS_CH_CTRL_SOURCESEL_x defines.

[in]signal

A signal (for selected source) to use. Use one of PRS_CH_CTRL_SIGSEL_x defines.

[in]edge

An edge (for selected source/signal) to generate the pulse for.


Definition at line 323 of file platform/emlib/src/em_prs.c

PRS_SourceAsyncSignalSet#

void PRS_SourceAsyncSignalSet (unsigned int ch, uint32_t source, uint32_t signal)

Set the source and asynchronous signal for a channel.

Parameters
[in]ch

A channel to define the source and asynchronous signal for.

[in]source

A source to select for the channel. Use one of PRS_CH_CTRL_SOURCESEL_x defines.

[in]signal

An asynchronous signal (for selected source) to use. Use one of the PRS_CH_CTRL_SIGSEL_x defines that support asynchronous operation.

Asynchronous reflexes are not clocked on HFPERCLK and can be used even in EM2/EM3. There is a limitation to reflexes operating in asynchronous mode in that they can only be used by a subset of the reflex consumers. See the PRS chapter in the reference manual for the complete list of supported asynchronous signals and consumers.

Note

  • This function is not supported on EFM32GxxxFyyy parts. In asynchronous mode, the edge detector only works in EM0 and should not be used. The EDSEL parameter in PRS_CHx_CTRL register is set to 0 (OFF) by default.


Definition at line 370 of file platform/emlib/src/em_prs.c

PRS_GpioOutputLocation#

void PRS_GpioOutputLocation (unsigned int ch, unsigned int location)

Send the output of a PRS channel to a GPIO pin.

Parameters
[in]ch

PRS channel number.

[in]location

PRS routing location.

This function is used to send the output of a PRS channel to a GPIO pin. Note that there are certain restrictions to where a PRS channel can be routed. Consult the datasheet of the device to see if a channel can be routed to the requested GPIO pin.


Definition at line 395 of file platform/emlib/src/em_prs.c

PRS_GetFreeChannel#

int PRS_GetFreeChannel (PRS_ChType_t type)

Search for the first free PRS channel.

Parameters
[in]type

PRS channel type. This can be either prsTypeAsync or prsTypeSync.

Returns

  • Channel number >= 0 if an unused PRS channel was found. If no free PRS channel was found then -1 is returned.


Definition at line 428 of file platform/emlib/src/em_prs.c

PRS_Reset#

void PRS_Reset (void)

Reset all PRS channels.

Parameters
N/A

This function will reset all the PRS channel configuration.


Definition at line 457 of file platform/emlib/src/em_prs.c

PRS_ConnectSignal#

void PRS_ConnectSignal (unsigned int ch, PRS_ChType_t type, PRS_Signal_t signal)

Connect a PRS signal to a channel.

Parameters
[in]ch

PRS channel number.

[in]type

PRS channel type. This can be either prsTypeAsync or prsTypeSync.

[in]signal

This is the PRS signal that should be placed on the channel.

This function will make the PRS signal available on the specific channel. Only a single PRS signal can be connected to any given channel.


Definition at line 495 of file platform/emlib/src/em_prs.c

Macro Definition Documentation#

PRS_SYNC_CHAN_COUNT#

#define PRS_SYNC_CHAN_COUNT
Value:
PRS_CHAN_COUNT

PRS Synchronous channel count.


Definition at line 67 of file platform/emlib/inc/em_prs.h

PRS_ASYNC_CHAN_COUNT#

#define PRS_ASYNC_CHAN_COUNT
Value:
PRS_CHAN_COUNT

PRS Asynchronous channel count.


Definition at line 69 of file platform/emlib/inc/em_prs.h

PRS_ASYNC_SUPPORTED#

#define PRS_ASYNC_SUPPORTED
Value:
1

PRS asynchronous support.


Definition at line 74 of file platform/emlib/inc/em_prs.h