RF.c 30 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162
  1. //============================================================================//
  2. // * @file RF.c
  3. // * @author Shi Zheng
  4. // * @version V1.1
  5. // * @date 24/4/2015
  6. // * @brief pan3020 communication interface
  7. // * @modify user: linjianan
  8. // * @modify date: 28/11/2015
  9. //============================================================================//
  10. #include "RF.H"
  11. #include "math.H"
  12. #include "stdio.h"
  13. #include "rf_setting.h"
  14. /*RF 地址:接收端和发送端需一致*/
  15. const uint8_t TX_ADDRESS_DEF[5] = {0xCC, 0xCC, 0xCC, 0xCC, 0xCC};
  16. unsigned short Payload_Count = 0;
  17. uint8_t fb = 0;
  18. int fc = 0;
  19. int set_freqBand = 0;
  20. int set_br = 0;
  21. uint8_t rfPower;
  22. rfParamsCal1_ts rfParamsCal1List[5][4] =
  23. {
  24. {
  25. // 315MHz
  26. {
  27. // 波特率:40kbps
  28. .dem_cal1 = {0x01, 0x69, 0x48, 0x44, 0x8C},
  29. .rf_cal1 = {0xC5, 0xFF, 0xFF, 0x5F, 0xD8},
  30. .dr = 0X00,
  31. .freq = 315,
  32. },
  33. {
  34. // 波特率:80kbps
  35. .dem_cal1 = {0x01, 0xe9, 0x48, 0x74, 0x8C},
  36. .rf_cal1 = {0xC5, 0xFF, 0xFF, 0xDF, 0xD8},
  37. .dr = 0X40,
  38. .freq = 315,
  39. },
  40. {
  41. // 波特率:200kbps
  42. .dem_cal1 = {0x01, 0xE8, 0x48, 0x74, 0x84},
  43. .rf_cal1 = {0xC5, 0xFF, 0xFF, 0xDF, 0xD9},
  44. .dr = 0X80,
  45. .freq = 315,
  46. },
  47. {
  48. // 波特率:400kbps
  49. .dem_cal1 = {0x01, 0xea, 0x48, 0x74, 0x80},
  50. .rf_cal1 = {0xC5, 0xFF, 0xFF, 0xDF, 0xDB},
  51. .dr = 0XC0,
  52. .freq = 315,
  53. },
  54. },
  55. {
  56. // 433MHz
  57. {
  58. // 波特率:40kbps
  59. .dem_cal1 = {0x01, 0x4D, 0x48, 0x34, 0x8C},
  60. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0x5F, 0xD8},
  61. .dr = 0X00,
  62. .freq = 433,
  63. },
  64. {
  65. // 波特率:80kbps
  66. .dem_cal1 = {0x01, 0x8D, 0x48, 0x4C, 0x8C},
  67. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD8},
  68. .dr = 0X40,
  69. .freq = 433,
  70. },
  71. {
  72. // 波特率:200kbps
  73. .dem_cal1 = {0x01, 0x8C, 0x48, 0x4C, 0x84},
  74. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD9},
  75. .dr = 0X80,
  76. .freq = 433,
  77. },
  78. {
  79. // 波特率:400kbps
  80. .dem_cal1 = {0x01, 0x8e, 0x48, 0x4c, 0x80},
  81. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xDB},
  82. .dr = 0XC0,
  83. .freq = 433,
  84. },
  85. },
  86. {
  87. // 490MHz
  88. {
  89. // 波特率:40kbps
  90. .dem_cal1 = {0x01, 0x4D, 0x48, 0x34, 0x8C},
  91. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0x5F, 0xD8},
  92. .dr = 0X00,
  93. .freq = 490,
  94. },
  95. {
  96. // 波特率:80kbps
  97. .dem_cal1 = {0x01, 0x8D, 0x48, 0x4C, 0x8C},
  98. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD8},
  99. .dr = 0X40,
  100. .freq = 490,
  101. },
  102. {
  103. // 波特率:200kbps
  104. .dem_cal1 = {0x01, 0x8C, 0x48, 0x4C, 0x84},
  105. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xD9},
  106. .dr = 0X80,
  107. .freq = 490,
  108. },
  109. {
  110. // 波特率:400kbps
  111. .dem_cal1 = {0x01, 0x8e, 0x48, 0x4c, 0x80},
  112. .rf_cal1 = {0xC4, 0xFF, 0xFF, 0xDF, 0xDB},
  113. .dr = 0XC0,
  114. .freq = 490,
  115. },
  116. },
  117. {
  118. // 868MHz
  119. {
  120. // 波特率:40kbps
  121. .dem_cal1 = {0x01, 0x09, 0x80, 0x19, 0x5C},
  122. .rf_cal1 = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8},
  123. .dr = 0X00,
  124. .freq = 868,
  125. },
  126. {
  127. // 波特率:80kbps
  128. .dem_cal1 = {0x01, 0x09, 0x00, 0x21, 0x5C},
  129. .rf_cal1 = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8},
  130. .dr = 0X40,
  131. .freq = 868,
  132. },
  133. {
  134. // 波特率:200kbps
  135. .dem_cal1 = {0x01, 0x89, 0x48, 0x4c, 0x9c},
  136. .rf_cal1 = {0xd0, 0xFF, 0xFF, 0xDF, 0xD9},
  137. .dr = 0X80,
  138. .freq = 868,
  139. },
  140. {
  141. // 波特率:400kbps
  142. .dem_cal1 = {0x01, 0x88, 0x48, 0x4c, 0x94},
  143. .rf_cal1 = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB},
  144. .dr = 0XC0,
  145. .freq = 868,
  146. },
  147. },
  148. {
  149. // 915MHz
  150. {
  151. // 波特率:40kbps
  152. .dem_cal1 = {0x01, 0x1d, 0x48, 0x34, 0x8C},
  153. .rf_cal1 = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8},
  154. .dr = 0X00,
  155. .freq = 915,
  156. },
  157. {
  158. // 波特率:80kbps
  159. .dem_cal1 = {0x01, 0x1d, 0x00, 0x44, 0x7C},
  160. .rf_cal1 = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8},
  161. .dr = 0X40,
  162. .freq = 915,
  163. },
  164. {
  165. // 波特率:200kbps
  166. .dem_cal1 = {0x01, 0x9d, 0x48, 0x54, 0x8c},
  167. .rf_cal1 = {0xD0, 0xFF, 0xFF, 0xDF, 0xD9},
  168. .dr = 0X80,
  169. .freq = 915,
  170. },
  171. {
  172. // 波特率:400kbps
  173. .dem_cal1 = {0x01, 0x9c, 0x48, 0x54, 0x84},
  174. .rf_cal1 = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB},
  175. .dr = 0XC0,
  176. .freq = 915,
  177. },
  178. }};
  179. extern void RF_CalVco(uint8_t *ptr_Dem_cal1);
  180. extern uint8_t Dem_cal1_data[];
  181. extern uint8_t RF_cal1_data[];
  182. void RF_Get_fb_fc(double freq);
  183. void delay_10us(uint32_t time)
  184. {
  185. delay10us(time);
  186. }
  187. void delay_ms(uint32_t time)
  188. {
  189. delay1ms(time);
  190. }
  191. void RF_WriteReg(uint8_t reg, uint8_t wdata)
  192. {
  193. CSN_LOW;
  194. SPI_RW(reg);
  195. SPI_RW(wdata);
  196. CSN_HIGH;
  197. }
  198. uint8_t RF_ReadReg(uint8_t reg)
  199. {
  200. uint8_t tmp;
  201. CSN_LOW;
  202. SPI_RW(reg);
  203. tmp = SPI_RW(0);
  204. CSN_HIGH;
  205. return tmp;
  206. }
  207. void RF_WriteBuf(uint8_t reg, uint8_t *pBuf, uint8_t length)
  208. {
  209. uint8_t j;
  210. CSN_LOW;
  211. j = 0;
  212. SPI_RW(reg);
  213. for (j = 0; j < length; j++)
  214. {
  215. SPI_RW(pBuf[j]);
  216. }
  217. j = 0;
  218. CSN_HIGH;
  219. }
  220. void RF_ReadBuf(uint8_t reg, unsigned char *pBuf, uint8_t length)
  221. {
  222. uint8_t byte_ctr;
  223. CSN_LOW;
  224. SPI_RW(reg);
  225. for (byte_ctr = 0; byte_ctr < length; byte_ctr++)
  226. pBuf[byte_ctr] = SPI_RW(0);
  227. CSN_HIGH;
  228. }
  229. void RF_TxMode(void)
  230. {
  231. CE_LOW;
  232. /*将RF设置成TX模式*/
  233. RF_WriteReg(W_REGISTER + CONFIG, 0X0E);
  234. // delay_10us(1);
  235. }
  236. void RF_RxMode(void)
  237. {
  238. uint8_t RF_cal3_temp[] = {0x01, 0x08, 0xD4, 0x02, 0x64};
  239. uint8_t RF_cal3_temp1[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
  240. CE_LOW;
  241. //*将RF设置成RX模式*
  242. RF_WriteReg(W_REGISTER + CONFIG, 0X0F);
  243. // delay_ms(5);
  244. /*Set CE pin high */
  245. CE_HIGH;
  246. /*keep ce high at least 150us*/
  247. delay_10us(15);
  248. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp, sizeof(RF_cal3_temp));
  249. delay_10us(10);
  250. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp1, sizeof(RF_cal3_temp1));
  251. // delay_ms(2);
  252. }
  253. uint8_t RF_GetStatus(void)
  254. {
  255. /*读取RF的状态 */
  256. return RF_ReadReg(STATUS) & 0x70;
  257. }
  258. void RF_ClearStatus(void)
  259. {
  260. CE_LOW;
  261. /*清除RF的状态*/
  262. RF_WriteReg(W_REGISTER + STATUS, 0x70);
  263. }
  264. void RF_ClearFIFO(void)
  265. {
  266. CE_LOW;
  267. /*清除RF 的 TX FIFO*/
  268. RF_WriteReg(FLUSH_TX, 0);
  269. /*清除RF 的 RX FIFO*/
  270. RF_WriteReg(FLUSH_RX, 0);
  271. }
  272. void RF_SetPower(uint8_t *p, uint8_t power)
  273. {
  274. rfPower = power;
  275. switch (rfPower)
  276. {
  277. case RF18DBM:
  278. *(p + 1) &= ~0xfe; // 8-15
  279. *(p + 1) |= 0xfe;
  280. *(p + 2) &= ~0x07; // 16-23
  281. *(p + 2) |= 0x07;
  282. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  283. break;
  284. case RF17DBM:
  285. *(p + 1) &= ~0xfe; // 8-15
  286. *(p + 1) |= 0xfe;
  287. *(p + 2) &= ~0x07; // 16-23
  288. *(p + 2) |= 0x01;
  289. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  290. break;
  291. case RF16DBM:
  292. *(p + 1) &= ~0xfe; // 8-15
  293. *(p + 1) |= 0xfa;
  294. *(p + 2) &= ~0x07; // 16-23
  295. *(p + 2) |= 0x01;
  296. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  297. break;
  298. case RF15DBM:
  299. *(p + 1) &= ~0xfe;
  300. *(p + 1) |= 0xf8;
  301. *(p + 2) &= ~0x07;
  302. *(p + 2) |= 0x01;
  303. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  304. break;
  305. case RF13DBM:
  306. *(p + 1) &= ~0xfe; // 8-15
  307. *(p + 1) |= 0x58;
  308. *(p + 2) &= ~0x07; // 16-23
  309. *(p + 2) |= 0x01;
  310. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  311. break;
  312. case RF12DBM:
  313. *(p + 1) &= ~0xfe; // 8-15
  314. *(p + 1) |= 0x28;
  315. *(p + 2) &= ~0x07; // 16-23
  316. *(p + 2) |= 0x01;
  317. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  318. break;
  319. case RF11DBM:
  320. *(p + 1) &= ~0xfe; // 8-15
  321. *(p + 1) |= 0x10;
  322. *(p + 2) &= ~0x07; // 16-23
  323. *(p + 2) |= 0x01;
  324. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  325. break;
  326. case RF10DBM:
  327. *(p + 1) &= ~0xfe;
  328. *(p + 1) |= 0xf8;
  329. *(p + 2) &= ~0x07;
  330. *(p + 2) |= 0x00;
  331. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  332. break;
  333. case RF9DBM:
  334. *(p + 1) &= ~0xfe; // 8-15
  335. *(p + 1) |= 0xd8;
  336. *(p + 2) &= ~0x07; // 16-23
  337. *(p + 2) |= 0x00;
  338. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  339. break;
  340. case RF8DBM:
  341. *(p + 1) &= ~0xfe; // 8-15
  342. *(p + 1) |= 0xc0;
  343. *(p + 2) &= ~0x07; // 16-23
  344. *(p + 2) |= 0x00;
  345. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  346. break;
  347. case RF7DBM:
  348. *(p + 1) &= ~0xfe; // 8-15
  349. *(p + 1) |= 0xb0;
  350. *(p + 2) &= ~0x07; // 16-23
  351. *(p + 2) |= 0x00;
  352. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  353. break;
  354. case RF6DBM:
  355. *(p + 1) &= ~0xfe; // 8-15
  356. *(p + 1) |= 0x98;
  357. *(p + 2) &= ~0x07; // 16-23
  358. *(p + 2) |= 0x00;
  359. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  360. break;
  361. case RF5DBM:
  362. *(p + 1) &= ~0xfe; // 8-15
  363. *(p + 1) |= 0x88;
  364. *(p + 2) &= ~0x07; // 16-23
  365. *(p + 2) |= 0x00;
  366. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  367. break;
  368. case RF4DBM:
  369. *(p + 1) &= ~0xfe; // 8-15
  370. *(p + 1) |= 0x78;
  371. *(p + 2) &= ~0x07; // 16-23
  372. *(p + 2) |= 0x00;
  373. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  374. break;
  375. case RF2DBM:
  376. *(p + 1) &= ~0xfe;
  377. *(p + 1) |= 0x60;
  378. *(p + 2) &= ~0x07;
  379. *(p + 2) |= 0x00;
  380. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  381. break;
  382. case RF1DBM:
  383. *(p + 1) &= ~0xfe; // 8-15
  384. *(p + 1) |= 0x58;
  385. *(p + 2) &= ~0x07; // 16-23
  386. *(p + 2) |= 0x00;
  387. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  388. break;
  389. case RF0DBM:
  390. *(p + 1) &= ~0xfe; // 8-15
  391. *(p + 1) |= 0x48;
  392. *(p + 2) &= ~0x07; // 16-23
  393. *(p + 2) |= 0x00;
  394. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  395. break;
  396. case RFN1DBM:
  397. *(p + 1) &= ~0xfe; // 8-15
  398. *(p + 1) |= 0x40;
  399. *(p + 2) &= ~0x07; // 16-23
  400. *(p + 2) |= 0x00;
  401. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  402. break;
  403. case RFN6DBM:
  404. *(p + 1) &= ~0xfe; // 8-15
  405. *(p + 1) |= 0x20;
  406. *(p + 2) &= ~0x07; // 16-23
  407. *(p + 2) |= 0x00;
  408. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  409. break;
  410. case RFN15DBM:
  411. *(p + 1) &= ~0xfe; // 8-15
  412. *(p + 1) |= 0x08;
  413. *(p + 2) &= ~0x07; // 16-23
  414. *(p + 2) |= 0x00;
  415. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  416. break;
  417. default:
  418. break;
  419. }
  420. }
  421. void RF_SetPowerParams(uint8_t *p, uint8_t power)
  422. {
  423. CE_LOW;
  424. switch (power)
  425. {
  426. case RF18DBM:
  427. *(p + 1) &= ~0xfe; // 8-15
  428. *(p + 1) |= 0xfe;
  429. *(p + 2) &= ~0x07; // 16-23
  430. *(p + 2) |= 0x07;
  431. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  432. break;
  433. case RF17DBM:
  434. *(p + 1) &= ~0xfe; // 8-15
  435. *(p + 1) |= 0xfe;
  436. *(p + 2) &= ~0x07; // 16-23
  437. *(p + 2) |= 0x01;
  438. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  439. break;
  440. case RF16DBM:
  441. *(p + 1) &= ~0xfe; // 8-15
  442. *(p + 1) |= 0xfa;
  443. *(p + 2) &= ~0x07; // 16-23
  444. *(p + 2) |= 0x01;
  445. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  446. break;
  447. case RF15DBM:
  448. *(p + 1) &= ~0xfe;
  449. *(p + 1) |= 0xf8;
  450. *(p + 2) &= ~0x07;
  451. *(p + 2) |= 0x01;
  452. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  453. break;
  454. case RF13DBM:
  455. *(p + 1) &= ~0xfe; // 8-15
  456. *(p + 1) |= 0x58;
  457. *(p + 2) &= ~0x07; // 16-23
  458. *(p + 2) |= 0x01;
  459. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  460. break;
  461. case RF12DBM:
  462. *(p + 1) &= ~0xfe; // 8-15
  463. *(p + 1) |= 0x28;
  464. *(p + 2) &= ~0x07; // 16-23
  465. *(p + 2) |= 0x01;
  466. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  467. break;
  468. case RF11DBM:
  469. *(p + 1) &= ~0xfe; // 8-15
  470. *(p + 1) |= 0x10;
  471. *(p + 2) &= ~0x07; // 16-23
  472. *(p + 2) |= 0x01;
  473. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  474. break;
  475. case RF10DBM:
  476. *(p + 1) &= ~0xfe;
  477. *(p + 1) |= 0xf8;
  478. *(p + 2) &= ~0x07;
  479. *(p + 2) |= 0x00;
  480. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  481. break;
  482. case RF9DBM:
  483. *(p + 1) &= ~0xfe; // 8-15
  484. *(p + 1) |= 0xd8;
  485. *(p + 2) &= ~0x07; // 16-23
  486. *(p + 2) |= 0x00;
  487. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  488. break;
  489. case RF8DBM:
  490. *(p + 1) &= ~0xfe; // 8-15
  491. *(p + 1) |= 0xc0;
  492. *(p + 2) &= ~0x07; // 16-23
  493. *(p + 2) |= 0x00;
  494. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  495. break;
  496. case RF7DBM:
  497. *(p + 1) &= ~0xfe; // 8-15
  498. *(p + 1) |= 0xb0;
  499. *(p + 2) &= ~0x07; // 16-23
  500. *(p + 2) |= 0x00;
  501. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  502. break;
  503. case RF6DBM:
  504. *(p + 1) &= ~0xfe; // 8-15
  505. *(p + 1) |= 0x98;
  506. *(p + 2) &= ~0x07; // 16-23
  507. *(p + 2) |= 0x00;
  508. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  509. break;
  510. case RF5DBM:
  511. *(p + 1) &= ~0xfe; // 8-15
  512. *(p + 1) |= 0x88;
  513. *(p + 2) &= ~0x07; // 16-23
  514. *(p + 2) |= 0x00;
  515. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  516. break;
  517. case RF4DBM:
  518. *(p + 1) &= ~0xfe; // 8-15
  519. *(p + 1) |= 0x78;
  520. *(p + 2) &= ~0x07; // 16-23
  521. *(p + 2) |= 0x00;
  522. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  523. break;
  524. case RF2DBM:
  525. *(p + 1) &= ~0xfe;
  526. *(p + 1) |= 0x60;
  527. *(p + 2) &= ~0x07;
  528. *(p + 2) |= 0x00;
  529. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  530. break;
  531. case RF1DBM:
  532. *(p + 1) &= ~0xfe; // 8-15
  533. *(p + 1) |= 0x58;
  534. *(p + 2) &= ~0x07; // 16-23
  535. *(p + 2) |= 0x00;
  536. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  537. break;
  538. case RF0DBM:
  539. *(p + 1) &= ~0xfe; // 8-15
  540. *(p + 1) |= 0x48;
  541. *(p + 2) &= ~0x07; // 16-23
  542. *(p + 2) |= 0x00;
  543. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  544. break;
  545. case RFN1DBM:
  546. *(p + 1) &= ~0xfe; // 8-15
  547. *(p + 1) |= 0x40;
  548. *(p + 2) &= ~0x07; // 16-23
  549. *(p + 2) |= 0x00;
  550. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  551. break;
  552. case RFN6DBM:
  553. *(p + 1) &= ~0xfe; // 8-15
  554. *(p + 1) |= 0x20;
  555. *(p + 2) &= ~0x07; // 16-23
  556. *(p + 2) |= 0x00;
  557. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  558. break;
  559. case RFN15DBM:
  560. *(p + 1) &= ~0xfe; // 8-15
  561. *(p + 1) |= 0x08;
  562. *(p + 2) &= ~0x07; // 16-23
  563. *(p + 2) |= 0x00;
  564. RF_WriteBuf(W_REGISTER + RF_CAL1, p, 5);
  565. break;
  566. default:
  567. break;
  568. }
  569. }
  570. void RF_SetChannel(uint8_t bb, uint8_t cc)
  571. {
  572. /*
  573. uint8_t RFSetup_temp = 0;
  574. Fb &= 0x3f;
  575. RFSetup_temp = RF_ReadReg(RF_SETUP)&0xc0;
  576. RFSetup_temp |= Fb;
  577. */
  578. RF_WriteReg(W_REGISTER + RF_SETUP, bb | rfParamsCal1List[set_freqBand][set_br].dr);
  579. RF_WriteReg(W_REGISTER + RF_CH, cc);
  580. }
  581. void RF_SetFreq_Datarate(double freq, uint8_t fre_band)
  582. {
  583. #if DEBUG_ENABLE
  584. printf("freq_Set function :freq=%f,band=%d\r\n", freq, fre_band);
  585. #endif
  586. double tmp_val1 = 0;
  587. double fop_val = 0;
  588. double intpart, fractpart;
  589. switch (fre_band)
  590. {
  591. case B315MHz:
  592. fop_val = freq * 6 / 8;
  593. tmp_val1 = fop_val - 200;
  594. break;
  595. case B433MHz:
  596. fop_val = freq * 4 / 8;
  597. tmp_val1 = fop_val - 200;
  598. break;
  599. case B868MHz:
  600. case B915MHz:
  601. fop_val = freq * 2 / 8;
  602. tmp_val1 = fop_val - 200;
  603. break;
  604. /*B433MH*/
  605. default:
  606. fop_val = freq * 4 / 8;
  607. tmp_val1 = fop_val - 200;
  608. break;
  609. }
  610. fractpart = modf(tmp_val1, &intpart);
  611. fb = (int)intpart;
  612. fc = (int)(fractpart * 200);
  613. #if DEBUG_ENABLE
  614. printf("freq_Set function :fb=%d,fc=%d\r\n", fb, fc);
  615. #endif
  616. RF_SetChannel(fb, fc);
  617. }
  618. void RF_Get_fb_fc(double freq)
  619. {
  620. #if DEBUG_ENABLE
  621. printf("freq_Set function :freq=%f,band=%d\r\n", freq, fre_band);
  622. #endif
  623. double tmp_val1 = 0;
  624. double fop_val = 0;
  625. double intpart, fractpart;
  626. if (freq < 433)
  627. {
  628. fop_val = freq * 6 / 8;
  629. tmp_val1 = fop_val - 200;
  630. }
  631. else if (freq < 490)
  632. {
  633. fop_val = freq * 4 / 8;
  634. tmp_val1 = fop_val - 200;
  635. }
  636. else if (freq < 868)
  637. {
  638. fop_val = freq * 2 / 8;
  639. tmp_val1 = fop_val - 200;
  640. }
  641. else if (freq < 915)
  642. {
  643. fop_val = freq * 6 / 8;
  644. tmp_val1 = fop_val - 200;
  645. }
  646. fractpart = modf(tmp_val1, &intpart);
  647. fb = (int)intpart;
  648. fc = (int)(fractpart * 200);
  649. }
  650. void RF_setFreq(uint32_t freq)
  651. {
  652. RF_SetFreq_Datarate(freq, set_freqBand + 1);
  653. }
  654. void RF_Tx_TransmintData(uint8_t *ucTXPayload, uint8_t length)
  655. {
  656. uint8_t RF_cal3_temp[] = {0x01, 0x08, 0xD4, 0x02, 0x64};
  657. uint8_t RF_cal3_temp1[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
  658. /*rf 处于空闲状态才发送数据*/
  659. if (!RF_GetStatus())
  660. {
  661. /*write data to txfifo */
  662. RF_WriteBuf(W_TX_PAYLOAD, ucTXPayload, length);
  663. /*rf enter tx mode start send data*/
  664. CE_HIGH;
  665. /*keep ce high at least 150us*/
  666. delay_10us(15);
  667. /*切换时钟*/
  668. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp, sizeof(RF_cal3_temp));
  669. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp1, sizeof(RF_cal3_temp1));
  670. CE_LOW;
  671. }
  672. }
  673. void RF_Tx_CheckResult(uint8_t *ucAckPayload, uint8_t length)
  674. {
  675. switch (RF_GetStatus())
  676. {
  677. /*普通型发送完成 或 增强型发送成功*/
  678. case TX_DS_FLAG:
  679. /*增强型模式,累计ack次数*/
  680. Payload_Count++;
  681. RF_ClearFIFO();
  682. RF_ClearStatus();
  683. break;
  684. /*增强型发送成功且收到payload */
  685. case RX_TX_FLAG:
  686. RF_ReadBuf(R_RX_PAYLOAD, ucAckPayload, length);
  687. Payload_Count++;
  688. RF_ClearFIFO();
  689. RF_ClearStatus();
  690. break;
  691. /*增强型发送超时失败*/
  692. case MAX_RT_FLAG:
  693. RF_ClearFIFO();
  694. RF_ClearStatus();
  695. break;
  696. default:
  697. break;
  698. }
  699. }
  700. uint8_t RF_DumpRxData(uint8_t *ucPayload, uint8_t length)
  701. {
  702. if (RF_GetStatus() == 0x40)
  703. {
  704. RF_ReadBuf(R_RX_PAYLOAD, ucPayload, length);
  705. #if DEBUG_PRINT_RTX_BUFFER
  706. print_RTX_buffer(ucPayload, length);
  707. #endif
  708. return 1;
  709. }
  710. return 0;
  711. }
  712. void RF_CalVco(uint8_t *ptr_Dem_cal1)
  713. {
  714. uint8_t i = 0, j = 0, h = 0;
  715. uint8_t Dem_cal2_data[] = {0x0B, 0xE7, 0x00, 0x01};
  716. /*Dataout_Sel置1*/
  717. uint8_t Dem_cal2_data1[] = {0x0B, 0xE7, 0x00, 0x03};
  718. /*Vco_Calibration EN*/
  719. // uint8_t RF_cal3_data1[] = {0x01,0x08,0xD4,0x02,0x76};
  720. uint8_t RF_cal3_data1[] = {0x01, 0x08, 0xD4, 0x02, 0x76};
  721. /*触发Vco_Calibration_SPI_Triger*/
  722. // uint8_t RF_cal3_data2[] = {0x01,0x18,0xD4,0x02,0x76};
  723. uint8_t RF_cal3_data2[] = {0x01, 0x18, 0xD4, 0x02, 0x76};
  724. RF_RxMode();
  725. RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data1, sizeof(Dem_cal2_data1));
  726. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data1, sizeof(RF_cal3_data1));
  727. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data2, sizeof(RF_cal3_data2));
  728. delay_ms(5);
  729. i = RF_ReadReg(RPD);
  730. j = RF_ReadReg(FIFO_STATUS);
  731. i >>= 2;
  732. i &= 0x30;
  733. j &= 0x0C;
  734. h = i | j;
  735. ptr_Dem_cal1[1] &= 0xC3;
  736. ptr_Dem_cal1[1] |= h;
  737. RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data, sizeof(Dem_cal2_data));
  738. RF_WriteBuf(W_REGISTER + DEM_CAL1, ptr_Dem_cal1, 0x05);
  739. CE_LOW;
  740. }
  741. /*********************以下部分与RF通信相关,不建议修改************************/
  742. /*********************************433MHz***************************************/
  743. #if ((DATA_RATE == DR_400K) && (BAND == B433MHz))
  744. uint8_t Dem_cal1_data[] = {0x01, 0x8e, 0x48, 0x4c, 0x80};
  745. uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0xDF, 0xDB};
  746. #elif ((DATA_RATE == DR_40K) && (BAND == B433MHz))
  747. uint8_t Dem_cal1_data[] = {0x01, 0x4D, 0x48, 0x34, 0x8C};
  748. uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0x5F, 0xD8};
  749. #elif ((DATA_RATE == DR_80K) && (BAND == B433MHz))
  750. uint8_t Dem_cal1_data[] = {0x01, 0x8D, 0x48, 0x4C, 0x8C};
  751. uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0xDF, 0xD8};
  752. #elif ((DATA_RATE == DR_200K) && (BAND == B433MHz))
  753. uint8_t Dem_cal1_data[] = {0x01, 0x8C, 0x48, 0x4C, 0x84};
  754. uint8_t RF_cal1_data[] = {0xC4, 0xFF, 0xFF, 0xDF, 0xD9};
  755. /******************************************************************************/
  756. /*********************************315MHz***************************************/
  757. #elif ((DATA_RATE == DR_400K) && (BAND == B315MHz))
  758. uint8_t Dem_cal1_data[] = {0x01, 0xea, 0x48, 0x74, 0x80};
  759. uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0xDF, 0xDB};
  760. #elif ((DATA_RATE == DR_40K) && (BAND == B315MHz))
  761. uint8_t Dem_cal1_data[] = {0x01, 0x69, 0x48, 0x44, 0x8C};
  762. uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0x5F, 0xD8};
  763. #elif ((DATA_RATE == DR_80K) && (BAND == B315MHz))
  764. uint8_t Dem_cal1_data[] = {0x01, 0xe9, 0x48, 0x74, 0x8C};
  765. uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0xDF, 0xD8};
  766. #elif ((DATA_RATE == DR_200K) && (BAND == B315MHz))
  767. uint8_t Dem_cal1_data[] = {0x01, 0xE8, 0x48, 0x74, 0x84};
  768. uint8_t RF_cal1_data[] = {0xC5, 0xFF, 0xFF, 0xDF, 0xD9};
  769. /******************************************************************************/
  770. /*********************************868MHz***************************************/
  771. #elif ((DATA_RATE == DR_400K) && (BAND == B868MHz))
  772. uint8_t Dem_cal1_data[] = {0x01, 0x88, 0x48, 0x4c, 0x94};
  773. uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB};
  774. #elif ((DATA_RATE == DR_40K) && (BAND == B868MHz))
  775. uint8_t Dem_cal1_data[] = {0x01, 0x09, 0x80, 0x19, 0x5C};
  776. uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8};
  777. #elif ((DATA_RATE == DR_80K) && (BAND == B868MHz))
  778. uint8_t Dem_cal1_data[] = {0x01, 0x09, 0x00, 0x21, 0x5C};
  779. uint8_t RF_cal1_data[] = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8};
  780. #elif ((DATA_RATE == DR_200K) && (BAND == B868MHz))
  781. uint8_t Dem_cal1_data[] = {0x01, 0x89, 0x48, 0x4c, 0x9c};
  782. uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0xDF, 0xD9};
  783. /******************************************************************************/
  784. /*********************************915MHz***************************************/
  785. #elif ((DATA_RATE == DR_400K) && (BAND == B915MHz))
  786. uint8_t Dem_cal1_data[] = {0x01, 0x9c, 0x48, 0x54, 0x84};
  787. uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0xDF, 0xDB};
  788. #elif ((DATA_RATE == DR_40K) && (BAND == B915MHz))
  789. uint8_t Dem_cal1_data[] = {0x01, 0x1d, 0x48, 0x34, 0x8C};
  790. uint8_t RF_cal1_data[] = {0xd0, 0xFF, 0xFF, 0x5F, 0xD8};
  791. #elif ((DATA_RATE == DR_80K) && (BAND == B915MHz))
  792. uint8_t Dem_cal1_data[] = {0x01, 0x1d, 0x00, 0x44, 0x7C};
  793. uint8_t RF_cal1_data[] = {0xD0, 0xFF, 0xFF, 0xDF, 0xD8};
  794. #elif ((DATA_RATE == DR_200K) && (BAND == B915MHz))
  795. uint8_t Dem_cal1_data[] = {0x01, 0x9d, 0x48, 0x54, 0x8c};
  796. uint8_t RF_cal1_data[] = {0xD0, 0xFF, 0xFF, 0xDF, 0xD9};
  797. #endif
  798. /******************************************************************************/
  799. void RF_Init(uint8_t br, uint8_t freqBand)
  800. {
  801. uint8_t BB_cal_data[] = {0x3f, 0xFC, 0x1F, 0x1F, 0x04};
  802. uint8_t RF_cal3_data[] = {0x01, 0x08, 0xD4, 0x02, 0x46};
  803. /*
  804. 如果使能动态payload,需要配置为 uint8_t Dem_cal2_data[] = {0x0B,0xE7,0x00,0x00};
  805. */
  806. uint8_t Dem_cal2_data[] = {0x0B, 0xE7, 0x00, 0x01};
  807. uint8_t RF_cal2_data[] = {0xC8, 0x1E, 0x68, 0x39, 0xF6};
  808. uint8_t feature = 0x00;
  809. set_br = br;
  810. set_freqBand = freqBand;
  811. memcpy(Dem_cal1_data, rfParamsCal1List[set_freqBand][set_br].dem_cal1, 5);
  812. memcpy(RF_cal1_data, rfParamsCal1List[set_freqBand][set_br].rf_cal1, 5);
  813. // SPI_init();
  814. delay_ms(10);
  815. RF_WriteReg(RESET_CTL, 0x5A); // Software Reset
  816. RF_WriteReg(RESET_CTL, 0XA5);
  817. delay_ms(1);
  818. #if (DEBUG_RESET_REG_VAL)
  819. // RF_WriteReg(W_REGISTER + CONFIG, 0X00);
  820. print_reg_val();
  821. #endif
  822. #if (CE_USE_SPI == 1)
  823. feature |= 0x20;
  824. #endif
  825. if (PAYLOAD_WIDTH > 32)
  826. /*fifo 64 byte */
  827. feature |= 0x18;
  828. /*CLEAR TXFIFO */
  829. RF_WriteReg(FLUSH_TX, 0);
  830. /*CLEAR RXFIFO*/
  831. RF_WriteReg(FLUSH_RX, 0);
  832. /*CLEAR STATUS*/
  833. RF_WriteReg(W_REGISTER + STATUS, 0x70);
  834. /*Enable Pipe0*/
  835. RF_WriteReg(W_REGISTER + EN_RXADDR, 0x01);
  836. /*address witdth is 5 bytes*/
  837. RF_WriteReg(W_REGISTER + SETUP_AW, 0x03);
  838. /*64bytes*/
  839. RF_WriteReg(W_REGISTER + RX_PW_P0, PAYLOAD_WIDTH);
  840. /*Writes TX_Address to pan3020*/
  841. RF_WriteBuf(W_REGISTER + TX_ADDR, (uint8_t *)TX_ADDRESS_DEF, sizeof(TX_ADDRESS_DEF));
  842. /*RX_Addr0 same as TX_Adr for Auto.Ack*/
  843. RF_WriteBuf(W_REGISTER + RX_ADDR_P0, (uint8_t *)TX_ADDRESS_DEF, sizeof(TX_ADDRESS_DEF));
  844. RF_WriteBuf(W_REGISTER + BB_CAL, BB_cal_data, sizeof(BB_cal_data));
  845. RF_WriteBuf(W_REGISTER + DEM_CAL1, Dem_cal1_data, sizeof(Dem_cal1_data));
  846. RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data, sizeof(Dem_cal2_data));
  847. RF_WriteBuf(W_REGISTER + RF_CAL1, RF_cal1_data, sizeof(RF_cal1_data));
  848. RF_WriteBuf(W_REGISTER + RF_CAL2, RF_cal2_data, sizeof(RF_cal2_data));
  849. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data, sizeof(RF_cal3_data));
  850. #if (TRANSMIT_TYPE == TRANS_ENHANCE_MODE)
  851. /*3 retrans... */
  852. RF_WriteReg(W_REGISTER + SETUP_RETR, 0x03);
  853. /*Enable Auto.Ack:Pipe0 */
  854. RF_WriteReg(W_REGISTER + EN_AA, 0x01);
  855. RF_WriteReg(ACTIVATE, 0x73);
  856. /*ENDYNPD */
  857. #if (1 == EN_DYNPLOAD)
  858. feature |= 0x04;
  859. RF_WriteReg(W_REGISTER + DYNPD, 0x01);
  860. #endif
  861. /*en ack+payload*/
  862. #if (1 == EN_ACK_PAYLOAD)
  863. feature |= 0x02;
  864. #endif
  865. #elif (TRANSMIT_TYPE == TRANS_BURST_MODE)
  866. /*Disable retrans...*/
  867. RF_WriteReg(W_REGISTER + SETUP_RETR, 0x00);
  868. /*Disable AutoAck */
  869. RF_WriteReg(W_REGISTER + EN_AA, 0x00);
  870. #endif
  871. RF_WriteReg(W_REGISTER + FEATURE, feature);
  872. /*set datarate */
  873. // RF_WriteReg(W_REGISTER + RF_SETUP, DATA_RATE|fb);
  874. // RF_WriteReg(W_REGISTER + RF_CH, fc);
  875. /* use RF_SetFreq_Datarate API to replace RF_SetChannel */
  876. /* set fre & datarate */
  877. // RF_SetChannel(fb,fc);
  878. RF_SetFreq_Datarate(FREQ_SETTING, BAND);
  879. RF_CalVco(Dem_cal1_data);
  880. #if DEBUG_ENABLE
  881. printf("RF init (2):fb=%d,fc=%d\r\n", fb, fc);
  882. #endif
  883. /*set power*/
  884. RF_SetPower(RF_cal1_data, RF_POWER);
  885. #if (DEBUG_ENABLE)
  886. uint8_t i = 0;
  887. for (i = 0; i < 5; i++)
  888. {
  889. printf("0x%02x", Dem_cal1_data[i]);
  890. printf("\n");
  891. }
  892. #endif
  893. }
  894. void RF_Carrier(void)
  895. {
  896. uint8_t BB_cal_data[] = {0x09, 0x04, 0x07, 0x1F, 0x05};
  897. // uint8_t Dem_cal1_data[] = {0xE1,0x8e,0x48,0x4c,0x80};
  898. uint8_t Dem_cal2_data[] = {0x0B, 0xE7, 0x00, 0x05};
  899. // uint8_t RF_cal1_data[] = {0xC4,0xFF,0xFF,0xDF,0xDB};
  900. uint8_t RF_cal2_data[] = {0xC8, 0x1E, 0x68, 0x39, 0xF6};
  901. uint8_t RF_cal3_data[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
  902. uint8_t RF_cal3_temp[] = {0x01, 0x08, 0xD4, 0x02, 0x64};
  903. uint8_t RF_cal3_temp1[] = {0x01, 0x08, 0xD4, 0x02, 0x66};
  904. Dem_cal1_data[0] = 0xE1;
  905. // SPI_init();
  906. CE_HIGH;
  907. delay_10us(500);
  908. RF_WriteReg(W_REGISTER + CONFIG, 0x0E);
  909. RF_WriteReg(W_REGISTER + RF_SETUP, 0xd2);
  910. #if DEBUG_ENABLE
  911. printf("Channel_Index = %d\r\n", Channel_Index);
  912. #endif
  913. // RF_SetFreq_Datarate(FREQ_SETTING,BAND);
  914. RF_CalVco(Dem_cal1_data);
  915. RF_WriteBuf(W_REGISTER + BB_CAL, BB_cal_data, sizeof(BB_cal_data));
  916. RF_WriteBuf(W_REGISTER + RF_CAL2, RF_cal2_data, sizeof(RF_cal2_data));
  917. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_data, sizeof(RF_cal3_data));
  918. RF_WriteBuf(W_REGISTER + DEM_CAL2, Dem_cal2_data, sizeof(Dem_cal2_data));
  919. delay_10us(500);
  920. RF_WriteBuf(W_REGISTER + DEM_CAL1, Dem_cal1_data, sizeof(Dem_cal1_data));
  921. delay_10us(500);
  922. RF_SetPower(RF_cal1_data, rfPower);
  923. CE_LOW;
  924. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp, sizeof(RF_cal3_temp));
  925. RF_WriteBuf(W_REGISTER + RF_CAL3, RF_cal3_temp1, sizeof(RF_cal3_temp1));
  926. }
  927. int8_t RF_getRssi(void)
  928. {
  929. dataOut_tu dataOut;
  930. dataOut.value = RF_ReadReg(R_REGISTER + RPD);
  931. return dataOut.bits.ANADATA3;
  932. }
  933. uint8_t RF_getPipeDynlPktLen(uint8_t pipe)
  934. {
  935. rx_pw_px_tu rx_pw_px;
  936. uint8_t addr;
  937. switch (pipe)
  938. {
  939. case 0:
  940. {
  941. addr = RX_PW_P0;
  942. }
  943. break;
  944. case 1:
  945. {
  946. addr = RX_PW_P1;
  947. }
  948. break;
  949. case 2:
  950. {
  951. addr = RX_PW_P2;
  952. }
  953. break;
  954. case 3:
  955. {
  956. addr = RX_PW_P3;
  957. }
  958. break;
  959. case 4:
  960. {
  961. addr = RX_PW_P4;
  962. }
  963. break;
  964. case 5:
  965. {
  966. addr = RX_PW_P5;
  967. }
  968. break;
  969. default:
  970. addr = RX_PW_P0;
  971. break;
  972. }
  973. rx_pw_px.value = RF_ReadReg(R_REGISTER + addr);
  974. return rx_pw_px.bits.RX_PW_Px_LEN;
  975. }
  976. void RF_powerDown(void)
  977. {
  978. config_tu config;
  979. CE_LOW;
  980. config.bits.PWR_UP = 0;
  981. config.bits.PRIM_RX = 1;
  982. RF_WriteReg(W_REGISTER + CONFIG, config.value);
  983. }
  984. void print_reg_val(void)
  985. {
  986. int i;
  987. uint8_t red_reg_buf[5];
  988. printf("the value of reg as following :\r\n");
  989. for (i = 0; i < 31; i++)
  990. {
  991. 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))
  992. {
  993. RF_ReadBuf(i, red_reg_buf, 5);
  994. printf("Reg_0x%x value is ", i);
  995. for (int j = 0; j < 5; j++)
  996. {
  997. printf("0x%x ", red_reg_buf[j]);
  998. }
  999. printf("\r\n");
  1000. }
  1001. else
  1002. {
  1003. printf("Reg_0x%x value is 0x%x\r\n", i, RF_ReadReg(i));
  1004. }
  1005. }
  1006. printf("end of reading reg \r\n");
  1007. }
  1008. void print_RTX_buffer(uint8_t *ucPayload, uint8_t length)
  1009. {
  1010. }
  1011. /***************************************end of file ************************************/