Add SPI settings

This commit is contained in:
Henrik Stickann
2022-04-15 14:55:49 +02:00
parent ae460b69f6
commit 3c8fce14f6
2 changed files with 143 additions and 0 deletions

72
src/spi_settings.cpp Normal file
View File

@@ -0,0 +1,72 @@
#include <sta/spi_settings.hpp>
#include <sta/assert.hpp>
#include <sta/lang.hpp>
namespace sta
{
SpiClkPolarity getSpiClkPolarity(SpiMode mode)
{
switch (mode)
{
case SpiMode::MODE_0:
case SpiMode::MODE_1:
return SpiClkPolarity::LOW;
case SpiMode::MODE_2:
case SpiMode::MODE_3:
return SpiClkPolarity::HIGH;
default:
// Unreachable case
STA_ASSERT_MSG(false, "Case for SpiMode enum not handled");
STA_UNREACHABLE();
}
}
SpiClkPhase getSpiClkPhase(SpiMode mode)
{
switch (mode)
{
case SpiMode::MODE_0:
case SpiMode::MODE_2:
return SpiClkPhase::EDGE_1;
case SpiMode::MODE_1:
case SpiMode::MODE_3:
return SpiClkPhase::EDGE_2;
default:
// Unreachable case
STA_ASSERT_MSG(false, "Case for SpiMode enum not handled");
STA_UNREACHABLE();
}
}
SpiMode getSpiMode(SpiClkPolarity polarity, SpiClkPhase phase)
{
if (polarity == SpiClkPolarity::LOW)
{
if (phase == SpiClkPhase::EDGE_1)
{
return SpiMode::MODE_0;
}
else
{
return SpiMode::MODE_1;
}
}
else
{
if (phase == SpiClkPhase::EDGE_1)
{
return SpiMode::MODE_2;
}
else
{
return SpiMode::MODE_3;
}
}
}
} // namespace sta