Пример #1
0
void EXTI0_IRQHandler(void)
{
   if(EXTI_GetITStatus(DIO0_IRQ) != RESET)
    {
      EXTI_ClearITPendingBit(DIO0_IRQ);
      
      hal_DIOx_ITConfig(all,DISABLE);
      
      if(g_fsk.states == RF_STATE_TX_RUNNING)
      {
        SX1276FskSetOpMode( RF_OPMODE_STANDBY ); 
        g_fsk.states = RF_STATE_TX_DONE;
        process_post(&hal_RF_process, PROCESS_EVENT_MSG, (void *)(&g_fsk.states));
       
      }
      
      if(g_fsk.states == RF_STATE_RX_SYNC) 
      {
        SX1276FskSetOpMode( RF_OPMODE_STANDBY ); 
        read_fifo(true);
        etimer_stop(&timer_rf);
        g_fsk.states = RF_STATE_RX_DONE;
        process_post(&hal_RF_process, PROCESS_EVENT_MSG, (void *)(&g_fsk.states));
      }
    } 
}
Пример #2
0
void SX1276Fsk_recrive_Packet(void)
{
  SX1276FskSetOpMode( RF_OPMODE_STANDBY ); 
  
   hal_DIOx_ITConfig(all,DISABLE);
  
   SX1276->RegDioMapping1 = packet_DIO0_RxpayloadReady | packet_DIO1_fifoLevel | packet_DIO2_SyncAddress | packet_DIO3_fifoEmpty;
    //                           LowBat,                   Data
   SX1276->RegDioMapping2 = packet_DIO4_Rssi_PreambleDetect | packet_DIO5_Data | RF_DIOMAPPING2_MAP_PREAMBLEDETECT;
   
   SX1276WriteBuffer( REG_DIOMAPPING1, &SX1276->RegDioMapping1, 2 );
   
   SX1276->RegFifoThresh = RF_FIFOTHRESH_TXSTARTCONDITION_FIFONOTEMPTY | RX_FIFO_THRESHOLD; // 24 bytes of data
   SX1276Write( REG_FIFOTHRESH, SX1276->RegFifoThresh );
   
   EXTI_ClearITPendingBit(DIO4_IRQ);
   
   hal_DIOx_ITConfig(0,ENABLE);
   hal_DIOx_ITConfig(1,ENABLE);
   hal_DIOx_ITConfig(2,ENABLE);
   hal_DIOx_ITConfig(4,ENABLE);

   g_fsk.states = RF_STATE_RX_INIT;

   g_fsk.index  = 0; 
    
   //process_post(&hal_RF_process, PROCESS_EVENT_MSG, (void *)(&g_fsk.states));
   SX1276FskSetOpMode( RF_OPMODE_RECEIVER );   
}
Пример #3
0
void start_continuous_mode(void)
{
  //4、BitSyncOn 
  //5、continuous mode
  //6、RX
  u8 RegDioMapping[2]; 
  u8 temp;
  
  SX1276FskSetOpMode(RF_OPMODE_STANDBY); 
  
  hal_DIOx_ITConfig(all,DISABLE);

  RegDioMapping[0] = RF_DIOMAPPING1_DIO0_11 | RF_DIOMAPPING1_DIO1_00 | RF_DIOMAPPING1_DIO2_11 | RF_DIOMAPPING1_DIO3_10;
  RegDioMapping[1] = RF_DIOMAPPING2_DIO4_00 | RF_DIOMAPPING2_DIO5_11 | RF_DIOMAPPING2_MAP_PREAMBLEDETECT;
  SX1276WriteBuffer( REG_DIOMAPPING1, RegDioMapping, 2 );

  SX1276Read(REG_OOKPEAK, &temp);
  temp |= (0x20);
  SX1276Write(REG_OOKPEAK, temp);
  
  SX1276Read(REG_PACKETCONFIG2, &temp);
  temp &= (~0x40);
  SX1276Write(REG_PACKETCONFIG2, temp);
  
  SX1276FskSetOpMode(RF_OPMODE_RECEIVER);  
}
Пример #4
0
void EXTI3_IRQHandler(void)
{
    if(EXTI_GetITStatus(DIO3_IRQ) != RESET)
    {
       EXTI_ClearITPendingBit(DIO3_IRQ);
       hal_DIOx_ITConfig(all,DISABLE);
       SX1276FskSetOpMode( RF_OPMODE_STANDBY ); 
    } 
}
Пример #5
0
void SX1276SetOpMode( uint8_t opMode )
{
    if( LoRaOn == false )
    {
        SX1276FskSetOpMode( opMode );
    }
    else
    {
        SX1276LoRaSetOpMode( opMode );
    }
}
Пример #6
0
void SX1276Fsk_Send_Packet(u8 *PBuffer,u8 length)
{
    SX1276FskSetOpMode( RF_OPMODE_STANDBY ); 
    //                           PacketSent,               FifoLevel,              FifoFull,               TxReady
    SX1276->RegDioMapping1 = packet_DIO0_packetSend | packet_DIO1_fifoLevel | packet_DIO2_fifoFull | packet_DIO3_TxReady;
    //                           LowBat,                   Data
    SX1276->RegDioMapping2 = packet_DIO4_TimeOut | packet_DIO5_Data ;

    SX1276WriteBuffer( REG_DIOMAPPING1, &SX1276->RegDioMapping1, 2 );

    SX1276->RegFifoThresh = RF_FIFOTHRESH_TXSTARTCONDITION_FIFONOTEMPTY | TX_FIFO_THRESHOLD; // 24 bytes of data
    SX1276Write( REG_FIFOTHRESH, SX1276->RegFifoThresh );
    
    packet_tx_data(PBuffer, length);
    
    hal_DIOx_ITConfig(0,ENABLE);
    hal_fsk_eit_failing(1,ENABLE);
    
    fill_fifo();
  
    g_fsk.states = RF_STATE_TX_RUNNING;

    SX1276FskSetOpMode( RF_OPMODE_TRANSMITTER );   
}
Пример #7
0
void EXTI2_IRQHandler(void)
{
    if(EXTI_GetITStatus(DIO2_IRQ) != RESET)
    { 
       EXTI_ClearITPendingBit(DIO2_IRQ);
       
      if(g_fsk.states == RF_STATE_TX_RUNNING)
      {
         hal_DIOx_ITConfig(all,DISABLE);
         SX1276FskSetOpMode( RF_OPMODE_STANDBY ); 
      }
       //sync detect
      if(g_fsk.states == RF_STATE_RX_PREAMBLE)
      {
         hal_DIOx_ITConfig(2,DISABLE);
         etimer_remodify(&timer_rf, g_fsk.plyloadtimeout);
         printf("sync det\r\n");
         g_fsk.states = RF_STATE_RX_SYNC;
         g_fsk.rssi = SX1276FskReadRssi( );
      }
    }
}
Пример #8
0
void SX1276FskInit( void )
{
    SX1276FskSetOpMode( RF_OPMODE_STANDBY );
   
    SX1276FskSetDefaults( );
    
    SX1276ReadBuffer( REG_OPMODE, SX1276Regs + 1, 0x70 - 1 );

    // Set the device in FSK mode and Sleep Mode
    SX1276.RegOpMode = RF_OPMODE_MODULATIONTYPE_FSK | RF_OPMODE_SLEEP;
    SX1276Write( REG_OPMODE, SX1276.RegOpMode );

    SX1276.RegPaRamp = RF_PARAMP_MODULATIONSHAPING_01;
    SX1276Write( REG_PARAMP, SX1276.RegPaRamp );

    SX1276.RegLna = RF_LNA_GAIN_G1;
    SX1276Write( REG_LNA, SX1276.RegLna );

    if( FskSettings.AfcOn == true )
    {
        SX1276.RegRxConfig = RF_RXCONFIG_RESTARTRXONCOLLISION_OFF | RF_RXCONFIG_AFCAUTO_ON |
                              RF_RXCONFIG_AGCAUTO_ON | RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT;
    }
    else
    {
        SX1276.RegRxConfig = RF_RXCONFIG_RESTARTRXONCOLLISION_OFF | RF_RXCONFIG_AFCAUTO_OFF |
                              RF_RXCONFIG_AGCAUTO_ON | RF_RXCONFIG_RXTRIGER_PREAMBLEDETECT;
    }

    SX1276.RegPreambleLsb = 8;
    
    SX1276.RegPreambleDetect = RF_PREAMBLEDETECT_DETECTOR_ON | RF_PREAMBLEDETECT_DETECTORSIZE_2 |
                                RF_PREAMBLEDETECT_DETECTORTOL_10;

    SX1276.RegRssiThresh = 0xFF;

    SX1276.RegSyncConfig = RF_SYNCCONFIG_AUTORESTARTRXMODE_WAITPLL_ON | RF_SYNCCONFIG_PREAMBLEPOLARITY_AA |
                            RF_SYNCCONFIG_SYNC_ON |
                            RF_SYNCCONFIG_SYNCSIZE_4;

    SX1276.RegSyncValue1 = 0x69;
    SX1276.RegSyncValue2 = 0x81;
    SX1276.RegSyncValue3 = 0x7E;
    SX1276.RegSyncValue4 = 0x96;

    SX1276.RegPacketConfig1 = RF_PACKETCONFIG1_PACKETFORMAT_VARIABLE | RF_PACKETCONFIG1_DCFREE_OFF |
                               ( FskSettings.CrcOn << 4 ) | RF_PACKETCONFIG1_CRCAUTOCLEAR_ON |
                               RF_PACKETCONFIG1_ADDRSFILTERING_OFF | RF_PACKETCONFIG1_CRCWHITENINGTYPE_CCITT;
    SX1276FskGetPacketCrcOn(&SX1276); // Update CrcOn on FskSettings

    SX1276.RegPayloadLength = FskSettings.PayloadLength;

    // we can now update the registers with our configuration
    SX1276WriteBuffer( REG_OPMODE, SX1276Regs + 1, 0x70 - 1 );

    // then we need to set the RF settings 
    SX1276FskSetRFFrequency( FskSettings.RFFrequency,&SX1276);
    SX1276FskSetBitrate( FskSettings.Bitrate,&SX1276 );
    SX1276FskSetFdev( FskSettings.Fdev,&SX1276 );

    SX1276FskSetDccBw( &SX1276.RegRxBw, 0, FskSettings.RxBw,&SX1276 );
    SX1276FskSetDccBw( &SX1276.RegAfcBw, 0, FskSettings.RxBwAfc,&SX1276 );
    SX1276FskSetRssiOffset( 0 ,&SX1276);


    if( FskSettings.RFFrequency > 860000000 )
    {
        SX1276FskSetPAOutput( RF_PACONFIG_PASELECT_RFO,&SX1276 );
        SX1276FskSetPa20dBm( false ,&SX1276);
        FskSettings.Power = 14;
        SX1276FskSetRFPower( FskSettings.Power ,&SX1276);
    }

    SX1276FskSetOpMode( RF_OPMODE_STANDBY );

    // Calibrate the HF
    SX1276FskRxCalibrate(&SX1276 );
}
Пример #9
0
void contious_tx(void)
{
  SX1276->RegFifoThresh = RF_FIFOTHRESH_TXSTARTCONDITION_FIFOTHRESH | TX_FIFO_THRESHOLD; // 24 bytes of data
  SX1276Write( REG_FIFOTHRESH, SX1276->RegFifoThresh );
  SX1276FskSetOpMode( RF_OPMODE_TRANSMITTER );   
}