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:
parent
3631e41292
commit
fe182bb2fb
82 changed files with 1051 additions and 188 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue