2020-08-26 09:41 AM
My config:
TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect) never call... (I am use TouchGFX gen. 4.14 and 4.13 designer)
Can you describe steps for run my simple design?
My GUI Task in freertos:
void TouchGFXHAL::taskEntry()
{
enableLCDControllerInterrupt();
enableInterrupts();
os_inited = true;
OSWrappers::waitForVSync();
backPorchExited();
for (;;)
{
OSWrappers::waitForVSync();
backPorchExited();
}
}
and
virtual void backPorchExited()
{
swapFrameBuffers();
tick();
}
2020-08-27 01:50 AM
Hello,
Is FlushFramebuffer called at least once ?
If nothing is written in the Framebuffer, the flushFramebuffer will not be called. Are you sure you draw something in your framebuffer ?
Please have a look at the L496G-DISCO board Application Template available in TouchGFX Designer, this implements the FMC display interface.
/Alexandre
2020-08-27 02:11 AM
No, flush framebuffer never call. I think need add call manually flush framebuffer in:
virtual void backPorchExited()
{
//swapFrameBuffers();
TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect);
tick();
}
void TouchGFX_TearingHandler(uint8_t PinStatus)
{
if (os_inited)
{
if (PinStatus) /* Raising edge : entering Active Area */
{
HAL::getInstance()->vSync();
OSWrappers::signalVSync();
// Swap frame buffers immediately instead of waiting for the task to be scheduled in.
// Note: task will also swap when it wakes up, but that operation is guarded and will not have
// any effect if already swapped.
//HAL::getInstance()->swapFrameBuffers();
}
else /* Falling edge : exiting active area */
{
HAL::getInstance()->frontPorchEntered();
}
}
}
This issue recommended use endFrame() for call flush. But I not understand where insert endFrame()...
https://community.st.com/s/question/0D50X0000BmnXT3/howto-trigger-flushframebufferrect
Example for redefine virtual function flush:
and
2020-08-27 05:33 AM
this code stoped in point -> No source available for "touchgfx::HAL::lockFrameBuffer() at 0x8009984"
function lockFrameBuffer() realised in static library touchgfx or need redefine this?
2020-08-27 06:07 AM
lockFrameBuffer() is a function from the lib. It does not need to be redefined.
lockFrameBuffer() calls OSWrappers::takeFrameBufferSemaphore();
So please check your OSWrappers.cpp file and monitor the state of your semaphores.
/Alexandre
2020-08-27 10:04 AM
If i give semaphore with some period ( OSWrappers::giveFrameBufferSemaphore(); or OSWrappers::giveFrameBufferSemaphoreFromISR(); ). The program remains in the lockFrameBuffer();
If i am redefine lockFrameBuffer(); in TouchGFXHAL module as:
uint16_t* TouchGFXHAL::lockFrameBuffer(void)
{
return getTFTFrameBuffer();
}
Then program escape from lockFrameBuffer. Where is the configuration error? I can share my project over github.
2020-08-28 12:52 AM
2020-09-09 12:14 AM
Hello,
I fixed this issue. I configured my project with "custom" graphic accelerator. But I changed configuration to DMA2D and my project successfully work.
Best Regards!
/Evgeny