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

uint32_t PRS_ConvertToSyncSource (uint32_t asyncSource)
 Convert an async PRS source to a sync source.
 
uint32_t PRS_ConvertToSyncSignal (uint32_t asyncSource, uint32_t asyncSignal)
 Convert an async PRS signal to a sync signal.
 
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.
 
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_ConnectConsumer (unsigned int ch, PRS_ChType_t type, PRS_Consumer_t consumer)
 Connect a peripheral consumer to a PRS channel.
 
void PRS_PinOutput (unsigned int ch, PRS_ChType_t type, GPIO_Port_TypeDef port, uint8_t pin)
 Send the output of a PRS channel to a GPIO pin.
 
void PRS_Combine (unsigned int chA, unsigned int chB, PRS_Logic_t logic)
 Combine two PRS channels using a logic function.
 
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_SYNC_CH_NUM
 PRS Synchronous channel count.
 
#define PRS_ASYNC_CHAN_COUNT   PRS_ASYNC_CH_NUM
 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_Logic_t {
  prsLogic_Zero = _PRS_ASYNC_CH_CTRL_FNSEL_LOGICAL_ZERO,
  prsLogic_A_NOR_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_NOR_B,
  prsLogic_NOT_A_AND_B = _PRS_ASYNC_CH_CTRL_FNSEL_NOT_A_AND_B,
  prsLogic_NOT_A = _PRS_ASYNC_CH_CTRL_FNSEL_NOT_A,
  prsLogic_A_AND_NOT_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_AND_NOT_B,
  prsLogic_NOT_B = _PRS_ASYNC_CH_CTRL_FNSEL_NOT_B,
  prsLogic_A_XOR_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_XOR_B,
  prsLogic_A_NAND_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_NAND_B,
  prsLogic_A_AND_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_AND_B,
  prsLogic_A_XNOR_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_XNOR_B,
  prsLogic_B = _PRS_ASYNC_CH_CTRL_FNSEL_B,
  prsLogic_NOT_A_OR_B = _PRS_ASYNC_CH_CTRL_FNSEL_NOT_A_OR_B,
  prsLogic_A = _PRS_ASYNC_CH_CTRL_FNSEL_A,
  prsLogic_A_OR_NOT_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_OR_NOT_B,
  prsLogic_A_OR_B = _PRS_ASYNC_CH_CTRL_FNSEL_A_OR_B,
  prsLogic_One = _PRS_ASYNC_CH_CTRL_FNSEL_LOGICAL_ONE
}
 Logic functions that can be used when combining two PRS channels.
 
