硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5109|回复: 0
收起左侧

[emWin] 直接使用FatFS SDIO DMA 4bit方式加载图标到外部SRAM问题记录,V4板子

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2015-9-29 20:52:26 | 显示全部楼层 |阅读模式
实际测试F1+SRAM的速度的确跟F4+SRAM有些差距。
实际测试发现直接使用FatFS SDIO DMA 4bit方式加载图标到SRAM会导致emWin无法正常的显示图片。
现在都是先使用内部SRAM作为缓冲,然后再给外部SRAM使用。
  1. /*
  2. *********************************************************************************************************
  3. *    函 数 名: _ShowJPG
  4. *    功能说明: 显示JPEG图片
  5. *    形    参:sFilename 要显示的图片名字
  6. *    返 回 值: 无
  7. *********************************************************************************************************
  8. */
  9. static void _ShowJPG(const char * sFilename)
  10. {
  11.     GUI_HMEM hMem;
  12.     char *_acBuffer;
  13.     int i;
  14.     /* 申请一块内存空间 并且将其清零 */
  15.     hMem = GUI_ALLOC_AllocZero(1024*400);
  16.     /* 将申请到内存的句柄转换成指针类型 */
  17.     _acBuffer = GUI_ALLOC_h2p(hMem);
  18.    
  19.     /* 打开文件 */        
  20.     result = f_open(&file, sFilename, FA_OPEN_EXISTING | FA_READ | FA_OPEN_ALWAYS);
  21.     if (result != FR_OK)
  22.     {
  23.         return;
  24.     }
  25.     /*
  26.     * 1. 读取数据到缓存, 由于FatFS+官方SD卡的方案存在DMA传输上的4字节对齐问题,这里以小于等于一个
  27.     *    SD卡扇区大小来操作,超过512字节会出错。
  28.     * 2. 直接通过SDIO的DMA将SD卡中的数据发送给外部SRAM会出问题,这里通过tempbuf做一下缓冲。
  29.     */
  30.     for(i = 0; i < file.fsize / 512; i++)
  31.     {
  32.         result = f_read(&file, tempbuf, 512, &bw);
  33.         memcpy(_acBuffer, tempbuf, 512);
  34.         _acBuffer += 512;
  35.     }
  36.    
  37.     result = f_read(&file, tempbuf, file.fsize % 512, &bw);
  38.     memcpy(_acBuffer, tempbuf, file.fsize % 512);
  39.     /* 重新获得所申请动态内存的首地址 */
  40.     _acBuffer = GUI_ALLOC_h2p(hMem);
  41.    
  42.     GUI_JPEG_GetInfo(_acBuffer, file.fsize, &JpegInfo);
  43.     GUI_JPEG_Draw(_acBuffer,
  44.                   file.fsize,
  45.                   0,
  46.                   0);
  47.     GUI_ALLOC_Free(hMem);
  48.     f_close(&file);
  49.    
  50.     while(1)
  51.     {
  52.         GUI_Delay(10);
  53.     }
  54. }
复制代码
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-13 01:02 , Processed in 0.186554 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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