#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()
|