CC13xx Driver Library
RF Core

Data Structures

struct  rfTrim_t
 

Functions

static void RFCClockEnable (void)
 Enable the RF core clocks. More...
 
static void RFCClockDisable (void)
 Disable the RF core clocks. More...
 
static void RFCCpeIntClear (uint32_t ui32Mask)
 Clear HW interrupt flags. More...
 
static void RFCHwIntClear (uint32_t ui32Mask)
 Clear CPE interrupt flags. More...
 
static void RFCCpe0IntSelect (uint32_t ui32Mask)
 Select interrupt sources to CPE0 (assign to INT_RFC_CPE_0 interrupt vector). More...
 
static void RFCCpe1IntSelect (uint32_t ui32Mask)
 Select interrupt sources to CPE1 (assign to INT_RFC_CPE_1 interrupt vector). More...
 
static void RFCCpeIntEnable (uint32_t ui32Mask)
 Enable CPEx interrupt sources. More...
 
static void RFCCpe0IntSelectClearEnable (uint32_t ui32Mask)
 Select, clear, and enable interrupt sources to CPE0. More...
 
static void RFCCpe1IntSelectClearEnable (uint32_t ui32Mask)
 Select, clear, and enable interrupt sources to CPE1. More...
 
static void RFCHwIntEnable (uint32_t ui32Mask)
 Enable HW interrupt sources. More...
 
static void RFCCpeIntDisable (uint32_t ui32Mask)
 Disable CPE interrupt sources. More...
 
static void RFCHwIntDisable (uint32_t ui32Mask)
 Disable HW interrupt sources. More...
 
uint32_t RFCCpeIntGetAndClear (uint32_t ui32Mask)
 Get and clear CPE interrupt flags. More...
 
static void RFCAckIntClear (void)
 Clear ACK interrupt flag. More...
 
uint32_t RFCDoorbellSendTo (uint32_t pOp)
 Send a radio operation to the doorbell and wait for an acknowledgment. More...
 
void RFCSynthPowerDown (void)
 This function implements a fast way to turn off the synthesizer. More...
 
void RFCCpePatchReset (void)
 Reset previously patched CPE RAM to a state where it can be patched again. More...
 
uint8_t RFCOverrideSearch (const uint32_t *pOverride, const uint32_t pattern, const uint32_t mask, const uint8_t searchDepth)
 
uint8_t RFCOverrideUpdate (rfc_radioOp_t *pOpSetup, uint32_t *pParams)
 Function to update override list. More...
 
uint32_t RFCHwIntGetAndClear (uint32_t ui32Mask)
 Get and clear HW interrupt flags. More...
 
void RFCRfTrimRead (rfc_radioOp_t *pOpSetup, rfTrim_t *rfTrim)
 Get the type of currently selected PA. More...
 
void RFCRfTrimSet (rfTrim_t *rfTrim)
 Write preloaded RF trim values directly into CPE. More...
 
uint8_t RFCRTrim (rfc_radioOp_t *pOpSetup)
 Check Override RTrim vs FCFG RTrim. More...
 
void RFCAdi3VcoLdoVoltageMode (bool bEnable)
 Function to set VCOLDO reference to voltage mode. More...
 

Detailed Description

Function Documentation

static void RFCAckIntClear ( void  )
inlinestatic

Clear ACK interrupt flag.

Referenced by RFCDoorbellSendTo().

321 {
322  // Clear any pending interrupts.
323  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFACKIFG) = 0x0;
324 }
void RFCAdi3VcoLdoVoltageMode ( bool  bEnable)

Function to set VCOLDO reference to voltage mode.

488 {
489  if (bEnable)
490  {
491  // First make sure the REFSYSCTL0 mux output is not further muxed out
492  HWREGB(0x40086200) = 0x0;
493 
494  // Set the REFSYSCTL0 mux as desired for VCOLDO voltage mode
496  }
497  else
498  {
499  // Revert the mux override
501  }
502 }
static void RFCClockDisable ( void  )
inlinestatic

Disable the RF core clocks.

As soon as the RF core is started it will handle clock control autonomously. No check should be performed to check the clocks. Instead the radio can be ping'ed through the command interface.

