代码拉取完成,页面将自动刷新
DDMA(Device Direct Memory Access)是E2000提供的一个通用DMA控制模块,支持典型的DMA操作,提供多个DMA通道,多个通道可以同时工作,独立配置给不同外设使用
FDDMA 驱动程序主要完成 DDMA 模块的初始化,DDMA通道的分配与释放。 相关源文件为:
fddma
.
├── fddma.c
├── fddma.h
├── fddma_bdl.c
├── fddma_bdl.h
├── fddma_g.c
├── fddma_hw.c
├── fddma_hw.h
├── fddma_intr.c
├── fddma_selftest.c
└── fddma_sinit.c
其中fddma_bdl.c与fddma_bdl.h是用于I2S相关用例的,仅在DDMA2等控制器上才能使用BDL功能
以下部分将指导您完成 FDDMA 驱动的软件配置:
typedef struct
{
u32 id; /* DDMA ctrl id */
uintptr base_addr; /* DDMA ctrl base address */
u32 irq_num; /* DDMA ctrl interrupt id */
u32 irq_prority; /* DDMA ctrl interrupt priority */
u32 caps;
} FDdmaConfig; /* DDMA instance configuration */
typedef struct
{
u32 slave_id; /* Perpherial slave id for DDMA */
FDdmaChanRequst req_mode; /* DDMA transfer direction */
uintptr ddr_addr; /* DDMA channel DDR address, could be source or destination, physical address */
u32 dev_addr; /* DDMA channel Perpherial base address, could be source or destination */
u32 trans_len; /* DDMA channel transfer length */
#define FDDMA_MIN_TRANSFER_LEN 4 /* min bytes in transfer */
u32 timeout; /* timeout = 0 means no use DMA timeout */
/* BDL模式,目前只针对I2S */
uintptr first_desc_addr; /* BDL描述符列表首地址-物理地址 */
u32 valid_desc_num; /* 需要使用的BDL描述符个数,从BDL描述符列表第一个描述符开始计数 */
} FDdmaChanConfig; /* DDMA channel instance */
typedef struct _FDdmaChanIrq
{
FDdmaChanIndex channel_id; /* 信息所属DDMA通道的ID */
FDdma *ddma_instance_p; /* 信息所属DDMA通道所属的DDMA控制器实例 */
void *evt_handler_args[FDDMA_NUM_OF_CHAN_EVT]; /* DDMA通道事件回调函数输入参数 */
FDdmaChanEvtHandler evt_handlers[FDDMA_NUM_OF_CHAN_EVT]; /* DDMA通道事件回调函数 */
} FDdmaChanIrq; /* DDMA通道中断回调信息 */
typedef struct _FDdma
{
FDdmaConfig config; /* DDMA控制器配置 */
u32 is_ready; /* DDMA控制器初始化是否完成 */
u32 bind_status; /* DDMA通道绑定标志位,第几位表示第几通道已经被外设绑定并进行过相关配置 */
FDdmaChanIrq chan_irq_info[FDDMA_NUM_OF_CHAN]; /* DDMA通道事件回调信息集合 */
} FDdma; /* DDMA instance */
const FDdmaConfig *FDdmaLookupConfig(u32 instance_id);
Note:
Input:
Return:
FError FDdmaCfgInitialize(FDdma *const instance, const FDdmaConfig *controller_config);
Note:
Input:
Return:
void FDdmaDeInitialize(FDdma *const instance_p);
Note:
Input:
Return:
FError FDdmaChanConfigure(FDdma *const instance_p, FDdmaChanIndex channel_id , const FDdmaChanConfig *channel_config);
Note:
Input:
Return:
FError FDdmaChanDeconfigure(FDdma *const instance_p, FDdmaChanIndex channel_id);
Note:
Input:
Return:
void FDdmaChanActive(FDdma *const instance_p, FDdmaChanIndex channel_id);
Note:
Input:
Return:
void FDdmaChanDeactive(FDdma *const instance_p, FDdmaChanIndex channel_id);
Note:
Input:
Return:
void FDdmaStart(FDdma *const instance_p);
Note:
Input:
Return:
void FDdmaStop(FDdma *const instance_p);
Note:
Input:
Return:
void FDdmaIrqHandler(s32 vector, void *args)
Note:
Input:
Return:
void FDdmaRegisterChanEvtHandler(FDdma *const instance_p,
FDdmaChanIndex channel_id,
FDdmaChanEvt evt,
FDdmaChanEvtHandler handler,
void *handler_arg);
Note:
Input:
Return:
FError FDdmaBDLSetDesc(FDdmaBdlDesc *const first_desc_addr_p, FDdmaBdlDescConfig const *bdl_desc_config_p);
Note:
Input:
Return:
FError FDdmaChanBdlConfigure(FDdma *const instance, FDdmaChanIndex channel_id, const FDdmaChanConfig *channel_config_p);
Note:
Input:
Return:
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。