PRS - Peripheral Reflex System

Description

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.

Functions

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.
void PRS_LevelSet (uint32_t level, uint32_t mask)
Set level control bit for one or more channels.
uint32_t PRS_LevelGet (void)
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.

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_ASYNC_SUPPORTED 1
PRS asynchronous support.

Enumerations

enum PRS_ChType_t {
prsTypeAsync ,
prsTypeSync
}
PRS Channel type.
enum PRS_Edge_TypeDef {
prsEdgeOff ,
prsEdgePos ,
prsEdgeNeg ,
prsEdgeBoth
}
Edge detection type.
enum PRS_Signal_t {
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.

Function Documentation

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.

PRS_SourceAsyncSignalSet()

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

Set the source and asynchronous signal for a channel.

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

PRS_GpioOutputLocation()

void PRS_GpioOutputLocation ( unsigned int ch,
unsigned int location
)

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

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.

Parameters
[in] ch PRS channel number.
[in] location PRS routing location.

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.

PRS_Reset()

void PRS_Reset ( void )

Reset all PRS channels.

This function will reset all the PRS channel configuration.

PRS_ConnectSignal()

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

Connect a PRS signal to a 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.

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.

PRS_LevelSet()

void PRS_LevelSet ( uint32_t level,
uint32_t mask
)
inline

Set level control bit for one or more channels.

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

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.

PRS_LevelGet()

uint32_t PRS_LevelGet ( void )
inline

Get level control bit for all channels.

Returns
The current software level configuration.

PRS_Values()

uint32_t PRS_Values ( PRS_ChType_t type )
inline

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.

PRS_ChannelValue()

bool PRS_ChannelValue ( unsigned int ch,
PRS_ChType_t type
)
inline

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.

PRS_PulseTrigger()

void PRS_PulseTrigger ( uint32_t channels )
inline

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

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

Parameters
[in] channels Logical ORed combination of channels to trigger a pulse for. Use PRS_SWPULSE_CHnPULSE defines.

PRS_ChannelLevelSet()

void PRS_ChannelLevelSet ( unsigned int ch,
bool level
)
inline

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

PRS_ChannelPulse()

void PRS_ChannelPulse ( unsigned int ch )
inline

Trigger a pulse on one PRS channel.

Parameters
[in] ch PRS channel number.

Macro Definition Documentation

PRS_SYNC_CHAN_COUNT

#define PRS_SYNC_CHAN_COUNT   PRS_CHAN_COUNT

PRS Synchronous channel count.

PRS_ASYNC_CHAN_COUNT

#define PRS_ASYNC_CHAN_COUNT   PRS_CHAN_COUNT

PRS Asynchronous channel count.

PRS_ASYNC_SUPPORTED

#define PRS_ASYNC_SUPPORTED   1

PRS asynchronous support.

Enumeration Type Documentation

PRS_ChType_t

PRS Channel type.

Enumerator
prsTypeAsync

Asynchronous channel type.

prsTypeSync

Synchronous channel type.

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.

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.