197 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			197 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /**
 | |
|   ******************************************************************************
 | |
|   * 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 "FreeRTOS.h"
 | |
| //#include "task.h"
 | |
| 
 | |
| 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);
 | |
| }
 | |
| 
 | |
| 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
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * 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().
 | |
| 
 | |
|     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"
 | |
| {
 | |
| //    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;
 | |
| //    }
 | |
| }
 | |
| 
 | |
| /* USER CODE END TouchGFXHAL.cpp */
 | |
| 
 | |
| /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
 |