예제 #1
0
char SetupCC1020RX(char RXANALOG1, char PA_POWER1)
{
    volatile int TimeOutCounter;
    char lock_status;

    // Turn ON DCLK_CS (Carrier Sense Squelch) in RX
    WriteToCC1020Register(CC1020_INTERFACE,ReadFromCC1020Register(CC1020_INTERFACE) | 0x10);


    // Switch into RX, switch to freq. reg A
    WriteToCC1020Register(CC1020_MAIN,0x11);

    // Setup bias current adjustment
    WriteToCC1020Register(CC1020_ANALOG,RXANALOG);

    // Monitor LOCK
    for(TimeOutCounter=30; ((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0)&&(TimeOutCounter>0); TimeOutCounter--)
    {
        _delay_ms(1);
    }

    // If PLL in lock
    if((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10)
    {
        lock_status = TRUE;
        sbi(PORTA,LED_PLL);
    }
    else	// Recalibrate
    {
        // If recalibration ok
        if(CalibrateCC1020(PA_POWER1))
        {
            lock_status = TRUE;
            sbi(PORTA,LED_PLL);
            // Else (recalibration failed)
        }
        else
        {
            lock_status = FALSE;
            cbi(PORTA,LED_PLL);
        }
    }


    // Switch RX part of CC1020 on				// RX coming out of PD at this stage
    WriteToCC1020Register(CC1020_MAIN,0x01);

    // Configure LOCK pin to continuous lock status. Active low indicates PLL in lock
    //WriteToCC1020Register(CC1020_LOCK,0x20);

    // Configure LOCK pin to indicate carrier sense. Active low when RSSI above threshold
    WriteToCC1020Register(CC1020_LOCK,0x40);

    // Return LOCK status to application
    return (lock_status);
}
예제 #2
0
char SetupCC1020TX(char TXANALOG1, char PA_POWER1)
{
    volatile int TimeOutCounter;
    int lock_status;

    // Turn off PA to avoid frequency splatter
    WriteToCC1020Register(CC1020_PA_POWER,0x00);

    // Setup bias current adjustment
    WriteToCC1020Register(CC1020_ANALOG,TXANALOG1);

    // Switch into TX, switch to freq. reg B
    WriteToCC1020Register(CC1020_MAIN,0xC1);     // TX Coming out of Power down at this stage

    // Monitor lock
    // LOCK_CONTINUOUS bit set to 1 when PLL is in LOCK
    for(TimeOutCounter=30; ((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x00)&&(TimeOutCounter>0); TimeOutCounter--)
    {
        _delay_ms(1);
    }

    // If PLL in lock
    if((ReadFromCC1020Register(CC1020_STATUS)&0x10)==0x10)
    {
        lock_status = TRUE;
        sbi(PORTA,LED_PLL);
    }
    else	// if PLL is not locked then Recalibrate
    {
        // If recalibration ok
        if(CalibrateCC1020(PA_POWER1))
        {
            lock_status = TRUE;
            sbi(PORTA,LED_PLL);
            // Else (recalibration failed)
        }
        else
        {
            lock_status = FALSE;
            cbi(PORTA,LED_PLL);
        }
    }

    // Restore PA setting
    WriteToCC1020Register(CC1020_PA_POWER,PA_POWER1);

    // Turn OFF DCLK_CS (Carrier Sense Squelch) in TX
    WriteToCC1020Register(CC1020_INTERFACE,ReadFromCC1020Register(CC1020_INTERFACE)&~0x10);

    // Configure LOCK pin to continuous lock status. Active low indicates PLL in lock
    WriteToCC1020Register(CC1020_LOCK,0x20);

    // Return LOCK status to application
    return (lock_status);
}
예제 #3
0
int init_CC1020 (void){
  
  //init_SPI_trans(CC1020);
  SetupCC1020PD();
  ResetCC1020();//CC is still in PD (Power_Down mode) after reset
  SetupCC1020Allregisters();
  WakeUpCC1020ToRX(RXANALOG);
  CalibrateCC1020 (PA_POWER);
  
  WakeUpCC1020ToRX(RXANALOG);													
  return SetupCC1020RX(RXANALOG,PA_POWER);
}