⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 simple_mac.c

📁 采用MC13213做的在SMAC协议基础上的发送程序,可作为点对点实验中的END DEVICE.
💻 C
📖 第 1 页 / 共 2 页
字号:
 *  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 + -