13bool isSpiInitialized[SPI_TOTAL_COUNT + 1] = {
true,
false,
false,
false,
false,
false,
false };
20#define AT32_SPI_MAX_POSSIBLE_PINS_FOR_FX 9
23 af_pairs cs[AT32_SPI_MAX_POSSIBLE_PINS_FOR_FX];
24 af_pairs sck[AT32_SPI_MAX_POSSIBLE_PINS_FOR_FX];
25 af_pairs miso[AT32_SPI_MAX_POSSIBLE_PINS_FOR_FX];
26 af_pairs mosi[AT32_SPI_MAX_POSSIBLE_PINS_FOR_FX];
33 .miso = {{
Gpio::A6, 5}, {
Gpio::B4, 5}, {
Gpio::E14, 4}, {
Gpio::G0, 5}, {
Gpio::Invalid, 0}},
40 .cs = {{
Gpio::A11, 5}, {
Gpio::B9, 5}, {
Gpio::B12, 5}, {
Gpio::D1, 7}, {
Gpio::D2, 7}, {
Gpio::Invalid, 0}},
41 .sck = {{
Gpio::A9, 5}, {
Gpio::B1, 6}, {
Gpio::B10, 5}, {
Gpio::B13, 5}, {
Gpio::C7, 5}, {
Gpio::D1, 6}, {
Gpio::D3, 5}, {
Gpio::Invalid, 0}},
42 .miso = {{
Gpio::A12, 5}, {
Gpio::B14, 5}, {
Gpio::C2, 5}, {
Gpio::D3, 6}, {
Gpio::Invalid, 0}},
43 .mosi = {{
Gpio::A10, 5}, {
Gpio::B15, 5}, {
Gpio::C1, 7}, {
Gpio::C3, 5}, {
Gpio::D4, 6}, {
Gpio::Invalid, 0}}
52 .mosi = {{
Gpio::A14, 6}, {
Gpio::B0, 7}, {
Gpio::B2, 7}, {
Gpio::B5, 6}, {
Gpio::C1, 5}, {
Gpio::C12, 6}, {
Gpio::D0, 6}, {
Gpio::D6, 5}, {
Gpio::Invalid, 0}}
58 .cs = {{
Gpio::B6, 6}, {
Gpio::B12, 6}, {
Gpio::E4, 5}, {
Gpio::E11, 5}, {
Gpio::G14, 6}, {
Gpio::Invalid, 0}},
59 .sck = {{
Gpio::B7, 6}, {
Gpio::B13, 6}, {
Gpio::E2, 5}, {
Gpio::E12, 5}, {
Gpio::G11, 6}, {
Gpio::Invalid, 0}},
60 .miso = {{
Gpio::A11, 6}, {
Gpio::B8, 6}, {
Gpio::D0, 5}, {
Gpio::E5, 5}, {
Gpio::E13, 5}, {
Gpio::G12, 6}, {
Gpio::Invalid, 0}},
61 .mosi = {{
Gpio::A1, 5}, {
Gpio::B9, 6}, {
Gpio::E6, 5}, {
Gpio::E14, 5}, {
Gpio::G13, 6}, {
Gpio::Invalid, 0}}
74 for (i = 0; (i < AT32_SPI_MAX_POSSIBLE_PINS_FOR_FX) && (list[i].
pin !=
Gpio::Invalid); i++) {
85 if (driver == &
SPID1) {
90 if (driver == &
SPID2) {
95 if (driver == &SPID3) {
100 if (driver == &SPID4) {
104 criticalError(
"SPI interface is not available");
155 if (
device == SPI_DEVICE_1) {
157#if STM32_SPI_USE_SPI1
166 criticalError(
"SPI1 not available in this binary");
169 if (
device == SPI_DEVICE_2) {
170#if STM32_SPI_USE_SPI2
179 criticalError(
"SPI2 not available in this binary");
182 if (
device == SPI_DEVICE_3) {
183#if STM32_SPI_USE_SPI3
192 criticalError(
"SPI3 not available in this binary");
195 if (
device == SPI_DEVICE_4) {
196#if STM32_SPI_USE_SPI4
201 criticalError(
"SPI4 not available in this binary");
216 if ((sckAf < 0) || (mosiAf < 0) || (misoAf < 0)) {
217 criticalError(
"Incorrect SPI pin configuration");
221 PAL_MODE_ALTERNATE(sckAf) | sckMode | PAL_STM32_OSPEED_HIGHEST);
224 PAL_MODE_ALTERNATE(mosiAf) | mosiMode | PAL_STM32_OSPEED_HIGHEST);
231 PAL_MODE_ALTERNATE(misoAf) | misoMode | PAL_STM32_OSPEED_HIGHEST | PAL_STM32_PUPDR_PULLUP);
237 spiConfig->ssport = port;
238 spiConfig->sspad =
pin;
243#if !defined(HAL_LLD_SELECT_SPI_V2)
244 spiConfig->end_cb =
nullptr;
246 spiConfig->data_cb =
nullptr;
247 spiConfig->error_cb =
nullptr;
275#if !defined(HAL_LLD_SELECT_SPI_V2)
284 .cr1 = SPI_BaudRatePrescaler_2,
290#if !defined(HAL_LLD_SELECT_SPI_V2)
299 .cr1 = SPI_BaudRatePrescaler_8,
static int getSpiSckAf(SPIDriver *driver, brain_pin_e pin)
int spiCalcClockDiv(SPIDriver *, SPIConfig *, unsigned int)
static const struct spi_af * getAfListForSpi(SPIDriver *driver)
int spiGetBaseClock(SPIDriver *)
void initSpiModule(SPIDriver *driver, brain_pin_e sck, brain_pin_e miso, brain_pin_e mosi, int sckMode, int mosiMode, int misoMode)
static const struct spi_af spi2_af
static int getSpiMosiAf(SPIDriver *driver, brain_pin_e pin)
void initSpiCsNoOccupy(SPIConfig *spiConfig, brain_pin_e csPin)
static const struct spi_af spi4_af
static int findAfForPin(const struct af_pairs *list, brain_pin_e pin)
static const struct spi_af spi1_af
bool isSpiInitialized[SPI_TOTAL_COUNT+1]
void turnOnSpi(spi_device_e device)
static int getSpiMisoAf(SPIDriver *driver, brain_pin_e pin)
static const struct spi_af spi3_af
void initSpiCs(SPIConfig *spiConfig, brain_pin_e csPin)
static int getSpiCsAf(SPIDriver *driver, brain_pin_e pin)
void efiSetPadMode(const char *msg, brain_pin_e brainPin, iomode_t mode)
ioportid_t getHwPort(const char *msg, brain_pin_e brainPin)
ioportmask_t getHwPin(const char *msg, brain_pin_e brainPin)
static constexpr engine_configuration_s * engineConfiguration
uint32_t ioportmask_t
Digital I/O port sized unsigned type.
GPIO_TypeDef * ioportid_t
Port Identifier.
SPIDriver SPID1
SPI0 driver identifier.
SPIDriver SPID2
SPI1 driver identifier.
brain_pin_e getSckPin(spi_device_e device)
brain_pin_e getMosiPin(spi_device_e device)
brain_pin_e getMisoPin(spi_device_e device)