Direct Memory Access#
Modules#
Enumerations#
Enumeration holds transfer types of DMA.
Enumeration holds transfer modes of DMA.
Enumeration holds peripheral ACK signals to DMA.
Enumeration holds DMA transfer sizes.
Enumeration holds DMA transfer address increment for source and destination.
Enumeration holds 8-bit codes which are used by callback_type in sl_si91x_dma_unregister_callbacks function.
Typedefs#
Typedef for user supplied callback function which is called when a DMA transfer completes.
Typedef for user supplied callback function which is called when a DMA error occurs.
Variables#
DMA driver channel allocator.
Functions#
This function initializes DMA peripheral by enabling DMA clock and clearing DMA interrupts.
This function deinitialize DMA module by disabling peripheral clock and interrupts, if there is no ongoing DMA transfer.
This function check the available DMA channel and allocate the channel.
This function returns the channel status (i.e) whether channel is allocated/busy/idle.
This function enable DMA channel.
This function disable DMA channel.
This function enable DMA peripheral.
Macros#
Enumeration Documentation#
sl_dma_transfer_type_t#
sl_dma_transfer_type_t
Enumeration holds transfer types of DMA.
Enumerator | |
---|---|
SL_DMA_MEMORY_TO_MEMORY | Memory to memory transfer. |
SL_DMA_MEMORY_TO_PERIPHERAL | Memory to peripheral transfer. |
SL_DMA_PERIPHERAL_TO_MEMORY | Peripheral to memory transfer. |
101
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_dma_transfer_mode_t#
sl_dma_transfer_mode_t
Enumeration holds transfer modes of DMA.
Enumerator | |
---|---|
SL_DMA_BASIC_MODE | Basic DMA mode. |
SL_DMA_PINGPONG_MODE | Ping pong mode. |
108
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_dma_peripheral_ack_t#
sl_dma_peripheral_ack_t
Enumeration holds peripheral ACK signals to DMA.
Enumerator | |
---|---|
SL_USART0_ACK | ACK code for USART0. |
SL_UART1_ACK | ACK code for UART1. |
SL_UART3_ACK | ACK code for UART3. |
SL_SSI_SLAVE_ACK | ACK code for SSI slave. |
SL_SSI_MASTER_ACK | ACK code for SSI master. |
SL_SSI1_SLAVE_ACK | ACK code for SSI1. |
SL_I2C_ACK | ACK code for I2C. |
114
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_dma_transfer_size_t#
sl_dma_transfer_size_t
Enumeration holds DMA transfer sizes.
Enumerator | |
---|---|
SL_TRANSFER_SIZE_32 | 4 bytes transfer size |
SL_TRANSFER_SIZE_16 | 2 bytes transfer size |
SL_TRANSFER_SIZE_8 | 1 bytes transfer size |
125
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_dma_transfer_inc_t#
sl_dma_transfer_inc_t
Enumeration holds DMA transfer address increment for source and destination.
Enumerator | |
---|---|
SL_TRANSFER_SRC_INC_32 | 4 bytes source address increment |
SL_TRANSFER_SRC_INC_16 | 2 bytes source address increment |
SL_TRANSFER_SRC_INC_8 | 1 byte source address increment |
SL_TRANSFER_SRC_INC_NONE | No source address increment. |
SL_TRANSFER_DST_INC_32 | 4 bytes destination address increment |
SL_TRANSFER_DST_INC_16 | 2 bytes destination address increment |
SL_TRANSFER_DST_INC_8 | 1 byte destination address increment |
SL_TRANSFER_DST_INC_NONE | No destination address increment. |
132
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_dma_callback_code_t#
sl_dma_callback_code_t
Enumeration holds 8-bit codes which are used by callback_type in sl_si91x_dma_unregister_callbacks function.
Enumerator | |
---|---|
SL_DMA_TRANSFER_DONE_CB | 8-bit code for transfer complete callback |
SL_DMA_ERROR_CB | 8-bit code for error callback |
145
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
Typedef Documentation#
sl_dma_transfer_complete#
typedef void(* sl_dma_transfer_complete) (uint32_t channel, void *data) )(uint32_t channel, void *data)
Typedef for user supplied callback function which is called when a DMA transfer completes.
[in] | channel_no | DMA channel number |
[in] | *data | An extra parameter for user application |
89
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_dma_error#
typedef void(* sl_dma_error) (uint32_t channel, void *data) )(uint32_t channel, void *data)
Typedef for user supplied callback function which is called when a DMA error occurs.
[in] | channel_no | DMA channel number |
[in] | *data | An extra parameter for user application |
98
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
Variable Documentation#
sl_channel_allocation_data_t#
sl_channel_data_t sl_channel_allocation_data_t[2][SL_CHANNEL_COUNT]
DMA driver channel allocator.
183
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
Function Documentation#
sl_si91x_dma_init#
sl_status_t sl_si91x_dma_init (sl_dma_init_t * dma_init)
This function initializes DMA peripheral by enabling DMA clock and clearing DMA interrupts.
[in] | dma_init | dma initialization structure, dma_init->dma_number - 0->UDMA0, 1->UDMA1 |
Pre-conditions:
none
Returns
Initialization status SL_STATUS_OK - Initialization success SL_STATUS_NOT_INITIALIZED - Initialization fail
206
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_deinit#
sl_status_t sl_si91x_dma_deinit (uint32_t dma_number)
This function deinitialize DMA module by disabling peripheral clock and interrupts, if there is no ongoing DMA transfer.
[in] | dma_number | 0->UDMA0, 1->UDMA1 |
Pre-conditions:
Returns
deinitialization status SL_STATUS_OK - Deinit success SL_STATUS_BUSY - Cannot deinit the peripheral due to an ongoing transfer SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized
222
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_allocate_channel#
sl_status_t sl_si91x_dma_allocate_channel (uint32_t dma_number, uint32_t * channel_no, uint32_t priority)
This function check the available DMA channel and allocate the channel.
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | Address of channel number (1-32). |
[in] | priority | channel priority. |
This function also set the priority of allocated channel and assign the channel number to *channel_no variable. If no channel is available it will return SL_DMA_NO_CHANNEL_AVAILABLE. note: User can also initialize desired channel number and this API checks whether desired channel is available and allocates the channel if available. If user want driver to allocate the available channel, channel_no should be initialized to 0.
Pre-conditions:
Returns
channel allocation status SL_STATUS_OK - Channel allocated SL_STATUS_DMA_NO_CHANNEL_AVAILABLE - All DMA channels are allocated SL_STATUS_DMA_CHANNEL_ALLOCATED - Desired channel is already allocated SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized SL_STATUS_INVALID_PARAMETER - Channel no is invalid
244
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_deallocate_channel#
sl_status_t sl_si91x_dma_deallocate_channel (uint32_t dma_number, uint32_t channel_no)
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
This function deallocate DMA channel if there is no ongoing transfer on channel
@pre Pre-conditions:
Returns
channel deallocation status SL_STATUS_OK - Channel deallocated SL_STATUS_BUSY - Cannot deallocate channel due to an ongoing transfer SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized SL_STATUS_INVALID_PARAMETER - Channel no is invalid
264
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_register_callbacks#
sl_status_t sl_si91x_dma_register_callbacks (uint32_t dma_number, uint32_t channel_no, sl_dma_callback_t * callback_t)
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
[in] | callback_t | structure containing callback functions. |
This function register DMA callbacks (transfer complete & error)
User must update the sl_dma_callback_t structure and pass its address to this function.
User can have seperate callbacks for transfer complete and error for each channel
@pre Pre-conditions:
Returns
channel deallocation status SL_STATUS_OK - Callback registered successfully SL_STATUS_INVALID_PARAMETER - Invalid channel number SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized
287
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_unregister_callbacks#
sl_status_t sl_si91x_dma_unregister_callbacks (uint32_t dma_number, uint32_t channel_no, uint8_t callback_type)
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
[in] | callback_type | Unregister the DMA callbacks based on the callback type (bit mapped to callbacks), (SL_DMA_TRANSFER_DONE_CB) - unregister transfer complete callback (SL_DMA_ERROR_CB) - unregister error callback (SL_DMA_TRANSFER_DONE_CB | SL_DMA_ERROR_CB) - unregister both transfer complete and error callback |
This function unregister DMA callbacks (transfer complete & error)
User needs to update the 8-bit variable callback_type and pass to the function
Each bit is mapped to specific callback.
@pre Pre-conditions:
Returns
channel deallocation status SL_STATUS_OK - Callback unregistered successfully SL_STATUS_INVALID_PARAMETER - Invalid channel number SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized
314
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_transfer#
sl_status_t sl_si91x_dma_transfer (uint32_t dma_number, uint32_t channel_no, sl_dma_xfer_t * dma_transfer_t)
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
[in] | dma_transfer_t | channel transfer data structure containing channel descriptor and other basic DMA parameters. |
This function configure DMA channel descriptor and initiate DMA transfer
DMA primary descriptor is updated in this function and based on transfer mode
alternate descriptor is updated (only for ping pong mode). Also other DMA parameters
like peripheral ACK signal (for peripheral memory transfers), DMA priority etc. are
updated in this function.
@pre Pre-conditions:
Returns
DMA transfer status SL_STATUS_OK - Transfer started successfully SL_STATUS_SUSPENDED - Transfer initialization fail SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized SL_STATUS_INVALID_PARAMETER - Channel no is invalid
341
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_simple_transfer#
sl_status_t sl_si91x_dma_simple_transfer (uint32_t dma_number, uint32_t channel_no, void * src_addr, void * dst_addr, uint32_t data_size)
N/A | dma_number | |
N/A | channel_no | |
N/A | src_addr | |
N/A | dst_addr | |
N/A | data_size |
This function configure DMA channel descriptor and initiate simple memory to memory
DMA transfer. User need to pass source address and destination address of transfer
along with transfer length in bytes.
@pre Pre-conditions:
@param[in] dma_number dma_number 0->UDMA0, 1->UDMA1
@param[in] sl_channel_t channel no(1-32)
@param[in] *src_addr source address.
@param[in] *dst_addr destination address.
@param[in] data_size transfer size in bytes
@return DMA transfer status
SL_STATUS_OK - Transfer success
SL_STATUS_SUSPENDED - Transfer initialization fail
SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized
SL_STATUS_INVALID_PARAMETER - Channel no is invalid
369
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_stop_transfer#
sl_status_t sl_si91x_dma_stop_transfer (uint32_t dma_number, uint32_t channel_no)
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
This function stop any active transfer on channel. If there is no active transfer on channel
this function returns SL_DMA_CHANNEL_IDLE
@pre Pre-conditions:
sl_si91x_dma_simple_transfer/sl_si91x_dma_transfer
Returns
DMA transfer status SL_STATUS_OK - Transfer stopped successfully SL_STATUS_IDLE - There is no active transfer on channel SL_STATUS_INVALID_PARAMETER - Invalid channel number SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized
396
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_channel_status_get#
sl_status_t sl_si91x_dma_channel_status_get (uint32_t dma_number, uint32_t channel_no)
This function returns the channel status (i.e) whether channel is allocated/busy/idle.
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
Pre-conditions:
Returns
channel status SL_STATUS_IDLE - Channel is not allocated SL_STATUS_DMA_CHANNEL_ALREADY_ALLOCATED - Channel is already allocated and idle SL_STATUS_BUSY - Channel is allocated and busy SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized SL_STATUS_INVALID_PARAMETER - Channel no is invalid
415
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_channel_enable#
sl_status_t sl_si91x_dma_channel_enable (uint32_t dma_number, uint32_t channel_no)
This function enable DMA channel.
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
Pre-conditions:
Returns
channel status SL_STATUS_OK - Channel enable success SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized SL_STATUS_INVALID_PARAMETER - Channel no is invalid
431
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_channel_disable#
sl_status_t sl_si91x_dma_channel_disable (uint32_t dma_number, uint32_t channel_no)
This function disable DMA channel.
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
[in] | channel_no | channel number(1-32). |
Pre-conditions:
Returns
channel status SL_STATUS_OK - Channel disable success SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized SL_STATUS_INVALID_PARAMETER - Channel no is invalid
447
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
sl_si91x_dma_enable#
sl_status_t sl_si91x_dma_enable (uint32_t dma_number)
This function enable DMA peripheral.
[in] | dma_number | dma_number 0->UDMA0, 1->UDMA1 |
Pre-conditions:
Returns
SL_STATUS_OK - Channel enable success SL_STATUS_NOT_INITIALIZED - DMA peripheral not initialized
460
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
Macro Definition Documentation#
SL_STATUS_DMA_CHANNEL_ALLOCATED#
#define SL_STATUS_DMA_CHANNEL_ALLOCATEDValue:
(sl_status_t)0x45
49
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
SL_STATUS_DMA_NO_CHANNEL_AVAILABLE#
#define SL_STATUS_DMA_NO_CHANNEL_AVAILABLEValue:
(sl_status_t)0x46
51
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
SL_STATUS_DMA_CHANNEL_ALREADY_UNALLOCATED#
#define SL_STATUS_DMA_CHANNEL_ALREADY_UNALLOCATEDValue:
(sl_status_t)0X47
53
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
SL_STATUS_DMA_CHANNEL_UNALLOCATED#
#define SL_STATUS_DMA_CHANNEL_UNALLOCATEDValue:
(sl_status_t)0X48
55
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
SL_CHANNEL_COUNT#
#define SL_CHANNEL_COUNTValue:
32
57
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
ALTERNATE_DESCRIPTOR_DISABLE#
#define ALTERNATE_DESCRIPTOR_DISABLEValue:
0
59
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
ALTERNATE_DESCRIPTOR_ENABLE#
#define ALTERNATE_DESCRIPTOR_ENABLEValue:
1
60
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
BURST_REQUEST_ENABLE#
#define BURST_REQUEST_ENABLEValue:
1
61
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
BURST_REQUEST_DISABLE#
#define BURST_REQUEST_DISABLEValue:
0
62
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
CHANNEL_PRIO_DISABLE#
#define CHANNEL_PRIO_DISABLEValue:
0
63
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
CHANNEL_PRIO_ENABLE#
#define CHANNEL_PRIO_ENABLEValue:
1
64
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
PERIPHERAL_ACK_DISABLE#
#define PERIPHERAL_ACK_DISABLEValue:
0
65
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
PERIPHERAL_REQUEST_DISABLE#
#define PERIPHERAL_REQUEST_DISABLEValue:
0
66
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
PERIPHERAL_REQUEST_ENABLE#
#define PERIPHERAL_REQUEST_ENABLEValue:
1
67
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
REQUEST_MASK_DISABLE#
#define REQUEST_MASK_DISABLEValue:
0
68
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
NEXT_BURST_ENABLE#
#define NEXT_BURST_ENABLEValue:
70
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
NEXT_BURST_DISABLE#
#define NEXT_BURST_DISABLEValue:
0
72
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
SOURCE_PROTECT_CONTROL_DISABLE#
#define SOURCE_PROTECT_CONTROL_DISABLEValue:
0x000
73
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h
DESTINATION_PROTECT_CONTROL_DISABLE#
#define DESTINATION_PROTECT_CONTROL_DISABLEValue:
0x000
74
of file components/device/silabs/si91x/mcu/drivers/unified_api/inc/sl_si91x_dma.h