hal_dma.h File Reference

Header file containing functions prototypes of DMA HAL library. More...

#include "ll_dma.h"
#include "hal_def.h"
#include "hal_pwr_mgmt.h"
#include <stdbool.h>

Go to the source code of this file.

Classes

struct  _dma_lock_config
 DMA LOCK Structure definition. More...
 
struct  _dma_init
 DMA Configuration Structure definition. More...
 
struct  _dma_handle
 DMA handle Structure definition. More...
 

Macros

#define HAL_DMA_ERROR_NONE   ((uint32_t)0x00000000U)
 
#define HAL_DMA_ERROR_TE   ((uint32_t)0x00000001U)
 
#define HAL_DMA_ERROR_NO_XFER   ((uint32_t)0x00000004U)
 
#define HAL_DMA_ERROR_TIMEOUT   ((uint32_t)0x00000020U)
 
#define HAL_DMA_ERROR_INVALID_PARAM   ((uint32_t)0x00000008U)
 
#define DMA0_REQUEST_CTE   LL_DMA0_PERIPH_CTE
 
#define DMA0_REQUEST_PWM0   LL_DMA0_PERIPH_PWM0
 
#define DMA0_REQUEST_SPIM_TX   LL_DMA0_PERIPH_SPIM_TX
 
#define DMA0_REQUEST_SPIM_RX   LL_DMA0_PERIPH_SPIM_RX
 
#define DMA0_REQUEST_SPIS_TX   LL_DMA0_PERIPH_SPIS_TX
 
#define DMA0_REQUEST_SPIS_RX   LL_DMA0_PERIPH_SPIS_RX
 
#define DMA0_REQUEST_UART0_TX   LL_DMA0_PERIPH_UART0_TX
 
#define DMA0_REQUEST_UART0_RX   LL_DMA0_PERIPH_UART0_RX
 
#define DMA0_REQUEST_UART1_TX   LL_DMA0_PERIPH_UART1_TX
 
#define DMA0_REQUEST_UART1_RX   LL_DMA0_PERIPH_UART1_RX
 
#define DMA0_REQUEST_SNSADC   LL_DMA0_PERIPH_SNSADC
 
#define DMA0_REQUEST_I2C0_TX   LL_DMA0_PERIPH_I2C0_TX
 
#define DMA0_REQUEST_I2C0_RX   LL_DMA0_PERIPH_I2C0_RX
 
#define DMA0_REQUEST_I2C1_TX   LL_DMA0_PERIPH_I2C1_TX
 
#define DMA0_REQUEST_I2C1_RX   LL_DMA0_PERIPH_I2C1_RX
 
#define DMA0_REQUEST_MEM   LL_DMA0_PERIPH_MEM
 
#define DMA_MEMORY_TO_MEMORY   LL_DMA_DIRECTION_MEMORY_TO_MEMORY
 
#define DMA_MEMORY_TO_PERIPH   LL_DMA_DIRECTION_MEMORY_TO_PERIPH
 
#define DMA_PERIPH_TO_MEMORY   LL_DMA_DIRECTION_PERIPH_TO_MEMORY
 
#define DMA_PERIPH_TO_PERIPH   LL_DMA_DIRECTION_PERIPH_TO_PERIPH
 
#define DMA_SRC_INCREMENT   LL_DMA_SRC_INCREMENT
 
#define DMA_SRC_DECREMENT   LL_DMA_SRC_DECREMENT
 
#define DMA_SRC_NO_CHANGE   LL_DMA_SRC_NO_CHANGE
 
#define DMA_DST_INCREMENT   LL_DMA_DST_INCREMENT
 
#define DMA_DST_DECREMENT   LL_DMA_DST_DECREMENT
 
#define DMA_DST_NO_CHANGE   LL_DMA_DST_NO_CHANGE
 
#define DMA_SDATAALIGN_BYTE   LL_DMA_SDATAALIGN_BYTE
 
#define DMA_SDATAALIGN_HALFWORD   LL_DMA_SDATAALIGN_HALFWORD
 
#define DMA_SDATAALIGN_WORD   LL_DMA_SDATAALIGN_WORD
 
#define DMA_DDATAALIGN_BYTE   LL_DMA_DDATAALIGN_BYTE
 
#define DMA_DDATAALIGN_HALFWORD   LL_DMA_DDATAALIGN_HALFWORD
 
#define DMA_DDATAALIGN_WORD   LL_DMA_DDATAALIGN_WORD
 
#define DMA_PRIORITY_LOW   LL_DMA_PRIORITY_0
 
#define DMA_PRIORITY_MEDIUM   LL_DMA_PRIORITY_1
 
#define DMA_PRIORITY_HIGH   LL_DMA_PRIORITY_2
 
#define DMA_PRIORITY_VERY_HIGH   LL_DMA_PRIORITY_3
 
#define DMA_HAL_CHANNEL_LOCK_ENABLE   LL_DMA_LOCK_CH_ENABLE
 
#define DMA_HAL_CHANNEL_LOCK_DISABLE   LL_DMA_LOCK_CH_DISABLE
 
#define DMA_HAL_CHANNEL_LOCK_TFR   LL_DMA_LOCK_CH_LEVEL_TFR
 
#define DMA_HAL_CHANNEL_LOCK_BLK   LL_DMA_LOCK_CH_LEVEL_BLK
 
#define DMA_HAL_CHANNEL_LOCK_TRANS   LL_DMA_LOCK_CH_LEVEL_TRANS
 
#define DMA_HAL_BUS_LOCK_ENABLE   LL_DMA_LOCK_BUS_ENABLE
 
#define DMA_HAL_BUS_LOCK_DISABLE   LL_DMA_LOCK_BUS_DISABLE
 
#define DMA_HAL_BUS_LOCK_TFR   LL_DMA_LOCK_BUS_LEVEL_TFR
 
#define DMA_HAL_BUS_LOCK_BLK   LL_DMA_LOCK_BUS_LEVEL_BLK
 
#define DMA_HAL_BUS_LOCK_TRANS   LL_DMA_LOCK_BUS_LEVEL_TRANS
 
#define IS_DMA_ALL_P_INSTANCE(__p_instance__)   (((__p_instance__) == DMA0))
 Check if DMA instance is valid. More...
 
#define IS_DMA_ALL_INSTANCE(__instance__)
 Check if DMA channel instance is valid. More...
 
#define IS_DMA_ALL_REQUEST(__REQUEST__)
 Check if DMA request is valid. More...
 
#define IS_DMA_DIRECTION(__DIRECTION__)
 Check if DMA direction is valid. More...
 
#define IS_DMA_BUFFER_SIZE(__SIZE__)   (((__SIZE__) >= 0x1) && ((__SIZE__) <= 0xFFF))
 Check if DMA buffer size is valid. More...
 
#define IS_DMA_SOURCE_INC_STATE(__STATE__)
 Check if DMA source address increment state is valid. More...
 
#define IS_DMA_DESTINATION_INC_STATE(__STATE__)
 Check if DMA destination address increment state is valid. More...
 
#define IS_DMA_SOURCE_DATA_SIZE(__SIZE__)
 Check if DMA source data size is valid. More...
 
#define IS_DMA_DESTINATION_DATA_SIZE(__SIZE__)
 Check if DMA destination data size is valid. More...
 
#define IS_DMA_PRIORITY(__PRIORITY__)
 Check if DMA priority is valid. More...
 

Typedefs

typedef struct _dma_lock_config dma_lock_config
 DMA LOCK Structure definition. More...
 
typedef struct _dma_init dma_init_t
 DMA Configuration Structure definition. More...
 
typedef struct _dma_handle dma_handle_t
 DMA handle Structure definition. More...
 

Enumerations

enum  hal_dma_state_t {
  HAL_DMA_STATE_RESET = 0x00U,
  HAL_DMA_STATE_READY = 0x01U,
  HAL_DMA_STATE_BUSY = 0x02U,
  HAL_DMA_STATE_TIMEOUT = 0x03U,
  HAL_DMA_STATE_ERROR = 0x04U
}
 HAL DMA State Enumerations definition. More...
 
enum  dma_channel_t {
  DMA_Channel0 = 0U,
  DMA_Channel1 = 1U,
  DMA_Channel2 = 2U,
  DMA_Channel3 = 3U,
  DMA_Channel4 = 4U,
  DMA_Channel_NUM_MAX
}
 HAL DMA Channel Enumerations definition. More...
 
