STM32外挂SDRAM的读写存在冲突

2019-07-14 13:38发布

主控为STM32F429BI,外挂32位SDRAM,请教一下:当移植了FreeRTOS和ucGUI后,在SDRAM中开辟一片存储区域作为显存,FreeRTOS的显示任务不断往SDRAM写入数据,而STM32的LTDC模块从SDRAM读出数据并传输到LCD上显示,这之间是不是有冲突呢?因为现在LCD屏幕有跳动现象,我是这么想的,显示任务不断的往SDRAM写入数据,必然触发SDRAM的写入时序,而LTDC在从SDRAM读取数据时必然触发读出时序,这两者之间如果没有互斥信号量处理的话,应该会导致时序异常。没有这方面的经验,不知道我的想法是否正确,还请过往的大侠指点迷津,从整体的概念上指点一下就行,谢谢了!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
18条回答
kingnet_52040
1楼-- · 2019-07-15 22:08
wang222221 发表于 2019-3-15 18:40
把窗口分块处理:整个生命周期里面不动的内容放在 Flash 里面,需要运行时填充的数据放在 RAM 里面。

我这个案子的图形数据变化比较大,数据放在内部flash的比较困难,最终方案是外挂SDRAM和nand flash,在nand flash上做文件系统,存储比如图片,图表这样的文件,根据操作显示在lcd上。内部flash只有2MB,24位的位图也存不了几张。
wang222221
2楼-- · 2019-07-16 00:50
 精彩回答 2  元偷偷看……
kingnet_52040
3楼-- · 2019-07-16 06:27
wang222221 发表于 2019-3-15 19:15
如果是这样的话,那必须拿外挂 SDRAM 当 VRAM,就要考虑 DMA 互锁了。两边都是顺序访问的话,只要调度得当,一般不会卡顿的。另外可以考虑用一个定时器来控制帧速率,定时器设定成 60Hz,每次定时器触发先启动 LTDC 把画面更新了,然后跑业务逻辑更新界面内容,渲染到内存,把 LTDC 的内存打开,准备下一帧。

还有一种方法 ...

好的,谢谢您的回复。我再排查一下,有结果后回来给你回复!
kingnet_52040
4楼-- · 2019-07-16 10:01
        while (1) {
                vTaskDelay(1000);
                // GUI_DispStringAt("Hello, World!", 200, 200);
                lcdisplay_red();
                LTDC_LayerAddress(LTDC_Layer1, SDRAM_BANK1_ADDR + AT800480_WIDTH * AT800480_HEIGHT * 0);
                LTDC_LayerPosition(LTDC_Layer1, 0, 0);
                LTDC_ReloadConfig(LTDC_IMReload);
        }

以上是LCD任务的代码:
GUI_DispStringAt("Hello, World!", 200, 200); ===> ucgui往SDRAM写入字符串
lcdisplay_red(); ===> 往SDRAM写入半屏红 {MOD}
两个写入函数任选其一,LCD显示就会跳动;
如果没有这两个写入函数的话,显示正常。
我猜想是,LTDC周期性的通过DMA从SDRAM读取数据后显示,一旦有写入动作而没有互斥处理的话,势必会出现时序上的冲突。
不知道这样分析是否正确,还请大家帮忙,谢谢了!
kingnet_52040
5楼-- · 2019-07-16 15:11
目前的测试结果是:在GUI_DispStringAt前把LTDC禁止掉,写入数据之后把LTDC使能,这样就没有了跳动,但是由于LTDC使能后重新加载显示数据,显示会有明显的闪动刷屏现象。
那么,我的问题可能是这样的,LTDC的使能和禁止应该不合理,不能用LTDC_Cmd(DISABLE);LTDC_Cmd(ENABLE);这样的语句来操作吧,只要能把DMA传输关掉,把FMC的接口干净的留给GUI来写入数据应该会有不错的效果。
现在还没找到合理的暂停LTDC数据传输的方法,还请各位多多交流。
kingnet_52040
6楼-- · 2019-07-16 19:35
跳动:红 {MOD}背景 {MOD},但是间歇性的跳出部分绿 {MOD}、蓝 {MOD}
闪动:红 {MOD}背景 {MOD},但是会像幕布那样刷屏,没有其他杂 {MOD}

一周热门 更多>