发新帖本帖赏金 17.60元(功能说明)我要提问
12下一页
返回列表
打印
[AT32A403A]

求助各位靓仔,8 bit dma xmc lvgl问题

[复制链接]
4125|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 万能的互联网 于 2023-11-18 18:06 编辑

   芯片是AT32F403ARGT7  64Pin  显示屏st7789  屏幕驱动代码是BSP里的 8bit  xmc   引脚一样,屏幕ic也一样,
lvgl测试代码用的是SC0077_SourceCode_V2.0.1


xmc屏幕驱动这块的代码应该没问题吧,官方示例demo可以正常跑



乱改后的8bit dma xmc lvgl  下载进去就成这样了,能跑,但是不多,只能跑一点点





搞不明白的部分代码截图







自己菜鸟一顿乱改,折腾了几天很明显失败了。全网都找不到at32的8bit dma xmc lvgl的参考代码,官方的5个demo都是16bit的,
github上的at32项目也是少的可怜,求助各位大佬!
也**官方把8bit dma xmc lvgl  demo也补齐,方便他人移植。

问题代码  链接: https://pan.baidu.com/s/12a7wByLk9ElvqRf50GeclQ?pwd=AT32
问题代码链接.zip (328 Bytes)

进度更新:
   231030;经过各位靓仔的帮忙,问题向着好的方向发展了!只剩下拖影残影这一问题。   
   231031;现在只剩下颜色的问题


最后的样子

  虽然鸽了一段时间,我还是没能解决问题。但我觉得有必要把,搜寻到的相关线索整理一下,也许说不定以后,也有人遇到类似的问题。

  先来看一下LVGL中对16位颜色的相关定义,首先是RGB的16位颜色分配,这是一个共用体。

当LV_COLOR_16_SWAP 为1时,green好像分为高3位和低3位。
在项目中搜索 LV_COLOR_DEPTH == 16 和 LV_COLOR_16_SWAP == 0 ,能找到更多关于颜色的配置代码。

很显然,要弄懂这些代码,还要学习更多关于16位颜色的知识。

硬件方面,我用的是可视角度更高的IPS屏幕。显示屏可以设置RGB和BGR模式,尝试将显示屏配置为BGR模式,问题依旧。

再经过了解,TN屏幕和IPS屏幕也是不同,在TN屏幕中颜色正常,换到IPS可能就遇到反色了。

可能的解决思路:如果是并口的颜色高低位问题,那么换到100pin的16位并口,也许能解决问题。
如果还是有问题,那么也许只能无奈的放弃DMA刷屏。
最后,也许换个更差劲的TN屏就。。。




使用特权

评论回复
沙发
万能的互联网|  楼主 | 2023-10-29 16:40 | 只看该作者
xi wang怎么成了屏蔽词?

使用特权

评论回复
板凳
回忆酱| | 2023-10-30 09:08 | 只看该作者
dma改半字传输  size直接默认 不x2

使用特权

评论回复

打赏榜单

万能的互联网 打赏了 8.80 元 2023-10-30
理由:感谢热心回答问题!

评论
回忆酱 2023-10-30 19:15 回复TA
@万能的互联网 :感谢打赏 因为之前弄过16bit跟8bit的 一眼看出了 
万能的互联网 2023-10-30 19:08 回复TA
本以为论坛冷清,没想到这靓仔很热心,感谢! 
地板
muyichuan2012| | 2023-10-30 11:23 | 只看该作者
楼上正解,既然都是byte传送,size不应该x2了。
另外,因为你是竖屏显示,如下的
#define MY_DISP_HOR_RES    320
#define MY_DISP_VER_RES    240
是否应修改为
define MY_DISP_HOR_RES    240
#define MY_DISP_VER_RES    320

使用特权

评论回复

打赏榜单

万能的互联网 打赏了 8.80 元 2023-10-30
理由:感谢排查问题

评论
万能的互联网 2023-10-30 19:15 回复TA
感谢,大部分问题确实是宽高像素的设置问题。问题解决了90%,但是还会有严重的拖影问题。 
5
Addition| | 2023-10-30 14:21 | 只看该作者
先验证DMA + XMC能不能正常显示,如果正常显示那就把LVGL加上在测试

使用特权

评论回复
6
dw772| | 2023-10-30 14:46 | 只看该作者
muyichuan2012 发表于 2023-10-30 11:23
楼上正解,既然都是byte传送,size不应该x2了。
另外,因为你是竖屏显示,如下的
#define MY_DISP_HOR_RES  ...

为啥DMA设置那里目标地址和源地址都是同样的:(__IO uint32_t)XMC_LCD_DATA;就算是从M->M也应该是不同的地址吧

使用特权

评论回复
评论
muyichuan2012 2023-10-30 15:59 回复TA
那个不重要,只是初始化而已,实际使用时会在disp_flash函数再次配置DMA paddr寄存器。 
7
万能的互联网|  楼主 | 2023-10-30 19:07 | 只看该作者
本帖最后由 万能的互联网 于 2023-10-30 19:08 编辑
万能的互联网 发表于 2023-10-29 16:40
xi wang怎么成了屏蔽词?

回复错了,尴尬!

使用特权

评论回复
8
回忆酱| | 2023-10-30 19:13 | 只看该作者
万能的互联网 发表于 2023-10-29 16:40
xi wang怎么成了屏蔽词?

如何 可以了吗

使用特权

评论回复
9
万能的互联网|  楼主 | 2023-10-30 19:20 | 只看该作者
Addition 发表于 2023-10-30 14:21
先验证DMA + XMC能不能正常显示,如果正常显示那就把LVGL加上在测试

