用DMA传送LCD数据

1、回顾

链接: 利用FreeRTOS驱动ILI9488液晶
前面我写了“FreeRTOS驱动ILI9488液晶”的代码,但是全程是使用CPU进行数据传送的,效率很低,所以本章进行DMA数据传输,解放CPU。整个工程代码可以第四章链接中免费下载

2、配置DMA

CubeMX中配置DMA,如下图所示
配置DMA
配置说明:
1、使用DMA传输数据的路径是从内存传输到FSMC中,都是在单片机内部进行,所以是Memory To Memory;
2、按照正常模式即可;
3、因为只是实现刷屏一种颜色,所以不需要源地址自增,而目的地址只能是FSMC的映射地址0x64000002,所以也不自增;
4、因为使用的是RGB565格式,所以字宽为半字。

完成上述配置后,将DMA相关配置代码添加进上期代码中,如下图所示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、修改代码

void LCD_WritePixels(uint16_t color)
{
	// 写入命令不能被打断
	taskENTER_CRITICAL();	
	LCDSendCmd(0X2C);
	taskEXIT_CRITICAL();

	
	// DMA传输是不会被打断的,是硬件行为,相当于原子操作
	// 设置DMA最多传送2的16次方,也就是65536,而屏幕像素的大小为153600,于是让DMA分3次传输数据,每次51200个数据
	// 判断DMA传输完成的标志可用AL_DMA_PollForTransfer()函数实现
	/* 传送第一次 */
	HAL_DMA_Start(&hdma_memtomem_dma1_channel1, (uint32_t)&colorx, 0x64000002, 51200);
	HAL_DMA_PollForTransfer(&hdma_memtomem_dma1_channel1, HAL_DMA_FULL_TRANSFER, 51200);
	
	/* 传送第二次 */
	HAL_DMA_Start(&hdma_memtomem_dma1_channel1, (uint32_t)&colorx, 0x64000002, 51200);
	HAL_DMA_PollForTransfer(&hdma_memtomem_dma1_channel1, HAL_DMA_FULL_TRANSFER, 51200);
	
	/* 传送第三次 */
	HAL_DMA_Start(&hdma_memtomem_dma1_channel1, (uint32_t)&colorx, 0x64000002, 51200);
	HAL_DMA_PollForTransfer(&hdma_memtomem_dma1_channel1, HAL_DMA_FULL_TRANSFER, 51200);
 
}

4、工程代码

链接: DMA传输LCD数据

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DMA(Direct Memory Access)直接内存访问是一种数据传输技术,它允许外设直接和内存进行数据传输,不需要CPU的介入。当需要传输上一包数据时,DMA可以起到重要的作用。 首先,DMA利用其独立的控制器和寄存器来实现直接传输。在数据传输过程中,DMA控制器负责管理和设置传输参数,如起始地址、目的地址和传输的字节数等。这样,我们可以通过配置DMA控制器,指定需要传输的上一包数据的起始位置和目的位置。 其次,DMA具有高效的传输能力。相比于使用CPU来处理数据传输的方式,DMA能够直接访问内存,并且可以同时进行数据传输和CPU的其他任务。这样可以大大提高数据传输的效率,减少了CPU的负载。因此,当需要传输上一包数据时,使用DMA可以更加高效地完成传输任务。 另外,DMA还可以配合中断来进行数据传输。当DMA完成一包数据的传输后,它可以发送一个中断信号给CPU,通知CPU数据已经传输完成。这样,CPU就可以及时地对传输完成的数据进行处理,进一步提高系统的整体性能。 综上所述,使用DMA传输上一包数据可以提高数据传输的效率和系统的整体性能。通过配置DMA的寄存器和控制器,我们可以指定需要传输的数据的起始位置和目的位置,并且可以利用DMA的高效传输能力来完成数据传输任务。同时,DMA还可以与中断结合使用,以便CPU能够及时地处理传输完成的数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值