Ejemplo n.º 1
0
// Callbacks
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
//! \brief  Callback invoked during the initialization of the USB driver
//!
//!         Configures and enables USB controller and VBus monitoring interrupts
//! \param  pUsb    Pointer to a S_usb instance
//------------------------------------------------------------------------------
static void CBK_Init(const S_usb *pUsb)
{
    // Configure and enable the USB controller interrupt
    AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
                          USB_GetDriverID(pUsb),
                          AT91C_AIC_PRIOR_LOWEST,
                          0, //AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
                          ISR_Driver);

    AT91F_AIC_EnableIt(AT91C_BASE_AIC, USB_GetDriverID(pUsb));

#ifndef USB_BUS_POWERED
    // Configure VBus monitoring
    BRD_ConfigureVBus(USB_GetDriverInterface(pUsb));

    // Configure and enable the Vbus detection interrupt
    AT91F_AIC_ConfigureIt(AT91C_BASE_AIC,
                          AT91C_ID_VBUS,
                          AT91C_AIC_PRIOR_LOWEST,
                          0, //AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL,
                          ISR_VBus);

    AT91F_PIO_InterruptEnable(AT91C_PIO_VBUS, AT91C_VBUS);
    AT91F_AIC_EnableIt(AT91C_BASE_AIC, AT91C_ID_VBUS);
#else
    // Power up the USB controller
    USB_Attach(pUsb);
#endif
}
void GPIO_device_init_base(void)
{
    // Enable the peripheral clock.
    AT91F_PMC_EnablePeriphClock( AT91C_BASE_PMC, (1 << AT91C_ID_PIOA) | (1 << AT91C_ID_IRQ0));

    portENTER_CRITICAL();
    AT91PS_AIC     pAic;
    pAic = AT91C_BASE_AIC;

    AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA,PIO_PUSHBUTTON_SWITCH);

    AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_PIOA, PUSHBUTTON_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, gpio_irq_handler);
    AT91F_AIC_EnableIt (pAic, AT91C_ID_PIOA);
    portEXIT_CRITICAL();

}
Ejemplo n.º 3
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;