您尚未登录。

楼主 #1 2020-10-22 12:06:56

sjshe3326
会员
注册时间: 2020-10-19
已发帖子: 123
积分: 67.5

F1C100S裸跑实现硬件多图层叠加和Alpha

使用论坛里裸跑 Framebuffer,原始代码只使用了Display Engine种back-end模块的Layer0图层.使用外部2个vbuf作为缓存。
DEbe可以支持4个图层的alpha和叠加等操作。这里测试了下,使用2个图层Layer0 和 Layer1。关闭alpha,只用了叠加(color key)。
效果参考视频。

修改部分主要是 f1c100s_debe_set_mode 函数设置Debe的模式,就可以了。

inline static void f1c100s_debe_set_mode(fb_f1c100s_pdata_t * pdat)
{
	struct f1c100s_debe_reg_t * debe = (struct f1c100s_debe_reg_t *)(pdat->virtdebe);
	uint32_t val;
        
    // F1C200s DEbe模块使用双图层 //
    
    // 是能 DEbe模块 //
	val = read32((virtual_addr_t)&debe->mode);
	val |= (1 << 0);
	write32((virtual_addr_t)&debe->mode, val);
    
    // 显示尺寸 //
	write32((virtual_addr_t)&debe->disp_size, (((pdat->height) - 1) << 16) | (((pdat->width) - 1) << 0));

    // 背景颜色 //
	write32((virtual_addr_t)&debe->backcolor, (0x00503050) );
    
    // 颜色KEY //
	write32((virtual_addr_t)&debe->color_key_max, (0x00FFFFFF) );
	write32((virtual_addr_t)&debe->color_key_min, (0x00303030) );	
	write32((virtual_addr_t)&debe->color_key_config, (0x0000003F) );	
			
	// Layer0 设置 //
	write32((virtual_addr_t)&debe->layer0_size, (((pdat->height) - 1) << 16) | (((pdat->width) - 1) << 0));     // Layer0 尺寸 pos默认0//
	write32((virtual_addr_t)&debe->layer0_stride, ((pdat->width) << 5));                                        // Layer0 帧缓存行尺寸 480*32//
	write32((virtual_addr_t)&debe->layer0_addr_low32b, (uint32_t)(pdat->vram[0]) << 3);                         // Layer0 帧缓存地址 //
	write32((virtual_addr_t)&debe->layer0_addr_high4b, (uint32_t)(pdat->vram[0]) >> 29);
	write32((virtual_addr_t)&debe->layer0_attr1_ctrl, 0x09 << 8);                                               // Layer0 32BPP//
	write32((virtual_addr_t)&debe->layer0_attr0_ctrl, (0x80 << 24) | (0 << 18) | (1 << 15) | (3 << 10) | (0) );// Layer0 Pipe1 优先级3/
	
    // Layer1 设置 //
	write32((virtual_addr_t)&debe->layer1_size, (((pdat->height) - 1) << 16) | (((pdat->width) - 1) << 0));     // Layer1 尺寸 pos默认0//
	write32((virtual_addr_t)&debe->layer1_stride, ((pdat->width) << 5));                                        // Layer1 帧缓存行尺寸 480*32//
	write32((virtual_addr_t)&debe->layer1_addr_low32b, (uint32_t)(pdat->vram[1]) << 3);                         // Layer1 帧缓存地址 //
	write32((virtual_addr_t)&debe->layer1_addr_high4b, (uint32_t)(pdat->vram[1]) >> 29);
	write32((virtual_addr_t)&debe->layer1_attr1_ctrl, 0x09 << 8);                                               // Layer1 32BPP//
	write32((virtual_addr_t)&debe->layer1_attr0_ctrl, (0xF0 << 24) | (1 << 18) | (0 << 15) | (2 << 10) | (0) );// Layer1 Pipe0 优先级2/


		
    // Layer 0/1 使能 //
	val = read32((virtual_addr_t)&debe->mode);
	val |= (1 << 8);        // Layer 0
    val |= (1 << 9);        // Layer 1
	write32((virtual_addr_t)&debe->mode, val);

    // Auto load mode //
	val = read32((virtual_addr_t)&debe->reg_ctrl);
	val |= (1 << 0);
	write32((virtual_addr_t)&debe->reg_ctrl, val);
    
    // start DEbe //
	val = read32((virtual_addr_t)&debe->mode);
	val |= (1 << 1);
	write32((virtual_addr_t)&debe->mode, val);
}

离线

楼主 #2 2020-10-22 12:13:53

sjshe3326
会员
注册时间: 2020-10-19
已发帖子: 123
积分: 67.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

离线

#3 2020-10-22 12:54:52

孤星泪
会员
注册时间: 2020-03-18
已发帖子: 235
积分: 231

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

优秀!请问楼主是基于哪个项目做的呢?

离线

楼主 #4 2020-10-22 18:33:07

sjshe3326
会员
注册时间: 2020-10-19
已发帖子: 123
积分: 67.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

硬件是 tiny200 r3。
软件是达克罗德大神的裸跑代码:
F1C100S裸奔framebuffer+PWM+GPIO驱动
http://whycan.com/t_1457.html
(出处:哇酷开发者社区【全志 V3S/F1C100s/X3】)

离线

#5 2020-10-22 23:55:22

sea18c
会员
注册时间: 2019-08-05
已发帖子: 230
积分: 222.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

不错不错,裸机又完善一步了。

