주요 내용으로 건너뛰기

9. Touch Controller

개요

사용자가 애플리케이션과 상호 작용을 할 수 있으려면 터치 컨트롤러에서 터치 좌표를 읽어올 수 있어야 합니다. 이 단계에서 개발된 코드는 이후 단계에서 TouchGFX 추상화 계층(Al) 을 개발하는 데 사용됩니다.

Note
터치 컨트롤러가 보드 브링업과 관련이 없다면 이 단계를 건너뛰십시오.

목표

디스플레이의 터치 컨트롤러에서 터치 좌표를 읽어올 수 있게 하는 것이 이 단계의 목표입니다.

확인

다음은 이 섹션에서 확인해야 할 사항입니다:

확인사항확인근거
터치 컨트롤러 및 MCU의 구성 여부MCU는 I2C 같은 터치 컨트롤러에서 읽어올 수 있도록 구성되어야 합니다.
터치 컨트롤러 레지스터의 판독 가능 여부TouchGFX 추상화 계층(Al)은 이 코드를 사용해 컨트롤러에서 터치 좌표를 가져올 수 있습니다.
읽기 작업이 예상대로 수행되는지 여부애플리케이션 렌더링 시간에 폴링 시간이 포함되어 있습니다. 폴링에 너무 많은 시간이 소요되는 경우 터치 폴링을 다른 스레드로 옮기거나 인터럽트 기반으로 만들어야 합니다.

전제 조건

  • 터치 컨트롤러가 장착된 디스플레이
  • 터치 컨트롤러에서 읽어오기 위한 드라이버

실행

이 단계는 두 가지 요소로 이루어져 있는데, 터치 컨트롤러와 통신하도록 MCU를 구성하는 부분과 애플리케이션이 터치 컨트롤러와 데이터를 주고 받도록 드라이버 코드를 작성하는 부분입니다.

대부분의 터치 컨트롤러는 I2C 버스에 연결되어 있습니다. I2C 통신은 STM32CubeMX에 Connectivity -> I2C1 아래에서 구성됩니다.

I2C 구성

대다수의 STM32 MCU들이 I2C 컨트롤러를 1개 이상 가지고 있으므로 터치 컨트롤러에 연결된 것을 선택하십시오. 해당 GPIO도 반드시 구성해야 합니다.

터치 컨트롤러를 위한 드라이버 코드가 없는 경우에는 처음부터 새로 작성해야 합니다. MCU를 위한 STM32Cube 펌웨어에는 I2C 통신을 위한 예시가 포함되어 있는데, 이것이 시작점이 될 수 있습니다. 터치 좌표를 얻기 위해 읽어와야 할 레지스터의 정보는 터치 컨트롤러의 데이터 시트에서 확인하십시오. 가장 먼저 터치 컨트롤러의 I2C 주소를 확인한 다음, 테스트를 위해 'device id' 레지스터를 읽어옵니다.

기본 I2C를 실행하고 있다면 추후에 TouchGFX에 통합할 때 필요한 드라이버 함수를 개발해야 합니다. 이 함수는 터치가 있으면 true를, 없으면 false를 반환하며 좌표를 제공하게 됩니다.

아래의 코드 예시에는 myTouchController_GetState 함수를 통해 추상화되고 있는 드라이버 코드의 정보를 보여줍니다.

main.c
    uint16_t x;
uint16_t y;

TouchControllerState state;
if (myTouchController_GetState(&state))
{
x = state.touchY;
y = state.touchX;
//break point here
}

터치 컨트롤러에서 올바른 x, y 값이 수신되었는지 디버거를 통해 확인하십시오.

몇몇 터치 컨트롤러는 여러 개의 터치 포인트를 보고할 수 있는데, TouchGFX에서는 지원되지 않는 기능이므로 무시하셔도 좋습니다. 대부분의 경우는 첫 번째 터치 포인트를 선택합니다.

"TouchGFX AL 개발" 문서의 추상화 계층에 TouchGFX에 이러한 값을 전송하는 방법이 설명되어 있습니다.

예상대로 성능이 발휘되는지 여부

TouchGFX 애플리케이션과 동일한 스레드에서 코드가 실행되는 경우, 1ms 내에 터치를 샘플링하는 것이 가능합니다. 속도가 만족스럽지 않은 경우에는 이후 단계에서 코드를 별도의 작업으로 옮기는 방안을 고려해보십시오.