58 lines
1.9 KiB
C++
58 lines
1.9 KiB
C++
#include "SpiCookie.h"
|
|
|
|
|
|
SpiCookie::SpiCookie(address_t deviceAddress, spi::SpiBus spiIdx, SPI_TypeDef* spiInstance,
|
|
uint32_t spiSpeed, spi::SpiModes spiMode, uint16_t chipSelectGpioPin,
|
|
GPIO_TypeDef* chipSelectGpioPort, size_t maxRecvSize):
|
|
deviceAddress(deviceAddress), spiIdx(spiIdx), spiSpeed(spiSpeed), spiMode(spiMode),
|
|
chipSelectGpioPin(chipSelectGpioPin), chipSelectGpioPort(chipSelectGpioPort),
|
|
maxRecvSize(maxRecvSize) {
|
|
spiHandle.Instance = spiInstance;
|
|
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.CRCLength = SPI_CRC_LENGTH_8BIT;
|
|
spiHandle.Init.NSS = SPI_NSS_SOFT;
|
|
spiHandle.Init.NSSPMode = SPI_NSS_PULSE_DISABLE;
|
|
spiHandle.Init.Direction = SPI_DIRECTION_2LINES;
|
|
// Recommended setting to avoid glitches
|
|
spiHandle.Init.MasterKeepIOState = SPI_MASTER_KEEP_IO_STATE_ENABLE;
|
|
spiHandle.Init.Mode = SPI_MODE_MASTER;
|
|
spi::assignSpiMode(spiMode, spiHandle);
|
|
spiHandle.Init.BaudRatePrescaler = spi::getPrescaler(HAL_RCC_GetHCLKFreq(), spiSpeed);
|
|
}
|
|
|
|
uint16_t SpiCookie::getChipSelectGpioPin() const {
|
|
return chipSelectGpioPin;
|
|
}
|
|
|
|
GPIO_TypeDef* SpiCookie::getChipSelectGpioPort() {
|
|
return chipSelectGpioPort;
|
|
}
|
|
|
|
address_t SpiCookie::getDeviceAddress() const {
|
|
return deviceAddress;
|
|
}
|
|
|
|
spi::SpiBus SpiCookie::getSpiIdx() const {
|
|
return spiIdx;
|
|
}
|
|
|
|
spi::SpiModes SpiCookie::getSpiMode() const {
|
|
return spiMode;
|
|
}
|
|
|
|
uint32_t SpiCookie::getSpiSpeed() const {
|
|
return spiSpeed;
|
|
}
|
|
|
|
size_t SpiCookie::getMaxRecvSize() const {
|
|
return maxRecvSize;
|
|
}
|
|
|
|
SPI_HandleTypeDef& SpiCookie::getSpiHandle() {
|
|
return spiHandle;
|
|
}
|