1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162 |
- //============================================================================//
- // * @file RF.c
- // * @author Shi Zheng
- // * @version V1.1
- // * @date 24/4/2015
- // * @brief pan3020 communication interface
- // * @modify user: linjianan
- // * @modify date: 28/11/2015
- //============================================================================//
- #include "RF.H"
- #include "math.H"
- #include "stdio.h"
- #include "rf_setting.h"
- /*RF 地址:接收端和发送端需一致*/
- const uint8_t TX_ADDRESS_DEF[5] = {0xCC, 0xCC, 0xCC, 0xCC, 0xCC};
- unsigned short Payload_Count = 0;
- uint8_t fb = 0;
- int fc = 0;
- int set_freqBand = 0;
- int set_br = 0;
- uint8_t rfPower;
- rfParamsCal1_ts rfParamsCal1List[5][4] =
- {
- {
- // 315MHz
- {
- // 波特率:40kbps
- .dem_cal1 = {0x01, 0x69, 0x48, 0x44, 0x8C},
- .rf_cal1 = {0xC5, 0xFF, 0xFF, 0x5F, 0xD8},
- .dr = 0X00,
- .freq = 315,
- },
- {
- // 波特率:80kbps
- .dem_cal1 = {0x01, 0xe9, 0x48, 0x74, 0x8C},
- .rf_cal1 = {0xC5, 0xFF, 0xFF, 0xDF, 0xD8},
- .dr = 0X40,
- .freq = 315,
- },
- {
- // 波特率:200kbps
- .dem_cal1 = {0x01, 0xE8, 0x48, 0x74, 0x84},
- .rf_cal1 = {0xC5, 0xFF, 0xFF, 0xDF, 0xD9},
- .dr = 0X80,
- .freq = 315,
- },
- {
- // 波特率:400kbps
- .dem_cal1 = {0x01, 0xea, 0x48, 0x74, 0x80},
- .rf_cal1 = {0xC5, 0xFF, 0xFF, 0xDF, 0xDB},
- .dr = 0XC0,
- .freq = 315,
- },
- },
- {
- // 433MHz
- {
- // 波特率:40kbps
- .dem_cal1 = {0x01, 0x4D, 0x48, 0x34, 0x8C},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0x5F, 0xD8},
- .dr = 0X00,
- .freq = 433,
- },
- {
- // 波特率:80kbps
- .dem_cal1 = {0x01, 0x8D, 0x48, 0x4C, 0x8C},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD8},
- .dr = 0X40,
- .freq = 433,
- },
- {
- // 波特率:200kbps
- .dem_cal1 = {0x01, 0x8C, 0x48, 0x4C, 0x84},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD9},
- .dr = 0X80,
- .freq = 433,
- },
- {
- // 波特率:400kbps
- .dem_cal1 = {0x01, 0x8e, 0x48, 0x4c, 0x80},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xDB},
- .dr = 0XC0,
- .freq = 433,
- },
- },
- {
- // 490MHz
- {
- // 波特率:40kbps
- .dem_cal1 = {0x01, 0x4D, 0x48, 0x34, 0x8C},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0x5F, 0xD8},
- .dr = 0X00,
- .freq = 490,
- },
- {
- // 波特率:80kbps
- .dem_cal1 = {0x01, 0x8D, 0x48, 0x4C, 0x8C},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD8},
- .dr = 0X40,
- .freq = 490,
- },
- {
- // 波特率:200kbps
- .dem_cal1 = {0x01, 0x8C, 0x48, 0x4C, 0x84},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD9},
- .dr = 0X80,
- .freq = 490,
- },
- {
- // 波特率:400kbps
- .dem_cal1 = {0x01, 0x8e, 0x48, 0x4c, 0x80},
- .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xDB},
- .dr = 0XC0,
- .freq = 490,
- },
- },
- {
- // 868MHz
- {
- // 波特率:40kbps
- .dem_cal1 = {0x01, 0x09, 0x80, 0x19, 0x5C},
- .rf_cal1 = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8},
- .dr = 0X00,
- .freq = 868,
- },
- {
- // 波特率:80kbps
- .dem_cal1 = {0x01, 0x09, 0x00, 0x21, 0x5C},
- .rf_cal1 = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8},
- .dr = 0X40,
- .freq = 868,
- },
- {
- // 波特率:200kbps
- .dem_cal1 = {0x01, 0x89, 0x48, 0x4c, 0x9c},
- .rf_cal1 = {0xd0, 0xFF, 0xFF, 0xDF, 0xD9},
- .dr = 0X80,
- .freq = 868,
- },
- {
- // 波特率:400kbps
- .dem_cal1 = {0x01, 0x88, 0x48, 0x4c, 0x94},
- .rf_cal1 = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB},
- .dr = 0XC0,
- .freq = 868,
- },
- },
- {
- // 915MHz
- {
- // 波特率:40kbps
- .dem_cal1 = {0x01, 0x1d, 0x48, 0x34, 0x8C},
- .rf_cal1 = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8},
- .dr = 0X00,
- .freq = 915,
- },
- {
- // 波特率:80kbps
- .dem_cal1 = {0x01, 0x1d, 0x00, 0x44, 0x7C},
- .rf_cal1 = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8},
- .dr = 0X40,
- .freq = 915,
- },
- {
- // 波特率:200kbps
- .dem_cal1 = {0x01, 0x9d, 0x48, 0x54, 0x8c},
- .rf_cal1 = {0xD0, 0xFF, 0xFF, 0xDF, 0xD9},
- .dr = 0X80,
- .freq = 915,
- },
- {
- // 波特率:400kbps
- .dem_cal1 = {0x01, 0x9c, 0x48, 0x54, 0x84},
- .rf_cal1 = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB},
- .dr = 0XC0,
- .freq = 915,
- },
- }};
- extern void RF_CalVco(uint8_t *ptr_Dem_cal1);
- extern uint8_t Dem_cal1_data[];
- extern uint8_t RF_cal1_data[];
- void RF_Get_fb_fc(double freq);
- void delay_10us(uint32_t time)
- {
- delay10us(time);
- }
- void delay_ms(uint32_t time)
- {
- delay1ms(time);
- }
- void RF_WriteReg(uint8_t reg, uint8_t wdata)
- {
- CSN_LOW;
- SPI_RW(reg);
- SPI_RW(wdata);
- CSN_HIGH;
- }
- uint8_t RF_ReadReg(uint8_t reg)
- {
- uint8_t tmp;
- CSN_LOW;
- SPI_RW(reg);
- tmp = SPI_RW(0);
- CSN_HIGH;
- return tmp;
- }
- void RF_WriteBuf(uint8_t reg, uint8_t *pBuf, uint8_t length)
- {
- uint8_t j;
- CSN_LOW;
- j = 0;
- SPI_RW(reg);
- for (j = 0; j < length; j++)
- {
- SPI_RW(pBuf[j]);
- }
- j = 0;
- CSN_HIGH;
- }
- void RF_ReadBuf(uint8_t reg, unsigned char *pBuf, uint8_t length)
- {
- uint8_t byte_ctr;
- CSN_LOW;
- SPI_RW(reg);
- for (byte_ctr = 0; byte_ctr < length; byte_ctr++)
- pBuf[byte_ctr] = SPI_RW(0);
- CSN_HIGH;
- }
- void RF_TxMode(void)
- {
- CE_LOW;
- /*将RF设置成TX模式*/
- RF_WriteReg(W_REGISTER + CONFIG, 0X0E);
- delay_10us(1);
- }
- void RF_RxMode(void)
- {
- uint8_t RF_cal3_temp[] = {0x01, 0x08, 0xD4, 0x02, 0x64};
- uint8_t RF_cal3_temp1[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
- CE_LOW;
- //*将RF设置成RX模式*
- RF_WriteReg(W_REGISTER + CONFIG, 0X0F);
- delay_ms(5);
- /*Set CE pin high */
- CE_HIGH;
- /*keep ce high at least 150us*/
- delay_10us(15);
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp, sizeof(RF_cal3_temp));
- delay_10us(10);
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp1, sizeof(RF_cal3_temp1));
- delay_ms(2);
- }
- uint8_t RF_GetStatus(void)
- {
- /*读取RF的状态 */
- return RF_ReadReg(STATUS) & 0x70;
- }
- void RF_ClearStatus(void)
- {
- CE_LOW;
- /*清除RF的状态*/
- RF_WriteReg(W_REGISTER + STATUS, 0x70);
- }
- void RF_ClearFIFO(void)
- {
- CE_LOW;
- /*清除RF 的 TX FIFO*/
- RF_WriteReg(FLUSH_TX, 0);
- /*清除RF 的 RX FIFO*/
- RF_WriteReg(FLUSH_RX, 0);
- }
- void RF_SetPower(uint8_t *p, uint8_t power)
- {
- rfPower = power;
- switch (rfPower)
- {
- case RF18DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xfe;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x07;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF17DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xfe;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF16DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xfa;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF15DBM:
- *(p + 1) &= ~0xfe;
- *(p + 1) |= 0xf8;
- *(p + 2) &= ~0x07;
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF13DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x58;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF12DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x28;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF11DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x10;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF10DBM:
- *(p + 1) &= ~0xfe;
- *(p + 1) |= 0xf8;
- *(p + 2) &= ~0x07;
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF9DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xd8;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF8DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xc0;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF7DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xb0;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF6DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x98;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF5DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x88;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF4DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x78;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF2DBM:
- *(p + 1) &= ~0xfe;
- *(p + 1) |= 0x60;
- *(p + 2) &= ~0x07;
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF1DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x58;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF0DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x48;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RFN1DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x40;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RFN6DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x20;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RFN15DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x08;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- default:
- break;
- }
- }
- void RF_SetPowerParams(uint8_t *p, uint8_t power)
- {
- CE_LOW;
- switch (power)
- {
- case RF18DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xfe;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x07;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF17DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xfe;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF16DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xfa;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF15DBM:
- *(p + 1) &= ~0xfe;
- *(p + 1) |= 0xf8;
- *(p + 2) &= ~0x07;
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF13DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x58;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF12DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x28;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF11DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x10;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x01;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF10DBM:
- *(p + 1) &= ~0xfe;
- *(p + 1) |= 0xf8;
- *(p + 2) &= ~0x07;
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF9DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xd8;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF8DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xc0;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF7DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0xb0;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF6DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x98;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF5DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x88;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF4DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x78;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF2DBM:
- *(p + 1) &= ~0xfe;
- *(p + 1) |= 0x60;
- *(p + 2) &= ~0x07;
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF1DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x58;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RF0DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x48;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RFN1DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x40;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RFN6DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x20;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- case RFN15DBM:
- *(p + 1) &= ~0xfe; // 8-15
- *(p + 1) |= 0x08;
- *(p + 2) &= ~0x07; // 16-23
- *(p + 2) |= 0x00;
- RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
- break;
- default:
- break;
- }
- }
- void RF_SetChannel(uint8_t bb, uint8_t cc)
- {
- /*
- uint8_t RFSetup_temp = 0;
- Fb &= 0x3f;
- RFSetup_temp = RF_ReadReg(RF_SETUP)&0xc0;
- RFSetup_temp |= Fb;
- */
- RF_WriteReg(W_REGISTER + RF_SETUP, bb | rfParamsCal1List[set_freqBand][set_br].dr);
- RF_WriteReg(W_REGISTER + RF_CH, cc);
- }
- void RF_SetFreq_Datarate(double freq, uint8_t fre_band)
- {
- #if DEBUG_ENABLE
- printf("freq_Set function :freq=%f,band=%d\r\n", freq, fre_band);
- #endif
- double tmp_val1 = 0;
- double fop_val = 0;
- double intpart, fractpart;
- switch (fre_band)
- {
- case B315MHz:
- fop_val = freq * 6 / 8;
- tmp_val1 = fop_val - 200;
- break;
- case B433MHz:
- fop_val = freq * 4 / 8;
- tmp_val1 = fop_val - 200;
- break;
- case B868MHz:
- case B915MHz:
- fop_val = freq * 2 / 8;
- tmp_val1 = fop_val - 200;
- break;
- /*B433MH*/
- default:
- fop_val = freq * 4 / 8;
- tmp_val1 = fop_val - 200;
- break;
- }
- fractpart = modf(tmp_val1, &intpart);
- fb = (int)intpart;
- fc = (int)(fractpart * 200);
- #if DEBUG_ENABLE
- printf("freq_Set function :fb=%d,fc=%d\r\n", fb, fc);
- #endif
- RF_SetChannel(fb, fc);
- }
- void RF_Get_fb_fc(double freq)
- {
- #if DEBUG_ENABLE
- printf("freq_Set function :freq=%f,band=%d\r\n", freq, fre_band);
- #endif
- double tmp_val1 = 0;
- double fop_val = 0;
- double intpart, fractpart;
- if (freq < 433)
- {
- fop_val = freq * 6 / 8;
- tmp_val1 = fop_val - 200;
- }
- else if (freq < 490)
- {
- fop_val = freq * 4 / 8;
- tmp_val1 = fop_val - 200;
- }
- else if (freq < 868)
- {
- fop_val = freq * 2 / 8;
- tmp_val1 = fop_val - 200;
- }
- else if (freq < 915)
- {
- fop_val = freq * 6 / 8;
- tmp_val1 = fop_val - 200;
- }
- fractpart = modf(tmp_val1, &intpart);
- fb = (int)intpart;
- fc = (int)(fractpart * 200);
- }
- void RF_setFreq(uint32_t freq)
- {
- RF_SetFreq_Datarate(freq, set_freqBand + 1);
- }
- void RF_Tx_TransmintData(uint8_t *ucTXPayload, uint8_t length)
- {
- uint8_t RF_cal3_temp[] = {0x01, 0x08, 0xD4, 0x02, 0x64};
- uint8_t RF_cal3_temp1[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
- /*rf 处于空闲状态才发送数据*/
- if (!RF_GetStatus())
- {
- /*write data to txfifo */
- RF_WriteBuf(W_TX_PAYLOAD, ucTXPayload, length);
- /*rf enter tx mode start send data*/
- CE_HIGH;
- /*keep ce high at least 150us*/
- delay_10us(15);
- /*切换时钟*/
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp, sizeof(RF_cal3_temp));
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp1, sizeof(RF_cal3_temp1));
- CE_LOW;
- }
- }
- void RF_Tx_CheckResult(uint8_t *ucAckPayload, uint8_t length)
- {
- switch (RF_GetStatus())
- {
- /*普通型发送完成 或 增强型发送成功*/
- case TX_DS_FLAG:
- /*增强型模式,累计ack次数*/
- Payload_Count++;
- RF_ClearFIFO();
- RF_ClearStatus();
- break;
- /*增强型发送成功且收到payload */
- case RX_TX_FLAG:
- RF_ReadBuf(R_RX_PAYLOAD, ucAckPayload, length);
- Payload_Count++;
- RF_ClearFIFO();
- RF_ClearStatus();
- break;
- /*增强型发送超时失败*/
- case MAX_RT_FLAG:
- RF_ClearFIFO();
- RF_ClearStatus();
- break;
- default:
- break;
- }
- }
- uint8_t RF_DumpRxData(uint8_t *ucPayload, uint8_t length)
- {
- if (RF_GetStatus() == 0x40)
- {
- RF_ReadBuf(R_RX_PAYLOAD, ucPayload, length);
- #if DEBUG_PRINT_RTX_BUFFER
- print_RTX_buffer(ucPayload, length);
- #endif
- return 1;
- }
- return 0;
- }
- void RF_CalVco(uint8_t *ptr_Dem_cal1)
- {
- uint8_t i = 0, j = 0, h = 0;
- uint8_t Dem_cal2_data[] = {0x0B, 0xE7, 0x00, 0x01};
- /*Dataout_Sel置1*/
- uint8_t Dem_cal2_data1[] = {0x0B, 0xE7, 0x00, 0x03};
- /*Vco_Calibration EN*/
- // uint8_t RF_cal3_data1[] = {0x01,0x08,0xD4,0x02,0x76};
- uint8_t RF_cal3_data1[] = {0x01, 0x08, 0xD4, 0x02, 0x76};
- /*触发Vco_Calibration_SPI_Triger*/
- // uint8_t RF_cal3_data2[] = {0x01,0x18,0xD4,0x02,0x76};
- uint8_t RF_cal3_data2[] = {0x01, 0x18, 0xD4, 0x02, 0x76};
- RF_RxMode();
- RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data1, sizeof(Dem_cal2_data1));
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data1, sizeof(RF_cal3_data1));
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data2, sizeof(RF_cal3_data2));
- delay_ms(5);
- i = RF_ReadReg(RPD);
- j = RF_ReadReg(FIFO_STATUS);
- i >>= 2;
- i &= 0x30;
- j &= 0x0C;
- h = i | j;
- ptr_Dem_cal1[1] &= 0xC3;
- ptr_Dem_cal1[1] |= h;
- RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data, sizeof(Dem_cal2_data));
- RF_WriteBuf(W_REGISTER + DEM_CAL1, ptr_Dem_cal1, 0x05);
- CE_LOW;
- }
- /*********************以下部分与RF通信相关,不建议修改************************/
- /*********************************433MHz***************************************/
- #if ((DATA_RATE == DR_400K) && (BAND == B433MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x8e, 0x48, 0x4c, 0x80};
- uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0xDF, 0xDB};
- #elif ((DATA_RATE == DR_40K) && (BAND == B433MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x4D, 0x48, 0x34, 0x8C};
- uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0x5F, 0xD8};
- #elif ((DATA_RATE == DR_80K) && (BAND == B433MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x8D, 0x48, 0x4C, 0x8C};
- uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0xDF, 0xD8};
- #elif ((DATA_RATE == DR_200K) && (BAND == B433MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x8C, 0x48, 0x4C, 0x84};
- uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0xDF, 0xD9};
- /******************************************************************************/
- /*********************************315MHz***************************************/
- #elif ((DATA_RATE == DR_400K) && (BAND == B315MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0xea, 0x48, 0x74, 0x80};
- uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0xDF, 0xDB};
- #elif ((DATA_RATE == DR_40K) && (BAND == B315MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x69, 0x48, 0x44, 0x8C};
- uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0x5F, 0xD8};
- #elif ((DATA_RATE == DR_80K) && (BAND == B315MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0xe9, 0x48, 0x74, 0x8C};
- uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0xDF, 0xD8};
- #elif ((DATA_RATE == DR_200K) && (BAND == B315MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0xE8, 0x48, 0x74, 0x84};
- uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0xDF, 0xD9};
- /******************************************************************************/
- /*********************************868MHz***************************************/
- #elif ((DATA_RATE == DR_400K) && (BAND == B868MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x88, 0x48, 0x4c, 0x94};
- uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB};
- #elif ((DATA_RATE == DR_40K) && (BAND == B868MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x09, 0x80, 0x19, 0x5C};
- uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8};
- #elif ((DATA_RATE == DR_80K) && (BAND == B868MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x09, 0x00, 0x21, 0x5C};
- uint8_t RF_cal1_data[] = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8};
- #elif ((DATA_RATE == DR_200K) && (BAND == B868MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x89, 0x48, 0x4c, 0x9c};
- uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0xDF, 0xD9};
- /******************************************************************************/
- /*********************************915MHz***************************************/
- #elif ((DATA_RATE == DR_400K) && (BAND == B915MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x9c, 0x48, 0x54, 0x84};
- uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB};
- #elif ((DATA_RATE == DR_40K) && (BAND == B915MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x1d, 0x48, 0x34, 0x8C};
- uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8};
- #elif ((DATA_RATE == DR_80K) && (BAND == B915MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x1d, 0x00, 0x44, 0x7C};
- uint8_t RF_cal1_data[] = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8};
- #elif ((DATA_RATE == DR_200K) && (BAND == B915MHz))
- uint8_t Dem_cal1_data[] = {0x01, 0x9d, 0x48, 0x54, 0x8c};
- uint8_t RF_cal1_data[] = {0xD0, 0xFF, 0xFF, 0xDF, 0xD9};
- #endif
- /******************************************************************************/
- void RF_Init(uint8_t br, uint8_t freqBand)
- {
- uint8_t BB_cal_data[] = {0x3f, 0xFC, 0x1F, 0x1F, 0x04};
- uint8_t RF_cal3_data[] = {0x01, 0x08, 0xD4, 0x02, 0x46};
- /*
- 如果使能动态payload,需要配置为 uint8_t Dem_cal2_data[] = {0x0B,0xE7,0x00,0x00};
- */
- uint8_t Dem_cal2_data[] = {0x0B, 0xE7, 0x00, 0x01};
- uint8_t RF_cal2_data[] = {0xC8, 0x1E, 0x68, 0x39, 0xF6};
- uint8_t feature = 0x00;
- set_br = br;
- set_freqBand = freqBand;
- memcpy(Dem_cal1_data, rfParamsCal1List[set_freqBand][set_br].dem_cal1, 5);
- memcpy(RF_cal1_data, rfParamsCal1List[set_freqBand][set_br].rf_cal1, 5);
- // SPI_init();
- delay_ms(10);
- RF_WriteReg(RESET_CTL, 0x5A); // Software Reset
- RF_WriteReg(RESET_CTL, 0XA5);
- delay_ms(1);
- #if (DEBUG_RESET_REG_VAL)
- // RF_WriteReg(W_REGISTER + CONFIG, 0X00);
- print_reg_val();
- #endif
- #if (CE_USE_SPI == 1)
- feature |= 0x20;
- #endif
- if (PAYLOAD_WIDTH > 32)
- /*fifo 64 byte */
- feature |= 0x18;
- /*CLEAR TXFIFO */
- RF_WriteReg(FLUSH_TX, 0);
- /*CLEAR RXFIFO*/
- RF_WriteReg(FLUSH_RX, 0);
- /*CLEAR STATUS*/
- RF_WriteReg(W_REGISTER + STATUS, 0x70);
- /*Enable Pipe0*/
- RF_WriteReg(W_REGISTER + EN_RXADDR, 0x01);
- /*address witdth is 5 bytes*/
- RF_WriteReg(W_REGISTER + SETUP_AW, 0x03);
- /*64bytes*/
- RF_WriteReg(W_REGISTER + RX_PW_P0, PAYLOAD_WIDTH);
- /*Writes TX_Address to pan3020*/
- RF_WriteBuf(W_REGISTER + TX_ADDR, (uint8_t *)TX_ADDRESS_DEF, sizeof(TX_ADDRESS_DEF));
- /*RX_Addr0 same as TX_Adr for Auto.Ack*/
- RF_WriteBuf(W_REGISTER + RX_ADDR_P0, (uint8_t *)TX_ADDRESS_DEF, sizeof(TX_ADDRESS_DEF));
- RF_WriteBuf(W_REGISTER + BB_CAL, BB_cal_data, sizeof(BB_cal_data));
- RF_WriteBuf(W_REGISTER + DEM_CAL1, Dem_cal1_data, sizeof(Dem_cal1_data));
- RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data, sizeof(Dem_cal2_data));
- RF_WriteBuf(W_REGISTER + RF_CAL1, RF_cal1_data, sizeof(RF_cal1_data));
- RF_WriteBuf(W_REGISTER + RF_CAL2, RF_cal2_data, sizeof(RF_cal2_data));
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data, sizeof(RF_cal3_data));
- #if (TRANSMIT_TYPE == TRANS_ENHANCE_MODE)
- /*3 retrans... */
- RF_WriteReg(W_REGISTER + SETUP_RETR, 0x03);
- /*Enable Auto.Ack:Pipe0 */
- RF_WriteReg(W_REGISTER + EN_AA, 0x01);
- RF_WriteReg(ACTIVATE, 0x73);
- /*ENDYNPD */
- #if (1 == EN_DYNPLOAD)
- feature |= 0x04;
- RF_WriteReg(W_REGISTER + DYNPD, 0x01);
- #endif
- /*en ack+payload*/
- #if (1 == EN_ACK_PAYLOAD)
- feature |= 0x02;
- #endif
- #elif (TRANSMIT_TYPE == TRANS_BURST_MODE)
- /*Disable retrans...*/
- RF_WriteReg(W_REGISTER + SETUP_RETR, 0x00);
- /*Disable AutoAck */
- RF_WriteReg(W_REGISTER + EN_AA, 0x00);
- #endif
- RF_WriteReg(W_REGISTER + FEATURE, feature);
- /*set datarate */
- // RF_WriteReg(W_REGISTER + RF_SETUP, DATA_RATE|fb);
- // RF_WriteReg(W_REGISTER + RF_CH, fc);
- /* use RF_SetFreq_Datarate API to replace RF_SetChannel */
- /* set fre & datarate */
- // RF_SetChannel(fb,fc);
- RF_SetFreq_Datarate(FREQ_SETTING, BAND);
- RF_CalVco(Dem_cal1_data);
- #if DEBUG_ENABLE
- printf("RF init (2):fb=%d,fc=%d\r\n", fb, fc);
- #endif
- /*set power*/
- RF_SetPower(RF_cal1_data, RF_POWER);
- #if (DEBUG_ENABLE)
- uint8_t i = 0;
- for (i = 0; i < 5; i++)
- {
- printf("0x%02x", Dem_cal1_data[i]);
- printf("\n");
- }
- #endif
- }
- void RF_Carrier(void)
- {
- uint8_t BB_cal_data[] = {0x09, 0x04, 0x07, 0x1F, 0x05};
- // uint8_t Dem_cal1_data[] = {0xE1,0x8e,0x48,0x4c,0x80};
- uint8_t Dem_cal2_data[] = {0x0B, 0xE7, 0x00, 0x05};
- // uint8_t RF_cal1_data[] = {0xC4,0xFF,0xFF,0xDF,0xDB};
- uint8_t RF_cal2_data[] = {0xC8, 0x1E, 0x68, 0x39, 0xF6};
- uint8_t RF_cal3_data[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
- uint8_t RF_cal3_temp[] = {0x01, 0x08, 0xD4, 0x02, 0x64};
- uint8_t RF_cal3_temp1[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
- Dem_cal1_data[0] = 0xE1;
- // SPI_init();
- CE_HIGH;
- delay_10us(500);
- RF_WriteReg(W_REGISTER + CONFIG, 0x0E);
- RF_WriteReg(W_REGISTER + RF_SETUP, 0xd2);
- #if DEBUG_ENABLE
- printf("Channel_Index = %d\r\n", Channel_Index);
- #endif
- // RF_SetFreq_Datarate(FREQ_SETTING,BAND);
- RF_CalVco(Dem_cal1_data);
- RF_WriteBuf(W_REGISTER + BB_CAL, BB_cal_data, sizeof(BB_cal_data));
- RF_WriteBuf(W_REGISTER + RF_CAL2, RF_cal2_data, sizeof(RF_cal2_data));
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data, sizeof(RF_cal3_data));
- RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data, sizeof(Dem_cal2_data));
- delay_10us(500);
- RF_WriteBuf(W_REGISTER + DEM_CAL1, Dem_cal1_data, sizeof(Dem_cal1_data));
- delay_10us(500);
- RF_SetPower(RF_cal1_data, rfPower);
- CE_LOW;
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp, sizeof(RF_cal3_temp));
- RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp1, sizeof(RF_cal3_temp1));
- }
- int8_t RF_getRssi(void)
- {
- dataOut_tu dataOut;
- dataOut.value = RF_ReadReg(R_REGISTER + RPD);
- return dataOut.bits.ANADATA3;
- }
- uint8_t RF_getPipeDynlPktLen(uint8_t pipe)
- {
- rx_pw_px_tu rx_pw_px;
- uint8_t addr;
- switch (pipe)
- {
- case 0:
- {
- addr = RX_PW_P0;
- }
- break;
- case 1:
- {
- addr = RX_PW_P1;
- }
- break;
- case 2:
- {
- addr = RX_PW_P2;
- }
- break;
- case 3:
- {
- addr = RX_PW_P3;
- }
- break;
- case 4:
- {
- addr = RX_PW_P4;
- }
- break;
- case 5:
- {
- addr = RX_PW_P5;
- }
- break;
- default:
- addr = RX_PW_P0;
- break;
- }
- rx_pw_px.value = RF_ReadReg(R_REGISTER + addr);
- return rx_pw_px.bits.RX_PW_Px_LEN;
- }
- void RF_powerDown(void)
- {
- config_tu config;
- CE_LOW;
- config.bits.PWR_UP = 0;
- config.bits.PRIM_RX = 1;
- RF_WriteReg(W_REGISTER + CONFIG, config.value);
- }
- void print_reg_val(void)
- {
- int i;
- uint8_t red_reg_buf[5];
- printf("the value of reg as following :\r\n");
- for (i = 0; i < 31; i++)
- {
- if ((i == RX_ADDR_P0) || (i == RX_ADDR_P1) || (i == TX_ADDR) || (i == RF_CAL3) || (i == DEM_CAL1) || (i == RF_CAL2) || (i == DEM_CAL2) || (i == RF_CAL1) || (i == BB_CAL))
- {
- RF_ReadBuf(i, red_reg_buf, 5);
- printf("Reg_0x%x value is ", i);
- for (int j = 0; j < 5; j++)
- {
- printf("0x%x ", red_reg_buf[j]);
- }
- printf("\r\n");
- }
- else
- {
- printf("Reg_0x%x value is 0x%x\r\n", i, RF_ReadReg(i));
- }
- }
- printf("end of reading reg \r\n");
- }
- void print_RTX_buffer(uint8_t *ucPayload, uint8_t length)
- {
- }
- /***************************************end of file ************************************/
|