找回密码
 立即注册
查看: 157|回复: 16

QSPI, DMA-P2P, 同时送到了XDATA的问题 | 可以软件绕开的问题

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:126
  • 最近打卡:2025-07-13 09:36:17

755

主题

1万

回帖

1万

积分

管理员

积分
17848
发表于 2025-7-4 18:59:26 | 显示全部楼层 |阅读模式
QSPI, DMA-P2P, 同时送到了XDATA的问题 | 可以软件绕开的问题

目前 AI8051U, DMA-P2P, 发现下面问题,
只发现,QSPI的 DMA-P2P有此问题,
幸好可以软件绕开的问题
截图202507041859229894.jpg

回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:126
  • 最近打卡:2025-07-13 09:36:17

755

主题

1万

回帖

1万

积分

管理员

积分
17848
发表于 2025-7-4 19:01:46 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:263
  • 最近打卡:2025-07-13 15:31:41
已绑定手机

9

主题

131

回帖

1379

积分

金牌会员

积分
1379
发表于 2025-7-5 17:36:53 | 显示全部楼层
请问是要注意修改俩个地方吗?

以程序包的72.4为例

1. DMA_AMT_LEN 要小于32K

#define IMG_SIZE            (320UL * 240 * 2)
#define DMA_AMT_LEN         (12800UL)
#define DMA_CNT             (IMG_SIZE / DMA_AMT_LEN)

2. 在void QSPI2TFT_Start()里,设置 DMA_QSPI_RXAH 和 DMA_QSPI_RXAL

        DMA_P2P_CR1 = 0x87;                 //P2P_SRC_QSPIRX(0x80) | P2P_DEST_LCMTX(0x07);
        DMA_QSPI_CFG = 0xa0;                //使能DMA读取操作
        DMA_QSPI_STA = 0x00;                //清除DMA状态
        DMA_QSPI_AMT = (DMA_AMT_LEN-1);     //设置DMA数据长度
        DMA_QSPI_AMTH = (DMA_AMT_LEN-1) >> 8;
        //////////////////////
        DMA_QSPI_RXAH = 0x80;        //设置 DMA 缓冲区起始地址
        DMA_QSPI_RXAL = 0x00;
        //////////////////////
        DMA_LCM_CR = 0xa0;
        DMA_QSPI_CR = 0xa1;                 //启动DMA并触发QSPI读操作

        fLoading = 1;
}




这样改动程序,就能避免XDATA被修改吗?我这面测试的还是有问题。

请各位大侠赐教,希望官方给个例程。

IMG_20250705_174106.jpg



回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:263
  • 最近打卡:2025-07-13 15:31:41
已绑定手机

9

主题

131

回帖

1379

积分

金牌会员

积分
1379
发表于 2025-7-5 20:14:57 | 显示全部楼层
DMA-P2P刷一张背景图,在图上显示QQ图标。

这个是程序,大神给看一下。

72.4-QSPI-TFT_DMA_P2P外设到外设ILI9341(XDATA问题).rar

1.39 MB, 下载次数: 1

点评

做了个实验 0x8000 + (30UL*1024UL) 会全乱码 0x8005 + (30UL*1024UL) AIS01234擄擄 刚好跳过了前五个 多加2K但是-4错位: 0x8005 + (32UL*1024UL - 4) AIS?234聪聪 可以看到循坏覆盖过来,01乱码了 大概  详情 回复 发表于 2025-7-5 20:52
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:235
  • 最近打卡:2025-07-13 11:59:19
已绑定手机

77

主题

2125

回帖

4783

积分

荣誉版主

无情的代码机器

积分
4783
发表于 2025-7-5 20:52:39 | 显示全部楼层
C_w*** 发表于 2025-7-5 20:14
DMAP2P刷一张背景图,在图上显示QQ图标。

这个是程序,大神给看一下。

做了个实验,char xdata str[10] _at_ 0;

0x8000 + (30UL*1024UL) 会全乱码

0x8005 + (30UL*1024UL)  AIS01234擄擄  刚好跳过了前五个

多加2K但是-4错位:
0x8005 + (32UL*1024UL - 4)  AIS?234聪聪  可以看到循坏覆盖过来,01乱码了



