Advertisement
Guest User

Untitled

a guest
Feb 7th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.35 KB | None | 0 0
  1. void init_spi_nrf(){
  2.  
  3. /*##-1- Configure the SPI peripheral #######################################*/
  4. /* Set the SPI parameters */
  5. SpiHandle.Instance = SPI2;
  6. SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
  7. SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
  8. SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
  9. SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
  10. SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
  11. SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
  12. //SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE;
  13. //SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
  14. SpiHandle.Init.CRCPolynomial = 7;
  15. SpiHandle.Init.NSS = SPI_NSS_SOFT;
  16. //SpiHandle.Init.NSS = SPI_NSS_HARD_OUTPUT | SPI_CR2_NSSP;
  17. //SpiHandle.Init.NSS = SPI_NSS_PULSE_ENABLE
  18. //SPI_NSS_HARD_OUTPUT |SPI_CR2_SSOE;
  19.  
  20. //#ifdef MASTER_BOARD
  21. SpiHandle.Init.Mode = SPI_MODE_MASTER;
  22. //#else
  23. // SpiHandle.Init.Mode = SPI_MODE_SLAVE;
  24. //#endif /* MASTER_BOARD */
  25.  
  26. if(HAL_SPI_Init(&SpiHandle) != HAL_OK)
  27. {
  28. /* Initialization Error */
  29. Error_Handler();
  30. }
  31.  
  32. //write to register Config 00 PWR_UP=1, EN_CRC=1
  33. uint8_t spitx[2]={0x20, 0x0A};
  34. uint8_t spirx[2];
  35. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  36. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  37. {
  38. Error_Handler();
  39. }
  40. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  41.  
  42. //write to register EN_AA 01 ENAA_P0=1
  43. spitx[0]=0x21;
  44. spitx[1]=0x01;
  45. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  46. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  47. {
  48. Error_Handler();
  49. }
  50. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  51.  
  52. //write to register Setup_retr 04 Auto retransmit delay 500us, auto retransmit 2
  53. spitx[0]=0x24;
  54. spitx[1]=0x10;
  55. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  56. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  57. {
  58. Error_Handler();
  59. }
  60. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  61.  
  62.  
  63. //write to register RF_CH 05 channel 110 (2.510MHz)
  64. spitx[0]=0x25;
  65. spitx[1]=0x7D;
  66. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  67. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  68. {
  69. Error_Handler();
  70. }
  71. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  72.  
  73.  
  74.  
  75. //write to register RF_setup 06 2Mbps, 0dBm
  76. spitx[0]=0x26;
  77. spitx[1]=0x0E;
  78. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  79. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  80. {
  81. Error_Handler();
  82. }
  83. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  84.  
  85. /*
  86. //write to register RX_PW_P0 8 bytes
  87. spitx[0]=0x31;
  88. spitx[1]=0x08;
  89. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  90. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  91. {
  92. Error_Handler();
  93. }
  94. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  95. */
  96.  
  97.  
  98. //write to register DYNPD 1C Enable dynamic payload length P0
  99. spitx[0]=0x3C;
  100. spitx[1]=0x01;
  101. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  102. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  103. {
  104. Error_Handler();
  105. }
  106. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  107.  
  108. //write to register FEATURE 1D EN_DPL EN_ACK_PAY
  109. spitx[0]=0x3D;
  110. spitx[1]=0x06;
  111. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  112. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  113. {
  114. Error_Handler();
  115. }
  116. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  117. /*
  118. spitx[0]=0x00;
  119. spitx[1]=0x00;
  120. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  121. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  122. {
  123. Error_Handler();
  124. }
  125. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  126.  
  127.  
  128. for(int spi_c=0;spi_c < 2; spi_c++){
  129. sprintf((char*)text, "TX %d = %d", spi_c+1, spitx[spi_c]);
  130. BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()/2+15+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
  131. sprintf((char*)text, "RX %d = %d", spi_c+1, spirx[spi_c]);
  132. BSP_LCD_DisplayStringAt(200, BSP_LCD_GetYSize()/2+15+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
  133. }
  134. */
  135.  
  136.  
  137.  
  138. }
  139.  
  140.  
  141.  
  142. ######################################Kod w pętli (wysyłanie)
  143.  
  144. nrf_reg_adr[0]=0x07;
  145. nrf_reg_adr[1]=0x00;
  146. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  147. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
  148. {
  149. Error_Handler();
  150. }
  151. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  152. nrf_status=nrf_reg_data[1];
  153.  
  154. //clear max_RT if full
  155. if(nrf_status&0x10){
  156. nrf_reg_adr[0]=0x27;
  157. nrf_reg_adr[1]=0x10;
  158.  
  159. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  160. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
  161. {
  162. Error_Handler();
  163. }
  164. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  165.  
  166. }
  167.  
  168. /*
  169. spitx[0]=0x17;
  170. spitx[1]=0x00;
  171.  
  172. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  173. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
  174. {
  175. Error_Handler();
  176. }
  177. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  178.  
  179. for(int spi_c=0;spi_c < 2; spi_c++){
  180. sprintf((char*)text, "TX %d = %d", spi_c+1, spitx[spi_c]);
  181. BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()/2+30+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
  182. sprintf((char*)text, "RX %d = %d", spi_c+1, spirx[spi_c]);
  183. BSP_LCD_DisplayStringAt(200, BSP_LCD_GetYSize()/2+30+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
  184. }
  185.  
  186. */
  187.  
  188. if(counter%200==0){
  189. count_pps=count_pps_tmp;
  190. count_pps_tmp=0;
  191. }
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198. //odczyt statusu kolejki FIFO
  199. nrf_reg_adr[0]=0x17;
  200. nrf_reg_adr[1]=0x00;
  201. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  202. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
  203. {
  204. Error_Handler();
  205. }
  206. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  207.  
  208. int b;
  209. //if(nrf_reg_data[1] & 0x00){
  210. //zapisywanie danych, które mają byc wyslane wraz z ack fajne!!!
  211. //float roll_test=2.5;
  212. spi_send_data_ack[0]=0xA0; // zamiana z A8 (TX ACK) na A0 (TX normal)
  213.  
  214. //send ctrl_status
  215. spi_send_data_ack[1]=ctrl_status;
  216.  
  217. //send pitch
  218. b = *(int*)&ster_pitch;
  219. spi_send_data_ack[2]=b;
  220. spi_send_data_ack[3]=b>>8;
  221. spi_send_data_ack[4]=b>>16;
  222. spi_send_data_ack[5]=b>>24;
  223. //send roll
  224. b = *(int*)&ster_roll;
  225. spi_send_data_ack[6]=b;
  226. spi_send_data_ack[7]=b>>8;
  227. spi_send_data_ack[8]=b>>16;
  228. spi_send_data_ack[9]=b>>24;
  229. //send yaw
  230. b = *(int*)&ster_yaw;
  231. spi_send_data_ack[10]=b;
  232. spi_send_data_ack[11]=b>>8;
  233. spi_send_data_ack[12]=b>>16;
  234. spi_send_data_ack[13]=b>>24;
  235.  
  236. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  237. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spi_send_data_ack, (uint8_t *)spi_recive_data_ack, 14, 100) != HAL_OK)
  238. {
  239. Error_Handler();
  240. }
  241. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  242.  
  243.  
  244.  
  245. //}
  246. //if((nrf_reg_data[1] & 0x01) == 0x00){
  247. //odczytywanie, az zawartosc rejestru RX bedzie pusta
  248. while((nrf_reg_data[1] & 0x01) == 0x00){
  249. //if(~(nrf_reg_data[1] & 0x01)){
  250.  
  251.  
  252. count_pak++;
  253. count_pps_tmp++;
  254. //odczytywanie danych z rejestru RX (spi_send_data, stałe(zadeklarowane na początku))
  255. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  256. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spi_send_data, (uint8_t *)spi_recive_data, 31, 100) != HAL_OK)
  257. {
  258. Error_Handler();
  259. }
  260. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  261.  
  262.  
  263.  
  264. // Interrupt data is in RX FIFO
  265. /*
  266. //if(nrf_reg_data[1]==0x40){
  267. nrf_reg_adr[0]=0x27;
  268. nrf_reg_adr[1]=0x40;
  269. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  270. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
  271. {
  272. Error_Handler();
  273. }
  274. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  275. //}
  276. */
  277. nrf_reg_adr[0]=0x17;
  278. nrf_reg_adr[1]=0x00;
  279. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
  280. if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
  281. {
  282. Error_Handler();
  283. }
  284. HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
  285. }
  286.  
  287.  
  288.  
  289.  
  290. //HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
  291. counter++;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement