radio.c 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732
  1. /*
  2. * THE FOLLOWING FIRMWARE IS PROVIDED: (1) "AS IS" WITH NO WARRANTY; AND
  3. * (2)TO ENABLE ACCESS TO CODING INFORMATION TO GUIDE AND FACILITATE CUSTOMER.
  4. * CONSEQUENTLY, CMOSTEK SHALL NOT BE HELD LIABLE FOR ANY DIRECT, INDIRECT OR
  5. * CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
  6. * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION
  7. * CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
  8. *
  9. * Copyright (C) CMOSTEK SZ.
  10. */
  11. /*!
  12. * @file radio.c
  13. * @brief Generic radio handlers
  14. *
  15. * @version 1.1
  16. * @date Feb 08 2017
  17. * @author CMOSTEK R@D
  18. */
  19. #include "radio.h"
  20. #include "cmt2300_params.h"
  21. #include "cmt2300_params433_100_0kbps.h"
  22. #include "cmt2300_params470_100_0kbps.h"
  23. #include "cmt2300_params490_100_0kbps.h"
  24. #include "cmt2300_params510_100_0kbps.h"
  25. #include "cmt2300_params868_100_0kbps.h"
  26. #include "cmt2300_params915_100_0kbps.h"
  27. #include "cmt2300_params433_10_0kbps.h"
  28. #include "cmt2300_params470_10_0kbps.h"
  29. #include "cmt2300_params490_10_0kbps.h"
  30. #include "cmt2300_params510_10_0kbps.h"
  31. #include "cmt2300_params868_10_0kbps.h"
  32. #include "cmt2300_params915_10_0kbps.h"
  33. #include "cmt2300_params433_200_0kbps.h"
  34. #include "cmt2300_params470_200_0kbps.h"
  35. #include "cmt2300_params490_200_0kbps.h"
  36. #include "cmt2300_params510_200_0kbps.h"
  37. #include "cmt2300_params868_200_0kbps.h"
  38. #include "cmt2300_params915_200_0kbps.h"
  39. #include "cmt2300_params433_20_0kbps.h"
  40. #include "cmt2300_params470_20_0kbps.h"
  41. #include "cmt2300_params490_20_0kbps.h"
  42. #include "cmt2300_params510_20_0kbps.h"
  43. #include "cmt2300_params868_20_0kbps.h"
  44. #include "cmt2300_params915_20_0kbps.h"
  45. #include "cmt2300_params433_2_0kbps.h"
  46. #include "cmt2300_params470_2_0kbps.h"
  47. #include "cmt2300_params490_2_0kbps.h"
  48. #include "cmt2300_params510_2_0kbps.h"
  49. #include "cmt2300_params868_2_0kbps.h"
  50. #include "cmt2300_params915_2_0kbps.h"
  51. #include "cmt2300_params433_300_0kbps.h"
  52. #include "cmt2300_params470_300_0kbps.h"
  53. #include "cmt2300_params490_300_0kbps.h"
  54. #include "cmt2300_params510_300_0kbps.h"
  55. #include "cmt2300_params868_300_0kbps.h"
  56. #include "cmt2300_params915_300_0kbps.h"
  57. #include "cmt2300_params433_50_0kbps.h"
  58. #include "cmt2300_params470_50_0kbps.h"
  59. #include "cmt2300_params490_50_0kbps.h"
  60. #include "cmt2300_params510_50_0kbps.h"
  61. #include "cmt2300_params868_50_0kbps.h"
  62. #include "cmt2300_params915_50_0kbps.h"
  63. #include <string.h>
  64. static EnumRFStatus g_nNextRFState = RF_STATE_IDLE;
  65. static uint8_t* g_pRxBuffer = NULL;
  66. static uint8_t* g_pTxBuffer = NULL;
  67. static uint16_t g_nRxLength = 0;
  68. static uint16_t g_nTxLength = 0;
  69. static uint32_t g_nRxTimeout = 0xFFFFFFFF;
  70. static uint32_t g_nTxTimeout = 0xFFFFFFFF;
  71. static uint32_t g_nRxTimeCount = 0;
  72. static uint32_t g_nTxTimeCount = 0;
  73. static int packetRssi;
  74. volatile cmtInt_tu getIntFlag;
  75. static uint8_t g_nInterrutFlags = 0;
  76. static uint8_t syncWord[] = {0x2D, 0xD4, 0xCC, 0xDD};
  77. //6表示6个频段,7表示7种波特率
  78. cmtParams_ts cmtParamsList433[6][7] =
  79. {
  80. {
  81. {
  82. .CmtBank = g_cmt2300CmtBank433_2_0kbps,
  83. .SystemBank = g_cmt2300SystemBank433_2_0kbps,
  84. .FrequencyBank = g_cmt2300FrequencyBank433_2_0kbps,
  85. .DataRateBank = g_cmt2300DataRateBank433_2_0kbps,
  86. .BasebandBank = g_cmt2300BasebandBank433_2_0kbps,
  87. .TxBank = g_cmt2300TxBank433_2_0kbps,
  88. },
  89. {
  90. .CmtBank = g_cmt2300CmtBank433_10_0kbps,
  91. .SystemBank = g_cmt2300SystemBank433_10_0kbps,
  92. .FrequencyBank = g_cmt2300FrequencyBank433_10_0kbps,
  93. .DataRateBank = g_cmt2300DataRateBank433_10_0kbps,
  94. .BasebandBank = g_cmt2300BasebandBank433_10_0kbps,
  95. .TxBank = g_cmt2300TxBank433_10_0kbps,
  96. },
  97. {
  98. .CmtBank = g_cmt2300CmtBank433_20_0kbps,
  99. .SystemBank = g_cmt2300SystemBank433_20_0kbps,
  100. .FrequencyBank = g_cmt2300FrequencyBank433_20_0kbps,
  101. .DataRateBank = g_cmt2300DataRateBank433_20_0kbps,
  102. .BasebandBank = g_cmt2300BasebandBank433_20_0kbps,
  103. .TxBank = g_cmt2300TxBank433_20_0kbps,
  104. },
  105. {
  106. .CmtBank = g_cmt2300CmtBank433_50_0kbps,
  107. .SystemBank = g_cmt2300SystemBank433_50_0kbps,
  108. .FrequencyBank = g_cmt2300FrequencyBank433_50_0kbps,
  109. .DataRateBank = g_cmt2300DataRateBank433_50_0kbps,
  110. .BasebandBank = g_cmt2300BasebandBank433_50_0kbps,
  111. .TxBank = g_cmt2300TxBank433_50_0kbps,
  112. },
  113. {
  114. .CmtBank = g_cmt2300CmtBank433_100_0kbps,
  115. .SystemBank = g_cmt2300SystemBank433_100_0kbps,
  116. .FrequencyBank = g_cmt2300FrequencyBank433_100_0kbps,
  117. .DataRateBank = g_cmt2300DataRateBank433_100_0kbps,
  118. .BasebandBank = g_cmt2300BasebandBank433_100_0kbps,
  119. .TxBank = g_cmt2300TxBank433_100_0kbps,
  120. },
  121. {
  122. .CmtBank = g_cmt2300CmtBank433_200_0kbps,
  123. .SystemBank = g_cmt2300SystemBank433_200_0kbps,
  124. .FrequencyBank = g_cmt2300FrequencyBank433_200_0kbps,
  125. .DataRateBank = g_cmt2300DataRateBank433_200_0kbps,
  126. .BasebandBank = g_cmt2300BasebandBank433_200_0kbps,
  127. .TxBank = g_cmt2300TxBank433_200_0kbps,
  128. },
  129. {
  130. .CmtBank = g_cmt2300CmtBank433_300_0kbps,
  131. .SystemBank = g_cmt2300SystemBank433_300_0kbps,
  132. .FrequencyBank = g_cmt2300FrequencyBank433_300_0kbps,
  133. .DataRateBank = g_cmt2300DataRateBank433_300_0kbps,
  134. .BasebandBank = g_cmt2300BasebandBank433_300_0kbps,
  135. .TxBank = g_cmt2300TxBank433_300_0kbps,
  136. },
  137. },
  138. //470频段-----------------------------------
  139. {
  140. {
  141. .CmtBank = g_cmt2300CmtBank470_2_0kbps,
  142. .SystemBank = g_cmt2300SystemBank470_2_0kbps,
  143. .FrequencyBank = g_cmt2300FrequencyBank470_2_0kbps,
  144. .DataRateBank = g_cmt2300DataRateBank470_2_0kbps,
  145. .BasebandBank = g_cmt2300BasebandBank470_2_0kbps,
  146. .TxBank = g_cmt2300TxBank470_2_0kbps,
  147. },
  148. {
  149. .CmtBank = g_cmt2300CmtBank470_10_0kbps,
  150. .SystemBank = g_cmt2300SystemBank470_10_0kbps,
  151. .FrequencyBank = g_cmt2300FrequencyBank470_10_0kbps,
  152. .DataRateBank = g_cmt2300DataRateBank470_10_0kbps,
  153. .BasebandBank = g_cmt2300BasebandBank470_10_0kbps,
  154. .TxBank = g_cmt2300TxBank470_10_0kbps,
  155. },
  156. {
  157. .CmtBank = g_cmt2300CmtBank470_20_0kbps,
  158. .SystemBank = g_cmt2300SystemBank470_20_0kbps,
  159. .FrequencyBank = g_cmt2300FrequencyBank470_20_0kbps,
  160. .DataRateBank = g_cmt2300DataRateBank470_20_0kbps,
  161. .BasebandBank = g_cmt2300BasebandBank470_20_0kbps,
  162. .TxBank = g_cmt2300TxBank470_20_0kbps,
  163. },
  164. {
  165. .CmtBank = g_cmt2300CmtBank470_50_0kbps,
  166. .SystemBank = g_cmt2300SystemBank470_50_0kbps,
  167. .FrequencyBank = g_cmt2300FrequencyBank470_50_0kbps,
  168. .DataRateBank = g_cmt2300DataRateBank470_50_0kbps,
  169. .BasebandBank = g_cmt2300BasebandBank470_50_0kbps,
  170. .TxBank = g_cmt2300TxBank470_50_0kbps,
  171. },
  172. {
  173. .CmtBank = g_cmt2300CmtBank470_100_0kbps,
  174. .SystemBank = g_cmt2300SystemBank470_100_0kbps,
  175. .FrequencyBank = g_cmt2300FrequencyBank470_100_0kbps,
  176. .DataRateBank = g_cmt2300DataRateBank470_100_0kbps,
  177. .BasebandBank = g_cmt2300BasebandBank470_100_0kbps,
  178. .TxBank = g_cmt2300TxBank470_100_0kbps,
  179. },
  180. {
  181. .CmtBank = g_cmt2300CmtBank470_200_0kbps,
  182. .SystemBank = g_cmt2300SystemBank470_200_0kbps,
  183. .FrequencyBank = g_cmt2300FrequencyBank470_200_0kbps,
  184. .DataRateBank = g_cmt2300DataRateBank470_200_0kbps,
  185. .BasebandBank = g_cmt2300BasebandBank470_200_0kbps,
  186. .TxBank = g_cmt2300TxBank470_200_0kbps,
  187. },
  188. {
  189. .CmtBank = g_cmt2300CmtBank470_300_0kbps,
  190. .SystemBank = g_cmt2300SystemBank470_300_0kbps,
  191. .FrequencyBank = g_cmt2300FrequencyBank470_300_0kbps,
  192. .DataRateBank = g_cmt2300DataRateBank470_300_0kbps,
  193. .BasebandBank = g_cmt2300BasebandBank470_300_0kbps,
  194. .TxBank = g_cmt2300TxBank470_300_0kbps,
  195. },
  196. },
  197. //490频段-----------------------------------
  198. {
  199. {
  200. .CmtBank = g_cmt2300CmtBank490_2_0kbps,
  201. .SystemBank = g_cmt2300SystemBank490_2_0kbps,
  202. .FrequencyBank = g_cmt2300FrequencyBank490_2_0kbps,
  203. .DataRateBank = g_cmt2300DataRateBank490_2_0kbps,
  204. .BasebandBank = g_cmt2300BasebandBank490_2_0kbps,
  205. .TxBank = g_cmt2300TxBank490_2_0kbps,
  206. },
  207. {
  208. .CmtBank = g_cmt2300CmtBank490_10_0kbps,
  209. .SystemBank = g_cmt2300SystemBank490_10_0kbps,
  210. .FrequencyBank = g_cmt2300FrequencyBank490_10_0kbps,
  211. .DataRateBank = g_cmt2300DataRateBank490_10_0kbps,
  212. .BasebandBank = g_cmt2300BasebandBank490_10_0kbps,
  213. .TxBank = g_cmt2300TxBank490_10_0kbps,
  214. },
  215. {
  216. .CmtBank = g_cmt2300CmtBank490_20_0kbps,
  217. .SystemBank = g_cmt2300SystemBank490_20_0kbps,
  218. .FrequencyBank = g_cmt2300FrequencyBank490_20_0kbps,
  219. .DataRateBank = g_cmt2300DataRateBank490_20_0kbps,
  220. .BasebandBank = g_cmt2300BasebandBank490_20_0kbps,
  221. .TxBank = g_cmt2300TxBank490_20_0kbps,
  222. },
  223. {
  224. .CmtBank = g_cmt2300CmtBank490_50_0kbps,
  225. .SystemBank = g_cmt2300SystemBank490_50_0kbps,
  226. .FrequencyBank = g_cmt2300FrequencyBank490_50_0kbps,
  227. .DataRateBank = g_cmt2300DataRateBank490_50_0kbps,
  228. .BasebandBank = g_cmt2300BasebandBank490_50_0kbps,
  229. .TxBank = g_cmt2300TxBank490_50_0kbps,
  230. },
  231. {
  232. .CmtBank = g_cmt2300CmtBank490_100_0kbps,
  233. .SystemBank = g_cmt2300SystemBank490_100_0kbps,
  234. .FrequencyBank = g_cmt2300FrequencyBank490_100_0kbps,
  235. .DataRateBank = g_cmt2300DataRateBank490_100_0kbps,
  236. .BasebandBank = g_cmt2300BasebandBank490_100_0kbps,
  237. .TxBank = g_cmt2300TxBank490_100_0kbps,
  238. },
  239. {
  240. .CmtBank = g_cmt2300CmtBank490_200_0kbps,
  241. .SystemBank = g_cmt2300SystemBank490_200_0kbps,
  242. .FrequencyBank = g_cmt2300FrequencyBank490_200_0kbps,
  243. .DataRateBank = g_cmt2300DataRateBank490_200_0kbps,
  244. .BasebandBank = g_cmt2300BasebandBank490_200_0kbps,
  245. .TxBank = g_cmt2300TxBank490_200_0kbps,
  246. },
  247. {
  248. .CmtBank = g_cmt2300CmtBank490_300_0kbps,
  249. .SystemBank = g_cmt2300SystemBank490_300_0kbps,
  250. .FrequencyBank = g_cmt2300FrequencyBank490_300_0kbps,
  251. .DataRateBank = g_cmt2300DataRateBank490_300_0kbps,
  252. .BasebandBank = g_cmt2300BasebandBank490_300_0kbps,
  253. .TxBank = g_cmt2300TxBank490_300_0kbps,
  254. },
  255. },
  256. //510频段-----------------------------------
  257. {
  258. {
  259. .CmtBank = g_cmt2300CmtBank510_2_0kbps,
  260. .SystemBank = g_cmt2300SystemBank510_2_0kbps,
  261. .FrequencyBank = g_cmt2300FrequencyBank510_2_0kbps,
  262. .DataRateBank = g_cmt2300DataRateBank510_2_0kbps,
  263. .BasebandBank = g_cmt2300BasebandBank510_2_0kbps,
  264. .TxBank = g_cmt2300TxBank510_2_0kbps,
  265. },
  266. {
  267. .CmtBank = g_cmt2300CmtBank510_10_0kbps,
  268. .SystemBank = g_cmt2300SystemBank510_10_0kbps,
  269. .FrequencyBank = g_cmt2300FrequencyBank510_10_0kbps,
  270. .DataRateBank = g_cmt2300DataRateBank510_10_0kbps,
  271. .BasebandBank = g_cmt2300BasebandBank510_10_0kbps,
  272. .TxBank = g_cmt2300TxBank510_10_0kbps,
  273. },
  274. {
  275. .CmtBank = g_cmt2300CmtBank510_20_0kbps,
  276. .SystemBank = g_cmt2300SystemBank510_20_0kbps,
  277. .FrequencyBank = g_cmt2300FrequencyBank510_20_0kbps,
  278. .DataRateBank = g_cmt2300DataRateBank510_20_0kbps,
  279. .BasebandBank = g_cmt2300BasebandBank510_20_0kbps,
  280. .TxBank = g_cmt2300TxBank510_20_0kbps,
  281. },
  282. {
  283. .CmtBank = g_cmt2300CmtBank510_50_0kbps,
  284. .SystemBank = g_cmt2300SystemBank510_50_0kbps,
  285. .FrequencyBank = g_cmt2300FrequencyBank510_50_0kbps,
  286. .DataRateBank = g_cmt2300DataRateBank510_50_0kbps,
  287. .BasebandBank = g_cmt2300BasebandBank510_50_0kbps,
  288. .TxBank = g_cmt2300TxBank510_50_0kbps,
  289. },
  290. {
  291. .CmtBank = g_cmt2300CmtBank510_100_0kbps,
  292. .SystemBank = g_cmt2300SystemBank510_100_0kbps,
  293. .FrequencyBank = g_cmt2300FrequencyBank510_100_0kbps,
  294. .DataRateBank = g_cmt2300DataRateBank510_100_0kbps,
  295. .BasebandBank = g_cmt2300BasebandBank510_100_0kbps,
  296. .TxBank = g_cmt2300TxBank510_100_0kbps,
  297. },
  298. {
  299. .CmtBank = g_cmt2300CmtBank510_200_0kbps,
  300. .SystemBank = g_cmt2300SystemBank510_200_0kbps,
  301. .FrequencyBank = g_cmt2300FrequencyBank510_200_0kbps,
  302. .DataRateBank = g_cmt2300DataRateBank510_200_0kbps,
  303. .BasebandBank = g_cmt2300BasebandBank510_200_0kbps,
  304. .TxBank = g_cmt2300TxBank510_200_0kbps,
  305. },
  306. {
  307. .CmtBank = g_cmt2300CmtBank510_300_0kbps,
  308. .SystemBank = g_cmt2300SystemBank510_300_0kbps,
  309. .FrequencyBank = g_cmt2300FrequencyBank510_300_0kbps,
  310. .DataRateBank = g_cmt2300DataRateBank510_300_0kbps,
  311. .BasebandBank = g_cmt2300BasebandBank510_300_0kbps,
  312. .TxBank = g_cmt2300TxBank510_300_0kbps,
  313. },
  314. },
  315. //868频段-----------------------------------
  316. {
  317. {
  318. .CmtBank = g_cmt2300CmtBank868_2_0kbps,
  319. .SystemBank = g_cmt2300SystemBank868_2_0kbps,
  320. .FrequencyBank = g_cmt2300FrequencyBank868_2_0kbps,
  321. .DataRateBank = g_cmt2300DataRateBank868_2_0kbps,
  322. .BasebandBank = g_cmt2300BasebandBank868_2_0kbps,
  323. .TxBank = g_cmt2300TxBank868_2_0kbps,
  324. },
  325. {
  326. .CmtBank = g_cmt2300CmtBank868_10_0kbps,
  327. .SystemBank = g_cmt2300SystemBank868_10_0kbps,
  328. .FrequencyBank = g_cmt2300FrequencyBank868_10_0kbps,
  329. .DataRateBank = g_cmt2300DataRateBank868_10_0kbps,
  330. .BasebandBank = g_cmt2300BasebandBank868_10_0kbps,
  331. .TxBank = g_cmt2300TxBank868_10_0kbps,
  332. },
  333. {
  334. .CmtBank = g_cmt2300CmtBank868_20_0kbps,
  335. .SystemBank = g_cmt2300SystemBank868_20_0kbps,
  336. .FrequencyBank = g_cmt2300FrequencyBank868_20_0kbps,
  337. .DataRateBank = g_cmt2300DataRateBank868_20_0kbps,
  338. .BasebandBank = g_cmt2300BasebandBank868_20_0kbps,
  339. .TxBank = g_cmt2300TxBank868_20_0kbps,
  340. },
  341. {
  342. .CmtBank = g_cmt2300CmtBank868_50_0kbps,
  343. .SystemBank = g_cmt2300SystemBank868_50_0kbps,
  344. .FrequencyBank = g_cmt2300FrequencyBank868_50_0kbps,
  345. .DataRateBank = g_cmt2300DataRateBank868_50_0kbps,
  346. .BasebandBank = g_cmt2300BasebandBank868_50_0kbps,
  347. .TxBank = g_cmt2300TxBank868_50_0kbps,
  348. },
  349. {
  350. .CmtBank = g_cmt2300CmtBank868_100_0kbps,
  351. .SystemBank = g_cmt2300SystemBank868_100_0kbps,
  352. .FrequencyBank = g_cmt2300FrequencyBank868_100_0kbps,
  353. .DataRateBank = g_cmt2300DataRateBank868_100_0kbps,
  354. .BasebandBank = g_cmt2300BasebandBank868_100_0kbps,
  355. .TxBank = g_cmt2300TxBank868_100_0kbps,
  356. },
  357. {
  358. .CmtBank = g_cmt2300CmtBank868_200_0kbps,
  359. .SystemBank = g_cmt2300SystemBank868_200_0kbps,
  360. .FrequencyBank = g_cmt2300FrequencyBank868_200_0kbps,
  361. .DataRateBank = g_cmt2300DataRateBank868_200_0kbps,
  362. .BasebandBank = g_cmt2300BasebandBank868_200_0kbps,
  363. .TxBank = g_cmt2300TxBank868_200_0kbps,
  364. },
  365. {
  366. .CmtBank = g_cmt2300CmtBank868_300_0kbps,
  367. .SystemBank = g_cmt2300SystemBank868_300_0kbps,
  368. .FrequencyBank = g_cmt2300FrequencyBank868_300_0kbps,
  369. .DataRateBank = g_cmt2300DataRateBank868_300_0kbps,
  370. .BasebandBank = g_cmt2300BasebandBank868_300_0kbps,
  371. .TxBank = g_cmt2300TxBank868_300_0kbps,
  372. },
  373. },
  374. //915频段-----------------------------------
  375. {
  376. {
  377. .CmtBank = g_cmt2300CmtBank915_2_0kbps,
  378. .SystemBank = g_cmt2300SystemBank915_2_0kbps,
  379. .FrequencyBank = g_cmt2300FrequencyBank915_2_0kbps,
  380. .DataRateBank = g_cmt2300DataRateBank915_2_0kbps,
  381. .BasebandBank = g_cmt2300BasebandBank915_2_0kbps,
  382. .TxBank = g_cmt2300TxBank915_2_0kbps,
  383. },
  384. {
  385. .CmtBank = g_cmt2300CmtBank915_10_0kbps,
  386. .SystemBank = g_cmt2300SystemBank915_10_0kbps,
  387. .FrequencyBank = g_cmt2300FrequencyBank915_10_0kbps,
  388. .DataRateBank = g_cmt2300DataRateBank915_10_0kbps,
  389. .BasebandBank = g_cmt2300BasebandBank915_10_0kbps,
  390. .TxBank = g_cmt2300TxBank915_10_0kbps,
  391. },
  392. {
  393. .CmtBank = g_cmt2300CmtBank915_20_0kbps,
  394. .SystemBank = g_cmt2300SystemBank915_20_0kbps,
  395. .FrequencyBank = g_cmt2300FrequencyBank915_20_0kbps,
  396. .DataRateBank = g_cmt2300DataRateBank915_20_0kbps,
  397. .BasebandBank = g_cmt2300BasebandBank915_20_0kbps,
  398. .TxBank = g_cmt2300TxBank915_20_0kbps,
  399. },
  400. {
  401. .CmtBank = g_cmt2300CmtBank915_50_0kbps,
  402. .SystemBank = g_cmt2300SystemBank915_50_0kbps,
  403. .FrequencyBank = g_cmt2300FrequencyBank915_50_0kbps,
  404. .DataRateBank = g_cmt2300DataRateBank915_50_0kbps,
  405. .BasebandBank = g_cmt2300BasebandBank915_50_0kbps,
  406. .TxBank = g_cmt2300TxBank915_50_0kbps,
  407. },
  408. {
  409. .CmtBank = g_cmt2300CmtBank915_100_0kbps,
  410. .SystemBank = g_cmt2300SystemBank915_100_0kbps,
  411. .FrequencyBank = g_cmt2300FrequencyBank915_100_0kbps,
  412. .DataRateBank = g_cmt2300DataRateBank915_100_0kbps,
  413. .BasebandBank = g_cmt2300BasebandBank915_100_0kbps,
  414. .TxBank = g_cmt2300TxBank915_100_0kbps,
  415. },
  416. {
  417. .CmtBank = g_cmt2300CmtBank915_200_0kbps,
  418. .SystemBank = g_cmt2300SystemBank915_200_0kbps,
  419. .FrequencyBank = g_cmt2300FrequencyBank915_200_0kbps,
  420. .DataRateBank = g_cmt2300DataRateBank915_200_0kbps,
  421. .BasebandBank = g_cmt2300BasebandBank915_200_0kbps,
  422. .TxBank = g_cmt2300TxBank915_200_0kbps,
  423. },
  424. {
  425. .CmtBank = g_cmt2300CmtBank915_300_0kbps,
  426. .SystemBank = g_cmt2300SystemBank915_300_0kbps,
  427. .FrequencyBank = g_cmt2300FrequencyBank915_300_0kbps,
  428. .DataRateBank = g_cmt2300DataRateBank915_300_0kbps,
  429. .BasebandBank = g_cmt2300BasebandBank915_300_0kbps,
  430. .TxBank = g_cmt2300TxBank915_300_0kbps,
  431. },
  432. },
  433. };
  434. void RF_Init(uint8_t type, uint8_t br)
  435. {
  436. const uint8_t *_cmt2300CmtBank;
  437. const uint8_t *_cmt2300SystemBank;
  438. const uint8_t *_cmt2300FrequencyBank;
  439. const uint8_t *_cmt2300DataRateBank;
  440. const uint8_t *_cmt2300BasebandBank;
  441. const uint8_t *_cmt2300TxBank;
  442. _cmt2300CmtBank = cmtParamsList433[type][br].CmtBank;
  443. _cmt2300SystemBank = cmtParamsList433[type][br].SystemBank;
  444. _cmt2300FrequencyBank = cmtParamsList433[type][br].FrequencyBank;
  445. _cmt2300DataRateBank = cmtParamsList433[type][br].DataRateBank;
  446. _cmt2300BasebandBank = cmtParamsList433[type][br].BasebandBank;
  447. _cmt2300TxBank = cmtParamsList433[type][br].TxBank;
  448. // Cmt2300_InitGpio();
  449. Cmt2300_Init();
  450. /* Config registers */
  451. Cmt2300_ConfigRegBank(CMT2300_CMT_BANK_ADDR , _cmt2300CmtBank , CMT2300_CMT_BANK_SIZE );
  452. Cmt2300_ConfigRegBank(CMT2300_SYSTEM_BANK_ADDR , _cmt2300SystemBank , CMT2300_SYSTEM_BANK_SIZE );
  453. Cmt2300_ConfigRegBank(CMT2300_FREQUENCY_BANK_ADDR , _cmt2300FrequencyBank , CMT2300_FREQUENCY_BANK_SIZE );
  454. Cmt2300_ConfigRegBank(CMT2300_DATA_RATE_BANK_ADDR , _cmt2300DataRateBank , CMT2300_DATA_RATE_BANK_SIZE );
  455. Cmt2300_ConfigRegBank(CMT2300_BASEBAND_BANK_ADDR , _cmt2300BasebandBank , CMT2300_BASEBAND_BANK_SIZE );
  456. Cmt2300_ConfigRegBank(CMT2300_TX_BANK_ADDR , _cmt2300TxBank , CMT2300_TX_BANK_SIZE );
  457. Cmt2300_SetFrequencyStep(100);
  458. Cmt2300_SetCrc(); //设置打开crc
  459. Cmt2300_SetPacketType(true); //设置数据包为可变包
  460. Cmt2300_SetRssiDetMode(RDS_AT_SYNC_OK);
  461. Cmt2300_SetGfskGsnBt(GSNBT_0_5);
  462. Cmt2300_SetRxPreamLengSize(PLU_8BIT, 8);
  463. Cmt2300_SetSyncWord(syncWord, 4);
  464. // Cmt2300_SetRfBandWidth(BINDWIDTH_100);//屏蔽不调用,根据配置工具自动选择接收带宽
  465. RF_Config();
  466. }
  467. void RF_Config(void)
  468. {
  469. #ifdef ENABLE_ANTENNA_SWITCH
  470. /* If you enable antenna switch, GPIO1/GPIO2 will output RX_ACTIVE/TX_ACTIVE,
  471. and it can't output INT1/INT2 via GPIO1/GPIO2 */
  472. Cmt2300_EnableAntennaSwitch(0);
  473. #else
  474. /* Config GPIOs */
  475. Cmt2300_ConfigGpio(
  476. CMT2300_GPIO1_SEL_INT1 | /* INT1 > GPIO1 */
  477. CMT2300_GPIO2_SEL_INT2 | /* INT2 > GPIO2 */
  478. CMT2300_GPIO3_SEL_DOUT
  479. );
  480. /* Config interrupt */
  481. Cmt2300_ConfigInterrupt(
  482. CMT2300_INT_SEL_TX_DONE, /* Config INT1 */
  483. CMT2300_INT_SEL_PKT_OK /* Config INT2 */
  484. );
  485. #endif
  486. /* Enable interrupt */
  487. Cmt2300_EnableInterrupt(
  488. CMT2300_MASK_TX_DONE_EN |
  489. CMT2300_MASK_PREAM_OK_EN |
  490. CMT2300_MASK_SYNC_OK_EN |
  491. CMT2300_MASK_NODE_OK_EN |
  492. CMT2300_MASK_CRC_OK_EN |
  493. CMT2300_MASK_PKT_DONE_EN
  494. );
  495. Cmt2300_EnableLfosc(false);
  496. /* Use a single 64-byte FIFO for either Tx or Rx */
  497. Cmt2300_EnableFifoMerge(true);
  498. //Cmt2300_SetFifoThreshold(16);
  499. /* Go to sleep for configuration to take effect */
  500. Cmt2300_GoSleep();
  501. }
  502. void RF_SetStatus(EnumRFStatus nStatus)
  503. {
  504. g_nNextRFState = nStatus;
  505. }
  506. EnumRFStatus RF_GetStatus(void)
  507. {
  508. return g_nNextRFState;
  509. }
  510. uint8_t RF_GetInterruptFlags(void)
  511. {
  512. return g_nInterrutFlags;
  513. }
  514. void RF_StartRx(uint8_t buf[], uint16_t len, uint32_t timeout)
  515. {
  516. // g_pRxBuffer = buf;
  517. // g_nRxLength = len;
  518. // g_nRxTimeout = timeout;
  519. // memset(g_pRxBuffer, 0, g_nRxLength);
  520. g_nNextRFState = RF_STATE_RX_START;
  521. Cmt2300_GoStby();
  522. Cmt2300_ClearInterruptFlags();
  523. // /* Must clear FIFO after enable SPI to read or write the FIFO */
  524. Cmt2300_EnableReadFifo();
  525. Cmt2300_ClearFifo();
  526. Cmt2300_GoRx();
  527. }
  528. void RF_StartTx(uint8_t buf[], uint16_t len, uint32_t timeout)
  529. {
  530. // g_pTxBuffer = buf;
  531. // g_nTxLength = len;
  532. // g_nTxTimeout = timeout;
  533. // g_nNextRFState = RF_STATE_TX_START;
  534. Cmt2300_GoStby();
  535. Cmt2300_ClearInterruptFlags();
  536. /* Must clear FIFO after enable SPI to read or write the FIFO */
  537. Cmt2300_EnableWriteFifo();
  538. Cmt2300_ClearFifo();
  539. Cmt2300_SetPayloadLength(len);
  540. /* The length need be smaller than 32 */
  541. Cmt2300_WriteFifo(buf, len);
  542. Cmt2300_GoTx();
  543. }
  544. int RF_GetPacketRssi(void)
  545. {
  546. return packetRssi;
  547. }
  548. EnumRFResult RF_Process(void)
  549. {
  550. EnumRFResult nRes = RF_BUSY;
  551. switch(g_nNextRFState)
  552. {
  553. case RF_STATE_IDLE:
  554. {
  555. nRes = RF_IDLE;
  556. break;
  557. }
  558. case RF_STATE_RX_START:
  559. {
  560. Cmt2300_GoStby();
  561. Cmt2300_ClearInterruptFlags();
  562. /* Must clear FIFO after enable SPI to read or write the FIFO */
  563. Cmt2300_EnableReadFifo();
  564. Cmt2300_ClearFifo();
  565. if(false==Cmt2300_GoRx())
  566. g_nNextRFState = RF_STATE_ERROR;
  567. else
  568. g_nNextRFState = RF_STATE_RX_WAIT;
  569. g_nRxTimeCount = Cmt2300_GetTickCount();
  570. break;
  571. }
  572. case RF_STATE_RX_WAIT:
  573. {
  574. #ifdef ENABLE_ANTENNA_SWITCH
  575. if(CMT2300_MASK_PKT_OK_FLG & Cmt2300_ReadReg(CMT2300_CUS_INT_FLAG)) /* Read PKT_OK flag */
  576. #else
  577. if(Cmt2300_ReadGpio2()) /* Read INT2, PKT_OK */
  578. #endif
  579. {
  580. getIntFlag.value = Cmt2300_ClearInterruptFlags();
  581. if (getIntFlag.bits.crc_ok)
  582. {
  583. g_nNextRFState = RF_STATE_RX_DONE;
  584. }
  585. }
  586. // if( (0xFFFFFFFF != g_nRxTimeout) && ((g_nSysTickCount-g_nRxTimeCount) > g_nRxTimeout) )
  587. // g_nNextRFState = RF_STATE_RX_TIMEOUT;
  588. break;
  589. }
  590. case RF_STATE_RX_DONE:
  591. {
  592. uint8_t variableLen=255;
  593. packetRssi = Cmt2300_GetRssiDBm();
  594. Cmt2300_GoStby();
  595. Cmt2300_ReadFifo(&variableLen, 1);
  596. /* The length need be smaller than 32 */
  597. Cmt2300_ReadFifo(g_pRxBuffer, variableLen);
  598. // memcpy(g_pRxBuffer, &g_pRxBuffer[1], variableLen);
  599. Cmt2300_GoSleep();
  600. g_nNextRFState = RF_STATE_IDLE;
  601. nRes = RF_RX_DONE;
  602. break;
  603. }
  604. case RF_STATE_RX_TIMEOUT:
  605. {
  606. Cmt2300_GoSleep();
  607. g_nNextRFState = RF_STATE_IDLE;
  608. nRes = RF_RX_TIMEOUT;
  609. break;
  610. }
  611. case RF_STATE_TX_START:
  612. {
  613. Cmt2300_GoStby();
  614. Cmt2300_ClearInterruptFlags();
  615. /* Must clear FIFO after enable SPI to read or write the FIFO */
  616. Cmt2300_EnableWriteFifo();
  617. Cmt2300_ClearFifo();
  618. Cmt2300_SetPayloadLength(g_nTxLength);
  619. /* The length need be smaller than 32 */
  620. Cmt2300_WriteFifo(g_pTxBuffer, g_nTxLength);
  621. if( 0==(CMT2300_MASK_TX_FIFO_NMTY_FLG & Cmt2300_ReadReg(CMT2300_CUS_FIFO_FLAG)) )
  622. g_nNextRFState = RF_STATE_ERROR;
  623. if(false==Cmt2300_GoTx())
  624. g_nNextRFState = RF_STATE_ERROR;
  625. else
  626. g_nNextRFState = RF_STATE_TX_WAIT;
  627. g_nTxTimeCount = Cmt2300_GetTickCount();
  628. break;
  629. }
  630. case RF_STATE_TX_WAIT:
  631. {
  632. #ifdef ENABLE_ANTENNA_SWITCH
  633. if(CMT2300_MASK_TX_DONE_FLG & Cmt2300_ReadReg(CMT2300_CUS_INT_CLR1)) /* Read TX_DONE flag */
  634. #else
  635. if(Cmt2300_ReadGpio1()) /* Read INT1, TX_DONE */
  636. #endif
  637. {
  638. g_nNextRFState = RF_STATE_TX_DONE;
  639. }
  640. // if( (0xFFFFFFFF != g_nTxTimeout) && ((g_nSysTickCount-g_nTxTimeCount) > g_nTxTimeout) )
  641. // g_nNextRFState = RF_STATE_TX_TIMEOUT;
  642. break;
  643. }
  644. case RF_STATE_TX_DONE:
  645. {
  646. Cmt2300_ClearInterruptFlags();
  647. Cmt2300_GoSleep();
  648. g_nNextRFState = RF_STATE_IDLE;
  649. nRes = RF_TX_DONE;
  650. break;
  651. }
  652. case RF_STATE_TX_TIMEOUT:
  653. {
  654. Cmt2300_GoSleep();
  655. g_nNextRFState = RF_STATE_IDLE;
  656. nRes = RF_TX_TIMEOUT;
  657. break;
  658. }
  659. case RF_STATE_ERROR:
  660. {
  661. Cmt2300_SoftReset();
  662. Cmt2300_DelayMs(20);
  663. Cmt2300_GoStby();
  664. RF_Config();
  665. g_nNextRFState = RF_STATE_IDLE;
  666. nRes = RF_ERROR;
  667. break;
  668. }
  669. default:
  670. break;
  671. }
  672. return nRes;
  673. }