When disabling clocks it is the programmers responsibility that the RF core clocks are safely gated. I.e. the RF core should be safely 'parked'.

Returns
None
155 {
156  // Disable all clocks
157  HWREG(RFC_PWR_NONBUF_BASE + RFC_PWR_O_PWMCLKEN) = 0x0;
158 }
static void RFCClockEnable ( void  )
inlinestatic

Enable the RF core clocks.

As soon as the RF core is started it will handle clock control autonomously. No check should be performed to check the clocks. Instead the radio can be ping'ed through the command interface.

Returns
None
130 {
131  // Enable basic clocks to get the CPE run
132  HWREG(RFC_PWR_NONBUF_BASE + RFC_PWR_O_PWMCLKEN) = RFC_PWR_PWMCLKEN_CPERAM
135 }
static void RFCCpe0IntSelect ( uint32_t  ui32Mask)
inlinestatic

Select interrupt sources to CPE0 (assign to INT_RFC_CPE_0 interrupt vector).

Referenced by RFCCpe0IntSelectClearEnable().

197 {
198  // Multiplex RF Core interrupts to CPE0 IRQ.
199  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEISL) &= ~ui32Mask;
200 }
static void RFCCpe0IntSelectClearEnable ( uint32_t  ui32Mask)
inlinestatic

Select, clear, and enable interrupt sources to CPE0.

236 {
237  // Multiplex RF Core interrupts to CPE0 IRQ.
238  RFCCpe0IntSelect(ui32Mask);
239 
240  // Clear the masked interrupts.
241  RFCCpeIntClear(ui32Mask);
242 
243  // Enable the masked interrupts.
244  RFCCpeIntEnable(ui32Mask);
245 }
static void RFCCpeIntClear(uint32_t ui32Mask)
Clear HW interrupt flags.
Definition: rfc.h:167
static void RFCCpeIntEnable(uint32_t ui32Mask)
Enable CPEx interrupt sources.
Definition: rfc.h:222
static void RFCCpe0IntSelect(uint32_t ui32Mask)
Select interrupt sources to CPE0 (assign to INT_RFC_CPE_0 interrupt vector).
Definition: rfc.h:196

Here is the call graph for this function:

static void RFCCpe1IntSelect ( uint32_t  ui32Mask)
inlinestatic

Select interrupt sources to CPE1 (assign to INT_RFC_CPE_1 interrupt vector).

Referenced by RFCCpe1IntSelectClearEnable().

210 {
211  // Multiplex RF Core interrupts to CPE1 IRQ.
212  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEISL) |= ui32Mask;
213 }
static void RFCCpe1IntSelectClearEnable ( uint32_t  ui32Mask)
inlinestatic

Select, clear, and enable interrupt sources to CPE1.

255 {
256  // Multiplex RF Core interrupts to CPE1 IRQ.
257  RFCCpe1IntSelect(ui32Mask);
258 
259  // Clear the masked interrupts.
260  RFCCpeIntClear(ui32Mask);
261 
262  // Enable the masked interrupts.
263  RFCCpeIntEnable(ui32Mask);
264 }
static void RFCCpe1IntSelect(uint32_t ui32Mask)
Select interrupt sources to CPE1 (assign to INT_RFC_CPE_1 interrupt vector).
Definition: rfc.h:209
static void RFCCpeIntClear(uint32_t ui32Mask)
Clear HW interrupt flags.
Definition: rfc.h:167
static void RFCCpeIntEnable(uint32_t ui32Mask)
Enable CPEx interrupt sources.
Definition: rfc.h:222

Here is the call graph for this function:

static void RFCCpeIntClear ( uint32_t  ui32Mask)
inlinestatic

Clear HW interrupt flags.

Referenced by RFCCpe0IntSelectClearEnable(), RFCCpe1IntSelectClearEnable(), and RFCCpeIntGetAndClear().

168 {
169  // Clear the masked pending interrupts.
170  do
171  {
172  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEIFG) = ~ui32Mask;
173  }while(HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEIFG) & ui32Mask);
174 }
static void RFCCpeIntDisable ( uint32_t  ui32Mask)
inlinestatic

Disable CPE interrupt sources.

