Skip to main content
Mmale.1
Associate
January 9, 2021
Question

running TouchGFX_core from ITCM-RAM

  • January 9, 2021
  • 6 replies
  • 5227 views

hi everybody,happy new year.

I try to run TouchGFX project on STM32H750 Disco board

1.

in first level I run my project through QSPI,so i had frame lost and cant reach 60 frame per sec

2.

in second level i run my code from external sdram,i gain more performance but still i got lost frame

3.

in third level i run part of my code from internal flash and remained code from external flash,so there i got no frame lost.

but because there need for boot loader and other things to be placed in internal flash at later,so I have not space for my code(just i want test there execution code performance in third level )

4.

in level four I wanna to place touchGFX core in ITCMRAM as much as possible

(there is no enough space for all of touchgfx_core) but i got hard fault error

i attached excel file of compared items.

my project files is attached.

IAR 8.40.1 is my project IDE

my questions is :

1.why execute in place from QSPI is not like internal flash as ST company say?

2.can i move some part of TouchGFX core to ITCMRAM? how?what items should be concerned and what i should to do ?

3.do you have any or best idea for code execution place to got best performance ?

(need to concern i run it for 480*272 lcd but i need to run it for 480*800 pixel lcd at 30frame per sec at least.)

my *.icf file edited as follow :

/*###ICF### Section handled by ICF editor, don't touch! ****/

/*-Editor annotation file-*/

/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */

/*-Specials-*/

define symbol __ICFEDIT_intvec_start__ = 0xD007F800;

export symbol __ICFEDIT_intvec_start__;

/*-Memory Regions-*/

define symbol __ICFEDIT_region_ROM_TGFX_start__  = 0xD007F800;

define symbol __ICFEDIT_region_ROM_TGFX_end__    = 0xD01FFFFF; /* xxxx Kbytes for TouchGFX demo */

/*-Internal RAM Memory Regions-*/

define symbol __ICFEDIT_region_ITCMRAM_start__   = 0x00000000;

define symbol __ICFEDIT_region_ITCMRAM_end__     = 0x0000FFFF; /* 64 Kbytes */

define symbol __ICFEDIT_region_DTCMRAM_start__   = 0x20000000;

define symbol __ICFEDIT_region_DTCMRAM_end__     = 0x2001FFFF; /* 128 Kbytes */

define symbol __ICFEDIT_region_RAM_start__       = 0x24000000;

define symbol __ICFEDIT_region_RAM_end__         = 0x2407FFFF; /* 512 Kbytes */

/*-External RAM Memory Regions-*/

define symbol __ICFEDIT_region_SDRAM_start__     = 0xD0000000; /*  8 Mbytes */

define symbol __ICFEDIT_region_SDRAM_end__       = 0xD07FFFFF;

/*-Quad-SPI Memory Regions-*/

define symbol __ICFEDIT_region_QSPI_TGFX_start__ = 0x90200000;

define symbol __ICFEDIT_region_QSPI_TGFX_end__   = 0x97FFFFFF; /* 126 Mbytes for TouchGFX demo */

/*-Sizes-*/

define symbol __ICFEDIT_size_cstack__ = 0x1000;

define symbol __ICFEDIT_size_heap__ = 0x1000;

/**** End of ICF editor section. ###ICF###*/

define memory mem with size = 4G;

define region ROM_TGFX_region  = mem:[from __ICFEDIT_region_ROM_TGFX_start__  to __ICFEDIT_region_ROM_TGFX_end__];

define region ITCMRAM_region   = mem:[from __ICFEDIT_region_ITCMRAM_start__   to __ICFEDIT_region_ITCMRAM_end__];

define region DTCMRAM_region   = mem:[from __ICFEDIT_region_DTCMRAM_start__   to __ICFEDIT_region_DTCMRAM_end__];

define region RAM_region       = mem:[from __ICFEDIT_region_RAM_start__       to __ICFEDIT_region_RAM_end__];

define region SDRAM_region     = mem:[from __ICFEDIT_region_SDRAM_start__     to __ICFEDIT_region_SDRAM_end__];

define region QSPI_TGFX_region = mem:[from __ICFEDIT_region_QSPI_TGFX_start__ to __ICFEDIT_region_QSPI_TGFX_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };

define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite, section LIB_CODE };

do not initialize { section .noinit, section TouchGFX_Framebuffer, section BmpCacheSection };

place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec };

place at address mem:0x08000000 { section .Bootloader };

place in DTCMRAM_region    { };

place in RAM_region        { first readwrite, block CSTACK, block HEAP, last section sdio_heap };

place in SDRAM_region      { first section TouchGFX_Framebuffer, last section BmpCacheSection };

place in ROM_TGFX_region   { readonly };

place in QSPI_TGFX_region  { first section ExtFlashSection

                           , section TextFlashSection

                           , section FontFlashSection };

define block LIB_CODE with fixed order

{

 //readonly object      LCD16bpp.o

};

place in ITCMRAM_region { block LIB_CODE };

This topic has been closed for replies.

6 replies

MM..1
Super User
January 9, 2021

Maybe only i tip, check your code to use address 0 directly, this maybe corrupt your lib placed here...

Mmale.1
Mmale.1Author
Associate
January 9, 2021

thank you but can you plz explain more?

what is your mean?

MM..1
Super User
January 9, 2021

For example interrupt table is copied to ITCM , or ...

V.H
Senior
December 29, 2021

I want to run some part of (touchgfx_core.lib) function in ITCM, such as function interrupt used.

ITCM only has 64KB, I cannot pull all function into ITCM.

Have you solved your problem?