A5133_hal.c 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. #include "A5133_hal.h"
  2. #include "A5133reg.h"
  3. #include "A5133Config.h"
  4. uint8_t timer;
  5. uint16_t TimerCnt;
  6. uint8_t Slot_TX;
  7. uint8_t Flag_Timeout;
  8. uint16_t RxCnt;
  9. uint8_t *Uartptr;
  10. uint8_t UartSendCnt;
  11. uint8_t CmdBuf[25];
  12. uint8_t tmpbuf[80];
  13. uint16_t Err_Loss;
  14. uint16_t Err_Frame;
  15. uint32_t Err_BitCnt;
  16. uint8_t Flag_Report;
  17. uint8_t Flag_FirstLink;
  18. uint8_t Flag_MASTER;
  19. uint8_t Mem_RH;
  20. uint8_t Mem_RL;
  21. const uint8_t BitCount_Tab[16] = {0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4};
  22. // const uint8_t //code ID_Tab[8]={0x34,0x75,0xC5,0x2A,0xC7,0x33,0x45,0xEA}; //ID code
  23. const uint8_t ID_Tab[8] = {0x55, 0x55, 0x55, 0x55, 0x34, 0x75, 0xC5, 0x6A}; // ID2 code
  24. // const uint8_t ID_Tab[8]={0xFF,0xFF,0xFF,0xFF,0x36,0x75,0xC5,0xBA}; //ID2 code
  25. // const uint8_t ID_Tab[8]={0x34,0x75,0xC5,0x2A,0x34,0x75,0xC5,0x2A}; //ID2 code
  26. const uint8_t KeyData_Tab[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // keyData code
  27. const uint8_t FCB_Tab[20] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x20, 0x25, 0x30, 0x35, 0x40, 0x45, 0x50, 0x55, 0x60, 0x65, 0x70, 0x75, 0x80, 0x85}; // keyData code
  28. const uint8_t PN9_Tab[] =
  29. {
  30. 0xFF,
  31. 0x83,
  32. 0xDF,
  33. 0x17,
  34. 0x32,
  35. 0x09,
  36. 0x4E,
  37. 0xD1,
  38. 0xE7,
  39. 0xCD,
  40. 0x8A,
  41. 0x91,
  42. 0xC6,
  43. 0xD5,
  44. 0xC4,
  45. 0xC4,
  46. 0x40,
  47. 0x21,
  48. 0x18,
  49. 0x4E,
  50. 0x55,
  51. 0x86,
  52. 0xF4,
  53. 0xDC,
  54. 0x8A,
  55. 0x15,
  56. 0xA7,
  57. 0xEC,
  58. 0x92,
  59. 0xDF,
  60. 0x93,
  61. 0x53,
  62. 0x30,
  63. 0x18,
  64. 0xCA,
  65. 0x34,
  66. 0xBF,
  67. 0xA2,
  68. 0xC7,
  69. 0x59,
  70. 0x67,
  71. 0x8F,
  72. 0xBA,
  73. 0x0D,
  74. 0x6D,
  75. 0xD8,
  76. 0x2D,
  77. 0x7D,
  78. 0x54,
  79. 0x0A,
  80. 0x57,
  81. 0x97,
  82. 0x70,
  83. 0x39,
  84. 0xD2,
  85. 0x7A,
  86. 0xEA,
  87. 0x24,
  88. 0x33,
  89. 0x85,
  90. 0xED,
  91. 0x9A,
  92. 0x1D,
  93. 0xE0,
  94. };
  95. /*********************************************************************
  96. ** Err_State
  97. *********************************************************************/
  98. void Err_State(void)
  99. {
  100. // ERR display
  101. // Error Proc...
  102. //...
  103. while (1)
  104. ;
  105. }
  106. /************************************************************************
  107. ** Reset_RF
  108. ************************************************************************/
  109. void RF_Reset(void)
  110. {
  111. RF_WriteReg(MODE_REG, 0x00); // reset RF chip
  112. }
  113. /************************************************************************
  114. ** RF_WriteID
  115. ************************************************************************/
  116. void RF_WriteID(uint8_t *ptr)
  117. {
  118. uint8_t i;
  119. BOARD_A5133_SCS_L();
  120. myRadioSpi_wByte(IDCODE_REG);
  121. for (i = 0; i < 8; i++)
  122. myRadioSpi_wByte(*ptr++);
  123. BOARD_A5133_SCS_H();
  124. }
  125. /************************************************************************
  126. ** RF_ReadID
  127. ************************************************************************/
  128. void RF_ReadID(uint8_t *ptr)
  129. {
  130. uint8_t i;
  131. BOARD_A5133_SCS_L();
  132. myRadioSpi_wByte(IDCODE_REG | 0x40);
  133. for (i = 0; i < 8; i++)
  134. *ptr++ = myRadioSpi_rByte();
  135. BOARD_A5133_SCS_H();
  136. }
  137. /*********************************************************************
  138. ** RF_ReadPage
  139. *********************************************************************/
  140. uint8_t RF_ReadPage(uint8_t addr, uint8_t page)
  141. {
  142. uint8_t tmp;
  143. RF_WriteReg(RFANALOG_REG, (A5133_RFConfigTab_Main[0x35] & 0x0F) | page << 4);
  144. tmp = RF_ReadReg(addr);
  145. return tmp;
  146. }
  147. /*********************************************************************
  148. ** RF_WritePage
  149. *********************************************************************/
  150. void RF_WritePage(uint8_t addr, uint8_t wbyte, uint8_t page)
  151. {
  152. RF_WriteReg(RFANALOG_REG, (A5133_RFConfigTab_Main[0x35] & 0x0F) | page << 4);
  153. for (int i = 0; i < 1000; i++)
  154. {
  155. ;
  156. }
  157. RF_WriteReg(addr, wbyte);
  158. }
  159. /************************************************************************
  160. ** RF_WriteReg
  161. ************************************************************************/
  162. void RF_WriteReg(uint8_t addr, uint8_t dataByte)
  163. {
  164. BOARD_A5133_SCS_L();
  165. myRadioSpi_wByte(addr); // bit7 cmd=0, bit6 r/w=0
  166. myRadioSpi_wByte(dataByte);
  167. BOARD_A5133_SCS_H();
  168. }
  169. /************************************************************************
  170. ** RF_ReadReg
  171. ************************************************************************/
  172. uint8_t RF_ReadReg(uint8_t addr)
  173. {
  174. uint8_t tmp;
  175. BOARD_A5133_SCS_L();
  176. myRadioSpi_wByte(addr | 0x40); // bit7 cmd=0,bit6 r/w=1
  177. tmp = myRadioSpi_rByte();
  178. BOARD_A5133_SCS_H();
  179. return tmp;
  180. }
  181. /*********************************************************************
  182. ** RF_SetCH
  183. *********************************************************************/
  184. void RF_SetCH(uint8_t ch)
  185. {
  186. RF_WriteReg(PLL1_REG, ch); // RF freq = RFbase + (CH_Step * ch)
  187. }
  188. /*********************************************************************
  189. ** initRF
  190. *********************************************************************/
  191. uint8_t RF_Init(void)
  192. {
  193. uint8_t i, id[8];
  194. gio1PinCtrlReg_tu gio1PinCtrlReg;
  195. gio2PinCtrlReg_tu gio2PinCtrlReg;
  196. ckoPinCtrlReg_tu ckoPinCtrlReg;
  197. code1Reg_tu code1Reg;
  198. code2Page0Reg_tu code2Page0Reg;
  199. RF_Reset(); // reset RF chip
  200. RF_Config(); // config A7157 chip
  201. gio1PinCtrlReg.value = 0x00;
  202. gio1PinCtrlReg.bits_w.gio1oe = 1;
  203. gio1PinCtrlReg.bits_w.gio1s = 0; // WTR
  204. RF_WriteReg(GIO1_REG, gio1PinCtrlReg.value);
  205. gio2PinCtrlReg.value = 0x00;
  206. gio2PinCtrlReg.bits_w.gio2oe = 1;
  207. #if defined(SPI_4LINE)
  208. gio2PinCtrlReg.bits_w.gio2s = 6; // trxd
  209. #else
  210. gio2PinCtrlReg.bits_w.gio2s = 7; // trxd
  211. #endif
  212. RF_WriteReg(GIO2_REG, gio2PinCtrlReg.value);
  213. ckoPinCtrlReg.value = 0x00;
  214. ckoPinCtrlReg.bits_w.ckoe = 0;
  215. ckoPinCtrlReg.bits_w.ckos = 0; // dck
  216. RF_WriteReg(CKO_REG, 0x02);
  217. code1Reg.value = 0x00;
  218. code1Reg.bits_w.crcs = 1;
  219. code1Reg.bits_w.fecs = 1;
  220. code1Reg.bits_w.epml = 2;
  221. code1Reg.bits_w.idl = 3;
  222. code1Reg.bits_w.whts = 1;
  223. code1Reg.bits_w.resv = 1;
  224. RF_WritePage(CODE1_REG, code1Reg.value, 0);
  225. RF_WriteID((uint8_t *)ID_Tab); // write ID code
  226. RF_ReadID(id);
  227. for (i = 0; i < 8; i++)
  228. {
  229. if (id[i] ^ ID_Tab[i])
  230. return 1; // fail
  231. }
  232. RF_TrimmedValue_Init(); // load trimming value
  233. if (RF_Cal()) // rf calibration
  234. return 1;
  235. return 0;
  236. }
  237. /*********************************************************************
  238. ** RF_FIFOWrite
  239. *********************************************************************/
  240. void RF_FIFOWrite(uint8_t *buf, uint8_t len)
  241. {
  242. uint8_t i;
  243. RF_StrobeCmd(CMD_TFR); // TX fifo pointer reset
  244. BOARD_A5133_SCS_L();
  245. myRadioSpi_wByte(FIFO_REG); // send address 0x05, bit7 cmd=0, bit6 r/w=0
  246. for (i = 0; i < len; i++)
  247. myRadioSpi_wByte(*(buf + i));
  248. BOARD_A5133_SCS_H();
  249. }
  250. /*********************************************************************
  251. ** RF_FIFORead
  252. *********************************************************************/
  253. void RF_FIFORead(uint8_t *buf, uint8_t len)
  254. {
  255. uint8_t i;
  256. RF_StrobeCmd(CMD_RFR); // RX fifo pointer reset
  257. BOARD_A5133_SCS_L();
  258. myRadioSpi_wByte(FIFO_REG | 0x40); // address 0x05, bit7 cmd=0, bit6 r/w=1
  259. for (i = 0; i < len; i++)
  260. {
  261. *buf++ = myRadioSpi_rByte();
  262. }
  263. BOARD_A5133_SCS_H();
  264. }
  265. /*********************************************************************
  266. ** RF_StrobeCmd
  267. *********************************************************************/
  268. void RF_StrobeCmd(uint8_t cmd)
  269. {
  270. BOARD_A5133_SCS_L();
  271. myRadioSpi_wByte(cmd);
  272. BOARD_A5133_SCS_H();
  273. }
  274. /*********************************************************************
  275. ** RxPacket
  276. *********************************************************************/
  277. void RxPacket(void)
  278. {
  279. uint8_t i, recv, tmp, err;
  280. RxCnt++;
  281. err = 0;
  282. RF_StrobeCmd(CMD_RFR); // RX fifo pointer reset
  283. BOARD_A5133_SCS_L();
  284. myRadioSpi_wByte(FIFO_REG | 0x40); // address 0x05, bit7 cmd=0, bit6 r/w=1
  285. for (i = 0; i < 64; i++)
  286. {
  287. recv = myRadioSpi_rByte();
  288. tmpbuf[i] = recv;
  289. if ((recv ^ PN9_Tab[i]) != 0)
  290. {
  291. tmp = recv ^ PN9_Tab[i];
  292. Err_BitCnt += (BitCount_Tab[tmp >> 4] + BitCount_Tab[tmp & 0x0F]);
  293. err = 1;
  294. }
  295. }
  296. BOARD_A5133_SCS_H();
  297. if (err) // packet error
  298. Err_Frame++;
  299. }
  300. /*********************************************************************
  301. ** RF_Cal_CHGroup
  302. *********************************************************************/
  303. uint8_t RF_Cal_CHGroup(uint8_t ch)
  304. {
  305. uint8_t tmp;
  306. uint8_t vb, vbcf, vcb, vccf;
  307. uint8_t deva, adev;
  308. RF_WriteReg(PLL1_REG, ch);
  309. RF_WriteReg(CALIBRATION_REG, 0x1C);
  310. do
  311. {
  312. tmp = RF_ReadReg(CALIBRATION_REG) & 0x1C;
  313. } while (tmp);
  314. // for check
  315. tmp = RF_ReadReg(VCOCCAL_REG);
  316. vcb = tmp & 0x0F;
  317. vccf = (tmp >> 4) & 0x01;
  318. tmp = RF_ReadReg(VCOCAL1_REG);
  319. vb = tmp & 0x0F;
  320. vbcf = (tmp >> 4) & 0x01;
  321. tmp = RF_ReadReg(VCODEVCAL1_REG);
  322. deva = tmp;
  323. tmp = RF_ReadReg(VCODEVCAL2_REG);
  324. adev = tmp;
  325. if (vbcf)
  326. return 1; // error
  327. return 0;
  328. }
  329. /*********************************************************************
  330. ** calibration
  331. *********************************************************************/
  332. uint8_t RF_Cal(void)
  333. {
  334. uint8_t tmp;
  335. uint8_t rhc, rlc, fb, fbcf, fcd;
  336. RF_StrobeCmd(CMD_PLL); // calibration @PLL state
  337. RF_WriteReg(RFANALOG_REG, 0);
  338. // IF,RSSI,RC procedure
  339. RF_WriteReg(CALIBRATION_REG, 0x23);
  340. do
  341. {
  342. tmp = RF_ReadReg(CALIBRATION_REG) & 0x23;
  343. } while (tmp);
  344. // calibration VBC,VDC procedure
  345. if (RF_Cal_CHGroup(25)) // calibrate channel group Bank I
  346. return 1;
  347. if (RF_Cal_CHGroup(75)) // calibrate channel group Bank II
  348. return 1;
  349. if (RF_Cal_CHGroup(125)) // calibrate channel group Bank III
  350. return 1;
  351. RF_StrobeCmd(CMD_STBY); // return to STBY state
  352. // for check
  353. tmp = RF_ReadReg(IFCAL1_REG);
  354. fb = tmp & 0x0F;
  355. fbcf = (tmp >> 4) & 0x01;
  356. tmp = RF_ReadReg(IFCAL2_REG);
  357. fcd = tmp & 0x1F;
  358. rhc = RF_ReadReg(RXGAIN2_REG);
  359. rlc = RF_ReadReg(RXGAIN3_REG);
  360. Mem_RH = rhc;
  361. Mem_RL = rlc;
  362. if (fbcf)
  363. return 1; // error
  364. return 0;
  365. }
  366. /*********************************************************************
  367. ** RF_Config
  368. *********************************************************************/
  369. void RF_Config(void)
  370. {
  371. uint8_t i;
  372. // 0x00 mode register, for reset
  373. // 0x05 fifo data register
  374. // 0x06 id code register
  375. // 0x36 key data, 16 bytes
  376. // 0x3D FCB register,4 bytes
  377. // 0x3F USID register, read only
  378. for (i = 0x01; i <= 0x04; i++)
  379. RF_WriteReg(i, A5133_RFConfigTab_Main[i]);
  380. for (i = 0x07; i <= 0x1F; i++)
  381. RF_WriteReg(i, A5133_RFConfigTab_Main[i]);
  382. for (i = 0; i <= 12; i++) // 0x20 code1
  383. RF_WritePage(0x20, A5133_RFConfigTab_Addr0x20[i], i);
  384. for (i = 0; i <= 12; i++) // 0x21 code2
  385. RF_WritePage(0x21, A5133_RFConfigTab_Addr0x21[i], i);
  386. for (i = 0; i <= 5; i++) // 0x22 code3
  387. RF_WritePage(0x22, A5133_RFConfigTab_Addr0x22[i], i);
  388. for (i = 0x23; i <= 0x29; i++)
  389. {
  390. RF_WriteReg(i, A5133_RFConfigTab_Main[i]);
  391. }
  392. for (i = 0; i <= 12; i++) // 0x2A DAS
  393. RF_WritePage(0x2A, A5133_RFConfigTab_Addr0x2A[i], i);
  394. for (i = 0x2B; i <= 0x35; i++)
  395. RF_WriteReg(i, A5133_RFConfigTab_Main[i]);
  396. RF_WriteReg(0x37, A5133_RFConfigTab_Main[0x37]);
  397. for (i = 0; i <= 11; i++) // 0x38 ROM
  398. RF_WritePage(0x38, A5133_RFConfigTab_Addr0x38[i], i);
  399. for (i = 0x39; i <= 0x3C; i++)
  400. RF_WriteReg(i, A5133_RFConfigTab_Main[i]);
  401. RF_WriteReg(0x3E, A5133_RFConfigTab_Main[0x3E]);
  402. }
  403. /*********************************************************************
  404. ** RF_FCB
  405. *********************************************************************/
  406. void RF_FCB(void)
  407. {
  408. uint8_t i;
  409. BOARD_A5133_SCS_L();
  410. myRadioSpi_wByte(FCB_REG); // address 0x3D, bit7 cmd=0, bit6 r/w=0
  411. for (i = 0; i < 20; i++)
  412. myRadioSpi_wByte(FCB_Tab[i]);
  413. BOARD_A5133_SCS_H();
  414. }
  415. /*********************************************************************
  416. ** A7157_KeyData
  417. *********************************************************************/
  418. void RF_KeyData(void)
  419. {
  420. uint8_t i;
  421. BOARD_A5133_SCS_L();
  422. myRadioSpi_wByte(KEYDATA_REG); // address 0x36, bit7 cmd=0, bit6 r/w=0
  423. for (i = 0; i < 16; i++)
  424. myRadioSpi_wByte(KeyData_Tab[i]);
  425. BOARD_A5133_SCS_H();
  426. }
  427. /*********************************************************************
  428. ** RF_FIFOLength
  429. *********************************************************************/
  430. void RF_FIFOLength(uint16_t len)
  431. {
  432. BOARD_A5133_SCS_L();
  433. myRadioSpi_wByte(FIFO1_REG | 0x40); // bit7 cmd=0,bit6 r/w=1
  434. myRadioSpi_wByte(len & 0xFF); // low byte
  435. myRadioSpi_wByte(len >> 8); // high byte
  436. BOARD_A5133_SCS_H();
  437. }
  438. /*********************************************************************
  439. ** RF_GetFIFOLength
  440. *********************************************************************/
  441. uint16_t RF_GetFIFOLength(void)
  442. {
  443. uint16_t len = 0;
  444. BOARD_A5133_SCS_L();
  445. myRadioSpi_wByte(FIFO1_REG);
  446. len = myRadioSpi_rByte();
  447. len |= (uint16_t)myRadioSpi_rByte() << 8;
  448. BOARD_A5133_SCS_H();
  449. return len;
  450. }
  451. /*********************************************************************
  452. ** RF_TrimmedValue_Init
  453. *********************************************************************/
  454. void RF_TrimmedValue_Init(void)
  455. {
  456. uint8_t i;
  457. uint8_t trimValue[8];
  458. // uint8_t tmp_checksum;
  459. // trimValue[0]=FBG
  460. // trimValue[1]=CTR
  461. // trimValue[2]=BDC
  462. // trimValue[3]=STM
  463. // trimValue[4]=Checksum for trimvalue[0]~trimvalue[3]
  464. // trimValue[5]=CSXTL
  465. // trimValue[6]=FBG_CP
  466. // trimValue[7]=Checksum for customer
  467. RF_WritePage(ROMP_REG, A5133_RFConfigTab_Addr0x38[9] | 0xA0, 9); // enable EFSW=1, EFRE=1
  468. gpio_delayMs(5);
  469. BOARD_A5133_SCS_L();
  470. myRadioSpi_wByte(USID_REG | 0x40);
  471. for (i = 0; i < 8; i++)
  472. trimValue[i] = myRadioSpi_rByte();
  473. BOARD_A5133_SCS_H();
  474. RF_WritePage(ROMP_REG, A5133_RFConfigTab_Addr0x38[9], 9); // disable EFSW=1, EFRE=1
  475. if ((trimValue[0] + trimValue[1]) == trimValue[4]) // case1-only FT
  476. {
  477. if ((trimValue[0] != 0) && (trimValue[1] != 0))
  478. {
  479. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[1] & 0xE0) | trimValue[0], 1); // FBG
  480. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[2] & 0xC0) | trimValue[1], 2); // CTR
  481. }
  482. else
  483. Err_State();
  484. }
  485. else if ((trimValue[0] + trimValue[1] + trimValue[2] + trimValue[3]) == trimValue[4]) // case2-CP+FT
  486. {
  487. if ((trimValue[0] != 0) && (trimValue[1] != 0) && (trimValue[2] != 0) && (trimValue[3] != 0))
  488. {
  489. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[1] & 0xE0) | trimValue[0], 1); // FBG
  490. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[2] & 0xC0) | trimValue[1], 2); // CTR
  491. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[0] & 0x03) | (trimValue[2] << 2), 0); // BDC
  492. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[4] & 0x40) | trimValue[3], 4); // STM
  493. }
  494. else
  495. Err_State();
  496. }
  497. else // only CP
  498. {
  499. if ((trimValue[0] == 0) && (trimValue[1] != 0) && (trimValue[2] != 0) && (trimValue[3] != 0) && (trimValue[4] == 0) && (trimValue[6] != 0))
  500. {
  501. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[1] & 0xE0) | trimValue[6], 1); // FBG
  502. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[2] & 0xC0) | trimValue[1], 2); // CTR
  503. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[0] & 0x03) | (trimValue[2] << 2), 0); // BDC
  504. RF_WritePage(ROMP_REG, (A5133_RFConfigTab_Addr0x38[4] & 0x40) | trimValue[3], 4); // STM
  505. }
  506. else
  507. Err_State();
  508. }
  509. }
  510. /*********************************************************************
  511. ** RF_RSSI_Read
  512. *********************************************************************/
  513. int16_t RF_RSSI_Read(void)
  514. {
  515. uint8_t rssi;
  516. int16_t tmp;
  517. rssi = RF_ReadReg(RSSI_REG); // read RSSI value(wanted signal RSSI)
  518. // RF power in(dBm) = (RSSI - RL) / (RH - RL) * 12 - 80dbm - 3
  519. tmp = ((rssi * 1.0 - Mem_RL) / (Mem_RH - Mem_RL) * 12.0) - 80 - 3;
  520. return tmp;
  521. }
  522. /*********************************************************************
  523. ** RF_PM_SleepMode
  524. *********************************************************************/
  525. void RF_PM_SleepMode(void)
  526. {
  527. RF_StrobeCmd(CMD_SLEEP);
  528. BOARD_A5133_SCS_H();
  529. BOARD_A5133_SDIO_H();
  530. }
  531. /*********************************************************************
  532. ** RF_Low Voltage Reset_Check
  533. *********************************************************************/
  534. uint8_t RF_LVR_Check(void)
  535. {
  536. uint8_t tmp;
  537. tmp = RF_ReadReg(VCOCAL2_REG);
  538. if (tmp == 0xFF) // default reset value 0xFF
  539. return 1;
  540. else
  541. return 0;
  542. }
  543. /*********************************************************************
  544. ** RF_WOR_En
  545. *********************************************************************/
  546. void RF_WOR_En(void)
  547. {
  548. gio1PinCtrlReg_tu gio1PinCtrlReg;
  549. gio2PinCtrlReg_tu gio2PinCtrlReg;
  550. gio1PinCtrlReg.value = 0x00;
  551. gio1PinCtrlReg.bits_w.gio1oe = 1;
  552. gio1PinCtrlReg.bits_w.gio1s = 2; // MCU wakeup signal
  553. RF_WriteReg(GIO1_REG, gio1PinCtrlReg.value);
  554. gio2PinCtrlReg.value = 0x00;
  555. gio2PinCtrlReg.bits_w.gio2oe = 1; // WTR
  556. RF_WriteReg(GIO2_REG, gio2PinCtrlReg.value);
  557. RF_WriteReg(CKO_REG, 0x02);
  558. RF_WriteReg(RCOSC1_REG, 0x0B); // WOR_SL=11, SL time=(11+1)*32*(1/4KHz)
  559. RF_WriteReg(RCOSC2_REG, 0x0B); // WOR_AC=11, AC time(wakeup time + RX time)=(11+1)*(1/4KHz)
  560. RF_WriteReg(RCOSC3_REG, 0x0C); // RCOSC enable
  561. while (1)
  562. {
  563. RF_WriteReg(MODECTRL_REG, A5133_RFConfigTab_Main[1] | (1 << 3)); // WOR enable
  564. while (~READ_RF_A5133_GPIO1())
  565. ; // waitting to wakeup until packet is received
  566. RF_StrobeCmd(CMD_PLL);
  567. // Wakeup process...
  568. // RxPacket();
  569. //...;
  570. }
  571. }