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)
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
prsSignalTIMER2_UF = PRS_TIMER2_UF
prsSignalTIMER2_OF = PRS_TIMER2_OF
prsSignalTIMER2_CC0 = PRS_TIMER2_CC0
prsSignalTIMER2_CC1 = PRS_TIMER2_CC1
prsSignalTIMER2_CC2 = PRS_TIMER2_CC2
prsSignalTIMER3_UF = PRS_TIMER3_UF
prsSignalTIMER3_OF = PRS_TIMER3_OF
prsSignalTIMER3_CC0 = PRS_TIMER3_CC0
prsSignalTIMER3_CC1 = PRS_TIMER3_CC1
prsSignalTIMER3_CC2 = PRS_TIMER3_CC2
prsSignalLETIMER0_CH0 = PRS_LETIMER0_CH0
prsSignalLETIMER0_CH1 = PRS_LETIMER0_CH1
prsSignalRTC_OF = PRS_RTC_OF
prsSignalRTC_COMP0 = PRS_RTC_COMP0
prsSignalRTC_COMP1 = PRS_RTC_COMP1
prsSignalBURTC_COMP = PRS_BURTC_COMP
prsSignalBURTC_OF = PRS_BURTC_OF
prsSignalACMP0_OUT = PRS_ACMP0_OUT
prsSignalACMP1_OUT = PRS_ACMP1_OUT
prsSignalLESENSE_SCANRES0 = PRS_LESENSE_SCANRES0
prsSignalLESENSE_SCANRES1 = PRS_LESENSE_SCANRES1
prsSignalLESENSE_SCANRES2 = PRS_LESENSE_SCANRES2
prsSignalLESENSE_SCANRES3 = PRS_LESENSE_SCANRES3
prsSignalLESENSE_SCANRES4 = PRS_LESENSE_SCANRES4
prsSignalLESENSE_SCANRES5 = PRS_LESENSE_SCANRES5
prsSignalLESENSE_SCANRES6 = PRS_LESENSE_SCANRES6
prsSignalLESENSE_SCANRES7 = PRS_LESENSE_SCANRES7
prsSignalLESENSE_SCANRES8 = PRS_LESENSE_SCANRES8
prsSignalLESENSE_SCANRES9 = PRS_LESENSE_SCANRES9
prsSignalLESENSE_SCANRES10 = PRS_LESENSE_SCANRES10
prsSignalLESENSE_SCANRES11 = PRS_LESENSE_SCANRES11
prsSignalLESENSE_SCANRES12 = PRS_LESENSE_SCANRES12
prsSignalLESENSE_SCANRES13 = PRS_LESENSE_SCANRES13
prsSignalLESENSE_SCANRES14 = PRS_LESENSE_SCANRES14
prsSignalLESENSE_SCANRES15 = PRS_LESENSE_SCANRES15
prsSignalLESENSE_DEC0 = PRS_LESENSE_DEC0
prsSignalLESENSE_DEC1 = PRS_LESENSE_DEC1
prsSignalLESENSE_DEC2 = PRS_LESENSE_DEC2
prsSignalUSART0_TXC = PRS_USART0_TXC
prsSignalUSART0_RXDATAV = PRS_USART0_RXDATAV
prsSignalUSART0_IRTX = PRS_USART0_IRTX
prsSignalUSART1_TXC = PRS_USART1_TXC
prsSignalUSART1_RXDATAV = PRS_USART1_RXDATAV
prsSignalUSART2_TXC = PRS_USART2_TXC
prsSignalUSART2_RXDATAV = PRS_USART2_RXDATAV
prsSignalUART0_TXC = PRS_UART0_TXC
prsSignalUART0_RXDATAV = PRS_UART0_RXDATAV
prsSignalUART1_TXC = PRS_UART1_TXC
prsSignalUART1_RXDATAV = PRS_UART1_RXDATAV
prsSignalUSB_SOF = PRS_USB_SOF
prsSignalUSB_SOFSR = PRS_USB_SOFSR
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
}

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.

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.

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.

prsSignalTIMER2_UF