enum  PRS_Signal_t {
  prsSignalNone = PRS_SYNC_CH_CTRL_SOURCESEL_DEFAULT | (0x0 << _PRS_SYNC_CH_CTRL_SIGSEL_SHIFT),
  prsSignalSW = PRS_SYNC_CH_CTRL_SOURCESEL_DEFAULT | (0x1 << _PRS_SYNC_CH_CTRL_SIGSEL_SHIFT),
  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,
  prsSignalTIMER4_UF = PRS_TIMER4_UF,
  prsSignalTIMER4_OF = PRS_TIMER4_OF,
  prsSignalTIMER4_CC0 = PRS_TIMER4_CC0,
  prsSignalTIMER4_CC1 = PRS_TIMER4_CC1,
  prsSignalTIMER4_CC2 = PRS_TIMER4_CC2,
  prsSignalLETIMER0_CH0 = PRS_LETIMER0_CH0,
  prsSignalLETIMER0_CH1 = PRS_LETIMER0_CH1,
  prsSignalCORE_CTIOUT0 = PRS_CORE_CTIOUT0,
  prsSignalCORE_CTIOUT1 = PRS_CORE_CTIOUT1,
  prsSignalCORE_CTIOUT2 = PRS_CORE_CTIOUT2,
  prsSignalCORE_CTIOUT3 = PRS_CORE_CTIOUT3,
  prsSignalCMUL_CLKOUT0 = PRS_CMUL_CLKOUT0,
  prsSignalCMUL_CLKOUT1 = PRS_CMUL_CLKOUT1,
  prsSignalCMUL_CLKOUT2 = PRS_CMUL_CLKOUT2,
  prsSignalPRSL_ASYNCH0 = PRS_PRSL_ASYNCH0,
  prsSignalPRSL_ASYNCH1 = PRS_PRSL_ASYNCH1,
  prsSignalPRSL_ASYNCH2 = PRS_PRSL_ASYNCH2,
  prsSignalPRSL_ASYNCH3 = PRS_PRSL_ASYNCH3,
  prsSignalPRSL_ASYNCH4 = PRS_PRSL_ASYNCH4,
  prsSignalPRSL_ASYNCH5 = PRS_PRSL_ASYNCH5,
  prsSignalPRSL_ASYNCH6 = PRS_PRSL_ASYNCH6,
  prsSignalPRSL_ASYNCH7 = PRS_PRSL_ASYNCH7,
  prsSignalPRS_ASYNCH8 = PRS_PRS_ASYNCH8,
  prsSignalPRS_ASYNCH9 = PRS_PRS_ASYNCH9,
  prsSignalPRS_ASYNCH10 = PRS_PRS_ASYNCH10,
  prsSignalPRS_ASYNCH11 = PRS_PRS_ASYNCH11,
  prsSignalRTCC_CCV0 = PRS_RTCC_CCV0,
  prsSignalRTCC_CCV1 = PRS_RTCC_CCV1,
  prsSignalRTCC_CCV2 = PRS_RTCC_CCV2,
  prsSignalBURTC_COMP = PRS_BURTC_COMP,
  prsSignalBURTC_OF = PRS_BURTC_OF,
  prsSignalUSART0_TXC = PRS_USART0_TXC,
  prsSignalUSART0_RXDATA = PRS_USART0_RXDATA,
  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_RXDATA = PRS_USART1_RXDATA,
  prsSignalUSART1_IRTX = PRS_USART1_IRTX,
  prsSignalUSART1_RTS = PRS_USART1_RTS,
  prsSignalUSART1_TX = PRS_USART1_TX,
  prsSignalUSART1_CS = PRS_USART1_CS,
  prsSignalIADC0_SCANENTRY = PRS_IADC0_SCANENTRYDONE,
  prsSignalIADC0_SCANTABLE = PRS_IADC0_SCANTABLEDONE,
  prsSignalIADC0_SINGLE = PRS_IADC0_SINGLEDONE,
  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,
  prsSignalAGCL_CCA = PRS_AGCL_CCA,
  prsSignalAGCL_CCAREQ = PRS_AGCL_CCAREQ,
  prsSignalAGCL_GAINADJUST = PRS_AGCL_GAINADJUST,
  prsSignalAGCL_GAINOK = PRS_AGCL_GAINOK,
  prsSignalAGCL_GAINREDUCED = PRS_AGCL_GAINREDUCED,
  prsSignalAGCL_IFPKI1 = PRS_AGCL_IFPKI1,
  prsSignalAGCL_IFPKQ2 = PRS_AGCL_IFPKQ2,
  prsSignalAGCL_IFPKRST = PRS_AGCL_IFPKRST,
  prsSignalAGC_PEAKDET = PRS_AGC_PEAKDET,
  prsSignalAGC_PROPAGATED = PRS_AGC_PROPAGATED,
  prsSignalAGC_RSSIDONE = PRS_AGC_RSSIDONE,
  prsSignalBUFC_THR0 = PRS_BUFC_THR0,
  prsSignalBUFC_THR1 = PRS_BUFC_THR1,
  prsSignalBUFC_THR2 = PRS_BUFC_THR2,
  prsSignalBUFC_THR3 = PRS_BUFC_THR3,
  prsSignalBUFC_CNT0 = PRS_BUFC_CNT0,
  prsSignalBUFC_CNT1 = PRS_BUFC_CNT1,
  prsSignalBUFC_FULL = PRS_BUFC_FULL,
  prsSignalMODEML_ADVANCE = PRS_MODEML_ADVANCE,
  prsSignalMODEML_ANT0 = PRS_MODEML_ANT0,
  prsSignalMODEML_ANT1 = PRS_MODEML_ANT1,
  prsSignalMODEML_COHDSADET = PRS_MODEML_COHDSADET,
  prsSignalMODEML_COHDSALIVE = PRS_MODEML_COHDSALIVE,
  prsSignalMODEML_DCLK = PRS_MODEML_DCLK,
  prsSignalMODEML_DOUT = PRS_MODEML_DOUT,
  prsSignalMODEML_FRAMEDET = PRS_MODEML_FRAMEDET,
  prsSignalMODEM_FRAMESENT = PRS_MODEM_FRAMESENT,
  prsSignalMODEM_PREDET = PRS_MODEM_PREDET,
  prsSignalMODEM_LRDSADET = PRS_MODEM_LRDSADET,
  prsSignalMODEM_LRDSALIVE = PRS_MODEM_LRDSALIVE,
  prsSignalMODEM_LOWCORR = PRS_MODEM_LOWCORR,
  prsSignalMODEM_NEWSYMBOL = PRS_MODEM_NEWSYMBOL,
  prsSignalMODEM_NEWWND = PRS_MODEM_NEWWND,
  prsSignalMODEM_POSTPONE = PRS_MODEM_POSTPONE,
  prsSignalMODEMH_PRESENT = PRS_MODEMH_PRESENT,
  prsSignalMODEMH_RSSIJUMP = PRS_MODEMH_RSSIJUMP,
  prsSignalMODEMH_SYNCSENT = PRS_MODEMH_SYNCSENT,
  prsSignalMODEMH_TIMDET = PRS_MODEMH_TIMDET,
  prsSignalMODEMH_WEAK = PRS_MODEMH_WEAK,
  prsSignalMODEMH_EOF = PRS_MODEMH_EOF,
  prsSignalFRC_DCLK = PRS_FRC_DCLK,
  prsSignalFRC_DOUT = PRS_FRC_DOUT,
  prsSignalPROTIMERL_BOF = PRS_PROTIMERL_BOF,
  prsSignalPROTIMERL_CC0 = PRS_PROTIMERL_CC0,
  prsSignalPROTIMERL_CC1 = PRS_PROTIMERL_CC1,
  prsSignalPROTIMERL_CC2 = PRS_PROTIMERL_CC2,
  prsSignalPROTIMERL_CC3 = PRS_PROTIMERL_CC3,
  prsSignalPROTIMERL_CC4 = PRS_PROTIMERL_CC4,
  prsSignalPROTIMERL_LBTF = PRS_PROTIMERL_LBTF,
  prsSignalPROTIMERL_LBTR = PRS_PROTIMERL_LBTR,
  prsSignalPROTIMER_LBTS = PRS_PROTIMER_LBTS,
  prsSignalPROTIMER_POF = PRS_PROTIMER_POF,
  prsSignalPROTIMER_T0MATCH = PRS_PROTIMER_T0MATCH,
  prsSignalPROTIMER_T0UF = PRS_PROTIMER_T0UF,
  prsSignalPROTIMER_T1MATCH = PRS_PROTIMER_T1MATCH,
  prsSignalPROTIMER_T1UF = PRS_PROTIMER_T1UF,
  prsSignalPROTIMER_WOF = PRS_PROTIMER_WOF,
  prsSignalRACL_ACTIVE = PRS_RACL_ACTIVE,
  prsSignalRACL_LNAEN = PRS_RACL_LNAEN,
  prsSignalRACL_PAEN = PRS_RACL_PAEN,
  prsSignalRACL_RX = PRS_RACL_RX,
  prsSignalRACL_TX = PRS_RACL_TX,
  prsSignalRACL_CTIOUT0 = PRS_RACL_CTIOUT0,
  prsSignalRACL_CTIOUT1 = PRS_RACL_CTIOUT1,
  prsSignalRACL_CTIOUT2 = PRS_RACL_CTIOUT2,
  prsSignalRAC_CTIOUT3 = PRS_RAC_CTIOUT3,
  prsSignalSYNTH_MUX0 = PRS_SYNTH_MUX0,
  prsSignalSYNTH_MUX1 = PRS_SYNTH_MUX1,
  prsSignalPRORTC_CCV0 = PRS_PRORTC_CCV0,
  prsSignalPRORTC_CCV1 = PRS_PRORTC_CCV1,
  prsSignalLFRCO_CALMEAS = PRS_LFRCO_CALMEAS,
  prsSignalLFRCO_SDM = PRS_LFRCO_SDM,
  prsSignalLFRCO_TCMEAS = PRS_LFRCO_TCMEAS
}
 PRS Signal.
 
enum  PRS_Consumer_t {
  prsConsumerNone = 0x000,
  prsConsumerCMU_CALDN = offsetof(PRS_TypeDef, CONSUMER_CMU_CALDN),
  prsConsumerCMU_CALUP = offsetof(PRS_TypeDef, CONSUMER_CMU_CALUP),
  prsConsumerIADC0_SCANTRIGGER = offsetof(PRS_TypeDef, CONSUMER_IADC0_SCANTRIGGER),
  prsConsumerIADC0_SINGLETRIGGER = offsetof(PRS_TypeDef, CONSUMER_IADC0_SINGLETRIGGER),
  prsConsumerLDMA_REQUEST0 = offsetof(PRS_TypeDef, CONSUMER_LDMAXBAR_DMAREQ0),
  prsConsumerLDMA_REQUEST1 = offsetof(PRS_TypeDef, CONSUMER_LDMAXBAR_DMAREQ1),
  prsConsumerLETIMER0_CLEAR = offsetof(PRS_TypeDef, CONSUMER_LETIMER0_CLEAR),
  prsConsumerLETIMER0_START = offsetof(PRS_TypeDef, CONSUMER_LETIMER0_START),
  prsConsumerLETIMER0_STOP = offsetof(PRS_TypeDef, CONSUMER_LETIMER0_STOP),
  prsConsumerTIMER0_CC0 = offsetof(PRS_TypeDef, CONSUMER_TIMER0_CC0),
  prsConsumerTIMER0_CC1 = offsetof(PRS_TypeDef, CONSUMER_TIMER0_CC1),
  prsConsumerTIMER0_CC2 = offsetof(PRS_TypeDef, CONSUMER_TIMER0_CC2),
  prsConsumerTIMER1_CC0 = offsetof(PRS_TypeDef, CONSUMER_TIMER1_CC0),
  prsConsumerTIMER1_CC1 = offsetof(PRS_TypeDef, CONSUMER_TIMER1_CC1),
  prsConsumerTIMER1_CC2 = offsetof(PRS_TypeDef, CONSUMER_TIMER1_CC2),
  prsConsumerTIMER2_CC0 = offsetof(PRS_TypeDef, CONSUMER_TIMER2_CC0),
  prsConsumerTIMER2_CC1 = offsetof(PRS_TypeDef, CONSUMER_TIMER2_CC1),
  prsConsumerTIMER2_CC2 = offsetof(PRS_TypeDef, CONSUMER_TIMER2_CC2),
  prsConsumerTIMER3_CC0 = offsetof(PRS_TypeDef, CONSUMER_TIMER3_CC0),
  prsConsumerTIMER3_CC1 = offsetof(PRS_TypeDef, CONSUMER_TIMER3_CC1),
  prsConsumerTIMER3_CC2 = offsetof(PRS_TypeDef, CONSUMER_TIMER3_CC2),
  prsConsumerTIMER4_CC0 = offsetof(PRS_TypeDef, CONSUMER_TIMER4_CC0),
  prsConsumerTIMER4_CC1 = offsetof(PRS_TypeDef, CONSUMER_TIMER4_CC1),
  prsConsumerTIMER4_CC2 = offsetof(PRS_TypeDef, CONSUMER_TIMER4_CC2),
  prsConsumerUSART0_CLK = offsetof(PRS_TypeDef, CONSUMER_USART0_CLK),
  prsConsumerUSART0_IR = offsetof(PRS_TypeDef, CONSUMER_USART0_IR),
  prsConsumerUSART0_RX = offsetof(PRS_TypeDef, CONSUMER_USART0_RX),
  prsConsumerUSART0_TRIGGER = offsetof(PRS_TypeDef, CONSUMER_USART0_TRIGGER),
  prsConsumerUSART1_CLK = offsetof(PRS_TypeDef, CONSUMER_USART1_CLK),
  prsConsumerUSART1_IR = offsetof(PRS_TypeDef, CONSUMER_USART1_IR),
  prsConsumerUSART1_RX = offsetof(PRS_TypeDef, CONSUMER_USART1_RX),
  prsConsumerUSART1_TRIGGER = offsetof(PRS_TypeDef, CONSUMER_USART1_TRIGGER),
  prsConsumerEUART0_RX = offsetof(PRS_TypeDef, CONSUMER_EUART0_RX),
  prsConsumerEUART0_TRIGGER = offsetof(PRS_TypeDef, CONSUMER_EUART0_TRIGGER),
  prsConsumerWDOG0_SRC0 = offsetof(PRS_TypeDef, CONSUMER_WDOG0_SRC0),
  prsConsumerWDOG0_SRC1 = offsetof(PRS_TypeDef, CONSUMER_WDOG0_SRC1),
  prsConsumerRTCC_CC0 = offsetof(PRS_TypeDef, CONSUMER_RTCC_CC0),
  prsConsumerRTCC_CC1 = offsetof(PRS_TypeDef, CONSUMER_RTCC_CC1),
  prsConsumerRTCC_CC2 = offsetof(PRS_TypeDef, CONSUMER_RTCC_CC2)
}
 PRS Consumers.
 

