1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-15 12:25:20 +03:00

Introduce dma_reqmap

This commit is contained in:
jflyper 2018-10-18 15:05:09 +09:00
parent 3631e41292
commit fe182bb2fb
82 changed files with 1051 additions and 188 deletions

View file

@ -27,11 +27,15 @@
#include "drivers/nvic.h"
#include "drivers/io.h"
#include "dma.h"
#include "drivers/dma.h"
#include "drivers/dma_reqmap.h"
#include "drivers/bus_spi.h"
#include "drivers/time.h"
#include "pg/bus_spi.h"
#include "pg/sdcard.h"
#include "sdcard.h"
#include "sdcard_impl.h"
#include "sdcard_standard.h"
@ -473,23 +477,43 @@ void sdcardSpi_preInit(const sdcardConfig_t *config)
/**
* Begin the initialization process for the SD card. This must be called first before any other sdcard_ routine.
*/
static void sdcardSpi_init(const sdcardConfig_t *config)
static void sdcardSpi_init(const sdcardConfig_t *config, const spiPinConfig_t *spiConfig)
{
#ifndef USE_DMA_SPEC
UNUSED(spiConfig);
#endif
sdcard.enabled = config->mode;
if (!sdcard.enabled) {
sdcard.state = SDCARD_STATE_NOT_PRESENT;
return;
}
spiBusSetInstance(&sdcard.busdev, spiInstanceByDevice(SPI_CFG_TO_DEV(config->device)));
SPIDevice spiDevice = SPI_CFG_TO_DEV(config->device);
sdcard.useDMAForTx = config->useDma;
if (sdcard.useDMAForTx) {
#if defined(STM32F4) || defined(STM32F7)
sdcard.dmaChannel = config->dmaChannel;
spiBusSetInstance(&sdcard.busdev, spiInstanceByDevice(spiDevice));
if (config->useDma) {
dmaIdentifier_e dmaIdentifier = DMA_NONE;
#ifdef USE_DMA_SPEC
const dmaChannelSpec_t *dmaChannelSpec = dmaGetChannelSpec(DMA_PERIPH_SPI_TX, config->device, spiConfig[spiDevice].txDmaopt);
if (dmaChannelSpec) {
dmaIdentifier = dmaGetIdentifier(dmaChannelSpec->ref);
sdcard.dmaChannel = dmaChannelSpec->channel; // XXX STM32F3 doesn't have this
}
#else
dmaIdentifier = config->dmaIdentifier;
#endif
sdcard.dma = dmaGetDescriptorByIdentifier(config->dmaIdentifier);
dmaInit(config->dmaIdentifier, OWNER_SDCARD, 0);
if (dmaIdentifier) {
sdcard.dma = dmaGetDescriptorByIdentifier(dmaIdentifier);
dmaInit(dmaIdentifier, OWNER_SDCARD, 0);
sdcard.useDMAForTx = true;
} else {
sdcard.useDMAForTx = false;
}
}
IO_t chipSelectIO;