只玩过有手就行的ESP32 Arduino环境下的LVGL, arm的32还是第一次玩。DMA一窍不通,没有示例demo实在耍不来

使用特权

评论回复
10
muyichuan2012| | 2023-10-30 19:22 | 只看该作者
如下函数参数配置为0可以加速XMC访问速度,或许有所帮助。
修改前
  /* bus turnaround phase for consecutive read duration and consecutive write duration */
  xmc_ext_timing_config(XMC_BANK1_NOR_SRAM4, 0x08, 0x08);
修改后
  /* bus turnaround phase for consecutive read duration and consecutive write duration */
  xmc_ext_timing_config(XMC_BANK1_NOR_SRAM4, 0x0, 0x0);

使用特权

评论回复
11
万能的互联网|  楼主 | 2023-10-30 19:28 | 只看该作者

还差一点点,拖影、残影严重!

使用特权

评论回复
12
muyichuan2012| | 2023-10-30 19:59 | 只看该作者
从你的图像来看,感觉颜色不正常,有点像RGB高低字节反了,再修改以下宏定义试试
修改前
#define LV_COLOR_16_SWAP 1
修改后
#define LV_COLOR_16_SWAP 0

使用特权

评论回复
13
kinghui| | 2023-10-30 21:12 | 只看该作者
xuexu

使用特权

评论回复
14
回忆酱| | 2023-10-31 08:50 | 只看该作者
万能的互联网 发表于 2023-10-30 19:28
还差一点点,拖影、残影严重!

检查开窗函数 缓冲区给大点

使用特权

评论回复
15
万能的互联网|  楼主 | 2023-10-31 13:53 | 只看该作者
本帖最后由 万能的互联网 于 2023-10-31 14:10 编辑
muyichuan2012 发表于 2023-10-30 19:59
从你的图像来看,感觉颜色不正常,有点像RGB高低字节反了,再修改以下宏定义试试
修改前
#define LV_COLOR_ ...

这个宏不打开,就会全部糊掉。
//看看头文件内容,感觉没啥问题
#if LV_COLOR_16_SWAP == 0
# define _LV_COLOR_ZERO_INITIALIZER16  {{0x00, 0x00, 0x00}}
# define LV_COLOR_MAKE16(r8, g8, b8) {{(uint8_t)((b8 >> 3) & 0x1FU), (uint8_t)((g8 >> 2) & 0x3FU), (uint8_t)((r8 >> 3) & 0x1FU)}}
#else
# define _LV_COLOR_ZERO_INITIALIZER16 {{0x00, 0x00, 0x00, 0x00}}
# define LV_COLOR_MAKE16(r8, g8, b8) {{(uint8_t)((g8 >> 5) & 0x7U), (uint8_t)((r8 >> 3) & 0x1FU), (uint8_t)((b8 >> 3) & 0x1FU), (uint8_t)((g8 >> 2) & 0x7U)}}


我也觉得是RGB高低字节的问题,8bit和16bit画点函数的差异

//8bit
void lcd_write_one_point(uint16_t color)
{
  lcd_wr_data(~(color) >> 8);   
  lcd_wr_data(~color);
}


//16 bit
void lcd_write_one_point(uint16_t color)
{
  lcd_wr_data(color);
}


但是在dma中,已经用不到  lcd_write_one_point  这个画点函数


//现在怀疑最有可能的突破口,这一句
DMA1_CHANNEL5->paddr  = (uint32_t)color_p;

keil5打不开这个结构体指针的定义,我想能不能在这里,对color的高低字节进行处理。或者,有其他更好的办法。
没想到整个问题,最后的重点还是color


使用特权

评论回复
16
万能的互联网|  楼主 | 2023-10-31 13:58 | 只看该作者
本帖最后由 万能的互联网 于 2023-10-31 14:16 编辑
回忆酱 发表于 2023-10-31 08:50
检查开窗函数 缓冲区给大点

这个残影是我粗心大意了,只修改了MY_DISP_HOR_RES,没有同时去修改双缓,双缓数组大小用宏定义能避免这些不必要的错误。大佬有设置横屏方向的代码吗?目前还是竖屏,arduino环境下,写好了2个横屏和2个竖屏的切换函数。换到这个环境一脸懵。

使用特权

评论回复
评论
万能的互联网 2023-11-1 11:29 回复TA
@回忆酱 :已经通过0x36命令设置好了,可以横屏了。颜色这里还是搞不定,看了别人的f435 的8bit xmc 代码,似乎没有遇到16位颜色的高低8位这个问题。看来只能换100pin的,改板用16bit并口,不然会鸽太久。 
回忆酱 2023-11-1 10:01 回复TA
横屏跟竖屏只需要xy互换下而已啊 
17
单片小菜| | 2023-11-1 10:06 | 只看该作者
为什么不上M4?

使用特权

评论回复
18
万能的互联网|  楼主 | 2023-11-1 11:30 | 只看该作者

不明白表达什么,403a不是M4单片机?

使用特权

评论回复
19
lajfda001| | 2023-11-2 08:58 | 只看该作者
这个真的没有用过的。

使用特权

评论回复
20
万能的互联网|  楼主 | 2023-11-2 15:03 | 只看该作者
lajfda001 发表于 2023-11-2 08:58
这个真的没有用过的。

我也是第一次用并口,之前用spi没有遇到16位颜色和8位并口这个转换问题。这次还把屏幕的并口引脚画错了,屏幕是d8-d15,我以为是d0-d7,后来才知道有两种8bit引脚定义。踩坑,可以得到经验和教训,还是用16bit更保险。只好换大一号的100pin封装,多走几条线。

使用特权

评论回复
发新帖 本帖赏金 17.60元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

29

帖子

0

粉丝