1.实验目标
本实验通过调用DMA相关库函数实现RAM到RAM的快速数据传输,工程中举了4种情况传数.通过串口可以观察相应的现象。
2.实验准备
硬件搭建:ZW-HC32F460-BZ标准版开发板1套
软件搭建:MDK5.22
3.驱动代码
【外围DMA初始化函数】
函数原型: u8 DMAInt( void )
功能说明: 外围DMA的初始化,初始一个从源地址到目标地址的传送,同时引起传送结束中断
输入参数: DesAddr,传输的目标地址
输出参数: 0为成功,其它为不成功
特殊备注: 源地址,目标地址,数据宽度等都可以在头文件中配置.
u8 DMAInt( DMA_S *dmas )
{
u32 i;
stc_dma_config_t stcDmaCfg;
MEM_ZERO_STRUCT( stcDmaCfg );
DMAisrInt( dmas->BtcCb, dmas->TcCb );
/* Disable DMA1. */
DMA_Cmd( DMA_UNIT, Disable );
DMA_ClearIrqFlag( DMA_UNIT, DMA_CHX, BlkTrnCpltIrq ); //清块传输完成中断
DMA_ClearIrqFlag( DMA_UNIT, DMA_CHX, TrnCpltIrq ); //清传输完成中断
/* set the destination address */
stcDmaCfg.u32DesAddr = ( u32 )( dmas->DesAddr ); //设置源地址
stcDmaCfg.u32SrcAddr = ( u32 )( dmas->SrcAddr );
stcDmaCfg.u16BlockSize = dmas->BlockSize; //配置块的尺寸为1个数据,数据的宽度由.CHxCTL->HSIZE决定
//最大1024个数据
stcDmaCfg.u16TransferCnt = dmas->TransferCnt; //传多少个块,最大65535
//通道配置
stcDmaCfg.stcDmaChCfg.enLlpEn = Disable; //连锁传输配置位关闭
stcDmaCfg.stcDmaChCfg.enSrcRptEn = Disable; //源地址重复传输始能 是否允许重载源地址初值
stcDmaCfg.stcDmaChCfg.enDesRptEn = Disable; //目标重复传输始能 是否允许重载目标地址初值
//设置源地址和目标地址模式
stcDmaCfg.stcDmaChCfg.enSrcInc = ( en_dma_address_mode_t )DMA_SRC_ADDR_MODE; //地址增长模式
stcDmaCfg.stcDmaChCfg.enDesInc = ( en_dma_address_mode_t )DMA_DES_ADDR_MODE;
//开启通道中断
stcDmaCfg.stcDmaChCfg.enIntEn = ( en_functional_state_t )DMA_INT_EN; //Enable; //对应通道的中断使能
for( i = 0; i < 2; i ++ )
{
if( dmas->width & ( 0x01l <