重构 ILI9341+LVGL 驱动:异步 DMA + 硬件旋转,修复残影与白屏
- 硬件 MADCTL 旋转,删除软件转置,LVGL 坐标与面板 1:1,消除移动残影 - 全异步 DMA:flush 启动即返回,完成/出错由 SPI 中断收尾,去掉信号量阻塞 - DMA 缓冲经 .lcd_ram 段强制放入 AXI SRAM,规避 DTCM 不可被 DMA 访问导致的白屏 - LV_COLOR_16_SWAP=1,LVGL 直出面板字节序,省去逐像素交换/拷贝 - 看门狗超时重建 SPI 自恢复,单次异常不再级联长时间白屏 - 定制 scatter(motor_ili9341_lcd.sct) 并接入 uvprojx - 新增 README_ILI9341.md 说明根因/设计/构建验证
This commit is contained in:
@@ -362,7 +362,7 @@
|
||||
</VariousControls>
|
||||
</Aads>
|
||||
<LDads>
|
||||
<umfTarg>1</umfTarg>
|
||||
<umfTarg>0</umfTarg>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<noStLib>0</noStLib>
|
||||
@@ -371,7 +371,7 @@
|
||||
<TextAddressRange></TextAddressRange>
|
||||
<DataAddressRange></DataAddressRange>
|
||||
<pXoBase></pXoBase>
|
||||
<ScatterFile></ScatterFile>
|
||||
<ScatterFile>.\motor_ili9341_lcd.sct</ScatterFile>
|
||||
<IncludeLibs></IncludeLibs>
|
||||
<IncludeLibsPath></IncludeLibsPath>
|
||||
<Misc></Misc>
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
; *************************************************************
|
||||
; *** ILI9341 定制 Scatter 文件 ***
|
||||
; -------------------------------------------------------------
|
||||
; 目的:把 LCD 的 DMA 源缓冲(.lcd_ram 段)强制放到 AXI SRAM
|
||||
; (0x24000000)。原因:
|
||||
; - DTCM(0x20000000) CPU 访问最快,但 DMA1/DMA2 无法访问,
|
||||
; 把 DMA 缓冲放这里会导致 DMA 读到空/错数据 → 白屏/花屏。
|
||||
; - AXI SRAM(0x24000000) DMA1 可访问,适合放 LCD 缓冲。
|
||||
; 默认自动 scatter 会把缓冲随机分到两块 RAM,是之前偶发
|
||||
; 白屏的根因之一。本文件消除这种不确定性。
|
||||
;
|
||||
; 若在 Keil 里修改了内存布局,请保持 .lcd_ram 始终落在 AXI SRAM。
|
||||
; *************************************************************
|
||||
|
||||
LR_IROM1 0x08000000 0x00020000 { ; 加载域 = Flash 128KB
|
||||
ER_IROM1 0x08000000 0x00020000 { ; 执行域 = 加载域
|
||||
*.o (RESET, +First)
|
||||
*(InRoot$$Sections)
|
||||
.ANY (+RO)
|
||||
.ANY (+XO)
|
||||
}
|
||||
|
||||
; DTCM 128KB —— CPU 专用高速 RAM,DMA 不可访问。
|
||||
; 普通全局变量、堆栈放这里。切勿放 DMA 缓冲。
|
||||
RW_IRAM1 0x20000000 0x00020000 {
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
|
||||
; AXI SRAM 512KB —— DMA 可访问。LCD DMA 缓冲必须放这里。
|
||||
RW_IRAM2 0x24000000 0x00080000 {
|
||||
*(.lcd_ram) ; LCD 绘制/DMA 缓冲,DMA 可达
|
||||
.ANY (+RW +ZI)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user