大家好,欢迎来到IT知识分享网。
目录
TLI即TFT-LCD Interface,连接的TFT屏为RGB 24位接口(向下兼容RGB18、RGB16接口,颜色的pin不接低位即可)。TLI支持两个独立的显示层,并支持层窗口和层混叠功能。
最大支持像素是2048×2048,最高支持ARGB8888。
1 IO初始化
RGB接口对应的IO全部都是AF14,无上下拉,输出上拉,频率为200MHz。
/* configure HSYNC(PI10), VSYNC(PI9), PCLK(PG7) */ /* configure LCD_R7(PG6), LCD_R6(PH12), LCD_R5(PH11), LCD_R4(PH10), LCD_R3(PH9),LCD_R2(PH8), LCD_R1(PH3), LCD_R0(PH2), LCD_G7(PI2), LCD_G6(PI1), LCD_G5(PI0), LCD_G4(PH15), LCD_G3(PH14), LCD_G2(PH13),LCD_G1(PE6), LCD_G0(PE5),LCD_B7(PI7), LCD_B6(PI6), LCD_B5(PI5), LCD_B4(PI4), LCD_B3(PG11),LCD_B2(PG10), LCD_B1(PG12), LCD_B0(PE4) */
还有一个GPIOB15用于屏幕的背光控制。
2 初始化TLI
2.1 使能RCU
RCU_APB2EN的位26为1表示使能TLI的时钟。
2.2 配置PLLSAI
GD32F450内部有3个锁相环,PLL、PLLI2S和PLLSAI。其中PLLSAI用于TLI模块的时钟源。开发板频率源是对应CK_HXTAL(25MHz),即PLLSEL(寄存器RCU_PLL中的位22)设置选择的是CK_HXTAL.
寄存器RCU_PLLSAI配置对应的N、P、R三个参数。
PLLSAI的VCCO源 = CK_PLLSRC / PLLPSC, CK_PLLSRC = 25M, PLLPSC设置为16。
PLLSAI的VCCO输出频率 = N * PLLSAI的VCCO源
PLLSAI的P输出频率 = VCCO输出频率 / P,提供48M给USB
PLLSAI的R输出频率 = VCCO输出频率 / R, 提供给TLI
例程设置的N,P,R参数分别为192,2, 3。即
PLLSAI的VCCO输出频率 = 192 * 25 / 16 = 300M
PLLSAI的P输出频率 = 300 / 2 = 150M
PLLSAI的R输出频率 = 300 / 3 = 100M
DIV由寄存器RCU_CFG1的位16和位17设置。
设置为CK_PLLSAIR / 8,即TLI的输出频率为12.5M
通过寄存器RCU_CTL的位28设置CK_PLLSAI使能,然后通过判断RCU_CTL的位29为1确认PLLSAI稳定。
2.3 配置TFT参数
2.3.1 同步脉冲宽度寄存器 (TLI_SPSZ)
对应TFT屏的参数
V方向上同理。
2.3.2 后沿宽度寄存器 (TLI_BPSZ)
如2.3.1中的图,HBPSZ = thp + thb
2.3.3 有效宽度寄存器 (TLI_ASZ)
如2.3.1中的图,TLI_ASZ = thp + thb + width
开发板上用的是480×272的屏,即TLI_ASZ = thp + thb + 480。
2.3.4 总宽度寄存器 (TLI_TSZ)
2.3.5 背景色配置寄存器 (TLI_BGC)
2.3.6 设置信号极性
通过控制寄存器 (TLI_CTL)设置信号极性
3 初始化层
3.1 设置层的窗口位置和大小
对应层水平位置参数寄存器 (TLI_LxHPOS)和垂直位置参数寄存器 (TLI_LxVPOS)
TLI_LxHPOS(layerAddr) = (uint32_t)(((uint32_t)layerConfig.x + TFT_H_SYNC + TFT_H_BACK_PORCH) | ((uint32_t)(layerConfig.x + layerConfig.w + TFT_H_SYNC + TFT_H_BACK_PORCH - 1) << 16U)); TLI_LxVPOS(layerAddr) = (uint32_t)(((uint32_t)layerConfig.y + + TFT_V_SYNC + TFT_V_BACK_PORCH) | ((uint32_t)(layerConfig.y + layerConfig.h + TFT_V_SYNC + TFT_V_BACK_PORCH - 1) << 16U));
3.2 设置层的像素格式
像素格式寄存器 (TLI_LxPPF)
其中AL88, AL44和L8格式是LUT(颜色查找表)格式。在这些通道里, L是颜色查找表的地址。 TLI有两个内部颜色查找表:每层各一个。
3.3 设置层的Alpha值
层恒定 Alpha 寄存器 (TLI_LxSA),Alpha值是整个层的透明度值。
3.4 设置层的默认颜色
层默认颜色寄存器 (TLI_LxDC),除窗口(3.1设置的窗口位置和大小)以外的区域默认的颜色。
3.5 设置层的帧基地址
层帧基地址寄存器 (TLI_LxFBADDR),即窗口内显示数据的地址。
3.6 设置窗口的行长度
层行长度寄存器 (TLI_LxFLLEN)
TLI_LxFLLEN(layer) = ((uint32_t)((uint32_t)layerConfig.w * stride + 3) |((uint32_t)layerConfig.w * stride <<16U));
其中stride和设置的像素格式有关,比如格式为ARGB8888,即一个像素4个字节,stride等于4,而格式如果为ARGB1555,即一个像素2个字节,stride等于2。
3.7 设置窗口的总行数
层总行数寄存器 (TLI_LxFTLN)
TLI_LxFTLN(layer) = (uint32_t)layerConfig.h;
3.8 设置层配置重载方式
设置完层的各个寄存器后,这些设置并一定是立即更新的,可以通过设置重载层配置寄存器 (TLI_RL)要求GD32F450重载这些配置。
4 总结
只初始化TLI即可以看到BG层在屏上的显示,可以修改TLI_BGC的值,可以看到屏幕显示颜色的变化。
层定义好后,屏幕显示的内容就能映射到内存上,这样改变内存内容即可实现显示内容的更新,2个层就可以实现图形显示更新时不花屏了。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/140686.html