287 {
288  // Disable the masked interrupts
289  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEIEN) &= ~ui32Mask;
290 }
static void RFCCpeIntEnable ( uint32_t  ui32Mask)
inlinestatic

Enable CPEx interrupt sources.

Referenced by RFCCpe0IntSelectClearEnable(), and RFCCpe1IntSelectClearEnable().

223 {
224  // Enable CPE interrupts from RF Core.
225  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEIEN) |= ui32Mask;
226 }
uint32_t RFCCpeIntGetAndClear ( uint32_t  ui32Mask)

Get and clear CPE interrupt flags.

108 {
109  // Read the CPE interrupt flags which match the provided bitmask
110  uint32_t ui32Ifg = HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFCPEIFG) & ui32Mask;
111 
112  // Clear the interrupt flags
113  RFCCpeIntClear(ui32Ifg);
114 
115  // Return with the interrupt flags
116  return (ui32Ifg);
117 }
static void RFCCpeIntClear(uint32_t ui32Mask)
Clear HW interrupt flags.
Definition: rfc.h:167

Here is the call graph for this function:

void RFCCpePatchReset ( void  )

Reset previously patched CPE RAM to a state where it can be patched again.

181 {
182  uint8_t *pPatchTab = (uint8_t *) (_CPERAM_START + _PARSER_PATCH_TAB_OFFSET);
183  uint32_t *pIrqPatch = (uint32_t *)(_CPERAM_START + _IRQPATCH_OFFSET);
184 
185  memset(pPatchTab, 0xFF, _IRQPATCH_OFFSET - _PARSER_PATCH_TAB_OFFSET);
186 
187  int i;
188  for (i = 0; i < sizeof(rfc_defaultIrqAddr)/sizeof(rfc_defaultIrqAddr[0]); i++)
189  {
190  pIrqPatch[i * 2 + 1] = rfc_defaultIrqAddr[i];
191  }
192 }
static const uint16_t rfc_defaultIrqAddr[]
Definition: rfc.c:85
#define _IRQPATCH_OFFSET
Definition: rfc.c:78
#define _CPERAM_START
Definition: rfc.c:75
#define _PARSER_PATCH_TAB_OFFSET
Definition: rfc.c:76
uint32_t RFCDoorbellSendTo ( uint32_t  pOp)

Send a radio operation to the doorbell and wait for an acknowledgment.

127 {
128  // Wait until the doorbell becomes available
129  while(HWREG(RFC_DBELL_BASE + RFC_DBELL_O_CMDR) != 0);
130  RFCAckIntClear();
131 
132  // Submit the command to the CM0 through the doorbell
133  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_CMDR) = pOp;
134 
135  // Wait until the CM0 starts to parse the command
136  while(!HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFACKIFG));
137  RFCAckIntClear();
138 
139  // Return with the content of status register
140  return(HWREG(RFC_DBELL_BASE + RFC_DBELL_O_CMDSTA));
141 }
static void RFCAckIntClear(void)
Clear ACK interrupt flag.
Definition: rfc.h:320

Here is the call graph for this function:

static void RFCHwIntClear ( uint32_t  ui32Mask)
inlinestatic

Clear CPE interrupt flags.

Referenced by RFCHwIntGetAndClear().

184 {
185  // Clear the masked pending interrupts.
186  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFHWIFG) = ~ui32Mask;
187 }
static void RFCHwIntDisable ( uint32_t  ui32Mask)
inlinestatic

Disable HW interrupt sources.

300 {
301  // Disable the masked interrupts
302  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFHWIEN) &= ~ui32Mask;
303 }
static void RFCHwIntEnable ( uint32_t  ui32Mask)
inlinestatic

Enable HW interrupt sources.

274 {
275  // Enable the masked interrupts
276  HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFHWIEN) |= ui32Mask;
277 }
uint32_t RFCHwIntGetAndClear ( uint32_t  ui32Mask)

Get and clear HW interrupt flags.

240 {
241  // Read the CPE interrupt flags which match the provided bitmask
242  uint32_t ui32Ifg = HWREG(RFC_DBELL_BASE + RFC_DBELL_O_RFHWIFG) & ui32Mask;
243 
244  // Clear the interupt flags
245  RFCHwIntClear(ui32Ifg);
246 
247  // Return with the interrupt flags
248  return (ui32Ifg);
249 }
static void RFCHwIntClear(uint32_t ui32Mask)
Clear CPE interrupt flags.
Definition: rfc.h:183

