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, prsSignalPRS_CH12 = PRS_PRS_CH12, prsSignalPRS_CH13 = PRS_PRS_CH13, prsSignalPRS_CH14 = PRS_PRS_CH14, prsSignalPRS_CH15 = PRS_PRS_CH15, prsSignalPRS_CH16 = PRS_PRS_CH16, prsSignalPRS_CH17 = PRS_PRS_CH17, prsSignalPRS_CH18 = PRS_PRS_CH18, prsSignalPRS_CH19 = PRS_PRS_CH19, prsSignalPRS_CH20 = PRS_PRS_CH20, prsSignalPRS_CH21 = PRS_PRS_CH21, prsSignalPRS_CH22 = PRS_PRS_CH22, prsSignalPRS_CH23 = PRS_PRS_CH23, prsSignalADC0_SINGLE = PRS_ADC0_SINGLE, prsSignalADC0_SCAN = PRS_ADC0_SCAN, prsSignalADC1_SINGLE = PRS_ADC1_SINGLE, prsSignalADC1_SCAN = PRS_ADC1_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, prsSignalTIMER1_CC3 = PRS_TIMER1_CC3, 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, prsSignalTIMER5_UF = PRS_TIMER5_UF, prsSignalTIMER5_OF = PRS_TIMER5_OF, prsSignalTIMER5_CC0 = PRS_TIMER5_CC0, prsSignalTIMER5_CC1 = PRS_TIMER5_CC1, prsSignalTIMER5_CC2 = PRS_TIMER5_CC2, prsSignalTIMER6_UF = PRS_TIMER6_UF, prsSignalTIMER6_OF = PRS_TIMER6_OF, prsSignalTIMER6_CC0 = PRS_TIMER6_CC0, prsSignalTIMER6_CC1 = PRS_TIMER6_CC1, prsSignalTIMER6_CC2 = PRS_TIMER6_CC2, prsSignalLETIMER0_CH0 = PRS_LETIMER0_CH0, prsSignalLETIMER0_CH1 = PRS_LETIMER0_CH1, prsSignalLETIMER1_CH0 = PRS_LETIMER1_CH0, prsSignalLETIMER1_CH1 = PRS_LETIMER1_CH1, prsSignalPCNT0_TCC = PRS_PCNT0_TCC, prsSignalPCNT0_UFOF = PRS_PCNT0_UFOF, prsSignalPCNT0_DIR = PRS_PCNT0_DIR, prsSignalPCNT1_TCC = PRS_PCNT1_TCC, prsSignalPCNT1_UFOF = PRS_PCNT1_UFOF, prsSignalPCNT1_DIR = PRS_PCNT1_DIR, prsSignalPCNT2_TCC = PRS_PCNT2_TCC, prsSignalPCNT2_UFOF = PRS_PCNT2_UFOF, prsSignalPCNT2_DIR = PRS_PCNT2_DIR, prsSignalCRYOTIMER_PERIOD = PRS_CRYOTIMER_PERIOD, prsSignalRTC_OF = PRS_RTC_OF, prsSignalRTC_COMP0 = PRS_RTC_COMP0, prsSignalRTC_COMP1 = PRS_RTC_COMP1, prsSignalRTC_COMP2 = PRS_RTC_COMP2, prsSignalRTC_COMP3 = PRS_RTC_COMP3, prsSignalRTC_COMP4 = PRS_RTC_COMP4, prsSignalRTC_COMP5 = PRS_RTC_COMP5, 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, prsSignalACMP2_OUT = PRS_ACMP2_OUT, prsSignalACMP3_OUT = PRS_ACMP3_OUT, prsSignalVDAC0_CH0 = PRS_VDAC0_CH0, prsSignalVDAC0_CH1 = PRS_VDAC0_CH1, prsSignalVDAC0_OPA0 = PRS_VDAC0_OPA0, prsSignalVDAC0_OPA1 = PRS_VDAC0_OPA1, prsSignalVDAC0_OPA2 = PRS_VDAC0_OPA2, prsSignalVDAC0_OPA3 = PRS_VDAC0_OPA3, 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, prsSignalLESENSE_DECCMP = PRS_LESENSE_DECCMP, prsSignalLESENSE_MEASACT = PRS_LESENSE_MEASACT, 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, prsSignalUSART2_TXC = PRS_USART2_TXC, prsSignalUSART2_RXDATAV = PRS_USART2_RXDATAV, prsSignalUSART2_IRTX = PRS_USART2_IRTX, prsSignalUSART2_RTS = PRS_USART2_RTS, prsSignalUSART2_TX = PRS_USART2_TX, prsSignalUSART2_CS = PRS_USART2_CS, prsSignalUSART3_TXC = PRS_USART3_TXC, prsSignalUSART3_RXDATAV = PRS_USART3_RXDATAV, prsSignalUSART3_RTS = PRS_USART3_RTS, prsSignalUSART3_TX = PRS_USART3_TX, prsSignalUSART3_CS = PRS_USART3_CS, prsSignalUSART4_TXC = PRS_USART4_TXC, prsSignalUSART4_RXDATAV = PRS_USART4_RXDATAV, prsSignalUSART4_RTS = PRS_USART4_RTS, prsSignalUSART4_TX = PRS_USART4_TX, prsSignalUSART4_CS = PRS_USART4_CS, prsSignalUSART5_TXC = PRS_USART5_TXC, prsSignalUSART5_RXDATAV = PRS_USART5_RXDATAV, prsSignalUSART5_RTS = PRS_USART5_RTS, prsSignalUSART5_TX = PRS_USART5_TX, prsSignalUSART5_CS = PRS_USART5_CS, prsSignalUART0_TXC = PRS_UART0_TXC, prsSignalUART0_RXDATAV = PRS_UART0_RXDATAV, prsSignalUART0_RTS = PRS_UART0_RTS, prsSignalUART0_TX = PRS_UART0_TX, prsSignalUART0_CS = PRS_UART0_CS, prsSignalUART1_TXC = PRS_UART1_TXC, prsSignalUART1_RXDATAV = PRS_UART1_RXDATAV, prsSignalUART1_RTS = PRS_UART1_RTS, prsSignalUART1_TX = PRS_UART1_TX, prsSignalUART1_CS = PRS_UART1_CS, prsSignalUSB_SOF = PRS_USB_SOF, prsSignalUSB_SOFSR = PRS_USB_SOFSR, prsSignalCM4_TXEV = PRS_CM4_TXEV, prsSignalCM4_ICACHEPCHITSOF = PRS_CM4_ICACHEPCHITSOF, prsSignalCM4_ICACHEPCMISSESOF = PRS_CM4_ICACHEPCMISSESOF, prsSignalWTIMER0_UF = PRS_WTIMER0_UF, prsSignalWTIMER0_OF = PRS_WTIMER0_OF, prsSignalWTIMER0_CC0 = PRS_WTIMER0_CC0, prsSignalWTIMER0_CC1 = PRS_WTIMER0_CC1, prsSignalWTIMER0_CC2 = PRS_WTIMER0_CC2, prsSignalWTIMER1_UF = PRS_WTIMER1_UF, prsSignalWTIMER1_OF = PRS_WTIMER1_OF, prsSignalWTIMER1_CC0 = PRS_WTIMER1_CC0, prsSignalWTIMER1_CC1 = PRS_WTIMER1_CC1, prsSignalWTIMER1_CC2 = PRS_WTIMER1_CC2, prsSignalWTIMER1_CC3 = PRS_WTIMER1_CC3, prsSignalWTIMER2_UF = PRS_WTIMER2_UF, prsSignalWTIMER2_OF = PRS_WTIMER2_OF, prsSignalWTIMER2_CC0 = PRS_WTIMER2_CC0, prsSignalWTIMER2_CC1 = PRS_WTIMER2_CC1, prsSignalWTIMER2_CC2 = PRS_WTIMER2_CC2, prsSignalWTIMER3_UF = PRS_WTIMER3_UF, prsSignalWTIMER3_OF = PRS_WTIMER3_OF, prsSignalWTIMER3_CC0 = PRS_WTIMER3_CC0, prsSignalWTIMER3_CC1 = PRS_WTIMER3_CC1, prsSignalWTIMER3_CC2 = PRS_WTIMER3_CC2, 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. | |
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()
|
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()
|