⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hw_dwdma.c

📁 瑞星微公司RK27XX系列芯片的SDK开发包
💻 C
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File :  hw_Dwdma.c
Desc :  Dwdma配置

Author :  nzy
Date :
Notes :

$Log :
*********************************************************************/
#include "hw_include.h"
#include "hw_Dwdma.h"
#include "hwapi_Dwdma.h"



/*---------------------------------------------------------
Name  :  DWDMA_Init
Dec   :  DWDMA初始化
Params:
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_Init(void)
{
    WriteReg32(DWDMA_ChEnReg, 0xf00);   //clear all channel
    WriteReg32(DWDMA_ClearBlock, 0xf);
    WriteReg32(DWDMA_DmaCfgReg, 0x1);
}


/*---------------------------------------------------------
Name  :  DWDMA_Transmit
Dec   :  DWDMA上电初始化
Params:
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_Transmit(DWDMA_CHN Channel, DWDMALLP *LLP, DWDMA_HS HandShack)
{
    WriteReg32(DWDMA_SAR(Channel),  0);
    WriteReg32(DWDMA_DAR(Channel),  0);
    WriteReg32(DWDMA_LLP(Channel), (UINT32)LLP);
    WriteReg32(DWDMA_CTLL(Channel), b_CTLL_MEM2PER_DWDMA | b_CTLL_DMS_AM1 |
               b_CTLL_SRC_GATHER_EN |//b_CTLL_DST_SCATTER_EN|
               b_CTLL_DST_TR_WIDTH_32 | b_CTLL_SRC_TR_WIDTH_32 |
               b_CTLL_DEST_MSIZE_16 | b_CTLL_SRC_MSIZE_16 |
               b_CTLL_LLP_DST_EN | b_CTLL_LLP_SRC_EN);
    WriteReg32(DWDMA_CTLH(Channel), 1);
    WriteReg32(DWDMA_CFGL(Channel), b_CFGL_CH_PRIOR(7));
    WriteReg32(DWDMA_CFGH(Channel), b_CFGH_DEST_PER(HandShack) | b_CFGH_PROTCTL);
    WriteReg32(DWDMA_SGR(Channel),  13 << 20);
    //WriteReg32(DWDMA_DSR(Channel),  1024<<20);
    WriteReg32(DWDMA_ChEnReg,       b_DWDMA_CHEN(Channel));
}


/*---------------------------------------------------------
Name  :  DWDMA_LLPCfg
Dec   :  配置LLP所指向的LLI
Params:  CurLLP   -> 表示当前LLP所指
         SourAddr -> 源地址
         DestAddr -> 目的地址
         BSize    -> 单次传输的32位数据量
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_LLPCfg(UINT32 SourAddr,  UINT32 DestAddr,
                  DWDMALLP *CurLLP, UINT32 BSize)
{
    CurLLP->Sar   = SourAddr;
    CurLLP->Dar   = DestAddr;
    CurLLP->LLP   = CurLLP + 1;
    CurLLP->CtrlH = BSize;
    CurLLP->CtrlL = b_CTLL_MEM2PER_DWDMA | b_CTLL_DMS_AM1 |
                    b_CTLL_SRC_GATHER_EN |//b_CTLL_DST_SCATTER_EN|
                    b_CTLL_DST_TR_WIDTH_32 | b_CTLL_SRC_TR_WIDTH_32 |
                    b_CTLL_DEST_MSIZE_16 | b_CTLL_SRC_MSIZE_16 |
                    b_CTLL_LLP_DST_EN | b_CTLL_LLP_SRC_EN;
}


/*---------------------------------------------------------
Name  :  DWDMA_LLPEnd
Dec   :  结束LLP的指向
Params:  CurLLP   -> 表示当前LLP所指
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_LLPEnd(DWDMALLP *CurLLP)
{
    CurLLP->CtrlL &= (~b_CTLL_LLP_DST_EN) & (~b_CTLL_LLP_SRC_EN);
}


/*---------------------------------------------------------
Name  :  DWDMA_LLPChange
Dec   :  改变LLP的指向
Params:  CurLLP   -> 表示当前LLP所指
         NextLLP  -> 表示LLP的下个链接
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_LLPChange(DWDMALLP *CurLLP, DWDMALLP *NextLLP)
{
    CurLLP->LLP   = NextLLP;
}


/*---------------------------------------------------------
Name  :  DWDMA_DisChannel
Dec   :  停止使用DMA通道
Params:  Channel -> 通道号
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_DisChannel(DWDMA_CHN Channel)
{
    if (Channel == CH0AND1)
        WriteReg32(DWDMA_ChEnReg, 0x300);
    else
        WriteReg32(DWDMA_ChEnReg, 0x100 << Channel);
}


/*---------------------------------------------------------
Name  :  DWDMA_EnableDSR
Dec   :  目标地址跳跃使能
Params:
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_EnableDSR(DWDMALLP *CurLLP)
{
    CurLLP->CtrlL |= b_CTLL_DST_SCATTER_EN;
}

/*---------------------------------------------------------
Name  :  DWDMA_DestScatter
Dec   :  目标地址跳跃设置
Params:
Return:
Author:  nzy
Date  :
-----------------------------------------------------------*/
void DWDMA_DestScatter(DWDMA_CHN Channel, UINT32 Successive, UINT32 Interval)
{
    WriteReg32(DWDMA_DSR(Channel), Interval | Successive << 20);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -