PAN312x_Hal.c 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318
  1. /**
  2. ******************************************************************************
  3. * 文件名 : PAN312x_HAL.c
  4. * 作者 : PAN312x RF Team
  5. * 版本 : V1.0.0
  6. * 时间 :
  7. * 文件描述:
  8. * 该文件为PAN312x模块的硬件层,包含MCU与PAN312x模块的SPI配置,GPIO口初始化,以
  9. *及用于PAN312x寄存器、FIFO读写操作;
  10. * 客户在使用模块时候需要移植该文件,保证各个函数名、函数形参不变的情况下
  11. *根据自己的MCU平台修改函数内容,使各个功能块正常运行。硬件层占用资源如下:
  12. *
  13. *SPI:本例程使用STM32L1的SPI3进行与PAN312x模块通信。
  14. *GPIO口:本例程使用的GPIO口详情如下:
  15. * PB15 ---> M0SI
  16. * PB13 ---> SCK
  17. * PB14 ---> MISO
  18. * PB10 ---> GPIO8(IRQ)
  19. * PB11 ---> GPIO0
  20. * PB12 ---> CSN
  21. * PB5 ---> GPIO1
  22. * PB6 ---> GPIO3(nRST)
  23. * PB7 ---> GPIO2
  24. * PB8 ---> GPIO9
  25. * PB10 ---> GPIO10
  26. *******************************************************************************/
  27. #include <stdbool.h>
  28. #include "myRadio_gpio.h"
  29. #include "PAN312x_Hal.h"
  30. //-----------------------------GPIO-----------------------------//
  31. //该部分函数为系统用到的GPIO的初始化函数,用户根据自己的平台相应修改
  32. //--------------------------------------------------------------//
  33. /**
  34. * @简介:Reset引脚初始化;
  35. * @参数:void;
  36. * @返回值:无
  37. */
  38. void PAN312x_Reset_Init(void)
  39. {
  40. RF_PAN312x_RST_H();
  41. }
  42. /**
  43. * @简介:该函数用于MCU对SPI对应IO口初始化;
  44. * @参数:无
  45. * @返回值:无
  46. */
  47. void PAN312x_SPIGPIO_Init()
  48. {
  49. }
  50. /**
  51. * @简介:该函数用于MCU对SPI配置初始化;
  52. * @参数:无
  53. * @返回值:无
  54. */
  55. void PAN312x_SPI_Init()
  56. {
  57. }
  58. /**
  59. * @简介:该函数为GPIO8输入初始化及中断、优先级配置;
  60. * @参数:无
  61. * @返回值:无
  62. */
  63. void PAN312x_DIO8_INPUT()
  64. {
  65. }
  66. /**
  67. * @简介:该函数为GPIO8输入中断开启使能;
  68. * @参数:无
  69. * @返回值:无
  70. */
  71. void PAN312x_DIO8_INTENABLE()
  72. {
  73. /* EXTI interrupt init*/
  74. // HAL_NVIC_SetPriority(EXTI0_IRQn, 0, 0);
  75. // HAL_NVIC_EnableIRQ(EXTI0_IRQn);
  76. // EnableNvic(PORTA_IRQn, IrqLevel3, TRUE);
  77. }
  78. /**
  79. * @简介:该函数为DIO8输入中断关闭使能;
  80. * @参数:无
  81. * @返回值:无
  82. */
  83. void PAN312x_DIO8_INTDISABLE()
  84. {
  85. // EnableNvic(PORTA_IRQn, IrqLevel3, FALSE);
  86. }
  87. /**
  88. * @简介:该函数为DIO8输入状态获取;
  89. * @参数:无
  90. * @返回值:DIO8状态"1"or"0"
  91. */
  92. bool PAN312x_DIO8_GetState()
  93. {
  94. return READ_RF_PAN312x_IRQ()?true:false;
  95. }
  96. /**
  97. * @简介:该函数为SX1208复位引脚NRST输出控制;
  98. * @参数:PinState为"1"表示输出高电平,"0"输出低电平;
  99. * @返回值:无
  100. */
  101. void PAN312x_Reset_OUTPUT(bool PinState)
  102. {
  103. if (PinState)
  104. {
  105. RF_PAN312x_RST_H();
  106. }
  107. else
  108. {
  109. RF_PAN312x_RST_L();
  110. }
  111. }
  112. /**
  113. * @简介:将Reset引脚拉高;
  114. * @参数:void;
  115. * @返回值:无
  116. */
  117. void PAN312x_Reset_High(void)
  118. {
  119. RF_PAN312x_RST_H();
  120. }
  121. /**
  122. * @简介:将Reset引脚拉低;
  123. * @参数:void;
  124. * @返回值:无
  125. */
  126. void PAN312x_Reset_Low(void)
  127. {
  128. RF_PAN312x_RST_L();
  129. }
  130. //-----------------------------SPI-----------------------------//
  131. //该部分函数为MCU对PAN312x模块SPI通信部分,包含SPI口及配置初始化
  132. //--------------------------------------------------------------//
  133. /**
  134. * @简介:加锁,让SDK可重入
  135. * @参数:无
  136. * @返回值:无
  137. */
  138. void PAN312x_Lock(void)
  139. {
  140. __disable_irq();
  141. }
  142. /**
  143. * @简介:解锁,让SDK可重入
  144. * @参数:无
  145. * @返回值:无
  146. */
  147. void PAN312x_Unlock(void)
  148. {
  149. __enable_irq();
  150. }
  151. #if PAN312x_INTERFACE == PAN312x_IF_SPI
  152. /**
  153. * @简介:开始PAN312x的数据收发,即SPI接口拉低CS
  154. * @参数:无
  155. * @返回值:无
  156. */
  157. void PAN312x_DataBegin(void)
  158. {
  159. BOARD_SPI_NSS_L();
  160. }
  161. /**
  162. * @简介:结束PAN312x的数据收发,如果接口为SPI则表示拉高CS,如果接口为I2C则表示发送结束信号
  163. * @参数:无
  164. * @返回值:无
  165. */
  166. void PAN312x_DataEnd(void)
  167. {
  168. BOARD_SPI_NSS_H();
  169. }
  170. /**
  171. * @简介:向PAN312x写入一段数据,如果接口为SPI则不包括CS操作部分
  172. * @参数:buf - 数据缓冲区
  173. * len - 数据长度
  174. * @返回值:写入的数据长度,或者错误值(负数)
  175. */
  176. int PAN312x_DataWrite(const void* buf, int len)
  177. {
  178. for(int i=0;i<len;i++){
  179. myRadioSpi_rwByte( ((uint8_t*)buf)[i]);
  180. }
  181. return len;
  182. }
  183. /**
  184. * @简介:通过SPI从PAN312x读取一段数据
  185. * @参数:buf - 数据缓冲区
  186. * len - 数据长度
  187. * @返回值:读取的数据长度
  188. */
  189. int PAN312x_DataRead(void* buf, int len)
  190. {
  191. for( int i=0;i<len;i++ ){
  192. ((uint8_t*)buf)[i] = myRadioSpi_rwByte(0xff);
  193. }
  194. return len;
  195. }
  196. #elif PAN312x_INTERFACE == PAN312x_IF_I2C
  197. /**
  198. * @简介:开始PAN312x的数据收发,即I2C表示发送起始信号
  199. * @参数:无
  200. * @返回值:无
  201. */
  202. void PAN312x_DataBegin(void)
  203. {
  204. BOARD_SPI_NSS_L();
  205. }
  206. /**
  207. * @简介:结束PAN312x的数据收发,I2C则表示发送结束信号
  208. * @参数:无
  209. * @返回值:无
  210. */
  211. void PAN312x_DataEnd(void)
  212. {
  213. }
  214. /**
  215. * @简介:向PAN312x写入一段数据,如果接口为SPI则不包括CS操作部分
  216. * @参数:buf - 数据缓冲区
  217. * len - 数据长度
  218. * @返回值:写入的数据长度,或者错误值(负数)
  219. */
  220. int PAN312x_DataWrite(const void* buf, int len)
  221. {
  222. }
  223. /**
  224. * @简介:通过SPI从PAN312x读取一段数据
  225. * @参数:buf - 数据缓冲区
  226. * len - 数据长度
  227. * @返回值:读取的数据长度
  228. */
  229. int PAN312x_DataRead(void* buf, int len)
  230. {
  231. }
  232. #endif //PAN312x_INTERFACE
  233. /**
  234. * @简介:PAN312x 向寄存器地址连续发送数据
  235. * @参数:uint8_t addr,寄存器地址 uint8_t *buffer,发送数组指针 uint8_t size指针长度
  236. * @返回值:无
  237. */
  238. uint8_t PAN312x_ReadWriteByte(uint8_t data)
  239. {
  240. unsigned char RxDat;
  241. RxDat = myRadioSpi_rwByte(data);
  242. return RxDat;
  243. }
  244. void PAN312x_Write_Bytes(uint8_t *buffer, uint8_t size)
  245. {
  246. uint8_t i;
  247. //DISABLE_INT();
  248. BOARD_SPI_NSS_L();
  249. for(i = 0; i < size; i++){
  250. PAN312x_ReadWriteByte(buffer[i]);
  251. }
  252. BOARD_SPI_NSS_H();
  253. //ENABLE_INT();
  254. }
  255. /**
  256. * @简介:PAN312x 向寄存器地址连续发送数据
  257. * @参数:uint8_t addr,寄存器地址 uint8_t *buffer,发送数组指针 uint8_t size指针长度
  258. * @返回值:无
  259. */
  260. void PAN312x_Write_Register_Bytes(uint8_t addr, uint8_t *buffer, uint8_t size)
  261. {
  262. uint8_t i;
  263. //DISABLE_INT();
  264. BOARD_SPI_NSS_L();
  265. PAN312x_ReadWriteByte((addr << 0x01) | 0x01);
  266. for(i = 0; i < size; i++){
  267. PAN312x_ReadWriteByte(buffer[i]);
  268. }
  269. BOARD_SPI_NSS_H();
  270. //ENABLE_INT();
  271. }
  272. /**
  273. * @简介:PAN312x 向寄存器地址连续读数据
  274. * @参数:uint8_t addr,寄存器地址 uint8_t *buffer,发送数组指针 uint8_t size指针长度
  275. * @返回值:数据返回到*buffer中
  276. */
  277. void PAN312x_Read_Register_Bytes( uint8_t addr, uint8_t *buffer, uint8_t size)
  278. {
  279. uint8_t i;
  280. //DISABLE_INT();
  281. BOARD_SPI_NSS_L();
  282. PAN312x_ReadWriteByte(addr << 0x01);
  283. for(i = 0; i < size; i++ ){
  284. buffer[i] = PAN312x_ReadWriteByte(0x00);
  285. }
  286. BOARD_SPI_NSS_H();
  287. //ENABLE_INT();
  288. }
  289. /****** Copyright (C) 2025-2050 Shanghai Panchip Microelectronics Co., Ltd. All rights reserved. *******/