Here is the call graph for this function:

uint8_t RFCOverrideSearch ( const uint32_t *  pOverride,
const uint32_t  pattern,
const uint32_t  mask,
const uint8_t  searchDepth 
)

Referenced by RFCRTrim().

202 {
203  // Search from start of the override list, to look for first override entry that matches search pattern
204  uint8_t override_index;
205  for(override_index = 0; (override_index < searchDepth) && (pOverride[override_index] != END_OVERRIDE); override_index++)
206  {
207  // Compare the value to the given pattern
208  if((pOverride[override_index] & mask) == pattern)
209  {
210  // Return with the index of override in case of match
211  return override_index;
212  }
213  }
214 
215  // Return with an invalid index
216  return 0xFF;
217 }
#define END_OVERRIDE
End of string for override register.
Definition: rf_mailbox.h:327
uint8_t RFCOverrideUpdate ( rfc_radioOp_t pOpSetup,
uint32_t *  pParams 
)

Function to update override list.

226 {
227  /* Handle RTrim values. */
228  return RFCRTrim(pOpSetup);
229 
230 }
uint8_t RFCRTrim(rfc_radioOp_t *pOpSetup)
Check Override RTrim vs FCFG RTrim.
Definition: rfc.c:356

Here is the call graph for this function:

void RFCRfTrimRead ( rfc_radioOp_t pOpSetup,
rfTrim_t rfTrim 
)

Get the type of currently selected PA.

Read RF trim from flash using CM3.

259 {
260  // Definition of position and bitmask of divider value
261  const uint32_t CONFIG_MISC_ADC_DIVIDER = 27;
262  const uint32_t CONFIG_MISC_ADC_DIVIDER_BM = 0xF8000000U;
263 
264  // Local variable
265  int32_t divider;
266 
267  // Based on the type of setup command, decode the divider value
268  switch (pOpSetup->commandNo)
269  {
270  case CMD_RADIO_SETUP: // Use the loDivider value
271  divider = ((rfc_CMD_RADIO_SETUP_t *)pOpSetup)->loDivider;
272  break;
273  case CMD_PROP_RADIO_DIV_SETUP: // Use the loDivider value
274  divider = ((rfc_CMD_PROP_RADIO_DIV_SETUP_t *)pOpSetup)->loDivider;
275  break;
276  default: // Use 2.4 GHz by default
277  divider = 0;
278  break;
279  }
280 
281  // Read trim values from FCFG1
282  pRfTrim->configIfAdc = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_IF_ADC);
283  switch (divider)
284  {
285  case 5:
286  pRfTrim->configRfFrontend = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_RF_FRONTEND_DIV5);
287  pRfTrim->configSynth = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_SYNTH_DIV5);
288  pRfTrim->configMiscAdc = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV5)
289  & ~CONFIG_MISC_ADC_DIVIDER_BM) | (5U << CONFIG_MISC_ADC_DIVIDER);
290  break;
291 
292  case 6:
293  pRfTrim->configRfFrontend = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_RF_FRONTEND_DIV6);
294  pRfTrim->configSynth = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_SYNTH_DIV6);
295  pRfTrim->configMiscAdc = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV6)
296  & ~CONFIG_MISC_ADC_DIVIDER_BM) | (6U << CONFIG_MISC_ADC_DIVIDER);
297  break;
298 
299  case 10:
300  pRfTrim->configRfFrontend = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_RF_FRONTEND_DIV10);
301  pRfTrim->configSynth = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_SYNTH_DIV10);
302  pRfTrim->configMiscAdc = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV10)
303  & ~CONFIG_MISC_ADC_DIVIDER_BM) | (10U << CONFIG_MISC_ADC_DIVIDER);
304  break;
305 
306  case 12:
307  pRfTrim->configRfFrontend = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_RF_FRONTEND_DIV12);
308  pRfTrim->configSynth = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_SYNTH_DIV12);
309  pRfTrim->configMiscAdc = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV12)
310  & ~CONFIG_MISC_ADC_DIVIDER_BM) | (12U << CONFIG_MISC_ADC_DIVIDER);
311  break;
312 
313  case 15:
314  pRfTrim->configRfFrontend = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_RF_FRONTEND_DIV15);
315  pRfTrim->configSynth = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_SYNTH_DIV15);
316  pRfTrim->configMiscAdc = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV15)
317  & ~CONFIG_MISC_ADC_DIVIDER_BM) | (15U << CONFIG_MISC_ADC_DIVIDER);
318  break;
319 
320  case 30:
321  pRfTrim->configRfFrontend = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_RF_FRONTEND_DIV30);
322  pRfTrim->configSynth = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_SYNTH_DIV30);
323  pRfTrim->configMiscAdc = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV30)
324  & ~CONFIG_MISC_ADC_DIVIDER_BM) | (30U << CONFIG_MISC_ADC_DIVIDER);
325  break;
326 
327  default:
328  pRfTrim->configRfFrontend = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_RF_FRONTEND);
329  pRfTrim->configSynth = HWREG(FCFG1_BASE + FCFG1_O_CONFIG_SYNTH);
330  // Make sure configMiscAdc is not 0 by setting an unused bit to 1
331  pRfTrim->configMiscAdc = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC)
332  & ~CONFIG_MISC_ADC_DIVIDER_BM) | (2U << CONFIG_MISC_ADC_DIVIDER);
333  break;
334  }
335 }
struct __RFC_STRUCT rfc_CMD_PROP_RADIO_DIV_SETUP_s rfc_CMD_PROP_RADIO_DIV_SETUP_t
Definition: rf_prop_cmd.h:73
struct __RFC_STRUCT rfc_CMD_RADIO_SETUP_s rfc_CMD_RADIO_SETUP_t
Definition: rf_common_cmd.h:68
#define CMD_PROP_RADIO_DIV_SETUP
Definition: rf_prop_cmd.h:552
#define CMD_RADIO_SETUP
Definition: rf_common_cmd.h:169
void RFCRfTrimSet ( rfTrim_t rfTrim)

