Example #1
0
void RF_Init(void)
{ 
  #ifndef RF_Int_Init_DEF
  
      //ustawienia pocz�tkowe uk�adu
      RF_Status.RF_Status = _pRF_Status;
      RF_Status.RF_Status();  //konstruktor pse�do-klasy RF_Status
        
        
    //Konfiguracja wst�pna
        #ifdef RF_Master 
              RF_Status.EnTx=1; 
              RF_Status.EnRx=0; 
        #else   
              RF_Status.EnRx=1;
              RF_Status.EnTx=0; 
        #endif
      
   
              
        RF_Status.Init=1;
        IntCA81Flag=0;
        SPI_SendWord(0x80E7,Cs_RF); //EL,EF,868band,12.0pF   - pierwszy rozkaz konfiguracji

  
  
        
   #endif
}//_____________________________________________________________________________
Example #2
0
//-----------------------------------------------------------------------------
//!  Nazwa funkcji :    RF_transmit
//!  Funkcja wysy�a dane przez RF12
//-----------------------------------------------------------------------------
void RF_transmit(void)
{
   if ((RF_Tx.BytesToSend==0) || (AT91C_BASE_PIOA->PIO_PDSR & RfIntBUS)) return;
   
   if (RF_Status.Transmit==0) 
   {
    SPI_SendWord(0x0000,Cs_RF); 
    //Delay(0xFFFF);
    //RF_Status.Transmit=1;
   }else{
  
   char BTS=RF_Tx.Buff[0];
   RF_Tx.BytesToSend--;
   for (char i=0; i<RF_Tx.BytesToSend; i++)  RF_Tx.Buff[i]=RF_Tx.Buff[i+1]; //przesu� kolejke
   SPI_SendWord((0xB800 | BTS),Cs_RF); //wy�lij bajt
   }
}
Example #3
0
u16 __ARM_SC_WriteData(u8 iChip, u16 iEngine, u8 iAdrs, u16 iData)
{
	unsigned int iCommand = 0;
	u16 wReadData;
	
	// Generate the command
	// RW COMMAND (0 = WRITE)
	iCommand = ((((u16)(iChip)) << 12 ) &  0x7000) | // Chip address
			   ((((u16)(iEngine)) << 8  ) &  0x0F00) |
			   ((((u16)(iAdrs))       ) &  0x00FF); // Memory Address
						  							  
	// Send it via SPI
	//	__MCU_ASIC_Deactivate_CS();
	//__MCU_ASIC_Activate_CS();
	SPI_SendWord(iCommand);
	wReadData = SPI_SendWord(iData);	
	//__MCU_ASIC_Deactivate_CS();
	return wReadData;
}
Example #4
0
  //Uruchomienie trybu Nadajnika
  void _RF_EnableTX(void)
  {
    RF_Status.EnRx=0;
    RF_Status.EnTx=0;
    RF_Status.Transmit=0;
    RF_Tx.BytesToSend=0;
    RF_Status.EnRxWait=0;

    SPI_SendWord(0x8239,Cs_RF);
  }
Example #5
0
void RF_Int(void)
{
  
      unsigned int status = AT91F_PIO_GetInterruptStatus(PIO_RfIntBUS);


if (status & RfIntBUS)
{
  
  if ((( AT91C_BASE_PIOA->PIO_PDSR) & RfIntBUS)==0) 
  {
    //je�eli uka�d dzia�a jako odbiornik
    

    if (RF_Status.EnRx) 
    {
      if (RF_Status.Init==0) 
      {
        
        SPI_SendWord(0x0000,Cs_RF);
        
      }
    }
    //je�eli uka�d dzia�a jako nadajnik
    else if ((RF_Status.EnTx) && (RF_Status.Transmit==1))  
    {
      if (RF_Tx.BytesToSend>0) 
      {
        RF_transmit();
      }
      else if (RF_Status.EnRxWait)
      {
        RF_Status.Transmit=0;
        RF_Status.EnRxWait=0;
        RF_Status.EnableRX();
      }
      else
      {
         RF_Status.Transmit=0; 
      }
    }
  }

}

}//_____________________________________________________________________________
Example #6
0
  //Uruchomienie trybu odbiornika
  void _RF_EnableRX(void)
  {

    //Je�eli przy prubie prze��czenia wysy�ane s� dane to poczekaj na zako�czenie wysy�ki
    if ((RF_Tx.BytesToSend>0)) 
    {
      RF_Status.EnRxWait=1; 
    }else{


      for (int aaa=0; aaa<0x5FF; aaa++) asm( "nop" );    //u�pienie ~200us - wymagany czas prze��czenia z nadajnika na odbiornik

      
      RF_Status.EnTx=0;
      RF_Status.EnRx=0;
      RF_Tx.BytesToSend=0;
      SPI_SendWord(0x8299,Cs_RF);
    }
  }
