Да я перечитал много инфы, но все в основном сходится к тому, что если настройка есть - значит должно работать.
GRAF
Код:
Сброс:
Код: Выделить всё
void CC1101_Reset(void) {
CSN_LOW();
Delay_us(5);
CSN_HIGH();
Delay_us(40);
CC1101_WriteStrobe(0x30);
Delay_us(2);
}
Настройка:
Код: Выделить всё
void CC1101_Configure(void)
{
CC1101_WriteReg(CCxxx0_IOCFG0,0x06); //IOCFG0 - GDO0 Output Pin Configuration
CC1101_WriteReg(CCxxx0_FIFOTHR,0x47); //FIFOTHR - RX FIFO and TX FIFO Thresholds
CC1101_WriteReg(CCxxx0_PKTLEN,0x3E); //PKTLEN - Packet Length
CC1101_WriteReg(CCxxx0_PKTCTRL1,0x0C); //PKTCTRL1 - Packet Automation Control
CC1101_WriteReg(CCxxx0_PKTCTRL0,0x05); //PKTCTRL0 - Packet Automation Control
CC1101_WriteReg(CCxxx0_ADDR,0x23); //ADDR - Device Address
CC1101_WriteReg(CCxxx0_CHANNR,0x01); //CHANNR - Channel Number
CC1101_WriteReg(CCxxx0_FSCTRL1,0x06); //FSCTRL1 - Frequency Synthesizer Control
CC1101_WriteReg(CCxxx0_FREQ2,0x10); //FREQ2 - Frequency Control Word, High Byte
CC1101_WriteReg(CCxxx0_FREQ1,0xA7); //FREQ1 - Frequency Control Word, Middle Byte
CC1101_WriteReg(CCxxx0_FREQ0,0x62); //FREQ0 - Frequency Control Word, Low Byte
CC1101_WriteReg(CCxxx0_MDMCFG4,0xF9); //MDMCFG4 - Modem Configuration
CC1101_WriteReg(CCxxx0_MDMCFG3,0x93); //MDMCFG3 - Modem Configuration
CC1101_WriteReg(CCxxx0_MDMCFG2,0x43); //MDMCFG2 - Modem Configuration
CC1101_WriteReg(CCxxx0_DEVIATN,0x15); //DEVIATN - Modem Deviation Setting
CC1101_WriteReg(CCxxx0_MCSM0,0x18); //MCSM0 - Main Radio Control State Machine Configuration
CC1101_WriteReg(CCxxx0_MCSM1,0x0F); //MCSM1 - Main Radio Control State Machine Configuration
CC1101_WriteReg(CCxxx0_FOCCFG,0x16); //FOCCFG - Frequency Offset Compensation Configuration
CC1101_WriteReg(CCxxx0_WORCTRL,0xFB); //WORCTRL - Wake On Radio Control
CC1101_WriteReg(CCxxx0_FSCAL3,0xE9); //FSCAL3 - Frequency Synthesizer Calibration
CC1101_WriteReg(CCxxx0_FSCAL2,0x2A); //FSCAL2 - Frequency Synthesizer Calibration
CC1101_WriteReg(CCxxx0_FSCAL1,0x00); //FSCAL1 - Frequency Synthesizer Calibration
CC1101_WriteReg(CCxxx0_FSCAL0,0x1F); //FSCAL0 - Frequency Synthesizer Calibration
CC1101_WriteReg(CCxxx0_TEST2,0x81); //TEST2 - Various Test Settings
CC1101_WriteReg(CCxxx0_TEST1,0x35); //TEST1 - Various Test Settings
CC1101_WriteReg(CCxxx0_TEST0,0x09); //TEST0 - Various Test Settings
}
Сгенеренная студией.
После инициализации периферии в МК идет такой вызов:
Далее в прерывании по падающему фронту ноги GDO0 настроенной на получение пакета попадаем в обработчик:
Код: Выделить всё
void uEXTI_IRQHandler(uint32_t Pin)
{
HandleStatus = 1;
}
И в основном цикле как только в обработчике выставили флаг:
Код: Выделить всё
while (1)
{
if (HandleStatus)
{
HandleStatus = 0x00;
CC1101_HandleStatus();
}
}
Сам CC1101_HandleStatus:
Код: Выделить всё
void CC1101_HandleStatus(void) {
uint8_t Length = CC1101_ReadStatusReg(CCxxx0_RXBYTES);
if (Length & BYTES_IN_RXFIFO) {
CC1101_ReadBurstReg(CCxxx0_RXFIFO, CC1101_Data, Length);
// CC1101_RxMode();
}
}
если вызов CC1101_RxMode(); как сейчас закоменчен, то больше приема нет.
Код: Выделить всё
void CC1101_RxMode(void) {
CC1101_WriteStrobe(CCxxx0_SFRX);
CC1101_WriteStrobe(CCxxx0_SRX);
}
Параметры студии: