硬汉嵌入式论坛

 找回密码
 立即注册
查看: 645|回复: 9
收起左侧

[ThreadX全家桶] 求助,ThreadX+GUIX屏幕是NT35510显示驱动移植问题

[复制链接]

3

主题

7

回帖

21

积分

新手上路

积分
21
发表于 2023-8-23 21:05:21 | 显示全部楼层 |阅读模式
大家好,我自己的开发板使用的NT35510屏幕芯片,参考咱V5的GUIX移植demo,我自己重新移植了LCD驱动,现在就简单的替换了驱动函数中的内容(stm32f4_565rgb_buffer_toggle()),屏幕可以点亮,但是不显示内容。求助大佬们帮忙看下,我的这个屏幕驱动函数写的对不对,非常感谢,并附上源代码。

链接:https://pan.baidu.com/s/1J3Wnn9Pro9CvSzT3SmyCVA
提取码:xv3k
[C] 纯文本查看 复制代码
extern __IO uint8_t lcd_is_busy;
static void stm32f4_565rgb_buffer_toggle(GX_CANVAS *canvas, GX_RECTANGLE *dirty)
{
	GX_RECTANGLE    Limit;
	GX_RECTANGLE    Copy;
	ULONG           offset;
	INT             copy_width;
	INT             copy_height;

#if !defined(GX_CHROMEART_ENABLE)
	INT             row;
	INT             src_stride_ulongs;
	INT             dest_stride_ulongs;
#endif
		
	uint16_t *p, x, y, x1, y1;
	uint32_t blkCnt0, blkCnt1;  

	ULONG *get;
	ULONG *put;

    gx_utility_rectangle_define(&Limit, 0, 0,
                                canvas->gx_canvas_x_resolution - 1,
                                canvas->gx_canvas_y_resolution - 1);

    if (gx_utility_rectangle_overlap_detect(&Limit, &canvas->gx_canvas_dirty_area, &Copy))
    {
        Copy.gx_rectangle_left &= 0xfffe;
        Copy.gx_rectangle_right |= 0x01;
		
        copy_width = Copy.gx_rectangle_right - Copy.gx_rectangle_left + 1;

        copy_height = Copy.gx_rectangle_bottom - Copy.gx_rectangle_top + 1;

        offset = Copy.gx_rectangle_top * canvas->gx_canvas_x_resolution;
        offset += Copy.gx_rectangle_left;
        offset /= 2;        
        get = canvas ->gx_canvas_memory;
        get += offset;


        src_stride_ulongs = canvas ->gx_canvas_x_resolution ;
        dest_stride_ulongs = lcddev.width / 2;
			
		p = (uint16_t *)get;

		x = canvas->gx_canvas_display_offset_x + Copy.gx_rectangle_left;
		y = canvas->gx_canvas_display_offset_y + Copy.gx_rectangle_top;	
		x1 = Copy.gx_rectangle_right + canvas->gx_canvas_display_offset_x;
		y1 = canvas->gx_canvas_display_offset_y + Copy.gx_rectangle_bottom;
	
		lcd_is_busy = 1;
	
		LCD->LCD_REG = 0x30; LCD->LCD_RAM = x;
		LCD->LCD_REG = 0x31; LCD->LCD_RAM = x>>8;
		
		LCD->LCD_REG = 0x32; LCD->LCD_RAM = y;
		LCD->LCD_REG = 0x33; LCD->LCD_RAM = y>>8;

		LCD->LCD_REG = 0x34; LCD->LCD_RAM = x1;
		LCD->LCD_REG = 0x35; LCD->LCD_RAM = x1>>8;

		LCD->LCD_REG = 0x36; LCD->LCD_RAM = y1;
		LCD->LCD_REG = 0x37; LCD->LCD_RAM = y1>>8;

		LCD->LCD_REG = 0x46; LCD->LCD_RAM = x;
		LCD->LCD_REG = 0x47; LCD->LCD_RAM = x>> 8;
		LCD->LCD_REG = 0x48; LCD->LCD_RAM = y;
		LCD->LCD_REG = 0x49; LCD->LCD_RAM = y >> 8;
						  
		LCD->LCD_REG = 0x02;	
		
		for(row = 0; row < copy_height; row++)
        {

			blkCnt0 = copy_width >> 2U;
			blkCnt1 = copy_width % 0x4U;
			
			while (blkCnt0 > 0U)
			{
				LCD->LCD_RAM = *p++;
				LCD->LCD_RAM = *p++;
				LCD->LCD_RAM = *p++;
				LCD->LCD_RAM = *p++;
				blkCnt0--;
			}
			
			while (blkCnt1 > 0U)
			{
				LCD->LCD_RAM = *p++;
				blkCnt1--;
			}
			
			p = p - copy_width + src_stride_ulongs;
        }
		
		LCD->LCD_REG = 0x30; LCD->LCD_RAM = 0;
		LCD->LCD_REG = 0x31; LCD->LCD_RAM = 0;
		
		LCD->LCD_REG = 0x32; LCD->LCD_RAM = 0;
		LCD->LCD_REG = 0x33; LCD->LCD_RAM = 0;

		LCD->LCD_REG = 0x34; LCD->LCD_RAM = lcddev.width;
		LCD->LCD_REG = 0x35; LCD->LCD_RAM = lcddev.width>>8;

		LCD->LCD_REG = 0x36; LCD->LCD_RAM = lcddev.height;
		LCD->LCD_REG = 0x37; LCD->LCD_RAM = lcddev.height>>8;
		
		lcd_is_busy = 0;
    }
}




Snipaste_2023-08-23_20-51-11.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-8-24 01:22:01 | 显示全部楼层
我这里是做了个展开绘制。

你直接调用你的这个函数lcd_color_fill试试
回复

使用道具 举报

3

主题

7

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2023-8-24 20:48:26 | 显示全部楼层
eric2013 发表于 2023-8-24 01:22
我这里是做了个展开绘制。

你直接调用你的这个函数lcd_color_fill试试

非常感谢汉哥,我用了lcd_color_fill这个函数,确实有点反应。这个lcd_color_fill函数,好像是传入一个区域+颜色,从而实现显示。我得了解GUIX的显示原理,才能写出移植代码,头大。
C:\Users\ning\Desktop\微信图片_20230824204011.jpg
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-8-25 09:19:15 | 显示全部楼层
ning0720 发表于 2023-8-24 20:48
非常感谢汉哥,我用了lcd_color_fill这个函数,确实有点反应。这个lcd_color_fill函数,好像是传入一个区 ...

不用了解机制,注意你调用你的这个函数lcd_color_fill,注意它的坐标大小和位置就行。应该就是参数传递问题,你整准点。
回复

使用道具 举报

3

主题

7

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2023-8-26 20:23:45 | 显示全部楼层
大家好,STM32F407ZG+NT35510+GT9147,屏幕显示驱动和触摸屏驱动已经移植完成,但是有一个小bug,按下button页面就乱了,按下button之外的地方,页面就恢复正常了,这是咋回事?是触摸屏驱动没写好吗?求大佬们指点,万分感谢!
链接:https://pan.baidu.com/s/1keAD5LdPvaT_6sQasz7yDg
提取码:d0r7
C:\Users\ning\Desktop\微信图片_20230826201310.jpg
C:\Users\ning\Desktop\微信图片_20230826201319.jpg
微信图片_20230826201310.jpg
微信图片_20230826201319.jpg
回复

使用道具 举报

3

主题

7

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2023-8-26 20:26:56 | 显示全部楼层
eric2013 发表于 2023-8-25 09:19
不用了解机制,注意你调用你的这个函数lcd_color_fill,注意它的坐标大小和位置就行。应该就是参数传递问 ...

非常感谢,现在重新传了参数,已经能正常显示了。但是触摸屏又有点问题,我已经在帖子最下方传了新的问题和工程,汉哥有空的时,帮忙指点一下,再次感谢
[C] 纯文本查看 复制代码
    if (gx_utility_rectangle_overlap_detect(&Limit, &canvas->gx_canvas_dirty_area, &Copy))
    {
        offset = Copy.gx_rectangle_top * canvas->gx_canvas_x_resolution;
        offset += Copy.gx_rectangle_left;
        offset /= 2;        
        get = canvas ->gx_canvas_memory;
        get += offset;

		p = (uint16_t *)get;

		lcd_draw_fast_rgb_color(dirty->gx_rectangle_left, dirty->gx_rectangle_top, dirty->gx_rectangle_right, dirty->gx_rectangle_bottom, p);//
	}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-8-27 00:29:39 | 显示全部楼层
ning0720 发表于 2023-8-26 20:26
非常感谢,现在重新传了参数,已经能正常显示了。但是触摸屏又有点问题,我已经在帖子最下方传了新的问题 ...

现在的触摸跟我分享的那种函数一样吧,没看到你的接口实现函数。
回复

使用道具 举报

3

主题

7

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2023-8-27 08:20:42 | 显示全部楼层
eric2013 发表于 2023-8-27 00:29
现在的触摸跟我分享的那种函数一样吧,没看到你的接口实现函数。

对,一样,驱动函数就用的你写好的TOUCH_PutKey,在touch.c的最下面,gtxxx.c中gt9xxx_scan扫描函数调用了TOUCH_PutKey,下面是两个截图,非常感谢

Snipaste_2023-08-27_08-15-44.jpg
Snipaste_2023-08-27_08-17-01.jpg
回复

使用道具 举报

3

主题

7

回帖

21

积分

新手上路

积分
21
 楼主| 发表于 2023-8-27 08:31:16 | 显示全部楼层
更新一下共享文件夹
链接:https://pan.baidu.com/s/1f4s4FFyxOIYV_COMgLzl0Q
提取码:8xbx
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-8-27 09:17:52 | 显示全部楼层
ning0720 发表于 2023-8-27 08:20
对,一样,驱动函数就用的你写好的TOUCH_PutKey,在touch.c的最下面,gtxxx.c中gt9xxx_scan扫描函数调用 ...

那没问题了。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-10 04:20 , Processed in 0.193271 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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