【iCore4 双核心板_ARM】例程十一:DMA实验——存储器到存储器的传输
2017-08-22 14:08
531 查看
实验原理:
DAM(直接存储器访问)传输不需要占用CPU,可以在存储器至存储器实现高速的数据
传输。本实验采用DAM2控制器的数据流0,选用通道0进行数据传输。通过LED的颜色来
判断传输是否成功。
实验现象:
实验成功蓝色LED灯闪烁,实验失败红色LED灯闪烁。
核心代码:
源代码下载链接:
链接:http://pan.baidu.com/s/1cxtwaq 密码:yvxw
iCore4链接:
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链接:
相关文章推荐
- 【iCore1S 双核心板_ARM】例程十二:DMA实验——存储器到存储器的传输
- 【iCore3 双核心板】例程十一:DMA实验——存储器到存储器的传输
- 【iCore4 双核心板_ARM】例程十六:USB_HID实验——双向数据传输
- 【iCore4 双核心板_ARM】例程二十一:LWIP_TCP_SERVER实验——以太网数据传输
- 【iCore4 双核心板_ARM】例程二十:LWIP_TCP_CLIENT实验——以太网数据传输
- 【iCore4 双核心板_ARM】例程二十二:LWIP_UDP实验——以太网数据传输
- 【iCore4 双核心板_ARM】例程十五:USB_CDC实验——高速数据传输
- 【iCore4 双核心板_ARM】例程三十五:HTTP_IAP_ARM实验——更新升级STM32
- 【iCore4 双核心板_ARM】例程四:USART实验——通过命令控制LED
- 【iCore4 双核心板_FPGA】例程十一:FSMC总线通信实验——独立地址模式
- 【iCore4 双核心板_ARM】例程三十六:DAC实验——输出直流电压
- 【iCore4 双核心板_ARM】例程三:EXTI中断输入实验——读取ARM按键状态
- 【iCore1S 双核心板_ARM】例程十一:RTC实时时钟实验——显示时间和日期
- 【iCore4 双核心板_ARM】例程二十四:LWIP_DHCP实验——动态分配IP地址
- 【iCore4 双核心板_ARM】例程三十七:SDRAM实验——读写SDRAM
- 【iCore4 双核心板_ARM】例程十二:通用定时器实验——定时点亮LED
- 【iCore4 双核心板_FPGA】例程十五:基于单口RAM的ARM+FPGA数据存取实验
- 【iCore4 双核心板_ARM】例程二十五:LWIP_DNS实验——域名解析
- 【iCore4 双核心板_ARM】例程十三:SDIO实验——读取SD卡信息
- 【iCore4 双核心板_ARM】例程二十六:LWIP_MODBUS_TCP实验——电源监控