void EXTI1_IRQHandler(void)
{
   if(EXTI_GetITStatus(DIO1_IRQ) != RESET)
    {
        EXTI_ClearITPendingBit(DIO1_IRQ);
        
        if(g_fsk.states == RF_STATE_TX_RUNNING)
        {
          fill_fifo();
        }
        
        if(g_fsk.states == RF_STATE_RX_SYNC)
        {
          read_fifo(false);
        }
    }
}
static void audio_isr (int irq, void *dev_id, struct pt_regs *regs)
{
	int used;

	used = (audio_state.tail - audio_state.head + AUDIO_FRAMES) % 
								AUDIO_FRAMES; 
	if (used >= 2 * sizeof(u16)) 
		fill_fifo(used);
	else {
		DBG(3, "%s: Empty buffer.\n", __FUNCTION__);
	}
   
	/* We have to clear the int request _after_ filling the fifo as 
	 * half-full int requests are generated as the fifo is filled as 
	 * well as being emptied...
	 */
	ATU_Registers->ETU_int_clear = (ETU_INT_WR_CH1L_HALF | 
						ETU_INT_WR_CH1L_EMPTY);

	wake_up_interruptible (&audio_state.wq);
}
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 );   
}