📄 simple_mac.c
字号:
* 0 16MHz (Recommended default) \n
* 1 8MHz \n
* 2 4MHz \n
* 3 2MHz \n
* 4 1MHz \n
* 5 62.5kHz \n
* 6 32.786kHz \n
* 7 16.393kHz \n
*
* \return Status
*/
UINT8 MLMESetMC13192TmrPrescale (UINT8 u8Freq)
{
UINT8 u8Status;
u8Status = PLMESetMC13192TmrPrescale (u8Freq);
return u8Status;
}
/*!
* \fn UINT8 MLMEEnergyDetect (void)
*
* \brief Measure channel energy
*
* \return Energy
*
* \note \n
* Actual power returned is: -(power/2) \n
* Global calibration required for accuracy (from MLMEMC13192FEGainAdjust).
*/
UINT8 MLMEEnergyDetect (void)
{
UINT8 u8Power;
u8Power = PLMEEnergyDetect();
return u8Power;
}
/*!
* \fn UINT8 MLMEMC13192SoftReset(void)
*
* \brief Force the MC13192 into a soft reset condition
*
* \return Status
*
*/
UINT8 MLMEMC13192SoftReset(void)
{
UINT8 u8Status;
/* Performs a soft reset of MC13192 via writing to register 0*/
u8Status = PLMEMC13192SoftReset();
return u8Status;
}
/*!
* \fn UINT8 MLMEMC13192XtalAdjust(UINT8 u8ReqValue)
*
* \brief Adjust the MC13192s crystal trim value
*
* \param u8ReqValue Trim Value (0-255)
*
* \return Status
*
*/
UINT8 MLMEMC13192XtalAdjust(UINT8 u8ReqValue)
{
UINT8 u8Status;
u8Status = PLMEMC13192XtalAdjust(u8ReqValue);
return u8Status;
}
/*!
* \fn UINT8 MLMELinkQuality (void)
*
* \brief Report energy from last successful RX packet
*
* \return Energy
*
* \note \n
* Actual power returned is: -(power/2) \n
* Global calibration required for accuracy (from MLMEMC13192FEGainAdjust).
*
*/
UINT8 MLMELinkQuality (void)
{
UINT8 u8Power;
u8Power = PLMELinkQuality ();
return u8Power;
}
/*!
* \fn UINT8 MLMEMC13192FEGainAdjust(UINT8 u8GainValue)
*
* \brief Adjust the MC13192s gain compensator
*
* \param u8GainValue Gain compensation value (0 to 255. 128 is center point)
*
* \return Status
*/
UINT8 MLMEMC13192FEGainAdjust(UINT8 u8GainValue)
{
UINT8 u8Status;
u8Status = PLMEMC13192FEGainAdjust(u8GainValue);
return u8Status;
}
/*
* MLMEScanRequest : Scan the enabled channels for energy
*
* Parameters : FLAGS Option (UINT8)
* SCAN_MODE_CCA
* SCAN_MODE_ED
*
* (UINT8 *)
* The results of the scan [16 bytes long]
*
* Return : Status
*/
UINT8 MLMEScanRequest(UINT8 flags, UINT8 *pu8ChannelScan) {
UINT16 u16ChannelReg1;
UINT16 u16ChannelReg2;
UINT8 u8ClearestChLevel = 0; /* Default to very busy */
UINT8 u8ClearestCh = 0;
UINT8 u8i;
UINT16 u16ChannelMask = 0;
UINT8 u8Status;
/* Turn off the Radio if it is on */
(void)MLMERXDisableRequest();
/* Save current channel registers to set it back */
u16ChannelReg1 = SPIDrvRead(LO1_IDIV_ADDR);
u16ChannelReg2 = SPIDrvRead(LO1_NUM_ADDR);
for (u8i=0; u8i < 16; u8i++) {
u16ChannelMask = (1 << u8i);
u8Status = MLMESetChannelRequest(u8i);
if (flags & SCAN_MODE_CCA) {
pu8ChannelScan[u8i] = PLMECCARequest();
}
if (flags & SCAN_MODE_ED) {
pu8ChannelScan[u8i] = PLMEEnergyDetect();
}
/* Find the clearest Channel (Largest Number)*/
if (pu8ChannelScan[u8i] > u8ClearestChLevel) {
u8ClearestChLevel = pu8ChannelScan[u8i];
u8ClearestCh = u8i;
}
}
/* Restore Channel Value */
SPIDrvWrite(LO1_IDIV_ADDR, u16ChannelReg1);
SPIDrvWrite(LO1_IDIV_ADDR, u16ChannelReg1);
return u8ClearestCh;
}
/*!
* \fn UINT8 MLMEMC13192PAOutputAdjust(UINT8 u8PaValue)
*
* \brief Adjust the Output power of the transmitter
*
* \param u8PaValue Course Valueacket
*
* \return Status
*/
UINT8 MLMEMC13192PAOutputAdjust(UINT8 u8PaValue)
{
UINT8 u8Status;
u8Status = PLMEMC13192PAOutputAdjust(u8PaValue);
return u8Status;
}
/*!
* \fn UINT8 MLMEGetRficVersion(void)
*
* \brief Reads the version number of the IC
*
* \return The version number of the IC
*/
UINT8 MLMEGetRficVersion(void)
{
UINT8 u8Version;
u8Version = PLMEGetRficVersion();
return u8Version;
}
/*!
* \fn void MLMETestMode (tTxPacket *psPacket, UINT8 u8mode)
*
* \brief Execute a test mode
*
* \param *psPacket Packet pointer
* \param u8mode desired test mode
*
*/
void MLMETestMode (tTxPacket *psPacket, UINT8 u8mode)
{
UINT16 u16reg;
UINT32 i;
switch (u8mode)
{
/* Continuously transmit a PRBS9 pattern. */
case PULSE_TX_PRBS9:
PLMELoadPRBS9 (psPacket); /* Load the TX RAM */
(void)PLMESetTrxStateRequest(PULSE_TX_MODE); /* transmit it. Interrupt
* routine will retransmit
* after completion
*/
break;
/* Sets the device back to original IDLE mode. */
case FORCE_IDLE:
MC13192DisableInterrupts(); /* Mask off interrupts from MC13192 */
RTXENDeAssert(); /* Force MC13192 to IDLE */
gu8RTxMode = IDLE_MODE; /* set the SW mode to IDLE */
MC13192RestoreInterrupts();
for (i=0; i < 200; i++)
; /* Empty Loop */
(void)PLMESetTrxStateRequest(IDLE_MODE); /* Set to IDLE */
u16reg = SPIDrvRead(BER_REG); /* Turn off BER mode */
u16reg = (u16reg & ~(BER_MASK));
SPIDrvWrite(BER_REG,u16reg);
u16reg = SPIDrvRead(PSM_REG); /* Turn off PSM test mode */
u16reg = (u16reg & ~(PSM_MASK));
SPIDrvWrite(PSM_REG,u16reg);
u16reg = SPIDrvRead(PAEN_REG); /* dis-enable the PA */
u16reg = (u16reg & ~PAEN_MASK);
SPIDrvWrite(PAEN_REG,u16reg);
(void)PLMESetTrxStateRequest(TX_MODE); /* Realign TX */
u16reg = SPIDrvRead(PAEN_REG); /* enable the PA */
u16reg = (u16reg | PAEN_MASK);
SPIDrvWrite(PAEN_REG,u16reg);
break;
/* Sets the device into continuous RX mode */
case CONTINUOUS_RX:
u16reg = SPIDrvRead(BER_REG); /* Turn on BER mode */
u16reg = (u16reg | BER_MASK);
SPIDrvWrite(BER_REG,u16reg);
(void)PLMESetTrxStateRequest(RX_MODE); /* Turn the receiver on */
break;
/* Sets the device to continuously transmit a 10101010 pattern */
case CONTINUOUS_TX_MOD:
SPIDrvWrite(TX_PKT,0xAAAA); /* Load the test pattern */
u16reg = SPIDrvRead(PAEN_REG); /* Disable the PA */
u16reg = (u16reg & ~(PAEN_MASK));
SPIDrvWrite(PAEN_REG,u16reg);
u16reg = SPIDrvRead(TX_PKT_LEN); /* Set the length field */
u16reg = ((u16reg & ~(TX_PKT_LEN_MASK)) | 0x0004);
SPIDrvWrite(TX_PKT_LEN,u16reg);
(void)PLMESetTrxStateRequest(TX_MODE); /* Do a transmit to initialize */
while (gu8RTxMode != IDLE_MODE) /* Wait till done */
; /* Empty Loop */
u16reg = SPIDrvRead(PAEN_REG); /* Re-enable the PA */
u16reg = (u16reg | PAEN_MASK);
SPIDrvWrite(PAEN_REG,u16reg);
u16reg = SPIDrvRead(BER_REG); /* Turn on BER mode */
u16reg = (u16reg | BER_MASK);
SPIDrvWrite(BER_REG,u16reg);
(void)PLMESetTrxStateRequest(TX_MODE); /* Turn the transmitter on */
break;
/* Sets the device to continuously transmit an unmodulated CW */
case CONTINUOUS_TX_NOMOD:
u16reg = SPIDrvRead(PAEN_REG); /* Disable the PA */
u16reg = (u16reg & ~(PAEN_MASK));
SPIDrvWrite(PAEN_REG,u16reg);
u16reg = SPIDrvRead(TX_PKT_LEN); /* Set the length field */
u16reg = ((u16reg & ~(TX_PKT_LEN_MASK)) | 0x0004);
SPIDrvWrite(TX_PKT_LEN,u16reg);
(void)PLMESetTrxStateRequest(TX_MODE); /* Do a transmit to initialize */
while (gu8RTxMode != IDLE_MODE) /* Wait till done */
; /* Empty Loop */
u16reg = SPIDrvRead(PAEN_REG); /* Re-enable the PA */
u16reg = (u16reg | PAEN_MASK);
SPIDrvWrite(PAEN_REG,u16reg);
u16reg = SPIDrvRead(BER_REG); /* Turn on BER mode */
u16reg = (u16reg | BER_MASK);
SPIDrvWrite(BER_REG,u16reg);
u16reg = SPIDrvRead(PSM_REG); /* Turn off PSM */
u16reg = (u16reg | PSM_MASK);
SPIDrvWrite(PSM_REG,u16reg);
(void)PLMESetTrxStateRequest(TX_MODE); /* Turn the transmitter on */
break;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -