您的位置:首页 > 其它

【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输

2017-08-22 14:08 531 查看
实验原理:

  DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据

传输。本实验采用DAM2控制器的数据流0,选用通道0进行数据传输。通过LED的颜色来

判断传输是否成功。

实验现象:

  实验成功蓝色LED灯闪烁,实验失败红色LED灯闪烁。

核心代码:

int main(void)
{

/* USER CODE BEGIN 1 */
int i;

/* USER CODE END 1 */

/* MCU Configuration----------------------------------------------------------*/

/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();

/* USER CODE BEGIN Init */

/* USER CODE END Init */

/* Configure the system clock */
SystemClock_Config();

/* USER CODE BEGIN SysInit */

/* USER CODE END SysInit */

/* Initialize all configured peripherals */
MX_GPIO_Init();

/* USER CODE BEGIN 2 */
dma.initialize();

//²âÊÔDMA£¬²âÊԳɹ¦À¶µÆÉÁ˸£¬²âÊÔʧ°Ü£¬ºìµÆÉÁ˸
/* Configure DMA request hdma_memtomem_dma2_stream0 on DMA2_Stream0 */
hdma_memtomem_dma2_stream0.Instance = DMA2_Stream0;
hdma_memtomem_dma2_stream0.Init.Channel = DMA_CHANNEL_0;
hdma_memtomem_dma2_stream0.Init.Direction = DMA_MEMORY_TO_MEMORY;
hdma_memtomem_dma2_stream0.Init.PeriphInc = DMA_PINC_ENABLE;
hdma_memtomem_dma2_stream0.Init.MemInc = DMA_MINC_ENABLE;
hdma_memtomem_dma2_stream0.Init.PeriphDataAlignment = DMA_PDATAALIGN_WORD;
hdma_memtomem_dma2_stream0.Init.MemDataAlignment = DMA_PDATAALIGN_WORD;
hdma_memtomem_dma2_stream0.Init.Mode = DMA_NORMAL;
hdma_memtomem_dma2_stream0.Init.Priority = DMA_PRIORITY_HIGH;
hdma_memtomem_dma2_stream0.Init.FIFOMode = DMA_FIFOMODE_ENABLE;
hdma_memtomem_dma2_stream0.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
hdma_memtomem_dma2_stream0.Init.MemBurst = DMA_MBURST_SINGLE;
hdma_memtomem_dma2_stream0.Init.PeriphBurst = DMA_PBURST_SINGLE;
if(HAL_DMA_Init(&hdma_memtomem_dma2_stream0) != HAL_OK)
{
while(1);
}

HAL_DMA_Start(&hdma_memtomem_dma2_stream0,(unsigned long int)src_buffer,(unsigned long int)dst_buffer,(unsigned long int)BUFFER_SIZE);

while(__HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0,DMA_FLAG_TCIF0_4) == SET);

for(i = 0;i < BUFFER_SIZE;i++){
if(dst_buffer[i] != src_buffer[i]){
//²âÊÔʧ°Ü
while(1){
HAL_Delay(500);
LED_RED_ON;
HAL_Delay(500);
LED_RED_OFF;
}
}
}
/* USER CODE END 2 */

/* Infinite loop */
/* USER CODE BEGIN WHILE */
//²âÊԳɹ¦
while (1)
{
/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
HAL_Delay(500);
LED_BLUE_ON;
HAL_Delay(500);
LED_BLUE_OFF;
}
/* USER CODE END 3 */

}


源代码下载链接:

链接:http://pan.baidu.com/s/1cxtwaq 密码:yvxw

iCore4链接:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