NULL
This commit is contained in:
206
library/inc/lh32m0g3x_dma.h
Executable file
206
library/inc/lh32m0g3x_dma.h
Executable file
@@ -0,0 +1,206 @@
|
||||
/******************************************************************************
|
||||
* 版权所有:苏州领慧立芯科技有限公司
|
||||
* Copyright (c) 2020-2025 Suzhou Legendsemi Technology Co., Ltd.
|
||||
******************************************************************************
|
||||
* All rights reserved. Distributed under MIT license.
|
||||
* The file is encoded in UTF-8 without signature.
|
||||
* @file lh32m0g30x_dac.h
|
||||
* @version 2025-09-22
|
||||
******************************************************************************/
|
||||
|
||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||
#ifndef __LH32M0G3x_DMA_H
|
||||
#define __LH32M0G3x_DMA_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* Includes ------------------------------------------------------------------*/
|
||||
#include "lh32m0xx_lhl.h"
|
||||
|
||||
/* Defines -------------------------------------------------------------------*/
|
||||
/**
|
||||
* @brief DMA传输模式
|
||||
* @note EMLM默认始终开启,以实现多种地址调节方式
|
||||
*/
|
||||
typedef enum {
|
||||
|
||||
DMA_MEMORY_TO_MEMORY = 0u, /*!< 源地址和目的地址主循环内自动递增,结束后自动恢复起始地址 */
|
||||
|
||||
DMA_PERIPH_TO_MEMORY, /*!< 源地址次循环内递增,次/主循环结束后自动恢复起始地址;
|
||||
* 目的地址主循环内递增,主循环结束后自动恢复起始地址 */
|
||||
|
||||
DMA_MEMORY_TO_PERIPH, /*!< 源地址主循环内递增,主循环结束后自动恢复起始地址;
|
||||
* 目的地址次循环内递增,次/主循环结束后自动恢复起始地址 */
|
||||
|
||||
DMA_PERIPH_TO_PERIPH, /*!< 源地址和目的地址次循环内递增,次/主循环结束后自动恢复起始地址 */
|
||||
|
||||
DMA_FIFO_TO_MEMORY, /*!< 源地址始终固定不变;目的地址主循环内自动递增,结束后自动恢复起始地址 */
|
||||
|
||||
DMA_MEMROY_TO_FIFO, /*!< 源地址主循环内自动递增,结束后自动恢复起始地址;目的地址始终固定不变 */
|
||||
|
||||
} DMA_TRANS_TYPE_t;
|
||||
|
||||
/**
|
||||
* @brief DMA_Memory_data_size DMA Memory data size
|
||||
* @note 为了与正数区分,负数定义为正数加1取反,实际使用时注意额外计算
|
||||
*/
|
||||
typedef enum {
|
||||
DMA_DATA_WIDTH_1B = 0, /*!< Memory data alignment : Byte, 8-bit */
|
||||
DMA_DATA_WIDTH_2B = 1, /*!< Memory data alignment : HalfWord, 16-bit */
|
||||
DMA_DATA_WIDTH_4B = 2, /*!< Memory data alignment : Word, 32-bit */
|
||||
DMA_DATA_WIDTH_16B = 4, /*!< Memory data alignment : 16-byte */
|
||||
DMA_DATA_WIDTH_32B = 5, /*!< Memory data alignment : 32-byte */
|
||||
// DMA_DATA_WIDTH_N1B = -1, /*!< Memory data alignment : Negtive Byte, 8-bit */
|
||||
// DMA_DATA_WIDTH_N2B = -2, /*!< Memory data alignment : Negtive HalfWord, 16-bit */
|
||||
// DMA_DATA_WIDTH_N4B = -3, /*!< Memory data alignment : Negtive Word, 32-bit */
|
||||
// DMA_DATA_WIDTH_N16B = -5, /*!< Memory data alignment : Negtive 16-byte */
|
||||
// DMA_DATA_WIDTH_N32B = -6, /*!< Memory data alignment : Negtive 32-byte */
|
||||
} DMA_DATA_WIDTH_t;
|
||||
|
||||
typedef enum {
|
||||
DMA_HARDWARE_REQUEST = 0x0u,
|
||||
DMA_SOFTWARE_REQUEST = 0x1u,
|
||||
} DMA_REQ_t;
|
||||
|
||||
typedef enum {
|
||||
DMA_CHANNEL_0 = 0x0u,
|
||||
DMA_CHANNEL_1 = 0x1u,
|
||||
DMA_CHANNEL_2 = 0x2u,
|
||||
DMA_CHANNEL_3 = 0x3u,
|
||||
} DMA_CHANNEL_t;
|
||||
|
||||
typedef enum {
|
||||
TO_DMA_CHANNEL_0 = 0x0u,
|
||||
TO_DMA_CHANNEL_1 = 0x1u,
|
||||
TO_DMA_CHANNEL_2 = 0x2u,
|
||||
TO_DMA_CHANNEL_3 = 0x3u,
|
||||
TO_DMA_CHANNEL_NONE = 0x10u, /* 参数NONE仅供Chaining_Channel调用 */
|
||||
} DMA_CHAINING_t;
|
||||
|
||||
typedef enum {
|
||||
DMA_BANDWIDTH_FULL = 0x0u,
|
||||
DMA_BANDWIDTH_MEDIUM = 0x2u,
|
||||
DMA_BANDWIDTH_LOW = 0x3u,
|
||||
} DMA_BANDWIDTH_LIMIT_t;
|
||||
|
||||
typedef enum {
|
||||
DMA_IT_MAJOR = 0x2u,
|
||||
DMA_IT_HALF = 0x4u,
|
||||
} DMA_IT_t;
|
||||
|
||||
typedef enum {
|
||||
DMA_DIRECT_MODE = 0x1u, /*!< 直接模式 */
|
||||
|
||||
DMA_CHAINING_MODE = 0x2u, /*!< 链式模式 */
|
||||
|
||||
DMA_SCATTER_GATHER_MODE = 0x4u, /*!< 分散聚合模式 */
|
||||
} DMA_MODE_t;
|
||||
|
||||
typedef enum {
|
||||
DMA_CYCLIC_TRANSMISSION = 0x0u, /*!< 循环模式,传输Repetition次数后重新开始,
|
||||
* 源和目的地址指针自动恢复到初始值*/
|
||||
DMA_SINGLE_TRANSMISSION = 0x1u, /*!< 单次模式,传输Repetition次数后自动停止,
|
||||
* 源和目的地址指针自动恢复到初始值 */
|
||||
DMA_INTERVAL_TRANSMISSION = 0x10u, /*!< 间隔模式,传输Repetition次数后重新开始,
|
||||
* 传输间隔由参数Interval决定,完成后源和目的地址指针自动恢复到初始值 */
|
||||
} DMA_TRANS_MODE_t;
|
||||
|
||||
/**
|
||||
* @brief DMA 初始化参数结构体
|
||||
*/
|
||||
typedef struct {
|
||||
|
||||
uint32_t Src_Address; /*!< 源地址 */
|
||||
|
||||
uint32_t Dest_Address; /*!< 目标地址 */
|
||||
|
||||
uint16_t Data_Size; /*!< 以源数据宽度为单位的DMA传输数据量 Max=256Word/1024Byte */
|
||||
|
||||
uint16_t Repetition; /*!< 当DMA为重复模式下的循环次数:Min=1;Max=2^9(ELINK=1)/2^15(ELINK=0)*/
|
||||
|
||||
int32_t TCD_Address; /*!< DMA_SCATTER_GATHER_MODE下,向下一个加载的TCD链表 */
|
||||
|
||||
FunctionalState INT_Major; /*!< DMA_SCATTER_GATHER_MODE下,使能或禁用主中断 */
|
||||
|
||||
FunctionalState INT_Half; /*!< DMA_SCATTER_GATHER_MODE下,使能或禁用半中断 */
|
||||
|
||||
FunctionalState Auto_Start; /*!< DMA_SCATTER_GATHER_MODE下,使能或禁用通道自启动功能*/
|
||||
|
||||
DMA_BANDWIDTH_LIMIT_t Bandwidth; /*!< DMA_SCATTER_GATHER_MODE下,带宽控制位 */
|
||||
|
||||
DMA_CHAINING_t Chaining; /*!< DMA_CHAINING_MODE下,指向下一个链式启动的通道 */
|
||||
|
||||
DMA_TRANS_MODE_t Trans_Mode; /*!< DMA传输模式:单次,重复,间隔 */
|
||||
|
||||
DMA_DATA_WIDTH_t Data_Width; /*!< 数据宽度 */
|
||||
|
||||
DMA_TRANS_TYPE_t Direction; /*!< 传输方式:外设<->内存等六种方式,地址偏移由Direction和DataWidth共同决定 */
|
||||
|
||||
int16_t Src_Interval_Factor; /*!< 在间隔模式下,单次DMA操作后,源地址偏移量的系数 */
|
||||
|
||||
int16_t Dest_Interval_Factor; /*!< 在间隔模式下,单次DMA操作后,目的地址偏移量的系数 */
|
||||
|
||||
} DMA_InitTypeDef;
|
||||
|
||||
/**
|
||||
* @brief DMA Handle 操作句柄
|
||||
*/
|
||||
typedef struct {
|
||||
|
||||
DMA_CHANNEL_t Channel; /*!< DMA Channel Instance */
|
||||
|
||||
DMA_MODE_t Mode; /*!< DMA模式选择 */
|
||||
|
||||
DMA_REQ_t Request; /*!< DMA请求源 */
|
||||
|
||||
uint8_t TCD_Count; /*!< DMA_SCATTER_GATHER_MODE下,TCD描述符数量 */
|
||||
|
||||
DMA_DES_N_TypeDef* TCD_List; /*!< DMA_SCATTER_GATHER_MODE下,TCD描述符指针 */
|
||||
|
||||
DMA_InitTypeDef* TCD_Init; /*!< DMA_SCATTER_GATHER_MODE下,DMA初始化参数结构体指针 */
|
||||
|
||||
DMA_InitTypeDef Init; /*!< DMA初始化参数结构体 */
|
||||
|
||||
} DMA_HandleTypeDef;
|
||||
|
||||
/* Declaration ---------------------------------------------------------------*/
|
||||
|
||||
LHL_StatusTypeDef LHL_DMA_Init(DMA_HandleTypeDef* handle);
|
||||
|
||||
void LHL_DMA_Start(DMA_HandleTypeDef* handle);
|
||||
|
||||
void LHL_DMA_Stop(DMA_HandleTypeDef* handle);
|
||||
|
||||
void LHL_DMA_SetChainingChannel(DMA_HandleTypeDef* handle, DMA_CHANNEL_t ChainingChannel, FunctionalState NewState);
|
||||
|
||||
void LHL_DMA_SetELink(DMA_HandleTypeDef* handle, DMA_CHANNEL_t LinkedChannel, FunctionalState NewState);
|
||||
|
||||
void LHL_DMA_SetMLink(DMA_HandleTypeDef* handle, DMA_CHANNEL_t LinkedChannel, FunctionalState NewState);
|
||||
|
||||
void LHL_DMA_ITConfig(DMA_HandleTypeDef* handle, uint32_t DMA_IT, FunctionalState NewState);
|
||||
|
||||
DMA_IT_t LHL_DMA_GetPending(DMA_CHANNEL_t channel);
|
||||
|
||||
void LHL_DMA_ClearPending(DMA_CHANNEL_t channel);
|
||||
|
||||
LHL_StatusTypeDef LHL_DMA_GenerateTCD(DMA_HandleTypeDef* handle, DMA_InitTypeDef* DMA_Init, DMA_DES_N_TypeDef* tcd);
|
||||
|
||||
LHL_StatusTypeDef LHL_DMA_CopyTCD(DMA_HandleTypeDef* handle, DMA_DES_N_TypeDef* tcd);
|
||||
|
||||
LHL_StatusTypeDef LHL_DMA_SGAInit(DMA_HandleTypeDef* handle, DMA_DES_N_TypeDef* tcd);
|
||||
|
||||
uint32_t LHL_DMA_GetDestAddress(DMA_CHANNEL_t channel);
|
||||
|
||||
uint16_t LHL_DMA_GetCiter(DMA_CHANNEL_t channel);
|
||||
|
||||
uint16_t LHL_DMA_GetBiter(DMA_CHANNEL_t channel);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
/*********************************End of File**********************************/
|
||||
Reference in New Issue
Block a user