enum  hal_dma_callback_id_t {
  HAL_DMA_XFER_TFR_CB_ID = 0x00,
  HAL_DMA_XFER_BLK_CB_ID = 0x01,
  HAL_DMA_XFER_ERROR_CB_ID = 0x02,
  HAL_DMA_XFER_ABORT_CB_ID = 0x03,
  HAL_DMA_XFER_ALL_CB_ID = 0x04
}
 HAL DMA Callback ID Enumerations definition. More...
 

Functions

hal_status_t hal_dma_init (dma_handle_t *p_dma)
 Initialize the DMA according to the specified parameters in the dma_init_t and initialize the associated handle. More...
 
hal_status_t hal_dma_deinit (dma_handle_t *p_dma)
 De-initialize the DMA peripheral. More...
 
hal_status_t hal_dma_start (dma_handle_t *p_dma, uint32_t src_address, uint32_t dst_address, uint32_t data_length)
 Start the DMA Transfer. More...
 
hal_status_t hal_dma_start_lock (dma_handle_t *p_dma, uint32_t src_address, uint32_t dst_address, uint32_t data_length, dma_lock_config *lock_config)
 Start the DMA Transfer whit channel lock and bus lock. More...
 
hal_status_t hal_dma_start_it_dc (dma_handle_t *p_dma, uint32_t src_address, uint32_t dst_address, uint32_t data_length)
 Start the DMA Transfer with interrupt enabled & Channel Diabled. More...
 
hal_status_t hal_dma_start_it (dma_handle_t *p_dma, uint32_t src_address, uint32_t dst_address, uint32_t data_length)
 Start the DMA Transfer with interrupt enabled & Channel Enabled. More...
 
hal_status_t hal_dma_start_it_lock (dma_handle_t *p_dma, uint32_t src_address, uint32_t dst_address, uint32_t data_length, dma_lock_config *lock_config)
 Start the DMA Transfer with interrupt enabled、channel lock and bus lock. More...
 
hal_status_t hal_dma_abort (dma_handle_t *p_dma)
 Abort the DMA Transfer. More...
 
hal_status_t hal_dma_abort_it (dma_handle_t *p_dma)
 Aborts the DMA Transfer in Interrupt mode. More...
 
hal_status_t hal_dma_poll_for_transfer (dma_handle_t *p_dma, uint32_t timeout)
 Polling for transfer complete. More...
 
void hal_dma_irq_handler (dma_handle_t *p_dma)
 Handle DMA interrupt request. More...
 
hal_status_t hal_dma_register_callback (dma_handle_t *p_dma, hal_dma_callback_id_t id, void(*callback)(dma_handle_t *p_dma))
 Register callbacks. More...
 
hal_status_t hal_dma_unregister_callback (dma_handle_t *p_dma, hal_dma_callback_id_t id)
 UnRegister callbacks. More...
 
hal_dma_state_t hal_dma_get_state (dma_handle_t *p_dma)
 Return the DMA hande state. More...
 
uint32_t hal_dma_get_error (dma_handle_t *p_dma)
 Return the DMA error code. More...
 
void hal_dma_suspend_reg (dma_handle_t *p_dma)
 Suspend some registers related to DMA configuration before sleep. More...
 
void hal_dma_resume_reg (dma_handle_t *p_dma)
 Restore some registers related to DMA configuration after sleep. This function must be used in conjunction with the hal_dma_resume_reg(). More...
 
hal_pm_status_t hal_pm_dma_suspend (dma_handle_t *p_dma)
 Suspend the register of the specified DMA channel. More...
 
void hal_pm_dma_resume (dma_handle_t *p_dma)
 Resume the register of the specified DMA channel. More...
 
void hal_dma_suspend_channel (dma_handle_t *p_dma, uint32_t channel)
 Suspend the register of the specified DMA channel. More...
 
void hal_dma_resume_channel (dma_handle_t *p_dma, uint32_t channel)
 Resume the register of the specified DMA channel. More...
 

Detailed Description

Header file containing functions prototypes of DMA HAL library.

Author
BLE Driver Team
Attention
#####Copyright (c) 2019 GOODIX All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of GOODIX nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Definition in file hal_dma.h.