Added I2C support for raspi & first rework of debugging

This commit is contained in:
Dario
2023-06-23 15:50:54 +01:00
parent 3cf2173433
commit 6b4acfd27b
70 changed files with 985 additions and 772 deletions

29
src/bus/spi/device.cpp Normal file
View File

@@ -0,0 +1,29 @@
#include <sta/bus/spi/device.hpp>
#include <sta/assert.hpp>
namespace sta
{
SPIDevice::SPIDevice(SPI * intf, GpioPin * csPin)
: Device{intf}, intf_{intf}, csPin_{csPin}
{
STA_ASSERT(intf != nullptr);
STA_ASSERT(csPin != nullptr);
}
const SPISettings & SPIDevice::settings() const
{
return intf_->settings();
}
void SPIDevice::select()
{
csPin_->setState(GpioPinState::GPIO_LOW);
}
void SPIDevice::deselect()
{
csPin_->setState(GpioPinState::GPIO_HIGH);
}
} // namespace sta

72
src/bus/spi/settings.cpp Normal file
View File

@@ -0,0 +1,72 @@
#include <sta/bus/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

17
src/bus/spi/spi.cpp Normal file
View File

@@ -0,0 +1,17 @@
#include <sta/bus/spi/spi.hpp>
#include <cstdio>
namespace sta
{
SPI::SPI(const SPISettings & settings, Mutex * mutex /* = nullptr */)
: Interface{mutex}, settings_{settings}
{
}
const SPISettings & SPI::settings()
{
return settings_;
}
} // namespace sta