본문 바로가기
Embedded SW/[Infineon] Embedded SW Project

[Infineon] 11. Aurix (TC23x) TFT를 이용한 디버깅 환경 구축

by 방구석 임베디드 2021. 5. 25.
반응형

현재 나는 TFT가 장착된 개발보드를 이용하고 있다.

따라서 인피니언에서 제공하는 TFT 소스파일을 포팅하여 변수 및 그래프를

TFT 디스플레이로 실시간으로 확인할수 있다.

아래 블럭다이어 그램을 살펴보면 SPI 통신을 통해서 Control 되고 있음을 확인할수 있다.

추후, SPI도 다룰것이다.

우선, 인피니언 홈페이지에서 TC237 TFT Application SW를 다운 받고, TFT 관련된 SW를 포팅한다. 

그리고 아래와 같이 TFT 초기화 SW를 실행 시킨다.

void TFt_Init(void)
{
	/* Initialise the application state */
	g_AppCpu0.info.pllFreq = IfxScuCcu_getPllFrequency();
	g_AppCpu0.info.cpuFreq = IfxScuCcu_getCpuFrequency(IfxCpu_getCoreIndex());
	g_AppCpu0.info.sysFreq = IfxScuCcu_getSpbFrequency();
	g_AppCpu0.info.stmFreq = IfxStm_getFrequency(&MODULE_STM0);

	/*Init TFT-display*/
	tft_appl_init(1);

	/*Init the backroundlight*/
	background_light_init();
	graph_drawInfineonLogo();

	/*Init the performance measurement*/
	perf_meas_init();
	display_io_init();

}

 

참고로 모든 소스를 분석해도 좋지만, 최대한 기본 원리를 분석하고

제공하는 API를 잘 사용해서 Debuging 환경을 구축하는 것이 먼저이다.

 

따라서 우선 간단하게 디스플레이에 변수를 추가하여 보도록 하자!

void ISR_perf_meas_call(void)
{
    uint32 act_cpu0_idle_counter=cpu0_idle_counter;
#if IFXCPU_NUM_MODULES > 1
    uint32 act_cpu1_idle_counter=cpu1_idle_counter;
#endif
#if IFXCPU_NUM_MODULES > 2
    uint32 act_cpu2_idle_counter=cpu2_idle_counter;
#endif
    uint32 counter_diff;
    float32 cpu_load;

    /* now we go to a lower priotity than our OS_TICK that we don't have an overflow */
    __bisr(ISR_PRIORITY_OS_TICK-1);

    counter_diff = act_cpu0_idle_counter-cpu0_last_count_value;
    cpu0_last_count_value = act_cpu0_idle_counter;
    cpu_load = 100.0f - (float32)counter_diff/(g_AppCpu0.info.cpuFreq/100.0f/(float32)cpu0_ccnt_diff_min);
    // we printout if TFT is ready and conio initialized
    if (tft_ready == TRUE)
    {
        if (cpu_load < 0.0f) cpu_load = 0.0f;
    	conio_ascii_printfxy (DISPLAY_IO1, 1,  2, (uint8 *)"CPU0 Load %.3f %c ", cpu_load, 0x25);

        /*Add My Variable*/
        conio_ascii_printfxy (DISPLAY_IO1, 1,  3, (uint8 *)"Task1Ms Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_1MS]);
        conio_ascii_printfxy (DISPLAY_IO1, 1,  4, (uint8 *)"Task5Ms Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_5MS]);
        conio_ascii_printfxy (DISPLAY_IO1, 1,  5, (uint8 *)"Task10Ms Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_10MS]);
        conio_ascii_printfxy (DISPLAY_IO1, 1,  6, (uint8 *)"Task50Ms Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_50MS]);
        conio_ascii_printfxy (DISPLAY_IO1, 1,  7, (uint8 *)"Task100Ms Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_100MS]);
        conio_ascii_printfxy (DISPLAY_IO1, 1,  8, (uint8 *)"Task200Ms Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_200MS]);
        conio_ascii_printfxy (DISPLAY_IO1, 1,  9, (uint8 *)"Task500Ms Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_500MS]);
        conio_ascii_printfxy (DISPLAY_IO1, 1,  10, (uint8 *)"Task1s Cycle : %.3f ms", stCycleInfo.fCycleTaskMs[TASK_1S]);
        /*Add My Variable*/
        
        CpuLoad0.counter_diff = counter_diff;
        CpuLoad0.cpu_load = cpu_load;
    }
 }

위와 같이 기본적으로 제공하는 TFT Source 위에

Display IO1 Tab에 내가 원하는 변수를 추가하였다.

 

그렇다면 어떻게 디스플레이에서 보여지는 확인해 보도록 하자!

인피니언에서 제공하는 소스는 이렇게 5가지 Tab에서 다양한 변수를 추가하여 사용할수 있다.

현재는 DIS1의 변수를 추가하여 디버깅 환경을 구축한 것이다.

추후, 원하는 변수를 마음껏 디스플레이에서 확인할수 있다는 점이 참 좋은것 같다.

 

TFT가 포팅된 소스를 원하시는 댓글로 말씀주세요!

 

TFT를 좀더 다루어 보고, 최대한 활용할수 있을때 까지 활용하도록 하자!

그리고 나서, PWM, ADC 와 같은 자동차를 만들기 위한 기본 주변기기를 다루어 보도록 하자!

하나씩 천천히!!

 

반응형

댓글