离线

#6 2020-10-23 08:25:25

达克罗德
会员
注册时间: 2018-04-10
已发帖子: 1,133
积分: 1085.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

感谢分享!请问双图层支持pixel级别alpha还是全局alpha?

离线

楼主 #7 2020-10-23 09:04:12

sjshe3326
会员
注册时间: 2020-10-19
已发帖子: 123
积分: 67.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

看寄存器说明是全图层alpha  公用一个alpha参数。
不过图层可以不和lcd尺寸一样,这样可以利用多个图层设置不同尺寸大小实现局部的alpha效果。

离线

#8 2020-10-24 01:16:07

vip888888
会员
注册时间: 2020-07-16
已发帖子: 141
积分: 138

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

楼主我看手册上有个yuv输出到layer层显示的,不知道那个你有没有看下。如果这功能可以的话,直接上个摄像头扫描到LCD上显示就很快了。

离线

#9 2020-10-24 11:45:24

mwin
会员
注册时间: 2018-10-25
已发帖子: 30
积分: 15

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

优秀!我也要移一下学习一下;

离线

楼主 #10 2020-10-26 13:24:28

sjshe3326
会员
注册时间: 2020-10-19
已发帖子: 123
积分: 67.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

花了几天时间,裸机 RGB接口LCD显示、SPI,ADC-key,音频ADC,GPIO。都调通了。I2C / PWM 也简单。
准备把CSI调一下,裸机的外设就基本齐全了。准备把外设代码参考stm的方式 重新改一遍,做一套裸机库。
准备做个产品板,大家一起的看看想做成什么样的东西来玩。

离线

#11 2020-10-27 09:59:03

sea18c
会员
注册时间: 2019-08-05
已发帖子: 230
积分: 222.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

如果能开源就好咯

离线

#12 2020-10-27 13:23:30

haoxiaobing
会员
注册时间: 2020-10-02
已发帖子: 9
积分: 9

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

mark

离线

#13 2021-07-19 08:44:28

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 222
积分: 121

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

这个貌似只能跑轻量级的OS。毕竟RAM就64MB。要是IC自带大一点的RAM就好了。例如512MB或者1GMB。那样就可以玩安卓

离线

#14 2021-07-19 08:46:33

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 222
积分: 121

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

不过好像一般IC都不会自带大的RAM,要么是自带一个小的,要么是不自带,需要外挂。

离线

#15 2021-07-19 08:48:04

sunxiang
会员
注册时间: 2021-05-05
已发帖子: 222
积分: 121

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

全志H3、A33都是不自带,需要外挂。全志V3S、F1CX00S就是都自带一个比较小的。

离线

#16 2021-09-19 11:55:03

lg676041036
会员
注册时间: 2021-07-09
已发帖子: 35
积分: 34

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

不知道alpha功能能不能移植到LVGL上?

离线

#17 2022-02-24 12:04:02

bigbat
会员
注册时间: 2022-01-30
已发帖子: 71
积分: 21

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

       write32((virtual_addr_t)&debe->layer0_size, (((pdat->height) - 1) << 16) | (((pdat->width) - 1) << 0));     // Layer0 尺寸 pos默认0//
	write32((virtual_addr_t)&debe->layer0_stride, ((pdat->width) << 5));                                        // Layer0 帧缓存行尺寸 480*32//
	write32((virtual_addr_t)&debe->layer0_addr_low32b, (uint32_t)(pdat->vram[0]) << 3);                         // Layer0 帧缓存地址 //
	write32((virtual_addr_t)&debe->layer0_addr_high4b, (uint32_t)(pdat->vram[0]) >> 29);
	write32((virtual_addr_t)&debe->layer0_attr1_ctrl, 0x09 << 8);                                               // Layer0 32BPP//
	write32((virtual_addr_t)&debe->layer0_attr0_ctrl, (0x80 << 24) | (0 << 18) | (1 << 15) | (3 << 10) | (0) );// Layer0 Pipe1 优先级3/
	

write32((virtual_addr_t)&debe->layer0_addr_low32b, (uint32_t)(pdat->vram[0]) << 3);
帧缓存地址中的地址是DRAM地址吗?

最近编辑记录 bigbat (2022-02-24 12:05:07)

离线

#20 2023-09-01 09:47:57

nature_hln
会员
注册时间: 2023-09-01
已发帖子: 2
积分: 7

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

请教楼主,colorkey能用吗?

离线

#21 2023-10-18 11:31:04

wenjiu1111
会员
注册时间: 2023-08-31
已发帖子: 3
积分: 3

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

楼主,这个是开的双缓冲吗?

离线

楼主 #23 2023-11-03 18:05:00

sjshe3326
会员
注册时间: 2020-10-19
已发帖子: 123
积分: 67.5

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

nature_hln 说:

请教楼主,colorkey能用吗?

可以用。不过这个代码没有。我在其他代码试过了

离线

#24 2024-01-26 14:01:30

paul_zdchun
会员
注册时间: 2024-01-23
已发帖子: 26
积分: 6

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

4个图层吧,双缓冲也不行了

wenjiu1111 说:

楼主,这个是开的双缓冲吗?

离线

#25 2024-01-30 05:51:11

paul_zdchun
会员
注册时间: 2024-01-23
已发帖子: 26
积分: 6

Re: F1C100S裸跑实现硬件多图层叠加和Alpha

color key是什么东东

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn