Первый, это прочитать то, что чип записывает в буфер приема:
Код
if ((TI_CC_SPIReadStatus(TI_CCxxx0_RXBYTES) & TI_CCxxx0_NUM_RXBYTES))
{
pktLen = TI_CC_SPIReadReg(TI_CCxxx0_RXFIFO); // Read length byte
if (pktLen <= *length) // If pktLen size <= rxBuffer
{
TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, rxBuffer, pktLen); // Pull data
*length = pktLen; // Return the actual size
TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, status, 2);
LQI=status[1]& 0x7F;
//LQI=status[1];
RSSI=status[0]; // ВОТ ЗДЕСЬ!!!!!! // Read appended status bytes
return (char)(status[TI_CCxxx0_LQI_RX]&TI_CCxxx0_CRC_OK);
} // Return CRC_OK bit
{
pktLen = TI_CC_SPIReadReg(TI_CCxxx0_RXFIFO); // Read length byte
if (pktLen <= *length) // If pktLen size <= rxBuffer
{
TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, rxBuffer, pktLen); // Pull data
*length = pktLen; // Return the actual size
TI_CC_SPIReadBurstReg(TI_CCxxx0_RXFIFO, status, 2);
LQI=status[1]& 0x7F;
//LQI=status[1];
RSSI=status[0]; // ВОТ ЗДЕСЬ!!!!!! // Read appended status bytes
return (char)(status[TI_CCxxx0_LQI_RX]&TI_CCxxx0_CRC_OK);
} // Return CRC_OK bit
Второй способ - прочитать статусный регистр
RSSI_from_status=TI_CC_SPIReadStatus(TI_CCxxx0_RSSI);
Почему-то в пакете и в статусном регистре значения сильно отличаются. Когда читаю то, что в пакете, то путем расчета получается -28 dBm. И это, как выяснилось, правильное значение.
Но в статусном регистре почему то примерно - 82 dBm. Когда читаю? GDO2 настроил на появление несущей, а в контроллер завел прерывание по спаду.
А читать мне нужно именно при появлении несущей, чтобы успеть настроить аттенюатор (рекомендованый техасцами способ борьбы со сбоями при слишком сильном сигнале)
В чем может быть причина?