找回密码
 立即注册
查看: 2290|回复: 12

使用SPI-DMA+LCM-DMA方式显示320*240的图片需要多长时间

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 19:37:35

14

主题

128

回帖

2032

积分

金牌会员

积分
2032
发表于 2023-11-14 16:20:39 | 显示全部楼层 |阅读模式
使用STC32G12K128单片机,设置35M,采用SPI-DMA+LCM-DMA双缓冲方式显示320*240的图片,模拟播放一段小视屏,明显卡顿,做个时间延时,大概一张图片显示需要250MS,这个时间还有没有提升的空间呢?
lADPJxuMXhvWvGrNBQDNAk8_591_1280.jpg
IMG_20231114_160403.jpg

video_20231102_173609.mp4

7.86 MB, 下载次数: 106

video_20231114_160251.mp4

2.88 MB, 下载次数: 94

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 19:37:35

14

主题

128

回帖

2032

积分

金牌会员

积分
2032
发表于 2023-11-14 16:24:40 | 显示全部楼层
延时改成200MS时播放的就不连贯了。

相关代码:

void LCD_ShowPicture_dma(uint16 x)                //SPI_DMA,LCM_DMA方式显示图片
{
        uint32 pic_add=picture_addr+x*153600;   // 从GD25Q64的这个地址开始读取图片
        TFT_CS= 0;        //选择TFT
        GD25Q64_Readdma(pic_add);        //开启SPI_DMA主模式操作读GD25Q64,开始第一次(0)读取到缓冲区1
//        while(!GD25Q64_CS);        //等待读取一次完成,阻塞机制
}

void common_isr(void) interrupt  13        //DMA_LCM和DMA_SPI中断
{
        if(DMA_LCM_STA & 0x01)        //进入DMA_LCM
    {
                        DMA_LCM_STA= 0;
      if(stage >= Index)                //150K图片传送完毕
                        {
                                TFT_CS=1;
                        }
    }
        if(DMA_SPI_STA & 0x01)        //进入DMA_SPI
    {
                        DMA_SPI_STA= 0;
      if(!(stage & 1))        //偶数次
                                {
                                        DMA_LCM_TXAL= (uint8)((uint16)&DmaBuffer1);        //缓冲区1开始发送
                                        DMA_LCM_TXAH= (uint8)((uint16)&DmaBuffer1>>8);
                                        DMA_LCM_CR= 0xa1; //启动DMA开始发送数据
                                }
                        else        //奇数次
                                {
                                        DMA_LCM_TXAL= (uint8)((uint16)&DmaBuffer2);        //缓冲区2开始发送   
                                        DMA_LCM_TXAH= (uint8)((uint16)&DmaBuffer2>>8);
                                        DMA_LCM_CR= 0xa1;        //启动DMA开始发送数据
                                }
                        if(stage <Index)
       {
                                if(!(stage & 1))        //偶数次
                                        {
                                                DMA_SPI_RXAL= (uint8)((uint16)&DmaBuffer2);        //发送到缓冲区2         
            DMA_SPI_RXAH= (uint8)((uint16)&DmaBuffer2>>8);
            DMA_SPI_CR= 0xc1;        //启动DMA开始接收数据
          }
         else        //奇数次
                                        {
                                                DMA_SPI_RXAL= (uint8)((uint16)&DmaBuffer1);        //发送到缓冲区1           
            DMA_SPI_RXAH= (uint8)((uint16)&DmaBuffer1>>8);
            DMA_SPI_CR= 0xc1;        //启动DMA开始接收数据
          }
        stage++;
         }
       else
                         {
                                 GD25Q64_CS= 1;        //150K图片数据读取完毕
                                 stage=0;        //重新开始计数
                         }
     }
}

222.mp4

4.11 MB, 下载次数: 89

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 19:37:35

14

主题

128

回帖

2032

积分

金牌会员

积分
2032
发表于 2023-11-14 16:31:54 | 显示全部楼层
视频1和2分别是使用DMA和不使用时播放的效果,感觉效果差不多,并没有体现出来使用DMA的优势
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2023-11-14 18:00:38 | 显示全部楼层
yan*** 发表于 2023-11-14 16:31
视频1和2分别是使用DMA和不使用时播放的效果,感觉效果差不多,并没有体现出来使用DMA的优势 ...

DMA的优势在于使用硬件自动传输数据,释放CPU资源。
想要加快刷新速度,要提高接口的时钟频率。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 19:37:35

14

主题

128

回帖

2032

积分

金牌会员

积分
2032
发表于 2023-11-14 18:10:11 | 显示全部楼层
设置过的了
1.png
2.png
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-11-14 18:38:42 | 显示全部楼层
这个算法是解放 CPU去做其他事
截图202311141839529140.jpg

截图202311141840226429.jpg

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 19:37:35

14

主题

128

回帖

2032

积分

金牌会员

积分
2032
发表于 2023-11-15 08:35:51 | 显示全部楼层
两张图片之间的那个延时间隔CPU可以做其他操作,这个8位并口TFT彩屏,就没法播放视屏了对吗?这个播放速度有没有老师能给出具体参数呢?或者有没有好的方法能实现彩屏的视屏播放效果?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:8
  • 最近打卡:2023-12-05 19:37:53

3

主题

324

回帖

363

积分

禁止发言

积分
363
发表于 2023-11-15 09:22:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:452
  • 最近打卡:2025-05-01 19:37:35

14

主题

128

回帖

2032

积分

金牌会员

积分
2032
发表于 2023-11-15 09:52:19 | 显示全部楼层
我用的是KMPlayer播放视频,捕获成你要的图片格式,再用Image2Lcd批量转换成150K单个的BIN文件,最后将这些BIN文件合并成一个BIN文件烧录到25Q64中,程序中再通过用SPI-DMA方式读取25Q64对应的每个图片,用LCM-DMA方式实现对应图片的显示,读取显示速度够快,视觉看起来就能连续播放。目前这个刷新图片速度达到了效果,但是视频还不够理想,速度限制在于读取25Q64这里,当然用OLED12864显示灰度图片的话,8H8K64就可以实现视频级的播放。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:54
  • 最近打卡:2025-05-01 09:07:55

717

主题

1万

回帖

1万

积分

管理员

积分
15613
发表于 2023-11-16 07:40:40 | 显示全部楼层
后面的 STC8051H, STC32G96K256, 都有 QSPI读FLASH,
支持 QSPI -DMA 直通 TFT320240 接口

支持 QSPI -DMA 直通 TFT480320 接口

STC8051H,2024/6/1 后回来


回复 支持 1 反对 0

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 04:05 , Processed in 0.135372 second(s), 106 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表