Some corrections

This commit is contained in:
jflyper 2017-06-24 10:52:14 +09:00
parent 7a52f91975
commit 1f262d4446
4 changed files with 80 additions and 77 deletions

View File

@ -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);

View File

@ -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)
{

View File

@ -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;

View File

@ -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