Example #7
0
u16 __ARM_SC_ReadData (u8 iChip, u16 iEngine, u8 iAdrs)
{
	u16 iCommand = 0;
	u16 wTemp;
			
	// Send it via SPI
	// Generate the command
	iCommand = (ASIC_SPI_RW_COMMAND) |  // RW COMMAND (1 = Read)
				((((u16)iChip) << 12 ) &  0x7000) | // Chip address
				((((u16)iEngine ) << 8  ) &  0x0F00) |
				((((u16)iAdrs )        ) &  0x00FF); // Memory Address

	// We're on an 8 chip model
	//		__MCU_ASIC_Deactivate_CS();
	//__MCU_ASIC_Activate_CS();
	SPI_SendWord(iCommand);
	wTemp = SPI_ReadWord();
	//			__MCU_ASIC_Deactivate_CS();
	return wTemp;		
}
Example #8
0
//-----------------------------------------------------------------------------
//!  Nazwa funkcji :    RF_ReciveByte
//!  Funkcja interpretacji otrzymanego bajtu
//-----------------------------------------------------------------------------
void RF_ReciveByte(char Res)
{

          for (char i=0; i<RF_BuffSizeRX-1; i++) {RF_Rx.Buff[i]=RF_Rx.Buff[i+1];}
          RF_Rx.Buff[RF_BuffSizeRX-1]=Res;
          
      
          RF_Rx.ReciveBytes++;
          

          
          
          //sprawdzenie ko�ca
          if (

          (RF_Rx.Buff[RF_BuffSizeRX-3]==Preambu[0]) &&
            (RF_Rx.Buff[RF_BuffSizeRX-2]==Preambu[1]) &&
          (RF_Rx.Buff[RF_BuffSizeRX-1]==Preambu[2]))
          {
            
          RF_Rx.ReciveBytes -=3; //zmiejszenie ilo�ci odebranych danych o preambu�e    
          
          
          
          //je�eli danych wi�cej ni� max ilo�� bajt�w w rozkazie to pr�ba dopasowania  
          if (RF_Rx.ReciveBytes>8)
          {
             pRF_Command=(_pRF_Command)&(RF_Rx.Buff[6+3]); //rzutowanie na struktur� rozkazu
             if (pRF_Command->B6.CRC == crc16(pRF_Command->Streem, 4)) RF_Rx.ReciveBytes=6;
             pRF_Command=(_pRF_Command)&(RF_Rx.Buff[8+3]); //rzutowanie na struktur� rozkazu
             if (pRF_Command->B6.CRC == crc16(pRF_Command->Streem, 6)) RF_Rx.ReciveBytes=8;
          }
            
          
 
          pRF_Command=(_pRF_Command)&(RF_Rx.Buff[RF_BuffSizeRX-(RF_Rx.ReciveBytes+3)]); //rzutowanie na struktur� rozkazu
          
         abcd=crc16(pRF_Command->Streem, RF_Rx.ReciveBytes-2); 
          
          
          
          if (
              ((RF_Rx.ReciveBytes==6) && (pRF_Command->B6.CRC == crc16(pRF_Command->Streem, RF_Rx.ReciveBytes-2))) || 
              ((RF_Rx.ReciveBytes==8) && (pRF_Command->B8.CRC == crc16(pRF_Command->Streem, RF_Rx.ReciveBytes-2)))
             )
          {  
            
          
          g_RF_TimeOutCounter=0;  //Restart timeoutu  
            
          ///Sprawdzenie zgodno�ci ID  
          //if (pRF_Command->ID == RF_ID)
          //{
            RF_ExecuteOrder(pRF_Command);   //realizacja rozkazu
          //}  

          
          
          //Testowe dla mastera
         // if (pRF_Command->ID == RF_ID_Master)
         // {

                   poprawnych++;
                   odb[IndWys]++;
         // }            
          
            
          RF_Rx.ReciveBytes=0;

          
          
           
           
         
           // TRACE_INFO("\n\r"); 
           // for (char i=0; i<20; i++) TRACE_INFO("%X ", RF_Rx.Buff[i]); 
            
            /*
            if ((RF_Rx.Buff[RF_BuffSizeRX-9]==0x45) )
             {  
             }        
            else if ((RF_Rx.Buff[RF_BuffSizeRX-9]==0x35) )
             {  
             } 
            */
            
            
            
           
            
          }else
          {
            RF_Rx.ReciveBytes=0;    
          }
          
          if (!RF_Tx.BytesToSend) SPI_SendWord(0xCA81,Cs_RF); 

          }
          else{
             if ((( AT91C_BASE_PIOA->PIO_PDSR) & RfIntBUS)==0) SPI_SendWord(0x0000,Cs_RF); 
            }
  

}
Example #9
0
char SPI_RFM12_Execute(char *Buffer_Tx, char *Buffer_Rx)                                       
{
    int Order= Buffer_Tx[0] | Buffer_Tx[1]<<8;
    
    //Je�eli uk�ad RF12 w trakcie inicjalizacji pierwotnej---------------------
    
    cztmp[0]=RF_SetFreqReg(0);

    
    
    if (RF_Status.Init)
    {
      RF_Status.Ch=0;
  
      if (Order==0x80E7) 
                       { if (RF_Status.EnRx)  RF_Status.EnableRX(); else RF_Status.EnableTX(); } //Rozkaz: 0x80E7 - EL,EF,868band,12.0pF 
      if ((Order==0x8299) || (Order==0x8239) )
                       { SPI_SendWord(0xA000 | RF_SetFreqReg(RF_Status.Ch),Cs_RF); }       //Rozkaz: 0xA6xx Cz�stotliwo�� bazowa (Kana� 0)  - oryginalnie by�o 0xA640 - 868,0Mhz
      if (Order==(0xA000 | RF_SetFreqReg(RF_Status.Ch)))  
                       { SPI_SendWord(0xC607,Cs_RF); }                          //Rozkaz: 0xC607 Szybko�� transmisji 43kb/s         - oryginalnie by�o 0xC647 - 4,8kb/s
      if (Order==0xC607)  
                       { SPI_SendWord(0x94A0,Cs_RF); }                          //Rozkaz: 0x94A0 VDI,FAST,134kHz,0dBm,-103dBm 
      if (Order==0x94A0)  
                       { SPI_SendWord(0xC2AC,Cs_RF); }                          //Rozkaz: 0xC2AC AL,!ml,DIG,DQD4 
      if (Order==0xC2AC)  
                       { SPI_SendWord(0xCA81,Cs_RF); }                          //Rozkaz: 0xCA81 FIFO8,SYNC,!ff,DR 
      if ((Order==0xCA81) && (IntCA81Flag==0))  
                       { SPI_SendWord(0xCED4,Cs_RF); IntCA81Flag=1; Order=0xFFFF;}   //Rozkaz: 0xCED4 ustawienie s�owa synchronizacyjnego na 0x2DD4 
      if (Order==0xCED4)  
                       { SPI_SendWord(0xC493,Cs_RF); }                          //Rozkaz: 0xC493 @PWR, AFC:-80+75Khz ,!st,!fi,OE,EN       - oryginalnie 0xC483 @PWR,AFC - NO RSTRIC,!st,!fi,OE,EN 
      if (Order==0xC493)  
                       { SPI_SendWord(0x9850,Cs_RF); }                          //Rozkaz: 0x9850 !mp,dewiacja +-90kHz ,MAX OUT   
      if (Order==0x9850)  
                       { SPI_SendWord(0xCC17,Cs_RF); }                          //Rozkaz: 0xCC17 OB1�COB0, LPX,�Iddy�CDDIT�C
      if (Order==0xCC17)  
                       { SPI_SendWord(0xE000,Cs_RF); }                          //Rozkaz: 0xE000
      if (Order==0xE000)  
                       { SPI_SendWord(0xC800,Cs_RF); }                          //Rozkaz: 0xC800
      if (Order==0xC800)  
                       { SPI_SendWord(0xC040,Cs_RF); }                          //Rozkaz: 0xC040 1.66MHz,2.2V 
      if (Order==0xC040)  
                       { SPI_SendWord(0xCA81,Cs_RF); }                          //Rozkaz: 0xCA81 Start fifo RX
      if ((Order==0xCA81) && (IntCA81Flag==1))  
                       { SPI_SendWord(0xCA83,Cs_RF); }                          //Rozkaz: 0xCA83 Restart fifo RX
      if (Order==0xCA83)  
                       { 
      


        
             
      
        RF_Status.EnRx=1;
        RF_Status.Init=0; 

   //ustawienie przerwania 
        ConfigureRFBus();

       // Configure and enable the Vbus detection interrupt
        AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
                          ID_RfIntBUS,
                          RF_INT_PRIOR, //AT91C_AIC_PRIOR_LOWEST, AT91C_AIC_PRIOR_HIGHEST
                          3,//AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
                          RF_Int);

        AT91F_PIO_InterruptEnable(PIO_RfIntBUS, RfIntBUS);
        AT91F_AIC_EnableIt(AT91C_BASE_AIC, ID_RfIntBUS);

     
        
        
      }
     
      
    }//Aktywny RX ---------------------------------------------------------------
    else if ((RF_Status.EnRx) && (RF_Status.Init==0))
    {
    
      if  ((Order==0x0000) && (Buffer_Rx[1]&0x80))  { SPI_SendWord(0xB000,Cs_RF); }
      if  (Order==0xCA81)   { SPI_SendWord(0xCA83,Cs_RF); }
      if  (Order==0xCA83)   { SPI_SendWord(0x0000,Cs_RF); }
      if  (Order==0xB000)  { RF_ReciveByte(Buffer_Rx[0]); }
     
      

    
    
    
    }//Aktywny TX ---------------------------------------------------------------
    else if (RF_Status.EnTx)
    {
      
      /*
         if ((RF_Status.Transmit==0) && (Order==0x0000))
        {
          RF_Status.Transmit=1;

            RF_transmit();
         
          
        }
      */
      
      if ((RF_Status.Transmit==0) && (Order==0x0000))
        {
          //TRACE_INFO("Tx %X \n\r ", Buffer_Rx[1]); 

          if (Buffer_Rx[1]&0x20)
          {

            SPI_SendWord(0x0000,Cs_RF);
          }
          else
          {
          RF_Status.Transmit=1;

            RF_transmit();
          }
          
        }
      
    }
    //W��czenie Odbiornika
    else if ((RF_Status.EnRx==0) && (RF_Status.EnTx==0) && (Order==0x8299))
    {
       RF_Status.EnRx=1;
       SPI_SendWord(0x0000,Cs_RF);
    }
    //W��czenie Nadajnika
    else if ((RF_Status.EnRx==0) && (RF_Status.EnTx==0) && (Order==0x8239))
    {
      for (int aaa=0; aaa<0x5FF; aaa++) asm( "nop" );    //u�pienie ~200us - wymagany czas prze��czenia z odbiornika na nadajnik
      RF_Status.EnTx=1;
      
      if (RF_Tx.BytesToSend>0) 
      {
          RF_transmit();
      }
    }
    
  
  
}  _RF_Command  *pRF_Command;