Use direct register access in SPI transfer

This commit is contained in:
Daniel Fekete 2017-04-12 22:23:27 +02:00
parent 17bd008026
commit b5fa0d8ee4
2 changed files with 10 additions and 0 deletions

View File

@ -77,6 +77,7 @@ void SPIClass::beginTransaction(SPISettings settings) {
} }
HAL_SPI_Init(&spiHandle); HAL_SPI_Init(&spiHandle);
__HAL_SPI_ENABLE(&spiHandle);
} }
void SPIClass::endTransaction() { void SPIClass::endTransaction() {

View File

@ -91,10 +91,19 @@ class SPIClass {
}; };
inline uint8_t SPIClass::transfer(uint8_t data) { inline uint8_t SPIClass::transfer(uint8_t data) {
spiHandle.Instance->DR = data;
while(__HAL_SPI_GET_FLAG(&spiHandle, SPI_FLAG_RXNE) == RESET);
while(__HAL_SPI_GET_FLAG(&spiHandle, SPI_FLAG_BSY) == SET);
return spiHandle.Instance->DR;
/*
if (HAL_SPI_TransmitReceive(&spiHandle, &data, &data, 1, 1000) != HAL_OK) { if (HAL_SPI_TransmitReceive(&spiHandle, &data, &data, 1, 1000) != HAL_OK) {
return 0; return 0;
} }
return data; return data;
*/
} }
inline uint16_t SPIClass::transfer16(uint16_t data) { inline uint16_t SPIClass::transfer16(uint16_t data) {
if (HAL_SPI_TransmitReceive(&spiHandle, (uint8_t*)&data, (uint8_t*)&data, 2, 1000) != HAL_OK) { if (HAL_SPI_TransmitReceive(&spiHandle, (uint8_t*)&data, (uint8_t*)&data, 2, 1000) != HAL_OK) {