/** * @file * @brief SPI bus settings. */ #ifndef STA_CORE_SPI_SETTINGS_HPP #define STA_CORE_SPI_SETTINGS_HPP /** * @defgroup sta_core_spi SPI * @ingroup sta_core * @brief SPI interface. */ #include namespace sta { /** * @ingroup sta_core_spi * @{ */ /** * @brief %SPI clock polarity. */ enum class SPIClkPolarity { LOW, /**< Low idle clock */ HIGH /**< High idle clock */ }; /** * @brief %SPI clock phase. */ enum class SPIClkPhase { EDGE_1, /**< Sample on first edge, shift out on second edge */ EDGE_2 /**< Shift out on first edge, sample on second edge */ }; /** * @brief %SPI clock mode. */ enum class SPIMode { MODE_0, /**< Low idle clock, sample on rising edge, shift out on falling edge */ MODE_1, /**< Low idle clock, sample on falling edge, shift out on rising edge */ MODE_2, /**< High idle clock, sample on rising edge, shift out on falling edge */ MODE_3 /**< High idle clock, sample on falling edge, shift out on rising edge */ }; /** * @brief %SPI data size. */ enum class SPIDataSize { SIZE_8, /**< 8-bit data size */ SIZE_16 /**< 16-bit data size */ }; /** * @brief %SPI bit order. */ enum class SPIBitOrder { MSB, /**< Send most significant bit first */ LSB /**< Send least significant bit first */ }; /** * @brief %SPI settings. */ struct SPISettings { SPIMode mode; /**< %SPI clock mode */ SPIDataSize dataSize; /**< %SPI data size */ SPIBitOrder bitOrder; /**< %SPI bit order */ uint32_t clkSpeed; /**< %SPI clock speed */ }; /** * @brief Get %SPI clock polarity from clock mode. * * @param mode %SPI clock mode * @return %SPI clock polarity */ SPIClkPolarity getSPIClkPolarity(SPIMode mode); /** * @brief Get %SPI clock phase from clock mode. * * @param mode %SPI clock mode * @return %SPI clock phase */ SPIClkPhase getSPIClkPhase(SPIMode mode); /** * @brief Get %SPI clock mode from clock phase and polarity. * * @param polarity %SPI clock polarity * @param phase %SPI clock phase * @return %SPI clock mode */ SPIMode getSPIMode(SPIClkPolarity polarity, SPIClkPhase phase); /** @} */ } // namespace sta #endif // STA_CORE_SPI_SETTINGS_HPP