Function Documentation

◆ PRS_ConvertToSyncSource()

uint32_t PRS_ConvertToSyncSource ( uint32_t  asyncSource)

Convert an async PRS source to a sync source.

This conversion must be done because the id's of the same peripheral source is different depending on if it's used as an asynchronous PRS source or a synchronous PRS source.

Parameters
[in]asyncSourceThe id of the asynchronous PRS source.
Returns
The id of the corresponding synchronous PRS source.

◆ PRS_ConvertToSyncSignal()

uint32_t PRS_ConvertToSyncSignal ( uint32_t  asyncSource,
uint32_t  asyncSignal 
)

Convert an async PRS signal to a sync signal.

PRS values for some peripherals signals differ between asynchronous and synchronous PRS channels. This function must be used to handle the conversion.

Parameters
[in]asyncSourceThe id of the asynchronous PRS source.
[in]asyncSignalThe id of the asynchronous PRS signal.
Returns
The id of the corresponding synchronous PRS signal.

◆ 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]chA channel to define the signal and source for.
[in]sourceA source to select for the channel. Use one of PRS_CH_CTRL_SOURCESEL_x defines.
[in]signalA signal (for selected source) to use. Use one of PRS_CH_CTRL_SIGSEL_x defines.
[in]edgeAn 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]chA channel to define the source and asynchronous signal for.
[in]sourceA source to select for the channel. Use one of PRS_CH_CTRL_SOURCESEL_x defines.
[in]signalAn asynchronous signal (for selected source) to use. Use one of the PRS_CH_CTRL_SIGSEL_x defines that support asynchronous operation.

◆ PRS_GetFreeChannel()

int PRS_GetFreeChannel ( PRS_ChType_t  type)

Search for the first free PRS channel.

Parameters
[in]typePRS 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]chPRS channel number.
[in]typePRS channel type. This can be either prsTypeAsync or prsTypeSync.
[in]signalThis is the PRS signal that should be placed on the channel.

◆ PRS_ConnectConsumer()

void PRS_ConnectConsumer ( unsigned int  ch,
PRS_ChType_t  type,
PRS_Consumer_t  consumer 
)

Connect a peripheral consumer to a PRS channel.

Different peripherals can use PRS channels as their input. This function can be used to connect a peripheral consumer to a PRS channel. Multiple consumers can be connected to a single PRS channel.

Parameters
[in]chPRS channel number.
[in]typePRS channel type. This can be either prsTypeAsync or prsTypeSync.
[in]consumerThis is the PRS consumer.

◆ PRS_PinOutput()

void PRS_PinOutput ( unsigned int  ch,
PRS_ChType_t  type,
GPIO_Port_TypeDef  port,
uint8_t  pin 
)

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. Some devices for instance can only route the async channels 0-5 on GPIO pins PAx and PBx while async channels 6-11 can only be routed to GPIO pins PCx and PDx

Parameters
[in]chPRS channel number.
[in]typePRS channel type. This can be either prsTypeAsync or prsTypeSync.
[in]portGPIO port
[in]pinGPIO pin

◆ PRS_Combine()

void PRS_Combine ( unsigned int  chA,
unsigned int  chB,
PRS_Logic_t  logic 
)

Combine two PRS channels using a logic function.

This function allows you to combine the output of one PRS channel with the the signal of another PRS channel using various logic functions. Note that for series 2, config 1 devices, the hardware only allows a PRS channel to be combined with the previous channel. So for instance channel 5 can be combined only with channel 4.

The logic function operates on two PRS channels called A and B. The output of PRS channel B is combined with the PRS source configured for channel A to produce an output. This output is used as the output of channel A.

Parameters
[in]chAPRS Channel for the A input.
[in]chBPRS Channel for the B input.
[in]logicThe logic function to use when combining the Channel A and Channel B. The output of the logic function is the output of Channel A. Function like AND, OR, XOR, NOT and more are available.

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

Note
Note that software level control is only available for asynchronous channels on Series 2 devices.
Parameters
[in]levelLevel 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]maskMask 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]typePRS 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]chPRS channel number.
[in]typePRS 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]channelsLogical 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]chPRS channel number.
[in]leveltrue 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]chPRS channel number.

Macro Definition Documentation

◆ PRS_SYNC_CHAN_COUNT

#define PRS_SYNC_CHAN_COUNT   PRS_SYNC_CH_NUM

PRS Synchronous channel count.

◆ PRS_ASYNC_CHAN_COUNT