大概是这样的:xdata有效区+QSPI传输长度总长不能超过32K,起始地址无论放在哪都是取余32K。
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:235
  • 最近打卡:2025-07-13 11:59:19
已绑定手机

77

主题

2125

回帖

4783

积分

荣誉版主

无情的代码机器

积分
4783
发表于 2025-7-5 21:09:59 | 显示全部楼层
72.4-QSPI-TFT_DMA_P2P外设到外设_显示视频级动画效果程序-ILI9341 - 副本.zip (1.41 MB, 下载次数: 1)
截图202507052107323149.jpg
截图202507052107048619.jpg
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:263
  • 最近打卡:2025-07-13 15:31:41
已绑定手机

9

主题

131

回帖

1379

积分

金牌会员

积分
1379
发表于 2025-7-5 21:24:01 | 显示全部楼层

那就是说xdata要给DMA预留空间,不能按32K来使用?

我那程序中
#define DMA_AMT_LEN         (12800UL)

u8 xdata QQPic_load[3200] _at_ 0x10;

这也没超啊?

点评

0x8000相当于0, DMA_AMT_LEN (12800UL) xdata QQPic_load[3200] _at_ 0x10; 在 0~12.8K范围内,将这两空间错开试下  详情 回复 发表于 2025-7-5 21:28
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:235
  • 最近打卡:2025-07-13 11:59:19
已绑定手机

77

主题

2125

回帖

4783

积分

荣誉版主

无情的代码机器

积分
4783
发表于 2025-7-5 21:28:14 | 显示全部楼层
C_w*** 发表于 2025-7-5 21:24
那就是说xdata要给DMA预留空间,不能按32K来使用?

我那程序中

0x8000相当于0,

DMA_AMT_LEN         (12800UL)

xdata QQPic_load[3200] _at_ 0x10; 在 0~12.8K范围内,将这两空间错开试下

点评

好的,谢谢  发表于 2025-7-5 21:36
三天不学习,赶不上刘少奇~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:263
  • 最近打卡:2025-07-13 15:31:41
已绑定手机

9

主题

131

回帖

1379

积分

金牌会员

积分
1379
发表于 2025-7-5 22:06:53 | 显示全部楼层
erci*** 发表于 2025-7-5 21:28
0x8000相当于0,

DMA_AMT_LEN         (12800UL)

72.4-QSPI-TFT_DMA_P2P外设到外设ILI9341(XDATA问题已解决).rar (1.4 MB, 下载次数: 2)
AI8051实验箱V1.2 测试程序



/**********************************************
此程序中
DMA_AMT_LEN = 12800 (DMA_QSPI_RXA设置为0x8000,相当于xdata的地址为 0)
xdata QQPic_load[3200] _at_ 12800 (地址为 0+12800)
xdata QQPic_xdata[3200]  _at_ 16000(地址为 12800+3200)

xdata变量地址 要 避免 与 DMA数据长度重叠,根据具体的需求自行调整吧
本来RAM就不大,还被占用了,希望改进
**********************************************/


感谢大佬的指点,看看是这个意思吗。

给有需要的朋友来个参考例程。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:263
  • 最近打卡:2025-07-13 15:31:41
已绑定手机

9

主题

131

回帖

1379

积分

金牌会员

积分
1379
发表于 2025-7-5 22:13:40 | 显示全部楼层
erci*** 发表于 2025-7-5 21:28
0x8000相当于0,

DMA_AMT_LEN         (12800UL)

再问一下大佬,这个是不是也会影响USBCDC的xdata啊

00018CH   00FFFFH   00FE74H   ---    ---      **GAP**
010000H   0101FFH   000200H   BYTE   INSEG    XDATA          ?XD?USBCDC
010200H   0102BFH   0000C0H   BYTE   INSEG    XDATA          ?XD?USB
0102C0H   0131FFH   002F40H   ---    ---      **GAP**
013200H   013E7FH   000C80H   BYTE   OFFS..   XDATA          ?XD?OF_3200_?2?MAIN
013E80H   014AFFH   000C80H   BYTE   OFFS..   XDATA          ?XD?OF_3E80_?1?MAIN

点评

上面的看着是这个意思。 只要是xdata就要注意范围重叠了。  详情 回复 发表于 2025-7-5 22:20
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-7-14 06:18 , Processed in 0.123859 second(s), 103 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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