Write preloaded RF trim values directly into CPE.

345 {
346  memcpy((void*)&HWREG(0x21000018), (void*)pRfTrim, sizeof(rfTrim_t));
347 }
Definition: rfc.h:74
uint8_t RFCRTrim ( rfc_radioOp_t pOpSetup)

Check Override RTrim vs FCFG RTrim.

Referenced by RFCOverrideUpdate().

357 {
358  int32_t divider;
359  uint32_t fcfg1_rtrim;
360  uint32_t *pOverride;
361  int32_t override_index;
362  uint32_t override_value;
363  uint32_t override_rtrim = 0;
364 
365  // Based on the type of setup command, decode the divider and overrides
366  switch (pOpSetup->commandNo)
367  {
368  case CMD_RADIO_SETUP:
369  divider = ((rfc_CMD_RADIO_SETUP_t *)pOpSetup)->loDivider;
370  pOverride = ((rfc_CMD_RADIO_SETUP_t *)pOpSetup)->pRegOverride;
371  break;
373  divider = 2;
374  pOverride = ((rfc_CMD_PROP_RADIO_SETUP_t *)pOpSetup)->pRegOverride;
375  break;
377  divider = ((rfc_CMD_PROP_RADIO_DIV_SETUP_t *)pOpSetup)->loDivider;
378  pOverride = ((rfc_CMD_PROP_RADIO_DIV_SETUP_t *)pOpSetup)->pRegOverride;
379  break;
380  default:
381  return 1;
382  }
383 
384  if (pOverride == 0)
385  {
386  // There is no override list provided
387  return 1;
388  }
389 
390  // Search for an RTRIM value within the override list.
392 
393  // If we found it, decode the value.
394  if(override_index < RFC_MAX_SEARCH_DEPTH)
395  {
396  override_value = pOverride[override_index];
397  override_rtrim = (override_value & 0xF0000) >> 16;
398  }
399  else
400  {
401  // There is no RTRIM value within the first items of the override list
402  return 1;
403  }
404 
405  // Read trim from FCFG1
406  switch (divider)
407  {
408  case 2:
409  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC)
411  break;
412  case 5:
413  // Legacy value
414  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_MISC_OTP_DATA)
416  break;
417  case 6:
418  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV6)
420  break;
421  case 10:
422  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV10)
424  break;
425  case 12:
426  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV12)
428  break;
429  case 15:
430  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV15)
432  break;
433  case 30:
434  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC_DIV30)
436  break;
437  default:
438  fcfg1_rtrim = (HWREG(FCFG1_BASE + FCFG1_O_CONFIG_MISC_ADC)
440  break;
441  }
442 
443  // Check for value matching early device samples
444  if(fcfg1_rtrim == 0xF)
445  {
446  // Set to default value
447  switch (divider)
448  {
449  case 5:
450  case 10:
451  case 15:
452  case 30:
453  pOverride[override_index] = (override_value & 0xFFF0FFFF) | (0x7 << 16);
454  break;
455  case 2:
456  case 6:
457  case 12:
458  default:
459  pOverride[override_index] = (override_value & 0xFFF0FFFF) | (0x4 << 16);
460  break;
461  }
462  }
463  else
464  {
465  // Test Override vs FCFG1 limit.
466  if(override_rtrim >= fcfg1_rtrim)
467  {
468  ; // Do nothing
469  }
470  else
471  {
472  // Set override to FCFG1 limit value
473  pOverride[override_index] = (override_value & 0xFFF0FFFF) | (fcfg1_rtrim << 16);
474  }
475  }
476 
477  return 0;
478 }
#define RFC_RTRIM_MASK
Definition: rfc.c:82
#define CMD_PROP_RADIO_SETUP
Definition: rf_prop_cmd.h:453
struct __RFC_STRUCT rfc_CMD_PROP_RADIO_DIV_SETUP_s rfc_CMD_PROP_RADIO_DIV_SETUP_t
Definition: rf_prop_cmd.h:73
struct __RFC_STRUCT rfc_CMD_RADIO_SETUP_s rfc_CMD_RADIO_SETUP_t
Definition: rf_common_cmd.h:68
#define CMD_PROP_RADIO_DIV_SETUP
Definition: rf_prop_cmd.h:552
#define RFC_RTRIM_PATTERN
Definition: rfc.c:81
uint8_t RFCOverrideSearch(const uint32_t *pOverride, const uint32_t pattern, const uint32_t mask, const uint8_t searchDepth)
Definition: rfc.c:201
struct __RFC_STRUCT rfc_CMD_PROP_RADIO_SETUP_s rfc_CMD_PROP_RADIO_SETUP_t
Definition: rf_prop_cmd.h:72
#define CMD_RADIO_SETUP
Definition: rf_common_cmd.h:169
#define RFC_MAX_SEARCH_DEPTH
Definition: rfc.h:82

Here is the call graph for this function:

void RFCSynthPowerDown ( void  )

This function implements a fast way to turn off the synthesizer.

151 {
152  // Definition of reserved words
153  const uint32_t RFC_RESERVED0 = 0x40044108;
154  const uint32_t RFC_RESERVED1 = 0x40044114;
155  const uint32_t RFC_RESERVED2 = 0x4004410C;
156  const uint32_t RFC_RESERVED3 = 0x40044100;
157 
158  // Disable CPE clock, enable FSCA clock.
159  HWREG(RFC_PWR_NONBUF_BASE + RFC_PWR_O_PWMCLKEN) = (HWREG(RFC_PWR_NONBUF_BASE + RFC_PWR_O_PWMCLKEN)
161 
162  HWREG(RFC_RESERVED0) = 3;
163  HWREG(RFC_RESERVED1) = 0x1030;
164  HWREG(RFC_RESERVED2) = 1;
165  HWREG(RFC_RESERVED1) = 0x50;
166  HWREG(RFC_RESERVED2) = 1;
167  HWREG(RFC_RESERVED1) = 0x650;
168  HWREG(RFC_RESERVED2) = 1;
169  HWREG(RFC_RESERVED3) = 1;
170 
171 }

Macro Definition Documentation

#define RFC_MAX_SEARCH_DEPTH   5

Referenced by RFCRTrim().