#define PRS_ASYNC_CHAN_COUNT   PRS_ASYNC_CH_NUM

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_Logic_t

Logic functions that can be used when combining two PRS channels.

Enumerator
prsLogic_Zero 

Logical 0.

prsLogic_A_NOR_B 

A NOR B.

prsLogic_NOT_A_AND_B 

(!A) NOR B.

prsLogic_NOT_A 

!A.

prsLogic_A_AND_NOT_B 

A AND (!B).

prsLogic_NOT_B 

!B.

prsLogic_A_XOR_B 

A XOR B.

prsLogic_A_NAND_B 

A NAND B.

prsLogic_A_AND_B 

A AND B.

prsLogic_A_XNOR_B 

A XNOR B.

prsLogic_B 

B.

prsLogic_NOT_A_OR_B 

(!A) OR B.

prsLogic_A 

A.

prsLogic_A_OR_NOT_B 

A OR (!B).

prsLogic_A_OR_B 

A OR B.

prsLogic_One 

Logical 1.

◆ PRS_Signal_t

PRS Signal.

Enumerator
prsSignalNone 

No Signal.

prsSignalSW 

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

prsSignalTIMER4_UF 

TIMER4 underflow Signal.

prsSignalTIMER4_OF 

TIMER4 overflow Signal.

prsSignalTIMER4_CC0 

TIMER4 capture/compare channel 0 Signal.

prsSignalTIMER4_CC1 

TIMER4 capture/compare channel 1 Signal.

prsSignalTIMER4_CC2 

TIMER4 capture/compare channel 2 Signal.

prsSignalLETIMER0_CH0 

LETIMER0 channel 0 Signal.

prsSignalLETIMER0_CH1 

LETIMER0 channel 1 Signal.

prsSignalCORE_CTIOUT0 

CORE CTIOUT0 Signal.

prsSignalCORE_CTIOUT1 

CORE CTIOUT1 Signal.

prsSignalCORE_CTIOUT2 

CORE CTIOUT2 Signal.

prsSignalCORE_CTIOUT3 

CORE CTIOUT3 Signal.

prsSignalCMUL_CLKOUT0 

CMU CLKOUT0 Signal.

prsSignalCMUL_CLKOUT1 

CMU CLKOUT1 Signal.

prsSignalCMUL_CLKOUT2 

CMU CLKOUT2 Signal.

prsSignalPRSL_ASYNCH0 

PRS channel 0 Signal.

prsSignalPRSL_ASYNCH1 

PRS channel 1 Signal.

prsSignalPRSL_ASYNCH2 

PRS channel 2 Signal.

prsSignalPRSL_ASYNCH3 

PRS channel 3 Signal.

prsSignalPRSL_ASYNCH4 

PRS channel 4 Signal.

prsSignalPRSL_ASYNCH5 

PRS channel 5 Signal.

prsSignalPRSL_ASYNCH6 

PRS channel 6 Signal.

prsSignalPRSL_ASYNCH7 

PRS channel 7 Signal.

prsSignalPRS_ASYNCH8 

PRS channel 8 Signal.

prsSignalPRS_ASYNCH9 

PRS channel 9 Signal.

prsSignalPRS_ASYNCH10 

PRS channel 10 Signal.

prsSignalPRS_ASYNCH11 

PRS channel 11 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.

prsSignalBURTC_COMP 

BURTC compare Signal.

prsSignalBURTC_OF 

BURTC overflow Signal.

prsSignalUSART0_TXC 

USART0 TX complete Signal.

prsSignalUSART0_RXDATA 

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_RXDATA 

USART1 RX data available Signal.

prsSignalUSART1_IRTX 

USART1 IR TX Signal.

prsSignalUSART1_RTS 

USART1 RTS Signal.

prsSignalUSART1_TX 

USART1 TX Signal.

prsSignalUSART1_CS 

USART1 chip select Signal.

prsSignalIADC0_SCANENTRY 

IADC0 scan entry Signal.

prsSignalIADC0_SCANTABLE 

IADC0 scan table Signal.

prsSignalIADC0_SINGLE 

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

prsSignalAGCL_CCA 

AGCL_CCA Signal.

prsSignalAGCL_CCAREQ 

AGCL_CCAREQ Signal.

prsSignalAGCL_GAINADJUST 

AGCL_GAINADJUST Signal.

prsSignalAGCL_GAINOK 

AGCL_GAINOK Signal.

prsSignalAGCL_GAINREDUCED 

AGCL_GAINREDUCED Signal.

prsSignalAGCL_IFPKI1 

