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 UDMAMSP432_Config * | UDMAMSP432_Handle |
A handle that is returned from a UDMAMSP432_open() call. 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 UDMAMSP432_Config* UDMAMSP432_Handle |
A handle that is returned from a UDMAMSP432_open() call.
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 |