There are cases when the exact TX to RX and/or RX to TX timing information is necessary to know. Obviously, it is possible to add GPIO toggle routines to the firmware code or using RAIL_GetTime() to determine transition times – however these are more or less inaccurate and additionally these have an overhead due to the extra codes.
EFR32 capable to emit TX and RX active signals. By routing these signals to PRS it is possible to examine (for example by an oscilloscope) the TX and RX active periods and thus the gaps between them, the transition times. Since in case of PRS there is a hardware channel between the producer and the consumer the measurement is very accurate. More about Peripheral Reflex System is available in “AN0025: Peripheral Reflex System (PRS)”.
To exploit the advantages of PRS it is necessary to include only a few lines of code to the project.
The following snippet was inserted into the Simple TRX example application executed on a Flex Gecko radio board (BRD4254A) using a BRD4001 WSTK but theoretically it should run on any EFR32 device.
To test how it works open the Simple TRX example, generate the radio config, add the following snippet to the code somewhere in main.c (for example after radioInit();) and compile then debug it.
GPIO_PinModeSet(gpioPortC, 10, gpioModePushPull, 0); halEnablePrs( 9, // PRS channel 15, // PRS location gpioPortC, // GPIO port 10, // GPIO pin (PRS_RAC_RX & _PRS_CH_CTRL_SOURCESEL_MASK) >> _PRS_CH_CTRL_SOURCESEL_SHIFT, (PRS_RAC_RX & _PRS_CH_CTRL_SIGSEL_MASK) >> _PRS_CH_CTRL_SIGSEL_SHIFT); GPIO_PinModeSet(gpioPortC, 11, gpioModePushPull, 0); halEnablePrs( 10, 5, gpioPortC, 11, (PRS_RAC_TX & _PRS_CH_CTRL_SOURCESEL_MASK) >> _PRS_CH_CTRL_SOURCESEL_SHIFT, (PRS_RAC_TX & _PRS_CH_CTRL_SIGSEL_MASK) >> _PRS_CH_CTRL_SIGSEL_SHIFT);
This code will route RX active signal to PC10/P12 and TX active signal to PC11/P13 pins. Connect two oscilloscope probes to these pins to examine the waveforms.
The following screenshots show the RX→TX and TX→RX transition times: