Код
halRfWriteReg(IOCFG0,0x07); //GDO0 Output Pin Configuration
halRfWriteReg(FIFOTHR,0x47); //RX FIFO and TX FIFO Thresholds
halRfWriteReg(PKTCTRL0,0x05);//Packet Automation Control
halRfWriteReg(FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg(FREQ2,0x21); //Frequency Control Word, High Byte
halRfWriteReg(FREQ1,0x62); //Frequency Control Word, Middle Byte
halRfWriteReg(FREQ0,0x76); //Frequency Control Word, Low Byte
halRfWriteReg(MDMCFG4,0xCA); //Modem Configuration
halRfWriteReg(MDMCFG3,0x83); //Modem Configuration
halRfWriteReg(MDMCFG2,0x13); //Modem Configuration
halRfWriteReg(DEVIATN,0x35); //Modem Deviation Setting
halRfWriteReg(MCSM0,0x18); //Main Radio Control State Machine Configuration
halRfWriteReg(FOCCFG,0x16); //Frequency Offset Compensation Configuration
halRfWriteReg(AGCCTRL2,0x43);//AGC Control
halRfWriteReg(WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg(FSCAL3,0xE9); //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL2,0x2A); //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL1,0x00); //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL0,0x1F); //Frequency Synthesizer Calibration
halRfWriteReg(TEST2,0x81); //Various Test Settings
halRfWriteReg(TEST1,0x35); //Various Test Settings
halRfWriteReg(TEST0,0x09); //Various Test Settings
halRfWriteReg(FIFOTHR,0x47); //RX FIFO and TX FIFO Thresholds
halRfWriteReg(PKTCTRL0,0x05);//Packet Automation Control
halRfWriteReg(FSCTRL1,0x06); //Frequency Synthesizer Control
halRfWriteReg(FREQ2,0x21); //Frequency Control Word, High Byte
halRfWriteReg(FREQ1,0x62); //Frequency Control Word, Middle Byte
halRfWriteReg(FREQ0,0x76); //Frequency Control Word, Low Byte
halRfWriteReg(MDMCFG4,0xCA); //Modem Configuration
halRfWriteReg(MDMCFG3,0x83); //Modem Configuration
halRfWriteReg(MDMCFG2,0x13); //Modem Configuration
halRfWriteReg(DEVIATN,0x35); //Modem Deviation Setting
halRfWriteReg(MCSM0,0x18); //Main Radio Control State Machine Configuration
halRfWriteReg(FOCCFG,0x16); //Frequency Offset Compensation Configuration
halRfWriteReg(AGCCTRL2,0x43);//AGC Control
halRfWriteReg(WORCTRL,0xFB); //Wake On Radio Control
halRfWriteReg(FSCAL3,0xE9); //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL2,0x2A); //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL1,0x00); //Frequency Synthesizer Calibration
halRfWriteReg(FSCAL0,0x1F); //Frequency Synthesizer Calibration
halRfWriteReg(TEST2,0x81); //Various Test Settings
halRfWriteReg(TEST1,0x35); //Various Test Settings
halRfWriteReg(TEST0,0x09); //Various Test Settings
Ни как не могу передать пакет, IOCFG0 настроено на взведение при схождении CRC.
Вот код передатчика
Код
void TX(void)
{
while(1)
{
PORTB.2=0; //Cs
while(PINB.4==1){}; //ждем пока отпустят MISO
spi(0x7F); //адресс TX fifo
spi(0x07); //передавать будем 7 байт
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
PORTB.2=1; //Cs
SpiStrobe(STX);
PORTC.5=1; //мигнем индикатором
delay_ms(500);
SpiStrobe(SIDLE);
SpiStrobe(SFTX);
PORTC.5=0;
delay_ms(500);
}
}
{
while(1)
{
PORTB.2=0; //Cs
while(PINB.4==1){}; //ждем пока отпустят MISO
spi(0x7F); //адресс TX fifo
spi(0x07); //передавать будем 7 байт
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
spi(0x46); //payload
PORTB.2=1; //Cs
SpiStrobe(STX);
PORTC.5=1; //мигнем индикатором
delay_ms(500);
SpiStrobe(SIDLE);
SpiStrobe(SFTX);
PORTC.5=0;
delay_ms(500);
}
}
вот код приемника
Код
void RX (void)
{
char r;
SpiStrobe(SRX);
while(1)
{
if (PIND.1) //если активный сигнал на IOCFG0
{
PORTB.2=0; //читаем RX fifo
while(PINB.4==1){};
spi(0xFF);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
PORTB.2=1;
PORTC.5=1; //мигнем индикатором
delay_ms(300);
PORTC.5=0;
SpiStrobe(SIDLE);
SpiStrobe(SFRX);
SpiStrobe(SRX);
}
}
}
{
char r;
SpiStrobe(SRX);
while(1)
{
if (PIND.1) //если активный сигнал на IOCFG0
{
PORTB.2=0; //читаем RX fifo
while(PINB.4==1){};
spi(0xFF);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
r=spi(0x00);
PORTB.2=1;
PORTC.5=1; //мигнем индикатором
delay_ms(300);
PORTC.5=0;
SpiStrobe(SIDLE);
SpiStrobe(SFRX);
SpiStrobe(SRX);
}
}
}
Самое интересное что если IOCFG0 в приемнике сделать 0x0E(наличие несущей в канале) приемник отлично начинает мигать тестовым индикатором при наличии в канале несущей, реагирует как на аналогичный передатчик так и на пульт от сигналки. Пробовал фиксированную длину пакета, пробовал принудительно делать калибровку синтезатора, несколько раз менял чипы CC1101, пробовал использовать скорости 100 и 250 кбит - результата нет.
В чем может быть проблема? И еще в чем разница стробов SFSTXON и SCAL, когда какой применять и нужно ли если в конфиге настроена автокалибровка??