Some corrections
This commit is contained in:
parent
7a52f91975
commit
1f262d4446
|
@ -80,10 +80,9 @@ void spiInitDevice(SPIDevice device)
|
|||
IOInit(IOGetByTag(spi->mosi), OWNER_SPI_MOSI, RESOURCE_INDEX(device));
|
||||
|
||||
#if defined(STM32F3) || defined(STM32F4)
|
||||
IOConfigGPIOAF(IOGetByTag(spi->sck), SPI_IO_AF_CFG, spi->sckAF);
|
||||
IOConfigGPIOAF(IOGetByTag(spi->miso), SPI_IO_AF_CFG, spi->misoAF);
|
||||
IOConfigGPIOAF(IOGetByTag(spi->mosi), SPI_IO_AF_CFG, spi->mosiAF);
|
||||
|
||||
IOConfigGPIOAF(IOGetByTag(spi->sck), SPI_IO_AF_CFG, spi->af);
|
||||
IOConfigGPIOAF(IOGetByTag(spi->miso), SPI_IO_AF_CFG, spi->af);
|
||||
IOConfigGPIOAF(IOGetByTag(spi->mosi), SPI_IO_AF_CFG, spi->af);
|
||||
#endif
|
||||
#if defined(STM32F10X)
|
||||
IOConfigGPIO(IOGetByTag(spi->sck), SPI_IO_AF_SCK_CFG);
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <platform.h>
|
||||
|
||||
|
@ -113,7 +114,7 @@ void spiInitDevice(SPIDevice device)
|
|||
IOInit(IOGetByTag(spi->miso), OWNER_SPI_MISO, RESOURCE_INDEX(device));
|
||||
IOInit(IOGetByTag(spi->mosi), OWNER_SPI_MOSI, RESOURCE_INDEX(device));
|
||||
|
||||
#if defined(STM32F3) || defined(STM32F4) || defined(STM32F7)
|
||||
#if defined(STM32F7)
|
||||
if(spi->leadingEdge == true)
|
||||
IOConfigGPIOAF(IOGetByTag(spi->sck), SPI_IO_AF_SCK_CFG_LOW, spi->sckAF);
|
||||
else
|
||||
|
@ -121,6 +122,14 @@ void spiInitDevice(SPIDevice device)
|
|||
IOConfigGPIOAF(IOGetByTag(spi->miso), SPI_IO_AF_MISO_CFG, spi->misoAF);
|
||||
IOConfigGPIOAF(IOGetByTag(spi->mosi), SPI_IO_AF_CFG, spi->mosiAF);
|
||||
#endif
|
||||
#if defined(STM32F3) || defined(STM32F4)
|
||||
if(spi->leadingEdge == true)
|
||||
IOConfigGPIOAF(IOGetByTag(spi->sck), SPI_IO_AF_SCK_CFG_LOW, spi->af);
|
||||
else
|
||||
IOConfigGPIOAF(IOGetByTag(spi->sck), SPI_IO_AF_SCK_CFG_HIGH, spi->af);
|
||||
IOConfigGPIOAF(IOGetByTag(spi->miso), SPI_IO_AF_MISO_CFG, spi->af);
|
||||
IOConfigGPIOAF(IOGetByTag(spi->mosi), SPI_IO_AF_CFG, spi->af);
|
||||
#endif
|
||||
#if defined(STM32F10X)
|
||||
IOConfigGPIO(IOGetByTag(spi->sck), SPI_IO_AF_SCK_CFG);
|
||||
IOConfigGPIO(IOGetByTag(spi->miso), SPI_IO_AF_MISO_CFG);
|
||||
|
@ -246,7 +255,6 @@ bool spiTransfer(SPI_TypeDef *instance, uint8_t *out, const uint8_t *in, int len
|
|||
return true;
|
||||
}
|
||||
|
||||
|
||||
void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor)
|
||||
{
|
||||
SPIDevice device = spiDeviceByInstance(instance);
|
||||
|
@ -254,39 +262,11 @@ void spiSetDivisor(SPI_TypeDef *instance, uint16_t divisor)
|
|||
{
|
||||
}
|
||||
|
||||
switch (divisor) {
|
||||
case 2:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_2;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
||||
break;
|
||||
|
||||
case 8:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_8;
|
||||
break;
|
||||
|
||||
case 16:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
|
||||
break;
|
||||
|
||||
case 32:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_32;
|
||||
break;
|
||||
|
||||
case 64:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_64;
|
||||
break;
|
||||
|
||||
case 128:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_128;
|
||||
break;
|
||||
|
||||
case 256:
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256;
|
||||
break;
|
||||
}
|
||||
spiDevice[device].hspi.Init.BaudRatePrescaler = (uint8_t []) {
|
||||
SPI_BAUDRATEPRESCALER_2, SPI_BAUDRATEPRESCALER_4,
|
||||
SPI_BAUDRATEPRESCALER_8, SPI_BAUDRATEPRESCALER_16,
|
||||
SPI_BAUDRATEPRESCALER_32, SPI_BAUDRATEPRESCALER_64,
|
||||
SPI_BAUDRATEPRESCALER_128, SPI_BAUDRATEPRESCALER_256}[ffs(divisor) - 1];
|
||||
|
||||
if (HAL_SPI_Init(&spiDevice[device].hspi) == HAL_OK)
|
||||
{
|
||||
|
|
|
@ -25,7 +25,9 @@
|
|||
|
||||
typedef struct spiPinDef_s {
|
||||
ioTag_t pin;
|
||||
#ifdef STM32F7
|
||||
uint8_t af;
|
||||
#endif
|
||||
} spiPinDef_t;
|
||||
|
||||
typedef struct spiHardware_s {
|
||||
|
@ -34,6 +36,9 @@ typedef struct spiHardware_s {
|
|||
spiPinDef_t sckPins[MAX_SPI_PIN_SEL];
|
||||
spiPinDef_t misoPins[MAX_SPI_PIN_SEL];
|
||||
spiPinDef_t mosiPins[MAX_SPI_PIN_SEL];
|
||||
#ifndef STM32F7
|
||||
uint8_t af;
|
||||
#endif
|
||||
rccPeriphTag_t rcc;
|
||||
#if defined(USE_HAL_DRIVER)
|
||||
uint8_t dmaIrqHandler;
|
||||
|
@ -47,9 +52,13 @@ typedef struct SPIDevice_s {
|
|||
ioTag_t sck;
|
||||
ioTag_t miso;
|
||||
ioTag_t mosi;
|
||||
#ifdef STM32F7
|
||||
uint8_t sckAF;
|
||||
uint8_t misoAF;
|
||||
uint8_t mosiAF;
|
||||
#else
|
||||
uint8_t af;
|
||||
#endif
|
||||
rccPeriphTag_t rcc;
|
||||
volatile uint16_t errorCount;
|
||||
bool leadingEdge;
|
||||
|
|
|
@ -160,51 +160,54 @@ const spiHardware_t spiHardware[] = {
|
|||
.device = SPIDEV_1,
|
||||
.reg = SPI1,
|
||||
.sckPins = {
|
||||
{ DEFIO_TAG_E(PA5), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PB3), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PA5) },
|
||||
{ DEFIO_TAG_E(PB3) },
|
||||
},
|
||||
.misoPins = {
|
||||
{ DEFIO_TAG_E(PA6), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PB4), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PA6) },
|
||||
{ DEFIO_TAG_E(PB4) },
|
||||
},
|
||||
.mosiPins = {
|
||||
{ DEFIO_TAG_E(PA7), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PA7) },
|
||||
{ DEFIO_TAG_E(PB5), GPIO_AF_SPI1 },
|
||||
},
|
||||
.af = GPIO_AF_SPI1,
|
||||
.rcc = RCC_APB2(SPI1),
|
||||
},
|
||||
{
|
||||
.device = SPIDEV_2,
|
||||
.reg = SPI2,
|
||||
.sckPins = {
|
||||
{ DEFIO_TAG_E(PB13), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB3), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB13) },
|
||||
{ DEFIO_TAG_E(PB3) },
|
||||
},
|
||||
.misoPins = {
|
||||
{ DEFIO_TAG_E(PB14), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB4), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB14) },
|
||||
{ DEFIO_TAG_E(PB4) },
|
||||
},
|
||||
.mosiPins = {
|
||||
{ DEFIO_TAG_E(PB15), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB5), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB15) },
|
||||
{ DEFIO_TAG_E(PB5) },
|
||||
},
|
||||
.af = GPIO_AF_SPI2,
|
||||
.rcc = RCC_APB1(SPI2),
|
||||
},
|
||||
{
|
||||
.device = SPIDEV_3,
|
||||
.reg = SPI3,
|
||||
.sckPins = {
|
||||
{ DEFIO_TAG_E(PB3), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PC10), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PB3) },
|
||||
{ DEFIO_TAG_E(PC10) },
|
||||
},
|
||||
.misoPins = {
|
||||
{ DEFIO_TAG_E(PB4), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PC11), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PB4) },
|
||||
{ DEFIO_TAG_E(PC11) },
|
||||
},
|
||||
.mosiPins = {
|
||||
{ DEFIO_TAG_E(PB5), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PC12), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PB5) },
|
||||
{ DEFIO_TAG_E(PC12) },
|
||||
},
|
||||
.af = GPIO_AF_SPI3,
|
||||
.rcc = RCC_APB1(SPI3),
|
||||
},
|
||||
#endif
|
||||
|
@ -213,51 +216,54 @@ const spiHardware_t spiHardware[] = {
|
|||
.device = SPIDEV_1,
|
||||
.reg = SPI1,
|
||||
.sckPins = {
|
||||
{ DEFIO_TAG_E(PA5), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PB3), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PA5) },
|
||||
{ DEFIO_TAG_E(PB3) },
|
||||
},
|
||||
.misoPins = {
|
||||
{ DEFIO_TAG_E(PA6), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PB4), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PA6) },
|
||||
{ DEFIO_TAG_E(PB4) },
|
||||
},
|
||||
.mosiPins = {
|
||||
{ DEFIO_TAG_E(PA7), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PB5), GPIO_AF_SPI1 },
|
||||
{ DEFIO_TAG_E(PA7) },
|
||||
{ DEFIO_TAG_E(PB5) },
|
||||
},
|
||||
.af = GPIO_AF_SPI1,
|
||||
.rcc = RCC_APB2(SPI1),
|
||||
},
|
||||
{
|
||||
.device = SPIDEV_2,
|
||||
.reg = SPI2,
|
||||
.sckPins = {
|
||||
{ DEFIO_TAG_E(PB10), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB13), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB10) },
|
||||
{ DEFIO_TAG_E(PB13) },
|
||||
},
|
||||
.misoPins = {
|
||||
{ DEFIO_TAG_E(PB14), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PC2), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB14) },
|
||||
{ DEFIO_TAG_E(PC2) },
|
||||
},
|
||||
.mosiPins = {
|
||||
{ DEFIO_TAG_E(PB15), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PC3), GPIO_AF_SPI2 },
|
||||
{ DEFIO_TAG_E(PB15) },
|
||||
{ DEFIO_TAG_E(PC3) },
|
||||
},
|
||||
.af = GPIO_AF_SPI2,
|
||||
.rcc = RCC_APB1(SPI2),
|
||||
},
|
||||
{
|
||||
.device = SPIDEV_3,
|
||||
.reg = SPI3,
|
||||
.sckPins = {
|
||||
{ DEFIO_TAG_E(PB3), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PC10), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PB3) },
|
||||
{ DEFIO_TAG_E(PC10) },
|
||||
},
|
||||
.misoPins = {
|
||||
{ DEFIO_TAG_E(PB4), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PC11), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PB4) },
|
||||
{ DEFIO_TAG_E(PC11) },
|
||||
},
|
||||
.mosiPins = {
|
||||
{ DEFIO_TAG_E(PB5), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PC12), GPIO_AF_SPI3 },
|
||||
{ DEFIO_TAG_E(PB5) },
|
||||
{ DEFIO_TAG_E(PC12) },
|
||||
},
|
||||
.af = GPIO_AF_SPI3,
|
||||
.rcc = RCC_APB1(SPI3),
|
||||
},
|
||||
#endif
|
||||
|
@ -326,7 +332,7 @@ const spiHardware_t spiHardware[] = {
|
|||
.reg = SPI4,
|
||||
.sckPins = {
|
||||
{ DEFIO_TAG_E(PE2), GPIO_AF5_SPI4 },
|
||||
{ DEFIO_TAG_E(PE12), GPIO_AF6_SPI3 },
|
||||
{ DEFIO_TAG_E(PE12), GPIO_AF5_SPI4 },
|
||||
},
|
||||
.misoPins = {
|
||||
{ DEFIO_TAG_E(PE5), GPIO_AF5_SPI4 },
|
||||
|
@ -346,33 +352,42 @@ void spiPinConfigure(void)
|
|||
{
|
||||
const spiPinConfig_t *pConfig = spiPinConfig();
|
||||
|
||||
for (size_t hwindex = 0 ; hwindex < ARRAYLEN(spiDefaultConfig) ; hwindex++) {
|
||||
for (size_t hwindex = 0 ; hwindex < ARRAYLEN(spiHardware) ; hwindex++) {
|
||||
const spiHardware_t *hw = &spiHardware[hwindex];
|
||||
|
||||
if (!hw->reg) {
|
||||
continue;
|
||||
}
|
||||
|
||||
int device = hw->device;
|
||||
SPIDevice device = hw->device;
|
||||
spiDevice_t *pDev = &spiDevice[device];
|
||||
|
||||
for (int pindex = 0 ; pindex < MAX_SPI_PIN_SEL ; pindex++) {
|
||||
if (pConfig->ioTagSck[device] == hw->sckPins[pindex].pin) {
|
||||
pDev->sck = hw->sckPins[pindex].pin;
|
||||
#ifdef STM32F7
|
||||
pDev->sckAF = hw->sckPins[pindex].af;
|
||||
#endif
|
||||
}
|
||||
if (pConfig->ioTagMiso[device] == hw->misoPins[pindex].pin) {
|
||||
pDev->miso = hw->misoPins[pindex].pin;
|
||||
#ifdef STM32F7
|
||||
pDev->misoAF = hw->misoPins[pindex].af;
|
||||
#endif
|
||||
}
|
||||
if (pConfig->ioTagMosi[device] == hw->mosiPins[pindex].pin) {
|
||||
pDev->mosi = hw->mosiPins[pindex].pin;
|
||||
#ifdef STM32F7
|
||||
pDev->mosiAF = hw->mosiPins[pindex].af;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (pDev->sck && pDev->miso && pDev->mosi) {
|
||||
pDev->dev = hw->reg;
|
||||
#ifndef STM32F7
|
||||
pDev->af = hw->af;
|
||||
#endif
|
||||
pDev->rcc = hw->rcc;
|
||||
pDev->leadingEdge = false; // XXX Should be part of transfer context
|
||||
#ifdef USE_HAL_DRIVER
|
||||
|
|
Loading…
Reference in New Issue