Paparazzi UAS
v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
|
STM32 DMA subsystem driver header. More...
Go to the source code of this file.
Functions | |
static void | dma_lld_serve_interrupt (DMADriver *dmap, uint32_t flags) |
DMA ISR service routine. More... | |
void | dmaObjectInit (DMADriver *dmap) |
bool | dmaStart (DMADriver *dmap, const DMAConfig *cfg) |
Configures and activates the DMA peripheral. More... | |
bool | dmaReloadConf (DMADriver *dmap, const DMAConfig *cfg) |
Configures and activates the DMA peripheral. More... | |
void | dmaStop (DMADriver *dmap) |
Deactivates the DMA peripheral. More... | |
bool | dmaStartTransfert (DMADriver *dmap, volatile void *periphp, void *mem0p, const size_t size) |
Starts a DMA transaction. More... | |
bool | dmaStartTransfertI (DMADriver *dmap, volatile void *periphp, void *mem0p, const size_t size) |
Starts a DMA transaction. More... | |
void | dmaGetRegisters (DMADriver *dmap, volatile void *periphp, void *mem0p, const size_t size, DMA_Stream_TypeDef *registers) |
copy the dma register to memory. More... | |
void | dmaStopTransfert (DMADriver *dmap) |
Stops an ongoing transaction. More... | |
void | dmaStopTransfertI (DMADriver *dmap) |
Stops an ongoing transaction. More... | |
uint8_t | dmaGetStreamIndex (DMADriver *dmap) |
msg_t | dmaTransfertTimeout (DMADriver *dmap, volatile void *periphp, void *mem0p, const size_t size, sysinterval_t timeout) |
Performs a DMA transaction. More... | |
void | dmaAcquireBus (DMADriver *dmap) |
Gains exclusive access to the DMA peripheral. More... | |
void | dmaReleaseBus (DMADriver *dmap) |
Releases exclusive access to the DMA peripheral. More... | |
bool | dma_lld_start (DMADriver *dmap, bool allocate_stream) |
Configures and activates the DMA peripheral. More... | |
static size_t | getCrossCacheBoundaryAwareSize (const void *memp, const size_t dsize) |
void | dma_lld_get_registers (DMADriver *dmap, volatile void *periphp, void *mem0p, const size_t size, DMA_Stream_TypeDef *registers) |
Copy the register of a ready stream. More... | |
bool | dma_lld_start_transfert (DMADriver *dmap, volatile void *periphp, void *mem0p, const size_t size) |
Starts a DMA transaction. More... | |
void | dma_lld_stop_transfert (DMADriver *dmap) |
Stops an ongoing transaction. More... | |
void | dma_lld_stop (DMADriver *dmap) |
Deactivates the DMA peripheral. More... | |
STM32 DMA subsystem driver header.
Definition in file hal_stm32_dma.c.
void dma_lld_get_registers | ( | DMADriver * | dmap, |
volatile void * | periphp, | ||
void * | mem0p, | ||
const size_t | size, | ||
DMA_Stream_TypeDef * | registers | ||
) |
Copy the register of a ready stream.
[in] | dmap | pointer to the DMADriver object |
Definition at line 865 of file hal_stm32_dma.c.
References DMADriver::config, DMADriver::dmamode, DMADriver::dmastream, and DMAConfig::op_mode.
Referenced by dmaGetRegisters().
DMA ISR service routine.
DMA DMA ISR service routine.
[in] | dmap | pointer to the DMADriver object |
[in] | flags | pre-shifted content of the ISR register |
Definition at line 972 of file hal_stm32_dma.c.
References _dma_isr_error_code(), _dma_isr_full_code(), _dma_isr_half_code(), DMADriver::config, DMAConfig::direction, DMA_ACTIVE, DMA_DIR_M2M, DMA_DIR_M2P, DMA_DIR_P2M, DMA_ERR_DIRECTMODE_ERROR, DMA_ERR_FIFO_EMPTY, DMA_ERR_FIFO_ERROR, DMA_ERR_FIFO_FULL, DMA_ERR_TRANSFER_ERROR, getCrossCacheBoundaryAwareSize(), DMADriver::mem0p, DMAConfig::msize, DMAConfig::psize, DMADriver::size, and DMADriver::state.
Referenced by dma_lld_start().
bool dma_lld_start | ( | DMADriver * | dmap, |
bool | allocate_stream | ||
) |
Configures and activates the DMA peripheral.
[in] | dmap | pointer to the DMADriver object |
@notapi
Definition at line 552 of file hal_stm32_dma.c.
References DMAConfig::channel, DMADriver::config, DMADriver::controller, DMAConfig::direction, DMA_CONTINUOUS_HALF_BUFFER, DMA_DIR_M2M, DMA_DIR_M2P, DMA_DIR_P2M, dma_lld_serve_interrupt(), DMA_ONESHOT, DMAConfig::dma_priority, DMADriver::dmamode, DMADriver::dmastream, DMAConfig::end_cb, DMAConfig::error_cb, DMAConfig::inc_memory_addr, DMAConfig::inc_peripheral_addr, DMAConfig::irq_priority, DMAConfig::msize, DMAConfig::op_mode, DMAConfig::psize, and DMAConfig::stream.
Referenced by dmaReloadConf(), and dmaStart().
bool dma_lld_start_transfert | ( | DMADriver * | dmap, |
volatile void * | periphp, | ||
void * | mem0p, | ||
const size_t | size | ||
) |
Starts a DMA transaction.
[in] | dmap | pointer to the DMADriver object |
@notapi
Definition at line 897 of file hal_stm32_dma.c.
References DMADriver::config, DMAConfig::direction, DMA_DIR_P2M, DMADriver::dmamode, DMADriver::dmastream, getCrossCacheBoundaryAwareSize(), DMADriver::mem0p, DMAConfig::msize, DMAConfig::op_mode, and DMADriver::size.
Referenced by dmaStartTransfertI().
void dma_lld_stop | ( | DMADriver * | dmap | ) |
Deactivates the DMA peripheral.
[in] | dmap | pointer to the DMADriver object |
@notapi
Definition at line 952 of file hal_stm32_dma.c.
References DMADriver::dmastream.
Referenced by dmaStop().
void dma_lld_stop_transfert | ( | DMADriver * | dmap | ) |
Stops an ongoing transaction.
[in] | dmap | pointer to the DMADriver object |
@notapi
Definition at line 940 of file hal_stm32_dma.c.
References DMADriver::dmastream.
Referenced by _dma_isr_error_code(), _dma_isr_full_code(), dmaStopTransfert(), and dmaStopTransfertI().
void dmaAcquireBus | ( | DMADriver * | dmap | ) |
Gains exclusive access to the DMA peripheral.
This function tries to gain ownership to the DMA bus, if the bus is already being used then the invoking thread is queued.
DMA_USE_MUTUAL_EXCLUSION
must be enabled.[in] | dmap | pointer to the DMADriver object |
@api
Definition at line 502 of file hal_stm32_dma.c.
void dmaGetRegisters | ( | DMADriver * | dmap, |
volatile void * | periphp, | ||
void * | mem0p, | ||
const size_t | size, | ||
DMA_Stream_TypeDef * | registers | ||
) |
copy the dma register to memory.
mainly used to preapare mdma linked list chained transferts
[in] | dmap | pointer to the DMADriver object |
[in,out] | periphp | pointer to a peripheral register address |
[in,out] | mem0p | pointer to the data buffer |
[in] | size | buffer size. The buffer size must be one or an even number. |
[out] | registers | pointer to structure representing a DMA stream set of registers |
@iclass
Definition at line 328 of file hal_stm32_dma.c.
References DMADriver::config, DMA_CONTINUOUS_HALF_BUFFER, dma_lld_get_registers(), DMA_READY, DMAConfig::inc_peripheral_addr, DMAConfig::msize, DMAConfig::op_mode, DMAConfig::psize, and DMADriver::state.
Definition at line 438 of file hal_stm32_dma.c.
References DMADriver::dmastream.
void dmaObjectInit | ( | DMADriver * | dmap | ) |
Definition at line 69 of file hal_stm32_dma.c.
References DMADriver::config, DMA_STOP, DMADriver::mem0p, and DMADriver::state.
Referenced by dshotStart(), initCache(), and light_ws2812_arch_init().
void dmaReleaseBus | ( | DMADriver * | dmap | ) |
Releases exclusive access to the DMA peripheral.
DMA_USE_MUTUAL_EXCLUSION
must be enabled.[in] | dmap | pointer to the DMADriver object |
@api
Definition at line 519 of file hal_stm32_dma.c.
Configures and activates the DMA peripheral.
true | dma driver is OK |
false | incoherencies has been found in config @api |
Definition at line 138 of file hal_stm32_dma.c.
References DMADriver::config, dma_lld_start(), DMA_READY, DMAConfig::op_mode, and DMADriver::state.
Configures and activates the DMA peripheral.
true | dma driver is OK |
false | incoherencies has been found in config @api |
Definition at line 105 of file hal_stm32_dma.c.
References DMADriver::config, dma_lld_start(), DMA_READY, DMA_STOP, DMAConfig::op_mode, and DMADriver::state.
Referenced by dshotStart(), initCache(), and light_ws2812_arch_init().
bool dmaStartTransfert | ( | DMADriver * | dmap, |
volatile void * | periphp, | ||
void * | mem0p, | ||
const size_t | size | ||
) |
Starts a DMA transaction.
Starts one or many asynchronous dma transaction(s) depending on continuous field
[in] | dmap | pointer to the DMADriver object |
[in,out] | periphp | pointer to a peripheral register address |
[in,out] | mem0p | pointer to the data buffer |
[in] | size | buffer size. The buffer size must be one or an even number. |
@api
Definition at line 201 of file hal_stm32_dma.c.
References dmaStartTransfertI().
Referenced by dshotRpmCatchErps(), and light_ws2812_arch_init().
bool dmaStartTransfertI | ( | DMADriver * | dmap, |
volatile void * | periphp, | ||
void * | mem0p, | ||
const size_t | size | ||
) |
Starts a DMA transaction.
Starts one or many asynchronous dma transaction(s) depending on continuous field
[in] | dmap | pointer to the DMADriver object |
[in,out] | periphp | pointer to a peripheral register address |
[in,out] | mem0p | pointer to the data buffer |
[in] | size | buffer size. The buffer size must be one or an even number. |
@iclass
Definition at line 226 of file hal_stm32_dma.c.
References DMADriver::config, DMA_ACTIVE, DMA_COMPLETE, DMA_CONTINUOUS_HALF_BUFFER, DMA_ERROR, dma_lld_start_transfert(), DMA_READY, DMAConfig::inc_peripheral_addr, DMAConfig::msize, DMAConfig::op_mode, DMAConfig::psize, DMADriver::size, and DMADriver::state.
Referenced by dmaStartTransfert(), and dmaTransfertTimeout().
void dmaStop | ( | DMADriver * | dmap | ) |
Deactivates the DMA peripheral.
[in] | dmap | pointer to the DMADriver object |
@api
Definition at line 167 of file hal_stm32_dma.c.
References DMADriver::config, dma_lld_stop(), DMA_READY, DMA_STOP, DMADriver::mem0p, and DMADriver::state.
Referenced by dshotStop().
void dmaStopTransfert | ( | DMADriver * | dmap | ) |
Stops an ongoing transaction.
This function stops the currently ongoing transaction and returns the driver in the DMA_READY
state. If there was no transaction being processed then the function does nothing.
[in] | dmap | pointer to the DMADriver object |
@api
Definition at line 393 of file hal_stm32_dma.c.
References _dma_reset_s, DMA_ACTIVE, dma_lld_stop_transfert(), DMA_READY, and DMADriver::state.
Referenced by dshotStop().
void dmaStopTransfertI | ( | DMADriver * | dmap | ) |
Stops an ongoing transaction.
This function stops the currently ongoing transaction and returns the driver in the DMA_READY
state. If there was no transaction being processed then the function does nothing.
[in] | dmap | pointer to the DMADriver object |
@iclass
Definition at line 421 of file hal_stm32_dma.c.
References _dma_reset_i, DMA_ACTIVE, DMA_COMPLETE, dma_lld_stop_transfert(), DMA_READY, and DMADriver::state.
Referenced by dmaTransfertTimeout(), and dshotRpmCatchErps().
msg_t dmaTransfertTimeout | ( | DMADriver * | dmap, |
volatile void * | periphp, | ||
void * | mem0p, | ||
const size_t | size, | ||
sysinterval_t | timeout | ||
) |
Performs a DMA transaction.
Performs one synchronous dma transaction
[in] | dmap | pointer to the DMADriver object |
[in,out] | periphp | pointer to a peripheral register address |
[in,out] | mem0p | pointer to the data buffer |
[in] | size | buffer size. The buffer size must be one or an even number. |
[in] | timeout | function will exit after timeout is transaction is not done can be TIME_INFINITE (but not TIME_IMMEDIATE) |
MSG_OK | Transaction finished. |
MSG_RESET | The transaction has been stopped using dmaStopTransaction() or dmaStopTransactionI() , the result buffer may contain incorrect data. |
MSG_TIMEOUT | The transaction has been stopped because of hardware error or timeout limit reach |
@api
Definition at line 472 of file hal_stm32_dma.c.
References DMADriver::config, DMA_ONESHOT, dmaStartTransfertI(), dmaStopTransfertI(), msg, DMAConfig::op_mode, and timeout.
Referenced by dmaTransfert().
|
inlinestatic |
Definition at line 838 of file hal_stm32_dma.c.
Referenced by dma_lld_serve_interrupt(), and dma_lld_start_transfert().