AGCL_IFPKI1 Signal.

prsSignalAGCL_IFPKQ2 

AGCL_IFPKQ2 Signal.

prsSignalAGCL_IFPKRST 

AGCL_IFPKRST Signal.

prsSignalAGC_PEAKDET 

AGC_PEAKDET Signal.

prsSignalAGC_PROPAGATED 

AGC_PROPAGATED Signal.

prsSignalAGC_RSSIDONE 

AGC_RSSIDONE Signal.

prsSignalBUFC_THR0 

BUFC_THR0 Signal.

prsSignalBUFC_THR1 

BUFC_THR1 Signal.

prsSignalBUFC_THR2 

BUFC_THR2 Signal.

prsSignalBUFC_THR3 

BUFC_THR3 Signal.

prsSignalBUFC_CNT0 

BUFC_CNT0 Signal.

prsSignalBUFC_CNT1 

BUFC_CNT1 Signal.

prsSignalBUFC_FULL 

BUFC_FULL Signal.

prsSignalMODEML_ADVANCE 

MODEML_ADVANCE Signal.

prsSignalMODEML_ANT0 

MODEML_ANT0 Signal.

prsSignalMODEML_ANT1 

MODEML_ANT1 Signal.

prsSignalMODEML_COHDSADET 

MODEML_COHDSADET Signal.

prsSignalMODEML_COHDSALIVE 

MODEML_COHDSALIVE Signal.

prsSignalMODEML_DCLK 

MODEML_DCLK Signal.

prsSignalMODEML_DOUT 

MODEML_DOUT Signal.

prsSignalMODEML_FRAMEDET 

MODEML_FRAMEDET Signal.

prsSignalMODEM_FRAMESENT 

MODEM_FRAMESENT Signal.

prsSignalMODEM_PREDET 

MODEM_PREDET Signal.

prsSignalMODEM_LRDSADET 

MODEM_LRDSADET Signal.

prsSignalMODEM_LRDSALIVE 

MODEM_LRDSALIVE Signal.

prsSignalMODEM_LOWCORR 

MODEM_LOWCORR Signal.

prsSignalMODEM_NEWSYMBOL 

MODEM_NEWSYMBOL Signal.

prsSignalMODEM_NEWWND 

MODEM_NEWWND Signal.

prsSignalMODEM_POSTPONE 

MODEM_POSTPONE Signal.

prsSignalMODEMH_PRESENT 

MODEMH_PRESENT Signal.

prsSignalMODEMH_RSSIJUMP 

MODEMH_RSSIJUMP Signal.

prsSignalMODEMH_SYNCSENT 

MODEMH_SYNCSENT Signal.

prsSignalMODEMH_TIMDET 

MODEMH_TIMDET Signal.

prsSignalMODEMH_WEAK 

MODEMH_WEAK Signal.

prsSignalMODEMH_EOF 

MODEMH_EOF Signal.

prsSignalFRC_DCLK 

FRC_DCLK Signal.

prsSignalFRC_DOUT 

FRC_DOUT Signal.

prsSignalPROTIMERL_BOF 

PROTIMERL_BOF Signal.

prsSignalPROTIMERL_CC0 

PROTIMERL_CC0 Signal.

prsSignalPROTIMERL_CC1 

PROTIMERL_CC1 Signal.

prsSignalPROTIMERL_CC2 

PROTIMERL_CC2 Signal.

prsSignalPROTIMERL_CC3 

PROTIMERL_CC3 Signal.

prsSignalPROTIMERL_CC4 

PROTIMERL_CC4 Signal.

prsSignalPROTIMERL_LBTF 

PROTIMERL_LBTF Signal.

prsSignalPROTIMERL_LBTR 

PROTIMERL_LBTR Signal.

prsSignalPROTIMER_LBTS 

PROTIMER_LBTS Signal.

prsSignalPROTIMER_POF 

PROTIMER_POF Signal.

prsSignalPROTIMER_T0MATCH 

PROTIMER_T0MATCH Signal.

prsSignalPROTIMER_T0UF 

PROTIMER_T0UF Signal.

prsSignalPROTIMER_T1MATCH 

PROTIMER_T1MATCH Signal.

prsSignalPROTIMER_T1UF 

PROTIMER_T1UF Signal.

prsSignalPROTIMER_WOF 

PROTIMER_WOF Signal.

prsSignalRACL_ACTIVE 

RACL_ACTIVE Signal.

prsSignalRACL_LNAEN 

RACL_LNAEN Signal.

prsSignalRACL_PAEN 

RACL_PAEN Signal.

prsSignalRACL_RX 

RACL_RX Signal.

prsSignalRACL_TX 

RACL_TX Signal.

prsSignalRACL_CTIOUT0 

RACL_CTIOUT0 Signal.

prsSignalRACL_CTIOUT1 

RACL_CTIOUT1 Signal.

prsSignalRACL_CTIOUT2 

RACL_CTIOUT2 Signal.

prsSignalRAC_CTIOUT3 

RAC_CTIOUT3 Signal.

prsSignalSYNTH_MUX0 

SYNTH_MUX0 Signal.

prsSignalSYNTH_MUX1 

SYNTH_MUX1 Signal.

prsSignalPRORTC_CCV0 

PRORTC_CCV0 Signal.

prsSignalPRORTC_CCV1 

PRORTC_CCV1 Signal.

prsSignalLFRCO_SDM 

LFRCO Calibration Measure Signal.

prsSignalLFRCO_TCMEAS 

LFRCO Sigma Delta Modulator output Signal.

◆ PRS_Consumer_t

PRS Consumers.

Enumerator
prsConsumerNone 

No PRS consumer.

prsConsumerCMU_CALDN 

CMU calibration down consumer.

prsConsumerCMU_CALUP 

CMU calibration up consumer.

prsConsumerIADC0_SCANTRIGGER 

IADC0 scan trigger consumer.

prsConsumerIADC0_SINGLETRIGGER 

IADC0 single trigger consumer.

prsConsumerLDMA_REQUEST0 

LDMA Request 0 consumer.

prsConsumerLDMA_REQUEST1 

LDMA Request 1 consumer.

prsConsumerLETIMER0_CLEAR 

LETIMER0 clear consumer.

prsConsumerLETIMER0_START 

LETIMER0 start consumer.

prsConsumerLETIMER0_STOP 

LETIMER0 stop consumer.

prsConsumerTIMER0_CC0 

TIMER0 capture/compare channel 0 consumer.

prsConsumerTIMER0_CC1 

TIMER0 capture/compare channel 1 consumer.

prsConsumerTIMER0_CC2 

TIMER0 capture/compare channel 2 consumer.

prsConsumerTIMER1_CC0 

TIMER1 capture/compare channel 0 consumer.

prsConsumerTIMER1_CC1 

TIMER1 capture/compare channel 1 consumer.

prsConsumerTIMER1_CC2 

TIMER1 capture/compare channel 2 consumer.

prsConsumerTIMER2_CC0 

TIMER2 capture/compare channel 0 consumer.

prsConsumerTIMER2_CC1 

TIMER2 capture/compare channel 1 consumer.

prsConsumerTIMER2_CC2 

TIMER2 capture/compare channel 2 consumer.

prsConsumerTIMER3_CC0 

TIMER3 capture/compare channel 0 consumer.

prsConsumerTIMER3_CC1 

TIMER3 capture/compare channel 1 consumer.

prsConsumerTIMER3_CC2 

TIMER3 capture/compare channel 2 consumer.

prsConsumerTIMER4_CC0 

TIMER4 capture/compare channel 0 consumer.

prsConsumerTIMER4_CC1 

TIMER4 capture/compare channel 1 consumer.

prsConsumerTIMER4_CC2 

TIMER4 capture/compare channel 2 consumer.

prsConsumerUSART0_CLK 

USART0 clock consumer.

prsConsumerUSART0_IR 

USART0 IR consumer.

prsConsumerUSART0_RX 

USART0 RX consumer.

prsConsumerUSART0_TRIGGER 

USART0 trigger consumer.

prsConsumerUSART1_CLK 

USART1 clock consumer.

prsConsumerUSART1_IR 

USART1 IR consumer.

prsConsumerUSART1_RX 

USART1 TX consumer.

prsConsumerUSART1_TRIGGER 

USART1 trigger consumer.

prsConsumerEUART0_RX 

EUART0 RX consumer.

prsConsumerEUART0_TRIGGER 

EUART0 TRIGGER Consumer.

prsConsumerWDOG0_SRC0 

WDOG0 source 0 consumer.

prsConsumerWDOG0_SRC1 

WDOG0 source 1 consumer.

prsConsumerRTCC_CC0 

RTCC capture/compare channel 0 consumer.

prsConsumerRTCC_CC1 

RTCC capture/compare channel 1 consumer.

prsConsumerRTCC_CC2 

RTCC capture/compare channel 2 consumer.