@@ -91,45 +91,107 @@ static const uint32_t spiDivisorMapSlow[] = {
9191#if defined(STM32H7 )
9292static spiDevice_t spiHardwareMap [SPIDEV_COUNT ] = {
9393#ifdef USE_SPI_DEVICE_1
94- { .dev = SPI1 , .nss = IO_TAG (SPI1_NSS_PIN ), .sck = IO_TAG (SPI1_SCK_PIN ), .miso = IO_TAG (SPI1_MISO_PIN ), .mosi = IO_TAG (SPI1_MOSI_PIN ), .rcc = RCC_APB2 (SPI1 ), .af = GPIO_AF5_SPI1 , .divisorMap = spiDivisorMapFast },
94+ #if defined(SPI1_SCK_AF ) || defined (SPI1_MISO_AF ) || defined (SPI1_MOSI_AF )
95+ #if !defined (SPI1_SCK_AF ) || !defined (SPI1_MISO_AF ) || !defined (SPI1_MOSI_AF )
96+ #error SPI1: SCK, MISO and MOSI AFs should be defined together in target.h!
97+ #endif
98+ { .dev = SPI1 , .nss = IO_TAG (SPI1_NSS_PIN ), .sck = IO_TAG (SPI1_SCK_PIN ), .miso = IO_TAG (SPI1_MISO_PIN ), .mosi = IO_TAG (SPI1_MOSI_PIN ), .rcc = RCC_APB2 (SPI1 ), .sckAF = SPI1_SCK_AF , .misoAF = SPI1_MISO_AF , .mosiAF = SPI1_MOSI_AF , .divisorMap = spiDivisorMapFast },
99+ #else
100+ { .dev = SPI1 , .nss = IO_TAG (SPI1_NSS_PIN ), .sck = IO_TAG (SPI1_SCK_PIN ), .miso = IO_TAG (SPI1_MISO_PIN ), .mosi = IO_TAG (SPI1_MOSI_PIN ), .rcc = RCC_APB2 (SPI1 ), .sckAF = GPIO_AF5_SPI1 , .misoAF = GPIO_AF5_SPI1 , .mosiAF = GPIO_AF5_SPI1 , .divisorMap = spiDivisorMapFast },
101+ #endif
95102#else
96103 { .dev = NULL }, // No SPI1
97104#endif
105+
98106#ifdef USE_SPI_DEVICE_2
99- { .dev = SPI2 , .nss = IO_TAG (SPI2_NSS_PIN ), .sck = IO_TAG (SPI2_SCK_PIN ), .miso = IO_TAG (SPI2_MISO_PIN ), .mosi = IO_TAG (SPI2_MOSI_PIN ), .rcc = RCC_APB1L (SPI2 ), .af = GPIO_AF5_SPI2 , .divisorMap = spiDivisorMapSlow },
107+ #if defined(SPI2_SCK_AF ) || defined(SPI2_MISO_AF ) || defined(SPI2_MOSI_AF )
108+ #if !defined(SPI2_SCK_AF ) || !defined(SPI2_MISO_AF ) || !defined(SPI2_MOSI_AF )
109+ #error SPI2: SCK, MISO and MOSI AFs should be defined together in target.h!
110+ #endif
111+ { .dev = SPI2 , .nss = IO_TAG (SPI2_NSS_PIN ), .sck = IO_TAG (SPI2_SCK_PIN ), .miso = IO_TAG (SPI2_MISO_PIN ), .mosi = IO_TAG (SPI2_MOSI_PIN ), .rcc = RCC_APB1L (SPI2 ), .sckAF = SPI2_SCK_AF , .misoAF = SPI2_MISO_AF , .mosiAF = SPI2_MOSI_AF , .divisorMap = spiDivisorMapSlow },
112+ #else
113+ { .dev = SPI2 , .nss = IO_TAG (SPI2_NSS_PIN ), .sck = IO_TAG (SPI2_SCK_PIN ), .miso = IO_TAG (SPI2_MISO_PIN ), .mosi = IO_TAG (SPI2_MOSI_PIN ), .rcc = RCC_APB1L (SPI2 ), .sckAF = GPIO_AF5_SPI2 , .misoAF = GPIO_AF5_SPI2 , .mosiAF = GPIO_AF5_SPI2 , .divisorMap = spiDivisorMapSlow },
114+ #endif
100115#else
101116 { .dev = NULL }, // No SPI2
102117#endif
118+
103119#ifdef USE_SPI_DEVICE_3
104- { .dev = SPI3 , .nss = IO_TAG (SPI3_NSS_PIN ), .sck = IO_TAG (SPI3_SCK_PIN ), .miso = IO_TAG (SPI3_MISO_PIN ), .mosi = IO_TAG (SPI3_MOSI_PIN ), .rcc = RCC_APB1L (SPI3 ), .af = GPIO_AF6_SPI3 , .divisorMap = spiDivisorMapSlow },
120+ #if defined(SPI3_SCK_AF ) || defined(SPI3_MISO_AF ) || defined(SPI3_MOSI_AF )
121+ #if !defined(SPI3_SCK_AF ) || !defined(SPI3_MISO_AF ) || !defined(SPI3_MOSI_AF )
122+ #error SPI3: SCK, MISO and MOSI AFs should be defined together in target.h!
123+ #endif
124+ { .dev = SPI3 , .nss = IO_TAG (SPI3_NSS_PIN ), .sck = IO_TAG (SPI3_SCK_PIN ), .miso = IO_TAG (SPI3_MISO_PIN ), .mosi = IO_TAG (SPI3_MOSI_PIN ), .rcc = RCC_APB1L (SPI3 ), .sckAF = SPI3_SCK_AF , .misoAF = SPI3_MISO_AF , .mosiAF = SPI3_MOSI_AF , .divisorMap = spiDivisorMapSlow },
125+ #else
126+ { .dev = SPI3 , .nss = IO_TAG (SPI3_NSS_PIN ), .sck = IO_TAG (SPI3_SCK_PIN ), .miso = IO_TAG (SPI3_MISO_PIN ), .mosi = IO_TAG (SPI3_MOSI_PIN ), .rcc = RCC_APB1L (SPI3 ), .sckAF = GPIO_AF6_SPI3 , .misoAF = GPIO_AF6_SPI3 , .mosiAF = GPIO_AF6_SPI3 , .divisorMap = spiDivisorMapSlow },
127+ #endif
105128#else
106129 { .dev = NULL }, // No SPI3
107130#endif
131+
108132#ifdef USE_SPI_DEVICE_4
109- { .dev = SPI4 , .nss = IO_TAG (SPI4_NSS_PIN ), .sck = IO_TAG (SPI4_SCK_PIN ), .miso = IO_TAG (SPI4_MISO_PIN ), .mosi = IO_TAG (SPI4_MOSI_PIN ), .rcc = RCC_APB2 (SPI4 ), .af = GPIO_AF5_SPI4 , .divisorMap = spiDivisorMapSlow }
133+ #if defined(SPI4_SCK_AF ) || defined(SPI4_MISO_AF ) || defined(SPI4_MOSI_AF )
134+ #if !defined(SPI4_SCK_AF ) || !defined(SPI4_MISO_AF ) || !defined(SPI4_MOSI_AF )
135+ #error SPI4: SCK, MISO and MOSI AFs should be defined together in target.h!
136+ #endif
137+ { .dev = SPI4 , .nss = IO_TAG (SPI4_NSS_PIN ), .sck = IO_TAG (SPI4_SCK_PIN ), .miso = IO_TAG (SPI4_MISO_PIN ), .mosi = IO_TAG (SPI4_MOSI_PIN ), .rcc = RCC_APB2 (SPI4 ), .sckAF = SPI4_SCK_AF , .misoAF = SPI4_MISO_AF , .mosiAF = SPI4_MOSI_AF , .divisorMap = spiDivisorMapSlow }
138+ #else
139+ { .dev = SPI4 , .nss = IO_TAG (SPI4_NSS_PIN ), .sck = IO_TAG (SPI4_SCK_PIN ), .miso = IO_TAG (SPI4_MISO_PIN ), .mosi = IO_TAG (SPI4_MOSI_PIN ), .rcc = RCC_APB2 (SPI4 ), .sckAF = GPIO_AF5_SPI4 , .misoAF = GPIO_AF5_SPI4 , .mosiAF = GPIO_AF5_SPI4 , .divisorMap = spiDivisorMapSlow }
140+ #endif
110141#else
111142 { .dev = NULL } // No SPI4
112143#endif
113144};
114145#else
115146static spiDevice_t spiHardwareMap [] = {
116147#ifdef USE_SPI_DEVICE_1
117- { .dev = SPI1 , .nss = IO_TAG (SPI1_NSS_PIN ), .sck = IO_TAG (SPI1_SCK_PIN ), .miso = IO_TAG (SPI1_MISO_PIN ), .mosi = IO_TAG (SPI1_MOSI_PIN ), .rcc = RCC_APB2 (SPI1 ), .af = GPIO_AF5_SPI1 , .divisorMap = spiDivisorMapFast },
148+ #if defined(SPI1_SCK_AF ) || defined (SPI1_MISO_AF ) || defined (SPI1_MOSI_AF )
149+ #if !defined (SPI1_SCK_AF ) || !defined (SPI1_MISO_AF ) || !defined (SPI1_MOSI_AF )
150+ #error SPI1: SCK, MISO and MOSI AFs should be defined together in target.h!
151+ #endif
152+ { .dev = SPI1 , .nss = IO_TAG (SPI1_NSS_PIN ), .sck = IO_TAG (SPI1_SCK_PIN ), .miso = IO_TAG (SPI1_MISO_PIN ), .mosi = IO_TAG (SPI1_MOSI_PIN ), .rcc = RCC_APB2 (SPI1 ), .sckAF = SPI1_SCK_AF , .misoAF = SPI1_MISO_AF , .mosiAF = SPI1_MOSI_AF , .divisorMap = spiDivisorMapFast },
153+ #else
154+ { .dev = SPI1 , .nss = IO_TAG (SPI1_NSS_PIN ), .sck = IO_TAG (SPI1_SCK_PIN ), .miso = IO_TAG (SPI1_MISO_PIN ), .mosi = IO_TAG (SPI1_MOSI_PIN ), .rcc = RCC_APB2 (SPI1 ), .sckAF = GPIO_AF5_SPI1 , .misoAF = GPIO_AF5_SPI1 , .mosiAF = GPIO_AF5_SPI1 , .divisorMap = spiDivisorMapFast },
155+ #endif
118156#else
119157 { .dev = NULL }, // No SPI1
120158#endif
159+
121160#ifdef USE_SPI_DEVICE_2
122- { .dev = SPI2 , .nss = IO_TAG (SPI2_NSS_PIN ), .sck = IO_TAG (SPI2_SCK_PIN ), .miso = IO_TAG (SPI2_MISO_PIN ), .mosi = IO_TAG (SPI2_MOSI_PIN ), .rcc = RCC_APB1 (SPI2 ), .af = GPIO_AF5_SPI2 , .divisorMap = spiDivisorMapSlow },
161+ #if defined(SPI2_SCK_AF ) || defined(SPI2_MISO_AF ) || defined(SPI2_MOSI_AF )
162+ #if !defined(SPI2_SCK_AF ) || !defined(SPI2_MISO_AF ) || !defined(SPI2_MOSI_AF )
163+ #error SPI2: SCK, MISO and MOSI AFs should be defined together in target.h!
164+ #endif
165+ { .dev = SPI2 , .nss = IO_TAG (SPI2_NSS_PIN ), .sck = IO_TAG (SPI2_SCK_PIN ), .miso = IO_TAG (SPI2_MISO_PIN ), .mosi = IO_TAG (SPI2_MOSI_PIN ), .rcc = RCC_APB1 (SPI2 ), .sckAF = SPI2_SCK_AF , .misoAF = SPI2_MISO_AF , .mosiAF = SPI2_MOSI_AF , .divisorMap = spiDivisorMapSlow },
166+ #else
167+ { .dev = SPI2 , .nss = IO_TAG (SPI2_NSS_PIN ), .sck = IO_TAG (SPI2_SCK_PIN ), .miso = IO_TAG (SPI2_MISO_PIN ), .mosi = IO_TAG (SPI2_MOSI_PIN ), .rcc = RCC_APB1 (SPI2 ), .sckAF = GPIO_AF5_SPI2 , .misoAF = GPIO_AF5_SPI2 , .mosiAF = GPIO_AF5_SPI2 , .divisorMap = spiDivisorMapSlow },
168+ #endif
123169#else
124170 { .dev = NULL }, // No SPI2
125171#endif
172+
126173#ifdef USE_SPI_DEVICE_3
127- { .dev = SPI3 , .nss = IO_TAG (SPI3_NSS_PIN ), .sck = IO_TAG (SPI3_SCK_PIN ), .miso = IO_TAG (SPI3_MISO_PIN ), .mosi = IO_TAG (SPI3_MOSI_PIN ), .rcc = RCC_APB1 (SPI3 ), .af = GPIO_AF6_SPI3 , .divisorMap = spiDivisorMapSlow },
174+ #if defined(SPI3_SCK_AF ) || defined(SPI3_MISO_AF ) || defined(SPI3_MOSI_AF )
175+ #if !defined(SPI3_SCK_AF ) || !defined(SPI3_MISO_AF ) || !defined(SPI3_MOSI_AF )
176+ #error SPI3: SCK, MISO and MOSI AFs should be defined together in target.h!
177+ #endif
178+ { .dev = SPI3 , .nss = IO_TAG (SPI3_NSS_PIN ), .sck = IO_TAG (SPI3_SCK_PIN ), .miso = IO_TAG (SPI3_MISO_PIN ), .mosi = IO_TAG (SPI3_MOSI_PIN ), .rcc = RCC_APB1 (SPI3 ), .sckAF = SPI3_SCK_AF , .misoAF = SPI3_MISO_AF , .mosiAF = SPI3_MOSI_AF , .divisorMap = spiDivisorMapSlow },
179+ #else
180+ { .dev = SPI3 , .nss = IO_TAG (SPI3_NSS_PIN ), .sck = IO_TAG (SPI3_SCK_PIN ), .miso = IO_TAG (SPI3_MISO_PIN ), .mosi = IO_TAG (SPI3_MOSI_PIN ), .rcc = RCC_APB1 (SPI3 ), .sckAF = GPIO_AF6_SPI3 , .misoAF = GPIO_AF6_SPI3 , .mosiAF = GPIO_AF6_SPI3 , .divisorMap = spiDivisorMapSlow },
181+ #endif
128182#else
129183 { .dev = NULL }, // No SPI3
130184#endif
185+
131186#ifdef USE_SPI_DEVICE_4
132- { .dev = SPI4 , .nss = IO_TAG (SPI4_NSS_PIN ), .sck = IO_TAG (SPI4_SCK_PIN ), .miso = IO_TAG (SPI4_MISO_PIN ), .mosi = IO_TAG (SPI4_MOSI_PIN ), .rcc = RCC_APB2 (SPI4 ), .af = GPIO_AF5_SPI4 , .divisorMap = spiDivisorMapSlow }
187+ #if defined(SPI4_SCK_AF ) || defined(SPI4_MISO_AF ) || defined(SPI4_MOSI_AF )
188+ #if !defined(SPI4_SCK_AF ) || !defined(SPI4_MISO_AF ) || !defined(SPI4_MOSI_AF )
189+ #error SPI3: SCK, MISO and MOSI AFs should be defined together in target.h!
190+ #endif
191+ { .dev = SPI4 , .nss = IO_TAG (SPI4_NSS_PIN ), .sck = IO_TAG (SPI4_SCK_PIN ), .miso = IO_TAG (SPI4_MISO_PIN ), .mosi = IO_TAG (SPI4_MOSI_PIN ), .rcc = RCC_APB2 (SPI4 ), .sckAF = SPI4_SCK_AF , .misoAF = SPI4_MISO_AF , .mosiAF = SPI4_MOSI_AF , .divisorMap = spiDivisorMapSlow }
192+ #else
193+ { .dev = SPI4 , .nss = IO_TAG (SPI4_NSS_PIN ), .sck = IO_TAG (SPI4_SCK_PIN ), .miso = IO_TAG (SPI4_MISO_PIN ), .mosi = IO_TAG (SPI4_MOSI_PIN ), .rcc = RCC_APB2 (SPI4 ), .sckAF = GPIO_AF5_SPI4 , .misoAF = GPIO_AF5_SPI4 , .mosiAF = GPIO_AF5_SPI4 , .divisorMap = spiDivisorMapSlow }
194+ #endif
133195#else
134196 { .dev = NULL } // No SPI4
135197#endif
@@ -184,12 +246,13 @@ bool spiInitDevice(SPIDevice device, bool leadingEdge)
184246 IOInit (IOGetByTag (spi -> mosi ), OWNER_SPI , RESOURCE_SPI_MOSI , device + 1 );
185247
186248 if (leadingEdge ) {
187- IOConfigGPIOAF (IOGetByTag (spi -> sck ), SPI_IO_AF_SCK_CFG_LOW , spi -> af );
249+ IOConfigGPIOAF (IOGetByTag (spi -> sck ), SPI_IO_AF_SCK_CFG_LOW , spi -> sckAF );
188250 } else {
189- IOConfigGPIOAF (IOGetByTag (spi -> sck ), SPI_IO_AF_SCK_CFG_HIGH , spi -> af );
251+ IOConfigGPIOAF (IOGetByTag (spi -> sck ), SPI_IO_AF_SCK_CFG_HIGH , spi -> sckAF );
190252 }
191- IOConfigGPIOAF (IOGetByTag (spi -> miso ), SPI_IO_AF_MISO_CFG , spi -> af );
192- IOConfigGPIOAF (IOGetByTag (spi -> mosi ), SPI_IO_AF_CFG , spi -> af );
253+ IOConfigGPIOAF (IOGetByTag (spi -> miso ), SPI_IO_AF_MISO_CFG , spi -> misoAF );
254+
255+ IOConfigGPIOAF (IOGetByTag (spi -> mosi ), SPI_IO_AF_CFG , spi -> mosiAF );
193256
194257 if (spi -> nss ) {
195258 IOInit (IOGetByTag (spi -> nss ), OWNER_SPI , RESOURCE_SPI_CS , device + 1 );
0 commit comments