add screen library
This commit is contained in:
		
							
								
								
									
										208
									
								
								ide-touchgfx-gen/TouchGFX/target/TouchGFXHAL.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								ide-touchgfx-gen/TouchGFX/target/TouchGFXHAL.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,208 @@ | ||||
| /** | ||||
|   ****************************************************************************** | ||||
|   * File Name          : TouchGFXHAL.cpp | ||||
|   ****************************************************************************** | ||||
|   * @attention | ||||
|   * | ||||
|   * <h2><center>© Copyright (c) 2021 STMicroelectronics. | ||||
|   * All rights reserved.</center></h2> | ||||
|   * | ||||
|   * 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 <TouchGFXHAL.hpp> | ||||
|  | ||||
| /* USER CODE BEGIN TouchGFXHAL.cpp */ | ||||
|  | ||||
| #include "stm32f7xx.h" | ||||
| #include <touchgfx/hal/OSWrappers.hpp> | ||||
| #include <CortexMMCUInstrumentation.hpp> | ||||
| #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****/ | ||||
		Reference in New Issue
	
	Block a user