uDMA driver implementation for MSP432.
============================================================================
This driver is intended for use only by drivers that use the uDMA peripheral (e.g., SPI). This driver is mainly used for management of the control table base address of the UDMA peripheral, and to create the DMA error Hwi.
The application should only define the memory for the control table and set up the UDMAMSP432_HWAttrs and UDMAMSP432_Config structures.
The UDMAMSP432 header file should be included in an application as follows:
#include <stdint.h>
#include <stdbool.h>
#include <ti/drivers/dpl/HwiP.h>
Go to the source code of this file.
Data Structures | |
struct | UDMAMSP432_HWAttrs |
UDMAMSP432 Hardware attributes. More... | |
struct | UDMAMSP432_Config |
UDMAMSP432 Global configuration. More... | |
struct | UDMAMSP432_Object |
UDMAMSP432 object. More... | |
struct | UDMAMSP432_Transfer |
UDMAMSP432 Transfer configuration. More... | |
struct | UDMAMSP432_PingPongTransfer |
UDMAMSP432 Ping Pong Transfer configuration. More... | |
Typedefs | |
typedef void(* | UDMAMSP432_ErrorFxn) (uintptr_t arg) |
UDMA error function pointer. More... | |
typedef struct UDMAMSP432_HWAttrs | UDMAMSP432_HWAttrs |
UDMAMSP432 Hardware attributes. More... | |
typedef struct UDMAMSP432_Config | UDMAMSP432_Config |
UDMAMSP432 Global configuration. More... | |
typedef struct UDMAMSP432_Config * | UDMAMSP432_Handle |
A handle that is returned from a UDMAMSP432_open() call. More... | |
typedef struct UDMAMSP432_Object | UDMAMSP432_Object |
UDMAMSP432 object. More... | |
typedef struct UDMAMSP432_Transfer | UDMAMSP432_Transfer |
UDMAMSP432 Transfer configuration. More... | |
typedef struct UDMAMSP432_PingPongTransfer | UDMAMSP432_PingPongTransfer |
UDMAMSP432 Ping Pong Transfer configuration. More... | |
Functions | |
void | UDMAMSP432_close (UDMAMSP432_Handle handle, uint32_t channelNum, uint8_t intNum) |
Function to close the DMA driver. More... | |
void | UDMAMSP432_init () |
Function to initialize the MSP432 DMA driver. More... | |
UDMAMSP432_Handle | UDMAMSP432_open (uint32_t channelNum, uint8_t intNum, uint32_t priority, void(*hwiFxn)(uintptr_t), uintptr_t arg) |
Function to initialize the MSP432 DMA peripheral and corresponding interrupt. More... | |
bool | UDMAMSP432_setupTransfer (UDMAMSP432_Transfer *transfer) |
Function to set up a DMA channel for data transfer. More... | |
bool | UDMAMSP432_setupPingPongTransfer (UDMAMSP432_PingPongTransfer *transfer) |
Function to set up a DMA channel for ping pong data transfer. More... | |
void | UDMAMSP432_PingPongToggleBuffer (UDMAMSP432_PingPongTransfer *transfer) |
Function to toggle between two buffers during ping pong mode. More... | |
typedef void(* UDMAMSP432_ErrorFxn) (uintptr_t arg) |
UDMA error function pointer.
typedef struct UDMAMSP432_HWAttrs UDMAMSP432_HWAttrs |
UDMAMSP432 Hardware attributes.
This structure contains the base address of the uDMA control table, and uDMA error interrupt attributes.
The control table is used by the uDMA controller to store channel control structures. The control table can be located anywhere in system memory, but must be contiguous and aligned on a 1024-byte boundary.
dmaErrorFxn is the uDMA peripheral's error interrupt handler.
intPriority is priority of the uDMA peripheral's error interrupt, as defined by the underlying OS. It is passed unmodified to the underlying OS's interrupt handler creation code, so you need to refer to the OS documentation for usage. If the driver uses the ti.dpl interface instead of making OS calls directly, then the HwiP port handles the interrupt priority in an OS specific way. In the case of the SYS/BIOS port, intPriority is passed unmodified to Hwi_create().
A sample structure is shown below:
typedef struct UDMAMSP432_Config UDMAMSP432_Config |
UDMAMSP432 Global configuration.
The UDMAMSP432_Config structure contains pointers used by the UDMAMSP432 driver.
This structure needs to be defined before calling UDMAMSP432_init() and it must not be changed thereafter.
typedef struct UDMAMSP432_Config* UDMAMSP432_Handle |
A handle that is returned from a UDMAMSP432_open() call.
typedef struct UDMAMSP432_Object UDMAMSP432_Object |
UDMAMSP432 object.
The application must not access any member variables of this structure!
typedef struct UDMAMSP432_Transfer UDMAMSP432_Transfer |
UDMAMSP432 Transfer configuration.
The UDMAMSP432_Transfer structure contains parameters for initializing a DMA transfer using a given DMA channel number.
This struct is used in UDMAMSP432_setupTransfer().
typedef struct UDMAMSP432_PingPongTransfer UDMAMSP432_PingPongTransfer |
UDMAMSP432 Ping Pong Transfer configuration.
The UDMAMSP432_Transfer structure contains parameters for initializing a DMA ping pong transfer using a given DMA channel number.
This struct is used in UDMAMSP432_setupPingPongTransfer() and UDMAMSP432_PingPongToggleBuffer().
void UDMAMSP432_close | ( | UDMAMSP432_Handle | handle, |
uint32_t | channelNum, | ||
uint8_t | intNum | ||
) |
Function to close the DMA driver.
Close a DMA handle returned from UDMAMSP432_open().
handle | A UDMAMSP432_Handle returned from UDMAMSP432_open() |
channelNum | A DMA channel defined in dma.h (e.g. DMA_CH0_EUSCIB0TX0) |
intNum | DMA_INT0 - DMA_INT3 associated with the channelNum |
void UDMAMSP432_init | ( | ) |
Function to initialize the MSP432 DMA driver.
The function will set the isOpen flag to false, and should be called prior to opening the DMA driver.
UDMAMSP432_Handle UDMAMSP432_open | ( | uint32_t | channelNum, |
uint8_t | intNum, | ||
uint32_t | priority, | ||
void(*)(uintptr_t) | hwiFxn, | ||
uintptr_t | arg | ||
) |
Function to initialize the MSP432 DMA peripheral and corresponding interrupt.
UDMAMSP432_open() opens the DMA peripheral. It calls UDMAMSP432_setupInterrupt() This function can be called multiple times.
channelNum | A DMA channel defined in dma.h (e.g. DMA_CH0_EUSCIB0TX0) |
intNum | The DMA interrupt to be used for the module (DMA_INT0 - DMA_INT3) |
priority | The interrupt priority used in the module |
hwiFxn | A pointer to the desired ISR to call |
arg | A pointer to a struct of args for the ISR |
bool UDMAMSP432_setupTransfer | ( | UDMAMSP432_Transfer * | transfer | ) |
Function to set up a DMA channel for data transfer.
The function will set the channel control, set the channel transfer, assign the channel, and enable the channel.
transfer | Pointer to a UDMAMSP432_Transfer param struct |
bool UDMAMSP432_setupPingPongTransfer | ( | UDMAMSP432_PingPongTransfer * | transfer | ) |
Function to set up a DMA channel for ping pong data transfer.
The function will set the channel control, set the channel transfer, assign the channel, and enable the channel. It will also set up the alternate data structure for use with ping pong mode. For continuous transfering, set transfer.transferMode = UDMA_MODE_PING_PONG. For one-shot across two buffers, set transfer.transferMode = UDMA_MODE_BASIC.
transfer | Pointer to a UDMAMSP432_PingPongTransfer param struct |
void UDMAMSP432_PingPongToggleBuffer | ( | UDMAMSP432_PingPongTransfer * | transfer | ) |
Function to toggle between two buffers during ping pong mode.
The function will alternate setting the destination buffer between transfer's dmaTransferDestinationOne and dmaTransferDestinationTwo parameters. This should be called in the ISR that the peripheral using DMA is using.
transfer | Pointer to a UDMAMSP432_PingPongTransfer param struct |