Driver
드라이버 섹션에서는 개발자가 TouchGFX AL의 다양한 책임에 대한 드라이버를 선택할 수 있습니다.
Application Tick Source
애플리케이션을 발전시킬 수 있는 방법을 정의합니다. 개발자에게는 다음과 같은 옵션이 제공됩니다.
- LTDC - "Display" 그룹에서 인터페이스로 LTDC가 선택된 경우에는 Application Tick Source가 "LTDC"가 될 수 있습니다. 즉, TouchGFX Generator는
OSWrappers::signalVSync()
를 호출하여 애플리케이션을 구동하는TouchGFXGeneratedHAL
클래스에서 드라이버 함수(LTDC 인터럽트 핸들러)를 생성하게 됩니다. - Custom and FMC - 이 경우, 개발자는
OSWrappers::signalVSync()
를 반복적으로 호출하여 애플리케이션을 구동하는 핸들러를 구현해야 합니다.
Further reading
DMA2D Accelerator(ChromART)
DMA2D 그래픽 가속과 관련해 개발자에게 세 가지 옵션이 제공됩니다.
- No - 애플리케이션이 CPU만 사용해서 렌더링을 합니다.
- Yes - 애플리케이션이 가능한 경우에 ChromART 칩을 사용해서 픽셀을 이동시켜서 CPU 주기를 확보합니다. 드라이버는 TouchGFX Generator에서 생성되기 때문에 개발자는 어떤 조치도 취할 필요가 없습니다.
- Custom - TouchGFX Generator는 개발자가 맞춤형 그래픽 가속기에 대해 구현해야 하는 멤버 함수와 함께 TouchGFX Engine의 DMA 인터페이스에서 상속되는 일반 TouchGFX DMA 클래스를 생성합니다.
TouchGFX Generator에서 DMA2D 가속기를 선택할 수 있으려면 STM32CubeMX의 Multimedia 범주에서 이를 활성화해야 합니다.
TouchGFX Generator에서 생성되는 DMA2D(ChromART) 드라이버는 TransferCompleteInterrupt를 수신하는 두 가지 방법을 지원합니다.
- 콜백 함수를 dma2d 핸들
hdma2d.XferCpltCallback
에 등록하는 STM32Cube HAL 드라이버를 사용합니다. DMA2D_IRQHandler()
인터럽트 핸들러를 직접 사용합니다.
DMA2D IP에 대해 STM32CubeMX의 NVIC 설정에서 DMA2D 전역 인터럽트를 활성화 또는 비활성화하는 방법으로 두 방법 간의 전환이 가능합니다.
전역 인터럽트를 활성화하면 옵션 1)에 대한 코드가 생성되고, 전역 인터럽트를 비활성화하면 옵션 2)에 대한 코드가 생성됩니다.
Note
GPU2D Accelerator(NeoChrom)
GPU2D(NeoChrom)는 텍스처 매핑 및 벡터 렌더링.을 포함해 TouchGFX에서 다수의 그리기 작업을 가속화할 수 있는 그래픽 가속기입니다. RGB565, RGB888 및 ARGB8888 형식의 프레임 버퍼를 지원합니다.
GPU2D 그래픽 가속과 관련해 개발자에게 두 가지 옵션이 제공됩니다.
- No - 애플리케이션이 CPU만 사용해서 그리기 작업을 수행합니다.
- Yes - 애플리케이션이 가능한 경우에 NeoChrom 칩을 사용해서 TouchGFX에서 수행되는 많은 그리기 작업을 가속화합니다. 드라이버는 TouchGFX Generator에서 생성되기 때문에 개발자는 어떤 조치도 취할 필요가 없습니다.
TouchGFX Generator에서 GPU2D 가속기를 선택할 수 있으려면 STM32CubeMX의 Multimedia 범주에서 이를 활성화해야 합니다.
Note
활성화가 되면 TouchGFX Generator에 새 섹션 (GPU2D Driver)이 나타납니다.
GPU2D Command List Size 설정은 GPU2D에서 사용되는 명령 목록의 크기를 바이트 단위로 설정합니다.
GPU2D Memory Pool Location 설정을 통해 사용자는 GPU2D에서 사용되는 메모리 풀의 위치를 구성할 수 있습니다. 버퍼는 메모리에서 8바이트로 정렬되어야 합니다. 다음 옵션을 사용할 수 있습니다.
- By Allocation - 링커가 메모리 풀을 8바이트 정렬 주소에 배치하도록 합니다.
- By Address - 사용자가 메모리 풀의 시작 주소를 정의할 수 있습니다. 입력한 주소가 8바이트로 정렬되지 않은 경우에는 TouchGFX Generator에 오류가 표시됩니다.
Note
- Vector Rendering이 Disabled로 설정된 경우, 메모리 풀의 총 크기는 1kb 링 버퍼 + GPU2D 명령 목록 크기 + 5kb 추가 여유 공간이 됩니다.
- Vector Rendering이 Enabled로 설정된 경우, 메모리 풀의 총 크기는 1kb 링 버퍼 + GPU2D 명령 목록 크기 + (Display Width * Display Height 바이트) + 256바이트 LUT + 512바이드 그래디언트 + 5kb 추가 여유 공간이 됩니다.
실시간 운영 체제
개발자는 TouchGFX에서 어떤든 RTOS든 사용할 수 있습니다(심지어 No OS까지도). Abstraction Layer Architecture에서 설명했던 바와 같이, TouchGFX Engine은 OSWrappers
인터페이스를 사용하여 메인 이벤트 루프와 프레임 버퍼(들)를 사용자가 선택한 RTOS와 동기화합니다. 개발자가 TouchGFX Generator에서 운영 체제를 선택하면 선택한 OS의 프리미티브를 통해 내부적으로 동기화를 수행하기 위한 코드가 생성됩니다. 특히 스택 크기를 결정하려면 다른 무엇보다 이전과 마찬가지로 STM32CubeMX를 통해 운영 체제를 구성해야 합니다.
FreeRTOS(CMSIS OS V1 및 V2) 및 ThreadX(네이티브 미들웨어 또는 Azure RTOS 소프트웨어 팩)는 STM32CubeMX 내부에서 직접 구성이 가능하고, TouchGFX Generator는 작업 정의 및 TouchGFX RTOS 드라이버 모두를 위해 생성된 코드를 사용자에게 제공합니다. TouchGFX Generator는 어떤 CMSIS 호환 RTOS에서든 작동하는 CMSIS V1 및 CMSIS V2 호환 RTOS, ThreadX용 드라이버 및 운영 체제 없이 베어 메탈을 실행하기 위한 드라이버(No OS)를 생성할 수 있습니다.
No OS
운영 체제 없이 TouchGFX를 실행하려는 경우에 Middleware and Software Packs 범주에 활성화된 운영 체제가 없거나 STM32CubeMX에서 X-CUBE로 선택된 운영 체제가 없으면 TouchGFX Generator에서 No OS 옵션을 사용할 수 있습니다.
Further reading
FreeRTOS
TouchGFX Generator에서 CMSIS_RTOS_V1 또는 CMSIS_RTOS_V2 가속기를 선택할 수 있으려면 STM32CubeMX의 Middleware and Software Packs 범주에서 FreeRTOS를 활성화해야 합니다.
몇몇 TouchGFX Board Setups은 기본적으로 FreeRTOS 미들웨어가 아니라 ThreadX 또는 NoOS를 사용하도록 구성되어 있습니다(예: STM32U599). 이러한 TouchGFX Board Setups에서 여전히 FreeRTOS를 사용하고 싶다면 STM32CubeMX의 Software Packs Components Selector에서 X-CUBE-FreeRTOS 팩을 다운로드하고 이를 활성화해야 합니다.
Further reading
ThreadX
X-CUBE 소프트웨어 팩을 선택하거나 STM32CubeMX에서 기본 ThreadX 미들웨어를 활성화(선택한 MCU 장치에서 사용 가능한 경우)하는 방법으로 ThreadX를 활성화할 수 있습니다.
개발자는 ThreadX가 X-CUBE 소프트웨어 팩이나 특정 MCU 제품군을 위한 네이티브 ThreadX 미들웨어로 구성되어 있는지 확인해야 합니다.
Note
이후 섹션에서는 애플리케이션의 Middleware 또는 AZRTOS Software Pack으로 ThreadX를 활성화하는 방법을 보여줍니다.
Middleware and Software Packs 범주에서 ThreadX 활성화
TouchGFX Generator에서 ThreadX를 선택할 수 있으려면 STM32CubeMX의 Middleware and Software Packs 범주에서 ThreadX를 활성화해야 합니다.
일단 활성화가 되면 TouchGFX Generator에서 ThreadX 옵션을 사용할 수 있게 됩니다.
Further reading
X-CUBE 소프트웨어 팩에서 ThreadX 활성화
TouchGFX Generator에서 ThreadX를 선택하려면 STM32CubeMX의 Software Packs Component Selector에서 AZRTOS 소프트웨어 팩을 활성화해야 합니다. 프로젝트에서 STM32CubeMX의
프로젝트 메뉴에서 "Select Components" 버튼 또는 Alt + o를 클릭합니다.
다음 그림은 프로젝트에서 AZRTOS Software Pack을 활성화하는 방법을 보여줍니다. RTOS ThreadX를 선택하고 Core 확인란을 선택해서 ThreadX를 활성화하십시오. 패키지를 다운로드 및 설치(아직 완료되지 않은 경우)
프로젝트에 ThreadX 소프트웨어 팩을 추가하면 STM32CubeMX의 프로젝트 메뉴 왼쪽에 있는 Middleware and Software Packs 범주 아래에 X-CUBE가 표시됩니다.
ThreadX가 활성화되면 TouchGFX Generator에서도 사용 가능한 옵션이 되고, 이 옵션을 선택하고 나면 Memory Pool Size 및 Memory Stack Size 값이 나타납니다.
이러한 값들은 스레드 리소스를 포함할 수 있을 만큼 충분히 커야 합니다.
Further reading
기타 CMSIS 호환 OS
개발자가 STM32CubeMX가 제공할 수 있는 것과 다른 CMSIS 호환 OS를 요구하는 경우(FreeRTOS 및 ThreadX), RTOS 구성 및 작업 정의를 수동으로 수행해야 합니다. TouchGFX Generator는 개발자가 구현해야 하는 빈 OSWrappers
인터페이스를 생성합니다. 일반적으로 다음과 같은 수동 단계가 필요합니다.
- RTOS 구성
OSWrappers
인터페이스 구현- TouchGFX를 실행할 작업 정의(
MX_TouchGFX_Process
) - 스케줄러 시작
MX_TouchGFX_Process
를 호출하여 작업 핸들러 내에서 TouchGFX Engine 메인 루프 시작
void MX_TouchGFX_Process(void);