Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void init_spi_nrf(){
- /*##-1- Configure the SPI peripheral #######################################*/
- /* Set the SPI parameters */
- SpiHandle.Instance = SPI2;
- SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
- SpiHandle.Init.Direction = SPI_DIRECTION_2LINES;
- SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
- SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
- SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT;
- SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB;
- //SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE;
- //SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
- SpiHandle.Init.CRCPolynomial = 7;
- SpiHandle.Init.NSS = SPI_NSS_SOFT;
- //SpiHandle.Init.NSS = SPI_NSS_HARD_OUTPUT | SPI_CR2_NSSP;
- //SpiHandle.Init.NSS = SPI_NSS_PULSE_ENABLE
- //SPI_NSS_HARD_OUTPUT |SPI_CR2_SSOE;
- //#ifdef MASTER_BOARD
- SpiHandle.Init.Mode = SPI_MODE_MASTER;
- //#else
- // SpiHandle.Init.Mode = SPI_MODE_SLAVE;
- //#endif /* MASTER_BOARD */
- if(HAL_SPI_Init(&SpiHandle) != HAL_OK)
- {
- /* Initialization Error */
- Error_Handler();
- }
- //write to register Config 00 PWR_UP=1, EN_CRC=1
- uint8_t spitx[2]={0x20, 0x0A};
- uint8_t spirx[2];
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- //write to register EN_AA 01 ENAA_P0=1
- spitx[0]=0x21;
- spitx[1]=0x01;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- //write to register Setup_retr 04 Auto retransmit delay 500us, auto retransmit 2
- spitx[0]=0x24;
- spitx[1]=0x10;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- //write to register RF_CH 05 channel 110 (2.510MHz)
- spitx[0]=0x25;
- spitx[1]=0x7D;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- //write to register RF_setup 06 2Mbps, 0dBm
- spitx[0]=0x26;
- spitx[1]=0x0E;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- /*
- //write to register RX_PW_P0 8 bytes
- spitx[0]=0x31;
- spitx[1]=0x08;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- */
- //write to register DYNPD 1C Enable dynamic payload length P0
- spitx[0]=0x3C;
- spitx[1]=0x01;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- //write to register FEATURE 1D EN_DPL EN_ACK_PAY
- spitx[0]=0x3D;
- spitx[1]=0x06;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- /*
- spitx[0]=0x00;
- spitx[1]=0x00;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- for(int spi_c=0;spi_c < 2; spi_c++){
- sprintf((char*)text, "TX %d = %d", spi_c+1, spitx[spi_c]);
- BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()/2+15+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
- sprintf((char*)text, "RX %d = %d", spi_c+1, spirx[spi_c]);
- BSP_LCD_DisplayStringAt(200, BSP_LCD_GetYSize()/2+15+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
- }
- */
- }
- ######################################Kod w pętli (wysyłanie)
- nrf_reg_adr[0]=0x07;
- nrf_reg_adr[1]=0x00;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- nrf_status=nrf_reg_data[1];
- //clear max_RT if full
- if(nrf_status&0x10){
- nrf_reg_adr[0]=0x27;
- nrf_reg_adr[1]=0x10;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- }
- /*
- spitx[0]=0x17;
- spitx[1]=0x00;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spitx, (uint8_t *)spirx, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- for(int spi_c=0;spi_c < 2; spi_c++){
- sprintf((char*)text, "TX %d = %d", spi_c+1, spitx[spi_c]);
- BSP_LCD_DisplayStringAt(0, BSP_LCD_GetYSize()/2+30+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
- sprintf((char*)text, "RX %d = %d", spi_c+1, spirx[spi_c]);
- BSP_LCD_DisplayStringAt(200, BSP_LCD_GetYSize()/2+30+(15*spi_c), (uint8_t *)&text, LEFT_MODE);
- }
- */
- if(counter%200==0){
- count_pps=count_pps_tmp;
- count_pps_tmp=0;
- }
- //odczyt statusu kolejki FIFO
- nrf_reg_adr[0]=0x17;
- nrf_reg_adr[1]=0x00;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- int b;
- //if(nrf_reg_data[1] & 0x00){
- //zapisywanie danych, które mają byc wyslane wraz z ack fajne!!!
- //float roll_test=2.5;
- spi_send_data_ack[0]=0xA0; // zamiana z A8 (TX ACK) na A0 (TX normal)
- //send ctrl_status
- spi_send_data_ack[1]=ctrl_status;
- //send pitch
- b = *(int*)&ster_pitch;
- spi_send_data_ack[2]=b;
- spi_send_data_ack[3]=b>>8;
- spi_send_data_ack[4]=b>>16;
- spi_send_data_ack[5]=b>>24;
- //send roll
- b = *(int*)&ster_roll;
- spi_send_data_ack[6]=b;
- spi_send_data_ack[7]=b>>8;
- spi_send_data_ack[8]=b>>16;
- spi_send_data_ack[9]=b>>24;
- //send yaw
- b = *(int*)&ster_yaw;
- spi_send_data_ack[10]=b;
- spi_send_data_ack[11]=b>>8;
- spi_send_data_ack[12]=b>>16;
- spi_send_data_ack[13]=b>>24;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spi_send_data_ack, (uint8_t *)spi_recive_data_ack, 14, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- //}
- //if((nrf_reg_data[1] & 0x01) == 0x00){
- //odczytywanie, az zawartosc rejestru RX bedzie pusta
- while((nrf_reg_data[1] & 0x01) == 0x00){
- //if(~(nrf_reg_data[1] & 0x01)){
- count_pak++;
- count_pps_tmp++;
- //odczytywanie danych z rejestru RX (spi_send_data, stałe(zadeklarowane na początku))
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)spi_send_data, (uint8_t *)spi_recive_data, 31, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- // Interrupt data is in RX FIFO
- /*
- //if(nrf_reg_data[1]==0x40){
- nrf_reg_adr[0]=0x27;
- nrf_reg_adr[1]=0x40;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- //}
- */
- nrf_reg_adr[0]=0x17;
- nrf_reg_adr[1]=0x00;
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_RESET);
- if(HAL_SPI_TransmitReceive(&SpiHandle, (uint8_t*)nrf_reg_adr, (uint8_t *)nrf_reg_data, 2, 100) != HAL_OK)
- {
- Error_Handler();
- }
- HAL_GPIO_WritePin(GPIOI, GPIO_PIN_0, GPIO_PIN_SET);
- }
- //HAL_GPIO_TogglePin(GPIOG, GPIO_PIN_6);
- counter++;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement