/** ****************************************************************************** * File Name : TouchGFXHAL.cpp ****************************************************************************** * @attention * *

© Copyright (c) 2021 STMicroelectronics. * All rights reserved.

* * This software component is licensed by ST under Ultimate Liberty license * SLA0044, the "License"; You may not use this file except in compliance with * the License. You may obtain a copy of the License at: * www.st.com/SLA0044 * ****************************************************************************** */ #include /* USER CODE BEGIN TouchGFXHAL.cpp */ #include "stm32f7xx.h" #include #include #include "touchgfx-config.h" #if (TOUCHGFX_FREERTOS != 0) #include "FreeRTOS.h" #include "task.h" #endif // TOUCHGFX_FREERTOS using namespace touchgfx; CortexMMCUInstrumentation instrumentation; void TouchGFXHAL::initialize() { // Calling parent implementation of initialize(). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. // Please note, HAL::initialize() must be called to initialize the framework. TouchGFXGeneratedHAL::initialize(); setFrameBufferStartAddresses((void*)0xC0000000, (void*)0xC003FC00, (void*)0xC007F800); //enable the animation storage to allow slide animations lockDMAToFrontPorch(false); instrumentation.init(); setMCUInstrumentation(&instrumentation); enableMCULoadCalculation(true); } #if (TOUCHGFX_BAREMETAL != 0) void TouchGFXHAL::taskEntry() { static bool firstCall = true; if (firstCall) { firstCall = false; enableLCDControllerInterrupt(); enableInterrupts(); } OSWrappers::waitForVSync(); //backPorchExited(); // Not necessary to call here when it is done by the // OSWrappers::waitForVSync() method } #endif // TOUCHGFX_BAREMETAL /** * Gets the frame buffer address used by the TFT controller. * * @return The address of the frame buffer currently being displayed on the TFT. */ uint16_t* TouchGFXHAL::getTFTFrameBuffer() const { // Calling parent implementation of getTFTFrameBuffer(). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. return TouchGFXGeneratedHAL::getTFTFrameBuffer(); } /** * Sets the frame buffer address used by the TFT controller. * * @param [in] address New frame buffer address. */ void TouchGFXHAL::setTFTFrameBuffer(uint16_t* address) { // Calling parent implementation of setTFTFrameBuffer(uint16_t* address). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. TouchGFXGeneratedHAL::setTFTFrameBuffer(address); } /** * This function is called whenever the framework has performed a partial draw. * * @param rect The area of the screen that has been drawn, expressed in absolute coordinates. * * @see flushFrameBuffer(). */ void TouchGFXHAL::flushFrameBuffer(const touchgfx::Rect& rect) { // Calling parent implementation of flushFrameBuffer(const touchgfx::Rect& rect). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. // Please note, HAL::flushFrameBuffer(const touchgfx::Rect& rect) must // be called to notify the touchgfx framework that flush has been performed. TouchGFXGeneratedHAL::flushFrameBuffer(rect); // If the framebuffer is placed in Write Through cached memory (e.g. SRAM) then we need // to flush the Dcache to make sure framebuffer is correct in RAM. That's done // using SCB_CleanInvalidateDCache(). if ((SCB->CCR & SCB_CCR_DC_Msk) != 0) // Check data cache is enabled { SCB_CleanInvalidateDCache(); } } bool TouchGFXHAL::blockCopy(void* RESTRICT dest, const void* RESTRICT src, uint32_t numBytes) { return TouchGFXGeneratedHAL::blockCopy(dest, src, numBytes); } /** * Configures the interrupts relevant for TouchGFX. This primarily entails setting * the interrupt priorities for the DMA and LCD interrupts. */ void TouchGFXHAL::configureInterrupts() { // Calling parent implementation of configureInterrupts(). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. TouchGFXGeneratedHAL::configureInterrupts(); } /** * Used for enabling interrupts set in configureInterrupts() */ void TouchGFXHAL::enableInterrupts() { // Calling parent implementation of enableInterrupts(). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. TouchGFXGeneratedHAL::enableInterrupts(); } /** * Used for disabling interrupts set in configureInterrupts() */ void TouchGFXHAL::disableInterrupts() { // Calling parent implementation of disableInterrupts(). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. TouchGFXGeneratedHAL::disableInterrupts(); } /** * Configure the LCD controller to fire interrupts at VSYNC. Called automatically * once TouchGFX initialization has completed. */ void TouchGFXHAL::enableLCDControllerInterrupt() { // Calling parent implementation of enableLCDControllerInterrupt(). // // To overwrite the generated implementation, omit call to parent function // and implemented needed functionality here. TouchGFXGeneratedHAL::enableLCDControllerInterrupt(); } extern "C" { #if (TOUCHGFX_FREERTOS != 0) portBASE_TYPE IdleTaskHook(void* p) { if ((int)p) //idle task sched out { touchgfx::HAL::getInstance()->setMCUActive(true); } else //idle task sched in { touchgfx::HAL::getInstance()->setMCUActive(false); } return pdTRUE; } #endif // TOUCHGFX_FREERTOS } /* USER CODE END TouchGFXHAL.cpp */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/