QSPI, DMA-P2P, 同时送到了XDATA的问题 | 可以软件绕开的问题
QSPI, DMA-P2P, 同时送到了XDATA的问题 | 可以软件绕开的问题目前 AI8051U, DMA-P2P, 发现下面问题,
只发现,QSPI的 DMA-P2P有此问题,
幸好可以软件绕开的问题
https://www.stcaimcu.com/data/download/Datasheet/AI8051U.pdf
请问是要注意修改俩个地方吗?
以程序包的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被修改吗?我这面测试的还是有问题。
请各位大侠赐教,希望官方给个例程。
DMA-P2P刷一张背景图,在图上显示QQ图标。
这个是程序,大神给看一下。 C_wolf 发表于 2025-7-5 20:14
DMAP2P刷一张背景图,在图上显示QQ图标。
这个是程序,大神给看一下。
做了个实验,char xdata str _at_ 0;
0x8000 + (30UL*1024UL) 会全乱码
0x8005 + (30UL*1024UL)AIS01234擄擄刚好跳过了前五个
多加2K但是-4错位:
0x8005 + (32UL*1024UL - 4)AIS?234聪聪可以看到循坏覆盖过来,01乱码了
大概是这样的:xdata有效区+QSPI传输长度总长不能超过32K,起始地址无论放在哪都是取余32K。
ercircle 发表于 2025-7-5 21:09
那就是说xdata要给DMA预留空间,不能按32K来使用?
我那程序中
#define DMA_AMT_LEN (12800UL)
u8 xdata QQPic_load _at_ 0x10;
这也没超啊?
C_wolf 发表于 2025-7-5 21:24
那就是说xdata要给DMA预留空间,不能按32K来使用?
我那程序中
0x8000相当于0,
DMA_AMT_LEN (12800UL)
xdata QQPic_load _at_ 0x10; 在 0~12.8K范围内,将这两空间错开试下
ercircle 发表于 2025-7-5 21:28
0x8000相当于0,
DMA_AMT_LEN (12800UL)
AI8051实验箱V1.2 测试程序
/**********************************************
此程序中
DMA_AMT_LEN = 12800 (DMA_QSPI_RXA设置为0x8000,相当于xdata的地址为 0)
xdata QQPic_load _at_ 12800 (地址为 0+12800)
xdata QQPic_xdata_at_ 16000(地址为 12800+3200)
xdata变量地址 要 避免 与 DMA数据长度重叠,根据具体的需求自行调整吧
本来RAM就不大,还被占用了,希望改进
**********************************************/
感谢大佬的指点{:4_196:},看看是这个意思吗。
给有需要的朋友来个参考例程。
ercircle 发表于 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
页:
[1]
2