hal_dma.c
来自「最新版IAR FOR ARM(EWARM)5.11中的代码例子」· C语言 代码 · 共 121 行
C
121 行
//-----------------------------------------------------------------------------
// HAL_DMA
//-----------------------------------------------------------------------------
#include "hal_dma.h"
#include <stdlib.h>
//-----------------------------------------------------------------------------
void DMA_Start(DMA_TypeDef *channel){
channel->DMACtrl |= DMA_Enable;
}
//-----------------------------------------------------------------------------
int DMA_Init(DMA_TypeDef *channel, u32 count){
channel->DMAMax = count;
channel->DMACtrl = (DMA_SoSize & DMA_SoSize_32)
| (DMA_DeSize & DMA_DeSize_32) | (DMA_SoBurst & DMA_SoBurst_4)|
DMA_Mem2Mem | (DMA_DeInc & DMA_DeInc_Inc) | (DMA_SoInc & DMA_SoInc_Inc);
DMA_CH->DMAMask = 0x0;
DMA_CH->DMAClr = DMA_DMAClr_Mask;
return 1;
}
//-----------------------------------------------------------------------------
int DMA_SetSrcAddress(DMA_TypeDef *channel, u32 address){
Address_SrcDest temp;
temp.address = address;
channel->DMASourceLow = temp.address_h;
channel->DMASourceHigh = temp.address_l;
return 1;
}
//-----------------------------------------------------------------------------
int DMA_SetDstAddress(DMA_TypeDef *channel, u32 address){
Address_SrcDest temp;
temp.address = address;
channel->DMADestLo = temp.address_h;
channel->DMADestHigh = temp.address_l;
return 1;
}
//-----------------------------------------------------------------------------
void DMA_EnableInterrupt(DMA_TypeDef *channel){
if (channel == DMA_CH0){
DMA_CH->DMAMask |= DMA_DMAMask_Mask0;
DMA_CH->DMAMask |= DMA_DMAMask_MaskE0;
}
else if (channel == DMA_CH1){
DMA_CH->DMAMask |= DMA_DMAMask_Mask1;
DMA_CH->DMAMask |= DMA_DMAMask_MaskE1;
}
else if (channel == DMA_CH2){
DMA_CH->DMAMask |= DMA_DMAMask_Mask2;
DMA_CH->DMAMask |= DMA_DMAMask_MaskE2;
}
else if (channel == DMA_CH3){
DMA_CH->DMAMask |= DMA_DMAMask_Mask3;
DMA_CH->DMAMask |= DMA_DMAMask_MaskE3;
}
return;
}
//-----------------------------------------------------------------------------
void DMA_DisableInterrupt(DMA_TypeDef *channel){
if (channel == DMA_CH0){
DMA_CH->DMAMask &= ~DMA_DMAMask_Mask0;
DMA_CH->DMAMask &= ~DMA_DMAMask_MaskE0;
}
else if (channel == DMA_CH1){
DMA_CH->DMAMask &= ~DMA_DMAMask_Mask1;
DMA_CH->DMAMask &= ~DMA_DMAMask_MaskE1;
}
else if (channel == DMA_CH2){
DMA_CH->DMAMask &= ~DMA_DMAMask_Mask2;
DMA_CH->DMAMask &= ~DMA_DMAMask_MaskE2;
}
else if (channel == DMA_CH3){
DMA_CH->DMAMask &= ~DMA_DMAMask_Mask3;
DMA_CH->DMAMask &= ~DMA_DMAMask_MaskE3;
}
return;
}
//-----------------------------------------------------------------------------
void DMA_ClrInterrupt(DMA_TypeDef *channel){
if (channel == DMA_CH0){
DMA_CH->DMAClr = DMA_DMAClr_Clear0;
DMA_CH->DMAClr = DMA_DMAClr_ClearE0;
}
else if (channel == DMA_CH1){
DMA_CH->DMAClr = DMA_DMAClr_Clear1;
DMA_CH->DMAClr = DMA_DMAClr_ClearE1;
}
else if (channel == DMA_CH2){
DMA_CH->DMAClr = DMA_DMAClr_Clear2;
DMA_CH->DMAClr = DMA_DMAClr_ClearE2;
}
else if (channel == DMA_CH3){
DMA_CH->DMAClr = DMA_DMAClr_Clear3;
DMA_CH->DMAClr = DMA_DMAClr_ClearE3;
}
return;
}
//-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?