Hi,
I am trying to interface CC1101 with MSP430F5529. After writing SIDLE when I am checking TI_CC1101_MARCSTATE register to be idle, it is never becoming IDLE(0x01) or able to enter into RX state(RX).
Please find below code snippets attached.
Please help me.
Please
void FreqHoppingCalib(void)
{
UCHAR8_t ucChannelNo;
for(ucChannelNo=0; ucChannelNo < MAX_CHANNEL; ucChannelNo++)
{
REFRESH_WDT;
/*Set to Manual Calibration*/
TI_CC_SPIWriteReg(TI_CC1101_MCSM0 , 0x08); //MainRadio Cntrl State Machine
/*since forced calib can be performed only from idle mode.*/
TI_CC_SPIStrobe(TI_CC1101_SIDLE);
void TransmitByte()
{
unsigned char i;
//DISABLE_HARDWARE_INT;
TI_CC_SPIStrobe(TI_CC1101_SIDLE);
TI_CC_SPIStrobe(TI_CC1101_SFTX);
TI_CC_SPIStrobe(TI_CC1101_SFRX);
TI_CC_SPIStrobe(TI_CC1101_SRX);
//while(TI_CC_SPIReadStatus(TI_CC1101_MARCSTATE) != RX);
Delay(1);
SET_PA;
RESET_LNA;
// RESET_HGM;
TI_CC_SPIWriteBurstReg(TI_CC1101_TXFIFO,(unsigned char *)&g_ucDmaBuffer[0],PACKET_LENGTH);
for(i=0;i<5;i++)
{
TI_CC_SPIStrobe(TI_CC1101_STX); // Change state to TX
if(TI_CC_SPIReadStatus(TI_CC1101_MARCSTATE) == TX)
{
break; //keep issuing TX strobe until it enters TX state.
}
else
{
Delay(1);
}
}
if(i<5)
{
//while (!(TI_CC_GDO0_PIN));// Wait GDO0 to go hi -> sync TX'ed
//while (TI_CC_GDO0_PIN); // Wait GDO0 to clear -> end of pkt
if(TI_CC_SPIReadStatus(TI_CC1101_MARCSTATE) == TX_UNDERFLOW)
{
TI_CC_SPIStrobe(TI_CC1101_SFTX);
}
toggleLed(2);
}
else
{
TI_CC_SPIStrobe(TI_CC1101_SIDLE);
TI_CC_SPIStrobe(TI_CC1101_SFTX);
gstStsReg1.m_ucTxStateFlag=0;
}
TI_CC_SPIStrobe(TI_CC1101_SIDLE);
TI_CC_SPIStrobe(TI_CC1101_SFRX);
TI_CC_SPIStrobe(TI_CC1101_SRX);
SET_LNA;
SET_HGM;
RESET_PA;
//ENABLE_HARDWARE_INT;
}
while(TI_CC_SPIReadStatus(TI_CC1101_MARCSTATE) != IDLE);
/*switch to desired channel.*/
TI_CC_SPIWriteReg(TI_CC1101_CHANNR,ucChannelNo); // Channel number.;
/*force radio into calibtraion mode.*/
SCAL();
/*wait till calibration is over.*/
while(TI_CC_SPIReadStatus(TI_CC1101_MARCSTATE) != IDLE);
/*Set to Auto Calibration*/
TI_CC_SPIWriteReg(TI_CC1101_MCSM0 , 0x18); //MainRadio Cntrl State Machine
/*save FS calibration values.*/
g_ucFreqHopSCalib[ucChannelNo][0] = TI_CC_SPIReadStatus(TI_CC1101_FSCAL1);
g_ucFreqHopSCalib[ucChannelNo][1] = TI_CC_SPIReadStatus(TI_CC1101_FSCAL2);
g_ucFreqHopSCalib[ucChannelNo][2] = TI_CC_SPIReadStatus(TI_CC1101_FSCAL3);
}
}