Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: внезапное переполнение RXFIFO
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Rf & Microwave Design
yahoo
Здравствуйте. У меня следующая прорблема: есть два девайса, на обоих стоят СС1100, один другому раз в 10 секунд шлет пакет, на что другой девайс также отвечает пакетом....Все вроде пашет отлично, но внезапно пакеты запроса перестают доходить. я выяснил что происходит переполнение RXFIFO.
GDO2 на обоих девайсах используется для установления факта приема пакета(прерывание) и установлено на 07, тоесть установка 1 при приеме пакета с CRC OK.

На приемной стороне :

// External Interrupt 1 service routine прием пакета
interrupt [EXT_INT1] void ext_int1_isr(void)
{

length=sizeof(rxbuffer);
RF_ReceivePacket_int(rxbuffer,&length);

payload[0]=8;
payload[1]=1;
payload[2]=FRAM[0+i*7];
payload[3]=FRAM[1+i*7];
payload[4]=FRAM[2+i*7];
payload[5]=FRAM[3+i*7];
payload[6]=FRAM[4+i*7];
payload[7]=FRAM[5+i*7];
payload[8]=FRAM[6+i*7];
RF_SendPacket(payload,9);

RF_Strobe(CC1100_SRX);

}
unsigned char RF_ReceivePacket_int(unsigned char *rxBuffer,unsigned char *length)
{
unsigned char status[2];
unsigned char packetLength;

packetLength = RF_ReadReg(CC1100_FIFO);
RF_ReadBurstReg(CC1100_FIFO, rxBuffer, packetLength);
*length = packetLength;
RF_ReadBurstReg(CC1100_FIFO, status, 2);
RF_Strobe(CC1100_SIDLE);
RF_Strobe(CC1100_SFRX);
return (status[LQI] & CRC_OK);
}

не понятно почему забивает RXFIFO...Пакет приходит длиной 12 байт, и он сразуже считывается, очищая фифо.....и тут бац
может кто поможет?
Я ставил таймер на переодическое очищение фифо, тогда работает, но это не решение, так как в неподходящий момент может убить всю инфу))

вот инициализация начальная

//íàñòðîéêà CC1100
settings.FSCTRL1 =0x0D; // FSCTRL1 Frequency synthesizer control.
settings.FSCTRL0 =0x00; // FSCTRL0 Frequency synthesizer control.
settings.FREQ2 =0x10; // FREQ2 Frequency control word; high byte.
settings.FREQ1 =0xA7; // FREQ1 Frequency control word; middle byte.
settings.FREQ0 =0x62; // FREQ0 Frequency control word; low byte.
settings.MDMCFG4 =0x0E; // MDMCFG4 Modem configuration.
settings.MDMCFG3 =0x3B; // MDMCFG3 Modem configuration.
settings.MDMCFG2 =0x73; // MDMCFG2 Modem configuration.
settings.MDMCFG1 =0x42; // DMCFG1 Modem configuration.
settings.MDMCFG0 =0xF8; // MDMCFG0 Modem configuration.
settings.CHANNR =0x00; // CHANNR Channel number.
settings.DEVIATN =0x00; // DEVIATN Modem deviation setting (when FSK modulation is enabled).
settings.FREND1 =0xB6; // FREND1 Front end RX configuration.
settings.FREND0 =0x10; // FREND0 Front end TX configuration.
settings.MCSM0 =0x18; // MCSM0 Main Radio Control State Machine configuration.
settings.FOCCFG =0x1D; // FOCCFG Frequency Offset Compensation Configuration.
settings.BSCFG =0x1C; // BSCFG Bit synchronization Configuration.
settings.AGCCTRL2 =0xC7; // AGCCTRL2 AGC control.
settings.AGCCTRL1 =0x00; // AGCCTRL1 AGC control.
settings.AGCCTRL0 =0xB0; // AGCCTRL0 AGC control.
settings.FSCAL3 =0xEA; // FSCAL3 Frequency synthesizer calibration.
settings.FSCAL2 =0x2A; // FSCAL2 Frequency synthesizer calibration.
settings.FSCAL1 =0x00; // FSCAL1 Frequency synthesizer calibration.
settings.FSCAL0 =0x1F; // FSCAL0 Frequency synthesizer calibration.
settings.FSTEST =0x59; // FSTEST Frequency synthesizer calibration.
settings.TEST2 =0x88; // TEST2 Various test settings.
settings.TEST1 =0x31; // TEST1 Various test settings.
settings.TEST0 =0x09; // TEST0 Various test settings.
settings.FIFOTHR =0x07; // FIFOTHR RXFIFO and TXFIFO thresholds.
settings.IOCFG2 =0x47; // IOCFG2 GDO2 output pin configuration.
settings.IOCFG0 =0x06; // IOCFG0D GDO0 output pin configuration. Refer to SmartRF® Studio User Manual for detailed pseudo register explanation.
settings.PKTCTRL1 =0x0F; // PKTCTRL1 Packet automation control.
settings.PKTCTRL0 =0x05; // PKTCTRL0 Packet automation control.
settings.ADDR =0x02; // ADDR Device address.
settings.PKTLEN =0xFF; // PKTLEN Packet length.


RF_powerup_reset();
RF_WriteRfSettings(&settings);
RF_WriteReg(CC1100_MCSM1, 0x3C);
RF_WriteBurstReg(CC1100_PATABLE, paTable, 8);

RF_Strobe(CC1100_SIDLE);
RF_Strobe(CC1100_SFRX);
RF_Strobe(CC1100_SFTX);
RF_Strobe(CC1100_SRX);
Serhiy_UA
Возможно сбой при считывании кода длины принятого пакета.
Попробуйте считать этот код не один раз, а несколько с раз с небольшой задержкой, пока код длины не будет один и тот же, его далее и используйте.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.