#include "Spi.h" #include "deca_device_api.h" void Spi_ChangePrescaler(uint16_t scaling_factor) { uint16_t tmpreg = 0; /* Get the SPIx CR1 value */ tmpreg = SPIx->CR1; /*clear the scaling bits*/ tmpreg &= 0xFFC7; /*set the scaling bits*/ tmpreg |= scaling_factor; /* Write to SPIx CR1 */ SPIx->CR1 = tmpreg; } /*! ------------------------------------------------------------------------------------------------------------------ * Function: writetospi() * * Low level abstract function to write to the SPI * Takes two separate byte buffers for write header and write data * returns 0 for success, or -1 for error */ uint8_t tt; int writetospi ( uint16_t headerLength, uint8_t *headerBuffer, uint32_t bodylength, uint8_t *bodyBuffer ) { int i = 0; decaIrqStatus_t stat ; // stat = decamutexon() ; SPIx_CS_GPIO->BRR = SPIx_CS; // delay_ms(1); // tt=HAL_SPI_Transmit(&hspi1,headerBuffer,headerLength,10); // tt=HAL_SPI_Transmit(&hspi1,bodyBuffer,bodylength,10); // delay_ms(1); for(i = 0; i < headerLength; i++) { SPIx->DR= headerBuffer[i]; while ((SPIx->SR & SPI_FLAG_RXNE) == (uint16_t)RESET); SPIx->DR; } for(i = 0; i < bodylength; i++) { SPIx->DR = bodyBuffer[i]; while ((SPIx->SR & SPI_FLAG_RXNE) == (uint16_t)RESET); SPIx->DR ; } SPIx_CS_GPIO->BSRR = SPIx_CS; // decamutexoff(stat) ; return 0; } // end writetospi() /*! ------------------------------------------------------------------------------------------------------------------ * Function: readfromspi() * * Low level abstract function to read from the SPI * Takes two separate byte buffers for write header and read data * returns the offset into read buffer where first byte of read data may be found, * or returns -1 if there was an error */ int readfromspi ( uint16_t headerLength, uint8_t *headerBuffer, uint32_t readlength, uint8_t *readBuffer ) { int i = 0; decaIrqStatus_t stat ; // stat = decamutexon() ; /* Wait for SPIx Tx buffer empty */ //while (port_SPIx_busy_sending()); SPIx_CS_GPIO->BRR = SPIx_CS; // HAL_SPI_Transmit(&hspi1,headerBuffer,headerLength,10); // HAL_SPI_Receive(&hspi1,readBuffer,readlength,10); for(i = 0; i < headerLength; i++) { SPIx->DR = headerBuffer[i]; while((SPIx->SR & SPI_FLAG_RXNE) == (uint16_t)RESET); readBuffer[0] = SPIx->DR ; // Dummy read as we write the header } for(i = 0; i < readlength; i++) { SPIx->DR = 0; // Dummy write as we read the message body while((SPIx->SR & SPI_FLAG_RXNE) == (uint16_t)RESET); readBuffer[i] = SPIx->DR ;//port_SPIx_receive_data(); //this clears RXNE bit } SPIx_CS_GPIO->BSRR = SPIx_CS; // decamutexoff(stat) ; return 0; } // end readfromspi()