radio.c 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754
  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. Cmt2300_IsExist();
  451. /* Config registers */
  452. Cmt2300_ConfigRegBank(CMT2300_CMT_BANK_ADDR , _cmt2300CmtBank , CMT2300_CMT_BANK_SIZE );
  453. Cmt2300_ConfigRegBank(CMT2300_SYSTEM_BANK_ADDR , _cmt2300SystemBank , CMT2300_SYSTEM_BANK_SIZE );
  454. Cmt2300_ConfigRegBank(CMT2300_FREQUENCY_BANK_ADDR , _cmt2300FrequencyBank , CMT2300_FREQUENCY_BANK_SIZE );
  455. Cmt2300_ConfigRegBank(CMT2300_DATA_RATE_BANK_ADDR , _cmt2300DataRateBank , CMT2300_DATA_RATE_BANK_SIZE );
  456. Cmt2300_ConfigRegBank(CMT2300_BASEBAND_BANK_ADDR , _cmt2300BasebandBank , CMT2300_BASEBAND_BANK_SIZE );
  457. Cmt2300_ConfigRegBank(CMT2300_TX_BANK_ADDR , _cmt2300TxBank , CMT2300_TX_BANK_SIZE );
  458. Cmt2300_SetFrequencyStep(100);
  459. Cmt2300_SetCrc(); //设置打开crc
  460. Cmt2300_SetPacketType(true); //设置数据包为可变包
  461. Cmt2300_SetRssiDetMode(RDS_AT_SYNC_OK);
  462. Cmt2300_SetGfskGsnBt(GSNBT_0_5);
  463. Cmt2300_SetRxPreamLengSize(PLU_8BIT, 8);
  464. Cmt2300_SetSyncWord(syncWord, 4);
  465. // Cmt2300_SetRfBandWidth(BINDWIDTH_100);//屏蔽不调用,根据配置工具自动选择接收带宽
  466. RF_Config();
  467. }
  468. void RF_Config(void)
  469. {
  470. #ifdef ENABLE_ANTENNA_SWITCH
  471. /* If you enable antenna switch, GPIO1/GPIO2 will output RX_ACTIVE/TX_ACTIVE,
  472. and it can't output INT1/INT2 via GPIO1/GPIO2 */
  473. Cmt2300_EnableAntennaSwitch(0);
  474. #else
  475. #endif
  476. #ifdef IS_1W_MODULE
  477. /* Config GPIOs */
  478. Cmt2300_ConfigGpio(CMT2300_GPIO3_SEL_INT2); /* INT2 > GPIO3 */
  479. /* Config interrupt */
  480. u8 nInt2Sel;
  481. nInt2Sel= CMT2300_INT_SEL_TX_DONE; /* Config INT2 */
  482. nInt2Sel &= CMT2300_MASK_INT2_SEL;
  483. nInt2Sel |= (~CMT2300_MASK_INT2_SEL) & Cmt2300_ReadReg(CMT2300_CUS_INT2_CTL);
  484. Cmt2300_WriteReg(CMT2300_CUS_INT2_CTL, nInt2Sel);
  485. /* Enable interrupt */
  486. Cmt2300_EnableInterrupt(
  487. CMT2300_MASK_TX_DONE_EN
  488. // CMT2300_MASK_PKT_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. );
  494. #else
  495. /* Config GPIOs */
  496. Cmt2300_ConfigGpio(
  497. CMT2300_GPIO1_SEL_INT1 | /* INT1 > GPIO1 */
  498. CMT2300_GPIO2_SEL_INT2 | /* INT2 > GPIO2 */
  499. CMT2300_GPIO3_SEL_DOUT
  500. );
  501. /* Config interrupt */
  502. Cmt2300_ConfigInterrupt(
  503. CMT2300_INT_SEL_TX_DONE, /* Config INT1 */
  504. CMT2300_INT_SEL_PKT_OK /* Config INT2 */
  505. );
  506. /* Enable interrupt */
  507. Cmt2300_EnableInterrupt(
  508. CMT2300_MASK_TX_DONE_EN |
  509. CMT2300_MASK_PREAM_OK_EN |
  510. CMT2300_MASK_SYNC_OK_EN |
  511. CMT2300_MASK_NODE_OK_EN |
  512. CMT2300_MASK_CRC_OK_EN |
  513. CMT2300_MASK_PKT_DONE_EN
  514. );
  515. #endif
  516. Cmt2300_EnableLfosc(false);
  517. /* Use a single 64-byte FIFO for either Tx or Rx */
  518. Cmt2300_EnableFifoMerge(true);
  519. //Cmt2300_SetFifoThreshold(16);
  520. /* Go to sleep for configuration to take effect */
  521. Cmt2300_GoSleep();
  522. }
  523. void RF_SetStatus(EnumRFStatus nStatus)
  524. {
  525. g_nNextRFState = nStatus;
  526. }
  527. EnumRFStatus RF_GetStatus(void)
  528. {
  529. return g_nNextRFState;
  530. }
  531. uint8_t RF_GetInterruptFlags(void)
  532. {
  533. return g_nInterrutFlags;
  534. }
  535. void RF_StartRx(uint8_t buf[], uint16_t len, uint32_t timeout)
  536. {
  537. // g_pRxBuffer = buf;
  538. // g_nRxLength = len;
  539. // g_nRxTimeout = timeout;
  540. // memset(g_pRxBuffer, 0, g_nRxLength);
  541. g_nNextRFState = RF_STATE_RX_START;
  542. Cmt2300_GoStby();
  543. Cmt2300_ClearInterruptFlags();
  544. // /* Must clear FIFO after enable SPI to read or write the FIFO */
  545. Cmt2300_EnableReadFifo();
  546. Cmt2300_ClearFifo();
  547. Cmt2300_GoRx();
  548. }
  549. void RF_StartTx(uint8_t buf[], uint16_t len, uint32_t timeout)
  550. {
  551. // g_pTxBuffer = buf;
  552. // g_nTxLength = len;
  553. // g_nTxTimeout = timeout;
  554. // g_nNextRFState = RF_STATE_TX_START;
  555. Cmt2300_GoStby();
  556. Cmt2300_ClearInterruptFlags();
  557. /* Must clear FIFO after enable SPI to read or write the FIFO */
  558. Cmt2300_EnableWriteFifo();
  559. Cmt2300_ClearFifo();
  560. Cmt2300_SetPayloadLength(len);
  561. /* The length need be smaller than 32 */
  562. Cmt2300_WriteFifo(buf, len);
  563. Cmt2300_GoTx();
  564. }
  565. int RF_GetPacketRssi(void)
  566. {
  567. return packetRssi;
  568. }
  569. EnumRFResult RF_Process(void)
  570. {
  571. EnumRFResult nRes = RF_BUSY;
  572. switch(g_nNextRFState)
  573. {
  574. case RF_STATE_IDLE:
  575. {
  576. nRes = RF_IDLE;
  577. break;
  578. }
  579. case RF_STATE_RX_START:
  580. {
  581. Cmt2300_GoStby();
  582. Cmt2300_ClearInterruptFlags();
  583. /* Must clear FIFO after enable SPI to read or write the FIFO */
  584. Cmt2300_EnableReadFifo();
  585. Cmt2300_ClearFifo();
  586. if(false==Cmt2300_GoRx())
  587. g_nNextRFState = RF_STATE_ERROR;
  588. else
  589. g_nNextRFState = RF_STATE_RX_WAIT;
  590. g_nRxTimeCount = Cmt2300_GetTickCount();
  591. break;
  592. }
  593. case RF_STATE_RX_WAIT:
  594. {
  595. #ifdef ENABLE_ANTENNA_SWITCH
  596. if(CMT2300_MASK_PKT_OK_FLG & Cmt2300_ReadReg(CMT2300_CUS_INT_FLAG)) /* Read PKT_OK flag */
  597. #else
  598. if(Cmt2300_ReadGpio2()) /* Read INT2, PKT_OK */
  599. #endif
  600. {
  601. getIntFlag.value = Cmt2300_ClearInterruptFlags();
  602. if (getIntFlag.bits.crc_ok)
  603. {
  604. g_nNextRFState = RF_STATE_RX_DONE;
  605. }
  606. }
  607. // if( (0xFFFFFFFF != g_nRxTimeout) && ((g_nSysTickCount-g_nRxTimeCount) > g_nRxTimeout) )
  608. // g_nNextRFState = RF_STATE_RX_TIMEOUT;
  609. break;
  610. }
  611. case RF_STATE_RX_DONE:
  612. {
  613. uint8_t variableLen=255;
  614. packetRssi = Cmt2300_GetRssiDBm();
  615. Cmt2300_GoStby();
  616. Cmt2300_ReadFifo(&variableLen, 1);
  617. /* The length need be smaller than 32 */
  618. Cmt2300_ReadFifo(g_pRxBuffer, variableLen);
  619. // memcpy(g_pRxBuffer, &g_pRxBuffer[1], variableLen);
  620. Cmt2300_GoSleep();
  621. g_nNextRFState = RF_STATE_IDLE;
  622. nRes = RF_RX_DONE;
  623. break;
  624. }
  625. case RF_STATE_RX_TIMEOUT:
  626. {
  627. Cmt2300_GoSleep();
  628. g_nNextRFState = RF_STATE_IDLE;
  629. nRes = RF_RX_TIMEOUT;
  630. break;
  631. }
  632. case RF_STATE_TX_START:
  633. {
  634. Cmt2300_GoStby();
  635. Cmt2300_ClearInterruptFlags();
  636. /* Must clear FIFO after enable SPI to read or write the FIFO */
  637. Cmt2300_EnableWriteFifo();
  638. Cmt2300_ClearFifo();
  639. Cmt2300_SetPayloadLength(g_nTxLength);
  640. /* The length need be smaller than 32 */
  641. Cmt2300_WriteFifo(g_pTxBuffer, g_nTxLength);
  642. if( 0==(CMT2300_MASK_TX_FIFO_NMTY_FLG & Cmt2300_ReadReg(CMT2300_CUS_FIFO_FLAG)) )
  643. g_nNextRFState = RF_STATE_ERROR;
  644. if(false==Cmt2300_GoTx())
  645. g_nNextRFState = RF_STATE_ERROR;
  646. else
  647. g_nNextRFState = RF_STATE_TX_WAIT;
  648. g_nTxTimeCount = Cmt2300_GetTickCount();
  649. break;
  650. }
  651. case RF_STATE_TX_WAIT:
  652. {
  653. #ifdef ENABLE_ANTENNA_SWITCH
  654. if(CMT2300_MASK_TX_DONE_FLG & Cmt2300_ReadReg(CMT2300_CUS_INT_CLR1)) /* Read TX_DONE flag */
  655. #else
  656. if(Cmt2300_ReadGpio1()) /* Read INT1, TX_DONE */
  657. #endif
  658. {
  659. g_nNextRFState = RF_STATE_TX_DONE;
  660. }
  661. // if( (0xFFFFFFFF != g_nTxTimeout) && ((g_nSysTickCount-g_nTxTimeCount) > g_nTxTimeout) )
  662. // g_nNextRFState = RF_STATE_TX_TIMEOUT;
  663. break;
  664. }
  665. case RF_STATE_TX_DONE:
  666. {
  667. Cmt2300_ClearInterruptFlags();
  668. Cmt2300_GoSleep();
  669. g_nNextRFState = RF_STATE_IDLE;
  670. nRes = RF_TX_DONE;
  671. break;
  672. }
  673. case RF_STATE_TX_TIMEOUT:
  674. {
  675. Cmt2300_GoSleep();
  676. g_nNextRFState = RF_STATE_IDLE;
  677. nRes = RF_TX_TIMEOUT;
  678. break;
  679. }
  680. case RF_STATE_ERROR:
  681. {
  682. Cmt2300_SoftReset();
  683. Cmt2300_DelayMs(20);
  684. Cmt2300_GoStby();
  685. RF_Config();
  686. g_nNextRFState = RF_STATE_IDLE;
  687. nRes = RF_ERROR;
  688. break;
  689. }
  690. default:
  691. break;
  692. }
  693. return nRes;
  694. }