TIMER2 underflow Signal.

prsSignalTIMER2_OF

TIMER2 overflow Signal.

prsSignalTIMER2_CC0

TIMER2 capture/compare channel 0 Signal.

prsSignalTIMER2_CC1

TIMER2 capture/compare channel 1 Signal.

prsSignalTIMER2_CC2

TIMER2 capture/compare channel 2 Signal.

prsSignalTIMER3_UF

TIMER3 underflow Signal.

prsSignalTIMER3_OF

TIMER3 overflow Signal.

prsSignalTIMER3_CC0

TIMER3 capture/compare channel 0 Signal.

prsSignalTIMER3_CC1

TIMER3 capture/compare channel 1 Signal.

prsSignalTIMER3_CC2

TIMER3 capture/compare channel 2 Signal.

prsSignalLETIMER0_CH0

LETIMER0 channel 0 Signal.

prsSignalLETIMER0_CH1

LETIMER0 channel 1 Signal.

prsSignalRTC_OF

RTC_OF signal.

prsSignalRTC_COMP0

RTC_COMP0 signal.

prsSignalRTC_COMP1

RTC_COMP1 signal.

prsSignalBURTC_COMP

BURTC compare Signal.

prsSignalBURTC_OF

BURTC overflow Signal.

prsSignalACMP0_OUT

ACMP0 Signal.

prsSignalACMP1_OUT

ACMP1 output Signal.

prsSignalLESENSE_SCANRES0

LESENSE_SCANRES0 Signal.

prsSignalLESENSE_SCANRES1

LESENSE_SCANRES1 Signal.

prsSignalLESENSE_SCANRES2

LESENSE_SCANRES2 Signal.

prsSignalLESENSE_SCANRES3

LESENSE_SCANRES3 Signal.

prsSignalLESENSE_SCANRES4

LESENSE_SCANRES4 Signal.

prsSignalLESENSE_SCANRES5

LESENSE_SCANRES5 Signal.

prsSignalLESENSE_SCANRES6

LESENSE_SCANRES6 Signal.

prsSignalLESENSE_SCANRES7

LESENSE_SCANRES7 Signal.

prsSignalLESENSE_SCANRES8

LESENSE_SCANRES8 Signal.

prsSignalLESENSE_SCANRES9

LESENSE_SCANRES9 Signal.

prsSignalLESENSE_SCANRES10

LESENSE_SCANRES10 Signal.

prsSignalLESENSE_SCANRES11

LESENSE_SCANRES11 Signal.

prsSignalLESENSE_SCANRES12

LESENSE_SCANRES12 Signal.

prsSignalLESENSE_SCANRES13

LESENSE_SCANRES13 Signal.

prsSignalLESENSE_SCANRES14

LESENSE_SCANRES14 Signal.

prsSignalLESENSE_SCANRES15

LESENSE_SCANRES15 Signal.

prsSignalLESENSE_DEC0

LESENSE_DEC0 Signal.

prsSignalLESENSE_DEC1

LESENSE_DEC1 Signal.

prsSignalLESENSE_DEC2

LESENSE_DEC2 Signal.

prsSignalUSART0_TXC

USART0 TX complete Signal.

prsSignalUSART0_RXDATAV

USART0 RX data available Signal.

prsSignalUSART0_IRTX

USART0 IR TX Signal.

prsSignalUSART1_TXC

USART1 TX complete Signal.

prsSignalUSART1_RXDATAV

USART1 RX data available Signal.

prsSignalUSART2_TXC

USART2 TX complete Signal.

prsSignalUSART2_RXDATAV

USART2 RX data available Signal.

prsSignalUART0_TXC

UART0 TX complete Signal.

prsSignalUART0_RXDATAV

UART0 RX data available Signal.

prsSignalUART1_TXC

UART1 TX complete Signal.

prsSignalUART1_RXDATAV

UART1 RX data available Signal.

prsSignalUSB_SOF

USB_SOF Signal.

prsSignalUSB_SOFSR

USB_SOFSR 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.


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 988 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 1004 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 1073 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 1092 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 1104 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