zoukankan      html  css  js  c++  java
  • 【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输

    实验原理:

      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链接:

  • 相关阅读:
    lhgdialogv3.13 使用点滴
    CheckBoxList 取值 及选中相关用法
    repeater 及 gridview 中绑定短日期
    数据库中日期大小的判断
    父子不同窗口间刷新传值
    子级Repeater获取父级Repeater绑定项的值
    vs.net 2010 web 项目中使用 webservice
    web打印实现方案 Lodop6.034 使用方法总结
    用 showModalDialog 方法回传数据到父页中去
    vs.net2010中使用 Ajax Control Toolkit
  • 原文地址:https://www.cnblogs.com/xiaomagee/p/7411301.html
Copyright © 2011-2022 走看看