53 lines
1.4 KiB
C++
53 lines
1.4 KiB
C++
#include "spiDefinitions.h"
|
|
|
|
void spi::assignSpiMode(SpiModes spiMode, SPI_HandleTypeDef& spiHandle) {
|
|
switch(spiMode) {
|
|
case(SpiModes::MODE_0): {
|
|
spiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
|
|
spiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
|
|
break;
|
|
}
|
|
case(SpiModes::MODE_1): {
|
|
spiHandle.Init.CLKPolarity = SPI_POLARITY_LOW;
|
|
spiHandle.Init.CLKPhase = SPI_PHASE_2EDGE;
|
|
break;
|
|
}
|
|
case(SpiModes::MODE_2): {
|
|
spiHandle.Init.CLKPolarity = SPI_POLARITY_HIGH;
|
|
spiHandle.Init.CLKPhase = SPI_PHASE_1EDGE;
|
|
break;
|
|
}
|
|
case(SpiModes::MODE_3): {
|
|
spiHandle.Init.CLKPolarity = SPI_POLARITY_HIGH;
|
|
spiHandle.Init.CLKPhase = SPI_PHASE_2EDGE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
uint32_t spi::getPrescaler(uint32_t clock_src_freq, uint32_t baudrate_mbps) {
|
|
uint32_t divisor = 0;
|
|
uint32_t spi_clk = clock_src_freq;
|
|
uint32_t presc = 0;
|
|
static const uint32_t baudrate[] = {
|
|
SPI_BAUDRATEPRESCALER_2,
|
|
SPI_BAUDRATEPRESCALER_4,
|
|
SPI_BAUDRATEPRESCALER_8,
|
|
SPI_BAUDRATEPRESCALER_16,
|
|
SPI_BAUDRATEPRESCALER_32,
|
|
SPI_BAUDRATEPRESCALER_64,
|
|
SPI_BAUDRATEPRESCALER_128,
|
|
SPI_BAUDRATEPRESCALER_256,
|
|
};
|
|
|
|
while( spi_clk > baudrate_mbps) {
|
|
presc = baudrate[divisor];
|
|
if (++divisor > 7)
|
|
break;
|
|
|
|
spi_clk = ( spi_clk >> 1);
|
|
}
|
|
|
|
return presc;
|
|
}
|