Rev1[EnglishRev1]1/301AN5051应用笔记使用STM32Chrom-GRC进行图形存储器优化前言LCD技术曾经是矩形显示器的专有技术.
最新发展创造出了非矩形LCD显示器.
这些显示器对于可穿戴设备等各种应用而言是非常有吸引力的.
STM32Chrom-GRC(GFXMMU)外设是STM32微控制器的新成员(参考表1:适用产品),可以有效支持这种非矩形显示器发展趋势.
GFXMMU只存储非矩形显示的可见部分,而在圆形显示的情况下,该外设存储图形帧缓冲器的内存需求可减少20%.
因此,GFXMMU让微控制器无需额外增加SDRAM/SDRAM存储设备.
由于不需要外部RAM和充分利用内部RAM的低功耗和高性能特性,嵌入GFXMMU的STM32微控制器为需要低功耗管理功能和高品质用户接口的可穿戴应用提供了合适的解决方案.
表1.
适用产品类型产品编号微控制器STM32L4+系列www.
st.
com目录AN50512/30DocID030788Rev1[EnglishRev1]目录1STM32Chrom-GRC(GFXMMU)说明61.
1GFXMMU特性61.
2智能架构中的GFXMMU62GFXMMU虚拟缓冲区82.
1虚拟缓冲区概述82.
2虚拟缓冲区使用情况82.
2.
1使用LTDC时的虚拟缓冲区使用情况92.
2.
2使用DMA2D时的虚拟缓冲区使用情况92.
3虚拟缓冲区工作模式93显示形状描述表103.
1LUT配置103.
2LUT计算示例104利用GFXMMU进行存储器优化135GFXMMU系统级操作156基本配置186.
1GFXMMU配置186.
1.
1GFXMMU虚拟缓冲区基址186.
1.
2GFXMMU块模式186.
1.
3GFXMMU物理帧缓冲区186.
1.
4GFXMMU默认值196.
1.
5GFXMMULUT196.
2LTDC配置196.
2.
1LTDC帧缓冲区196.
2.
2LTDC层间距196.
3DMA2D配置196.
3.
1DMA2D帧缓冲区196.
3.
2DMA2D行偏移207软件示例21DocID030788Rev1[EnglishRev1]3/30AN5051目录37.
1GFXMMU配置示例217.
1.
1使用STM32CubeMX的GFXMM配置217.
1.
2GFXMMU初始化代码227.
2LTDC配置示例227.
2.
1使用STM32CubeMX的LTDC配置227.
2.
2LTDC初始化代码247.
3DMA2D配置示例257.
3.
1DMA2D初始化257.
3.
2DMA2D将图像从闪存复制到帧缓冲区258应用程序示例269特别建议2710结论2811版本历史29表格索引AN50514/30DocID030788Rev1[EnglishRev1]表格索引表1.
适用产品1表2.
虚拟缓冲区行宽(以像素为单位)9表3.
32L4R9IDISCOVERY套件的圆形显示器的可见像素说明10表4.
LUT计算示例.
12表5.
针对390x390显示器的内存优化13表6.
文档版本历史29表7.
中文文档版本历史29DocID030788Rev1[EnglishRev1]5/30AN5051图片目录5图片目录图1.
具有GFXMMU的STM32L4+系列系统架构7图2.
虚拟缓冲区概述.
8图3.
圆形显示器的内存优化示例.
14图4.
块粒度开销14图5.
从非映射块进行读取15图6.
从映射块进行读取16图7.
向非映射块写入.
16图8.
向映射块写入17图9.
STM32CubeMX中的GFXMMULUT配置21图10.
GFXMMU物理帧缓冲区声明22图11.
GFXMMU初始化22图12.
STM32CubeMX中的LTDC层设置.
23图13.
LTDC初始化代码24图14.
DMA2D初始化代码25图15.
DMA2D将图像从闪存复制到帧缓冲区.
25图16.
GFXMMU应用程序示例26STM32Chrom-GRC(GFXMMU)说明AN50516/30DocID030788Rev1[EnglishRev1]1STM32Chrom-GRC(GFXMMU)说明GFXMMU是面向图形的内存管理单元,旨在根据显示形状来优化内存使用.
该外设允许微控制器仅将非矩形显示的可见部分存储在连续物理存储区域中,从而可以减少帧缓冲存储器占用空间.
由于可将帧缓冲区存储在内部RAM中,无需使用外部RAM,GFXMMU为图形应用提供了高度集成的解决方案.
该外设可提高性能、降低功耗并降低系统成本.
1.
1GFXMMU特性GFXMMU的主要特性如下所列:根据显示形状而降低内存使用率显示形状完全可配置透明集成适用于任何系统的内存1.
2智能架构中的GFXMMUGFXMMU同时拥有主、从两个接口.
主接口管理从不同存储器(闪存,SRAM,FMC,OCTOSPI)的访问.
从接口用来被不同的主设备(LTDC,DMA2D,CortexM,DMA,SDMMC)访问.
系统主机通过GFXMMU访问图形帧缓冲区.
GFXMMU在其从接口上接收读/写请求,并执行地址解析以确定目标物理地址.
然后它通过主接口将传输请求重定向到实际存储的物理地址内存中.
STM32L4+系列是首批集成了GFXMMU的STM32产品.
图1显示了嵌入GFXMMU的STM32L4+系列系统架构.
DocID030788Rev1[EnglishRev1]7/30AN5051STM32Chrom-GRC(GFXMMU)说明29图1.
具有GFXMMU的STM32L4+系列系统架构MSv17059V1-SIDSICodeDCodeCortex-M4DMA1DMA2DMA2DLCD-TFTSDMMC1GFXMMUGFXMMUAHB1AHB2FMCOCTOSPI1OCTOSPI2ACCELGFXMMUGFXMMUGFXMMUGFXMMU2MBSRAM1192KBSRAM264KBSRAM3384KBGFXMMU虚拟缓冲区AN50518/30DocID030788Rev1[EnglishRev1]2GFXMMU虚拟缓冲区GFXMMU虚拟缓冲区只允许将非矩形显示的可见部分存储在连续的物理内存区域中.
2.
1虚拟缓冲区概述虚拟缓冲区每行有3072或4096个字节,共1024行.
只有显示器的可见部分被映射到物理内存空间.
图2给出了GFXMMU虚拟缓冲区的概述.
图2.
虚拟缓冲区概述2.
2虚拟缓冲区使用情况使用GFXMMU时,通过虚拟缓冲区来访问图形帧缓冲区.
这种情况下,考虑到虚拟缓冲区行宽,LTDC和DMA2D必须有特殊配置.
MSv43800V1192/256δ3072/4096ε1024рNж16192/256*161024рN+1жрNжрNжрN+1жрN+1жDocID030788Rev1[EnglishRev1]9/30AN5051GFXMMU虚拟缓冲区292.
2.
1使用LTDC时的虚拟缓冲区使用情况LTDC层间距是从一行开始到下一行开始之间的字节数.
它在LTDC_LxCFBLR寄存器中进行配置,并以字节表示.
当LTDC使用GFXMMU虚拟缓冲区时,LTDC层间距等于虚拟缓冲区行宽(以字节为单位,即3072或4096).
2.
2.
2使用DMA2D时的虚拟缓冲区使用情况DMA2D缓冲区行偏移量加到每行末尾,来确定下一行的起始地址.
DMA2D缓冲区行偏移量以像素表示.
当使用GFXMMU虚拟缓冲区时,DMA2D缓冲区行偏移由以下公式给出:行偏移量=以像素计的虚拟缓冲区行宽-以像素计的图像宽度当DMA2D使用虚拟缓冲区时,行宽必须是整数像素.
注:在24bpp帧缓冲区的情况下,只有当虚拟缓冲区具有3072个字节宽度(对应于1024个像素)时,才能保证具有整数个像素.
2.
3虚拟缓冲区工作模式为了确保虚拟缓冲区在不同帧缓冲区色深时每行都具有整数个像素,有两种工作模式可以使用:256块模式在这种模式下,虚拟缓冲区每行有256块,每块16字节.
此模式对应的行宽为256x16=4096字节.
192块模式在这种模式下,虚拟缓冲区每行有192块,每块16字节.
此模式下的行宽为192x16=3072字节.
使用24bpp缓冲区时,引入192个块模式,可使得每行具有整数个像素.
表2给出了不同帧缓冲区色深时,以像素计的虚拟缓冲区行宽.
表2.
虚拟缓冲区行宽(以像素为单位)-32bpp24bpp16bpp8bpp192块模式768102415363072256块模式10241365.
3(1)1.
为了使每行具有整数个像素,在24bpp帧缓冲区中应避免使用256块模式.
20484096显示形状描述表AN505110/30DocID030788Rev1[EnglishRev1]3显示形状描述表GFXMMU允许MCU根据显示形状和大小仅将必要的块映射到物理内存位置.
显示形状描述表被存储在查找表(LUT)中.
3.
1LUT配置每行的LUT都必须有特定配置:行使能第一个可见块的编号最后一个可见块的编号物理缓冲区内,行的地址偏移量通过编程每行的地址偏移量,可见块能够以连续的方式排列在物理缓冲区中.
3.
2LUT计算示例本节介绍GFXMMULUT条目计算.
该示例基于32L4R9IDISCOVERY套件的390x390圆形显示屏.
在这个例子中,帧缓冲区具有16bpp的颜色格式.
每行的第一个和最后一个可见像素由显示器制造商提供.
表3描述了圆形显示器的第一个和最后一个可见像素.
本例中只有前四行.
表3.
32L4R9IDISCOVERY套件的圆形显示器的可见像素说明行号第一个可见像素最后一个可见像素行0181208行1172217行2164225行3158231DocID030788Rev1[EnglishRev1]11/30AN5051显示形状描述表29块号计算GFXMMU的每一个块对应为16字节的最小单元.
块号计算基于像素数量和帧缓冲区色深.
在以下等式中,色深以每像素的字节数(Bpp)表示.
第一个可见块是保存第一个像素的第一个字节的块.
第一个可见块号=(第一个可见像素xBpp)/块大小最后一个可见块是保存最后一个像素的最后一个字节的块:最后一个可见块号=(最后一个可见像素xBpp+Bpp-1)/块大小以表3为例,行0的可见像素包含在像素181至208之间,因此:行0的第一个可见块号=(181x2)/16=22行0的最后一个可见块号=(208x2+1)/16=26行偏移量计算行偏移量的定义为物理缓冲区中行的第一个可见块的偏移量.
它允许可见块以连续方式排列在物理缓冲区中.
行偏移量编码为22位,可以有负值,计算方法如下:行偏移量=(已使用的可见块数-第一个可见块号)x块大小其中:已经使用的可见块数包括所有先前行的可见块第一个可见块号,指的是当前行的第一个可见块号块大小=16字节行0偏移量=(0-22)x16=-352=0x3F:FEA0行1偏移量=(5-21)x16=-252=0x3F:FF00在计算每行的第一个和最后一个可见块以及行偏移之后,LUT条目按如下方式编程:LUT条目x的低位寄存器–LUTxL[23:16]使用最后一个可见块的值来编程–LUTxL[15:8]使用第一个可见块的值来编程–当该行使能时,LUTxL[0]置位行0LUT条目的低位寄存器:LUT0_L=0x001A1601LUT条目x的高位寄存器–LUTxH[21:4]使用该行的行偏移量来编程Line0LUT条目的高位寄存器:LUT0_H=0x003FFEA0显示形状描述表AN505112/30DocID030788Rev1[EnglishRev1]表4总结了计算32L4R9IDISCOVERY套件圆形显示屏前四行的LUT条目内容的步骤.
表4.
LUT计算示例行号第一个像素最后一个像素第一个块最后一个块每行的可见块已经使用的可见块行偏移量LUTxLLUTxH行0181208222650-3520x001A16010x003FFEA0行1172217212775-2560x001B15010x003FFF00行21642252028912-1280x001C14010x003FFF80行315823119281021320x001C13010x00000020DocID030788Rev1[EnglishRev1]13/30AN5051利用GFXMMU进行存储器优化294利用GFXMMU进行存储器优化GFXMMU优化所需的帧缓冲区大小计算如下:GFXMMU帧缓冲区优化大小=所用块数x块大小所用块数是所有行所用的所有块总和.
计算LUT后才能知道它的值.
不进行GFXMMU优化的帧缓冲区大小用以下公式计算:方形大小=帧宽度(以像素计)xBppx帧高度因此增益可按以下公式计算:增益大小=(方形大小-GFXMMU优化后的大小)/方形大小内存增益计算示例对于32L4R9IDISCOVERY套件的390x390圆形显示屏,使用16bpp帧缓冲区时所用的块数为15248块.
GFXMMU帧缓冲区优化后的大小=15248x16/1024=238.
25KB方形大小=390x2x390/1024=297.
07KB增益大小=(297.
07-238.
25)/297.
07=0.
198因此内存增益为19.
8%.
图形帧缓冲区上的增益大小取决于每像素位数.
对于圆形显示屏通常增益约为20%.
表5显示了不同色深下,32L4R9IDISCOVERY套件的390x390圆形显示屏的内存增益.
图3显示了与32L4R9IDISCOVERY套件的圆形显示器一起使用时的LTDC输出.
黑色区域表示未映射到物理内存的像素.
这是GFXMMU带来的实际内存增益.
当LTDC读取这些未映射到物理内存的像素时,GFXMMU返回一个默认值,该值在GFXMMU_DVR寄存器中编程(这种情况下为0x00).
蓝色区域表示映射到物理内存并在显示屏幕上可见的像素.
表5.
针对390x390显示器的内存优化模式方形尺寸(KB)GFXMMU优化后尺寸(KB)尺寸减少量(%)16bpp297.
1238.
319.
824bpp445.
6355.
420.
232bpp594.
1471.
020.
7利用GFXMMU进行存储器优化AN505114/30DocID030788Rev1[EnglishRev1]图3.
圆形显示器的内存优化示例块粒度开销图3中的灰色区域对应着映射到物理内存但在显示屏幕上不可见的像素.
这就是所谓的块粒度开销.
GFXMMU具有16字节的块粒度,所以一个块可以容纳多个像素.
对于边缘上的块(第一个和最后一个块),一些像素可能在屏幕上不可见.
例如,如果一行中的可见像素位于像素181和208之间,那么当使用16bpp帧缓冲区时,必须使能的第一个块是块22.
块22容纳了像素176至183.
所有这些像素都被映射并物理分配到内存中,但只有像素181到183在显示屏幕上可见(见图4).
图4.
块粒度开销尽管在内存中映射了一些不可见的像素,GFXMMU还是节省了大约20%的帧缓冲存储器空间.
MSv17061V1021222627192176177178179180181182183208209210211212213214215xxxxуxxxxDocID030788Rev1[EnglishRev1]15/30AN5051GFXMMU系统级操作295GFXMMU系统级操作当主设备尝试访问帧缓冲区时,它使用GFXMMU虚拟帧缓冲区地址.
该地址将事务映射到GFXMMU从接口.
通过其主端口,GFXMMU解析地址映射并将请求重定向到相应的物理地址.
下面介绍一些典型的使用场景.
从非映射块进行读取当主设备(例如LTDC)尝试从未映射到物理地址的虚拟缓冲区中读取地址时,GFXMMU响应为读取请求的默认值(参见图5).
该默认值在图形MMU默认值寄存器(GFXMMU_DVR)中编程.
图5.
从非映射块进行读取从映射块进行读取当主设备(例如LTDC)尝试从映射到物理地址的虚拟缓冲区中读取地址时,GFXMMU在其从端口上接收请求并确定相应物理地址.
然后GFXMMU通过其主端口发送读取请求到保存物理地址的相应存储器.
从属存储器将所请求的数据响应给GFXMMU,后者将其重定向到LTDC.
(参见图6).
MSv17062V1LTDCGFXMMUㄥ唎DMA2DSRAM2SRAM3LTDC1122GFXMMUㄥGFXMMUㄥGFXMMU系统级操作AN505116/30DocID030788Rev1[EnglishRev1]图6.
从映射块进行读取向非映射块写入GFXMMU在其从端口上从系统主设备(例如DMA2D)接收写入请求.
当请求的虚拟地址对应于非映射块时,忽略该写入操作.
(请参见图7).
图7.
向非映射块写入MSv17063V1DMA2DGFXMMU34GFXMMULTDCLTDC12GFXMMU1234LTDCSRAM2SRAM3GFXMMUㄥGFXMMUㄥMSv17064V1DMA2DSRAM2SRAM3LTDCDMA2D12GFXMMU12GFXMMUㄥGFXMMUㄥDocID030788Rev1[EnglishRev1]17/30AN5051GFXMMU系统级操作29向映射块写入当写入请求对应于映射到可见块的虚拟地址时,GFXMMU将虚拟地址转换为相应物理地址.
然后它通过其主端口将写入请求发送到保存目标物理地址的存储器(参见图8).
图8.
向映射块写入MSv17065V1SRAM2SRAM3DMA2D12GFXMMU12LTDCDMA2DGFXMMUㄥGFXMMUㄥ基本配置AN505118/30DocID030788Rev1[EnglishRev1]6基本配置本节介绍GFXMMU的基本配置以及与GFXMMU一起使用时的特定LTDC和DMA2D配置.
6.
1GFXMMU配置本章给出了使用GFXMMU的基本参数.
6.
1.
1GFXMMU虚拟缓冲区基址GFXMMU可允许设置最多四个虚拟缓冲区.
在STM32物理内存映射下,每个虚拟缓冲区都有自己的基址.
主设备使用虚拟缓冲区地址来访问帧缓冲区.
6.
1.
2GFXMMU块模式用户必须选择某一种块模式来配置GFXMMU(GFXMMU_CR.
192BM)(24bpp帧缓冲区除外,这种情况下必须使用192块模式来使每行具有整数个像素).
对于其他帧缓冲区色深,256块模式可支持更大的显示行宽.
6.
1.
3GFXMMU物理帧缓冲区对于每个虚拟缓冲区,可以在GFXMMU缓冲区配置寄存器GFXMMU_BxCR中分别配置物理帧缓冲存储器地址.
对于物理帧缓冲区地址选择,用户必须考虑其对齐、大小并避免缓冲区溢出.
对齐由于GFXMMU具有16字节的块粒度并且物理地址的四个LSB位被视为0,因此物理帧缓冲区地址必须是16字节对齐的.
大小在对LUT进行编程之后,可以使用以下公式来计算物理帧缓冲区的大小:物理帧缓冲区大小(KB)=所用总块数x块大小/1024缓冲区溢出物理缓冲区不能溢出由其基址定义的区域的8MB边界.
因此,GFXMMU_BxCR中编程的物理缓冲区地址必须保证缓冲区的第一个和最后一个映射块位于物理内存的同一个8MB区域中,以避免缓冲区溢出错误.
DocID030788Rev1[EnglishRev1]19/30AN5051基本配置296.
1.
4GFXMMU默认值当虚拟地址读取不属于物理映射的块时,GFXMMU默认值(GFXMMU_DVR)由GFXMMU返回.
6.
1.
5GFXMMULUTGFXMMULUT必须根据显示形状进行编程.
关于计算LUT条目的示例请参考第3.
2节.
注:显示形状描述表必须存储在非易失性存储器(例如内部闪存)中,然后用来编程GFXMMULUT条目.
6.
2LTDC配置本节介绍LTDC与GFXMMU一起使用的情况下LTDC的配置.
6.
2.
1LTDC帧缓冲区访问帧缓冲区时,LTDC必须使用四个GFXMMU虚拟帧缓冲区的其中一个.
LTDC层x颜色帧缓冲区地址寄存器(LTDC_LxCFBAR)必须使用GFXMMU虚拟缓冲区的地址进行编程.
6.
2.
2LTDC层间距当LTDC与GFXMMU一起使用时,必须仔细设置LTDC层颜色帧缓冲区间距(LTDC_LxCFBLR.
CFBP).
LTDC层间距以字节表示.
它取决于GFXMMU模块模式(GFXMMU_CR.
192BM):GFXMMU_CR.
192BM=1-->LTDC_LxCFBLR.
CFBP=3072字节GFXMMU_CR.
192BM=0-->LTDC_LxCFBLR.
CFBP=4096字节6.
3DMA2D配置当DMA2D源或目标使用虚拟缓冲区时,必须遵循特定的DMA2D配置.
6.
3.
1DMA2D帧缓冲区DMA2D帧缓冲区必须编程为四个GFXMMU虚拟缓冲区之一.
要编程的DMA2D帧缓冲寄存器是:如果目标是虚拟缓冲区,则DMA2D输出内存地址(DMA2D_OMAR).
如果源是虚拟缓冲区,则DMA2D输出前景或背景内存地址寄存器(DMA2D_FGMAR或DMA2D_BGMAR).
基本配置AN505120/30DocID030788Rev1[EnglishRev1]6.
3.
2DMA2D行偏移必须根据虚拟缓冲区宽度(以像素为单位)来计算DMA2D行偏移量(参见表2:虚拟缓冲区行宽(以像素为单位)).
要编程的DMA2D行偏移寄存器是:如果目标地址是虚拟帧缓冲区,则DMA2D输出行偏移(DMA2D_OOR.
LO).
如果源地址是虚拟帧缓冲区,则DMA2D输出层的行偏移(DMA2D_FGOR.
LO和DMA2D_BGOR.
LO).
DocID030788Rev1[EnglishRev1]21/30AN5051软件示例297软件示例本节介绍配置GFXMMU的软件示例.
本节还介绍了LTDC和DMA2D的示例.
7.
1GFXMMU配置示例本节介绍使用STM32CubeMX的GFXMMU配置和相应的初始化代码.
7.
1.
1使用STM32CubeMX的GFXMM配置在GFXMMU参数设置中,用户选择要使用的块模式和虚拟缓冲区.
当主设备尝试访问未映射块时,用户还可以更改GFXMMU返回的默认值.
在LUT配置界面(见图9)中,用户必须输入每行的第一个和最后一个可见像素,并且必须选择帧缓冲区色深.
STM32CubeMX自动生成第一个和最后一个块以及块偏移量.
还可计算物理帧缓冲区所需的内存占用量.
图9.
STM32CubeMX中的GFXMMULUT配置STM32CubeMX自动在"gfxmmu_lut.
h"头文件中生成LUT配置.
软件示例AN505122/30DocID030788Rev1[EnglishRev1]7.
1.
2GFXMMU初始化代码物理缓冲区:物理帧缓冲区必须对齐16个字节.
图10上的示例演示了如何使用三种不同的编译器(IAR,GNU和Arm编译器)将物理帧缓冲区与16字节对齐.
图10.
GFXMMU物理帧缓冲区声明STM32CubeMX根据LUT配置计算物理帧缓冲区大小.
GFXMMU初始化:示例见图11.
图11.
GFXMMU初始化根据用户在"LUT配置"窗口中输入的显示形状描述,gfxmmu_lut_config可由STM32CubeMX在"gfxmmu_lut.
h"头文件中自动生成.
它用来初始化LUT.
7.
2LTDC配置示例当使用GFXMMU时,LTDC从GFXMMU虚拟缓冲区读取数据,因此必须设置特定的LTDC配置.
7.
2.
1使用STM32CubeMX的LTDC配置LTDC层帧缓冲区地址利用GFXMMU虚拟缓冲区进行编程.
STM32CubeMX根据虚拟缓冲区行宽自动计算LTDC层间距(以像素计).
STM32CubeMX中的LTDC层设置示例见图12.
DocID030788Rev1[EnglishRev1]23/30AN5051软件示例29图12.
STM32CubeMX中的LTDC层设置软件示例AN505124/30DocID030788Rev1[EnglishRev1]7.
2.
2LTDC初始化代码LTDC初始化代码示例见图13.
图13.
LTDC初始化代码DocID030788Rev1[EnglishRev1]25/30AN5051软件示例297.
3DMA2D配置示例在这个例子中,DMA2D用来将图像从闪存复制到帧缓冲区.
对帧缓冲区的访问是通过GFXMMU完成的,因此DMA2D的目标地址是GFXMMU虚拟缓冲区.
输出偏移量必须考虑虚拟缓冲区行宽(以像素为单位).
7.
3.
1DMA2D初始化图14中是一个DMA2D初始化代码示例.
图14.
DMA2D初始化代码7.
3.
2DMA2D将图像从闪存复制到帧缓冲区DMA2D将图像从闪存复制到帧缓冲区的代码,请参考图15.
图15.
DMA2D将图像从闪存复制到帧缓冲区应用程序示例AN505126/30DocID030788Rev1[EnglishRev1]8应用程序示例一个典型的GFXMMU的应用实例如图16中所示.
在这个例子中,图形帧缓冲区位于内部SRAM中,图形基元存储在Octal-SPINOR闪存中.
DMA2D通过OCTOSPI接口从外部Octal-SPINOR闪存获取图形基元.
在创建图形帧缓冲区内容时,DMA2D向GFXMMU发送读/写请求,GFXMMU将请求重定向到物理SRAM内存(图16中蓝色路径).
在图形帧缓冲区显示期,LTDC通过GFXMMU(图16中粉色路径)从SRAM中获取帧缓冲区内容.
DSI主机串行化LTDC输出,使得STM32能够仅利用4个引脚与MIPIDSI显示器连接.
图16.
GFXMMU应用程序示例MSv17085V1pinsinterfaceLTDCDSIDMA2DOCTOSPICortex-M4Octal-SPIDMA2D/GFXMMUθSRAMLTDCGFXMMUSRAM1.
2390*390AmoledMIPIDSI1GFXMMU2MBGFXMMU640KBSRAMDocID030788Rev1[EnglishRev1]27/30AN5051特别建议299特别建议当访问用于地址解析的帧缓冲区时,GFXMMU会增加额外的等待状态(1WS).
即使存在这种额外的延迟,相比于使用位于外部存储器中的帧缓冲区(需要数十个周期),使用内部帧缓冲区的GFXMMU性能要好得多.
所以,当允许设备减小图形帧缓冲区大小以适应内部RAM时,使用GFXMMU非常有用.
有些情况下,不应使用GFXMMU,以避免访问帧缓冲区时的额外延迟:如果内部RAM已经足够存储图形帧缓冲区.
这种情况下,最好直接使用内部RAM,以便能够从0WS执行中获益.
注:如果认为进一步的内存优化要优先于额外的延迟,那么用户仍然可以使用GFXMMU.
vollcloud LLC创立于2020年,是一家以互联网基础业务服务为主的 技术型企业,运营全球数据中心业务。致力于全球服务器租用、托管及云计算、DDOS安 全防护、数据实时存储、 高防服务器加速、域名、智能高防服务器、网络安全服务解决方案等领域的智 能化、规范化的体验服务。所有购买年付产品免费更换香港原生IP(支持解锁奈飞),商家承诺,支持3天内无条件退款(原路退回)!点击进入:vollclo...
UCloud优刻得商家这几年应该已经被我们不少的个人站长用户认知,且确实在当下阿里云、腾讯云服务商不断的只促销服务于新用户活动,给我们很多老用户折扣的空间不多。于是,我们可以通过拓展选择其他同类服务商享受新人的福利,这里其中之一就选择UCloud商家。UCloud服务商2020年创业板上市的,实际上很早就有认识到,那时候价格高的离谱,谁让他们只服务有钱的企业用户呢。这里希望融入到我们大众消费者,你...
2022年春节假期陆续结束,根据惯例在春节之后各大云服务商会继续开始一年的促销活动。今年二月中旬会开启新春采购季的活动,我们已经看到腾讯云商家在春节期间已经有预告活动。当时已经看到有抢先优惠促销活动,目前我们企业和个人可以领取腾讯云代金券满减活动,以及企业用户可以领取域名优惠低至.COM域名1元。 直达链接 - 腾讯云新春采购活动抢先看活动时间:2022年1月20日至2022年2月15日我们可以在...