AUTOSAR GPT 실습#
본 실습은 IO 실습을 완료한 이후 추가로 진행하는 실습이다. 따라서 IO 실습에서 작성한 프로젝트 환경(
SWC_IOTest,R_SW05,R_LED_Green,R_Pot,R_LED_Blue포트 및RE_IOTestRunnable,SWC_IOTest.c등)을 그대로 가져온 상태에서 시작한다.
0. 목차#
- Gpt 모듈 설정 (Channel Configuration)
- SW Component 설정 (Port 생성)
- Runnable 설정
- ECU Software Components Mapping
- Harmonize
- IoHwAb Gpt 설정
- Service I/O 연결
- C coding
- Build
1. Gpt 모듈 설정 (Channel Configuration)#
Ecu → Mcal → Ecud_Gpt.arxml → Gpt를 더블클릭하여 연다. 이후 All Contents → Gpt → GptChannelConfigSet → Channel Configuration으로 이동한다.

+ 버튼을 클릭하여 새로운 채널을 추가하고, 아래와 같이 설정한다.
- Short Name :
GptChannelConfiguration_GPTTest - Channel Id :
5 - Hw Ip :
pit - Channel Mode :
GPT_CH_MODE_CONTINUOUS - Channel Tick Frequency :
3.0E7

이어서 설정한다.
- Channel Tick Value Max : 4294967295
- Enable Wakeup : false
- Notification : GptChannelConfiguration_GPTTest_Cbk
Module Ref는 참조할 PIT 채널이 필요하므로, 먼저 PIT 채널을 생성해 준다.

Pit → GptPit_0 → Channels로 이동하여 + 버튼을 클릭한다. Short Name은 GptPitChannels_GPTTest, Channel은 CH_1, Chain Mode는 false로 설정한다.

다시 GptChannelConfiguration_GPTTest로 돌아와 Module Ref의 ... 버튼을 클릭한다.

방금 생성한 GptPitChannels_GPTTest를 선택하고 OK를 누른다.

Channel Clk Src Ref도 동일하게 ... 버튼을 클릭한 후, GptClockReferencePoint_AIPS_SLOW_CLK를 선택하고 OK를 누른다.

Hw Configuration으로 이동하여 Isr Hw Id가 PIT_0_CH_1인 항목을 찾고, Isr Enable과 Channel Is Used를 모두 true로 설정한다.

2. SW Component 설정 (Port 생성)#
SWC_IOTest를 클릭한 후 Ports 탭에서 Server Port를 추가한다.

인터페이스 검색창에 io를 입력하여 IoHwAb_If_Gpt를 선택하고 OK를 누른다.

생성된 포트의 Short Name을 P_Gpt_Cbk로 수정한다. Operations 항목에서 Notification을 선택하고 Enable Provided Com Specs를 체크한 뒤, Queue Length를 1로 입력한다.

다음으로 Client Port를 추가한다.

인터페이스 검색창에 io를 입력하여 IoHwAb_If_Gpt를 선택하고 OK를 누른다.

Short Name을 R_Gpt로 수정하고, Operations 항목에서 EnableNotification을 선택한 뒤 Enable Required Com Specs를 체크한다.

Operations 항목에서 StartTimer도 선택하여 Enable Required Com Specs를 체크해 준다.

Client Port를 하나 더 추가한다.

인터페이스 검색창에 io를 입력하여 IoHwAb_If_DigDir을 선택하고 OK를 누른다.

Short Name을 R_LED_Red로 수정하고, Operations 항목에서 WriteDirect를 선택한 뒤 Enable Required Com Specs를 체크한다.

3. Runnable 설정#
Runnables 탭으로 이동하여 기존의 RE_IOTest를 클릭한 후, Operation / Mode / Trigger Access 항목에서 Add를 클릭한다.

Synchronous Server Call Points에서 R_Gpt.EnableNotification과 R_Gpt.StartTimer를 선택한 후 OK를 누른다.

GPT 콜백 시 동작할 Runnable을 추가하기 위해 + 버튼을 클릭한다. Short Name은 RE_IOTest_Cbk, Symbol은 IOTest_Cbk_func로 입력하고 Can Be Invoked Concurrently는 false로 설정한다.

RTE Event 항목 아래의 Add를 클릭한다.

Operation Invoked Event에서 P_Gpt_Cbk.Notification을 선택한 후 OK를 누른다.

다음으로 Operation / Mode / Trigger Access 항목에서 Add를 클릭한다.

LED 제어를 위해 R_LED_Red.WriteDirect를 선택한 후 OK를 누른다.

4. ECU Software Components Mapping#
창 왼쪽 위에 위치한 보라색 아이콘 버튼을 클릭한 후, ECU Software Components Mapping을 클릭한다.

확인 창이 나타나면 OK를 클릭한다.

변경 사항을 확인한 뒤 Apply 버튼을 눌러 적용한다.

5. Harmonize#
창 왼쪽 위의 초록색 버튼을 클릭한 후, Generate ECU Configuration을 클릭한다.

Next를 클릭한다.

Service 항목에 체크한 뒤 Next를 클릭한다.

Finish를 눌러 생성을 마친다.

6. IoHwAb Gpt 설정#
창 왼쪽 위의 초록색 버튼을 클릭한 후, IoHwAb 모듈을 클릭한다.

All Contents → IoHwAbGpt → Logical로 이동하여 + 버튼을 클릭하고, 아래와 같이 설정한다.
- Short Name :
IoHwAbGptLogical_GPTTest - Callback Via Rte :
true - Hw Gpt Ch Ref :
GptChannelConfiguration_GPTTest

7. Service I/O 연결#
상단 메뉴의 망치 모양 아이콘 옆 화살표를 누르고 Generate All을 클릭하여 실행한다.

창 왼쪽 위의 초록색 버튼을 클릭한 후, Service and I/O를 클릭한다.

R_IoHwAbGptLogical_GPTTest_Cbk를 선택한 후 + (New Connection) 아이콘을 클릭한다.

Respect Naming Rule 체크를 해제하고, P_Gpt_Cbk를 선택한 뒤 OK를 클릭한다.

P_IoHwAbDigitalDirectLogical_LED_Red를 선택한 후 + (New Connection) 아이콘을 클릭한다.

Respect Naming Rule 체크를 해제하고, R_LED_Red를 선택한 뒤 OK를 클릭한다.

P_IoHwAbGptLogical_GPTTest를 선택한 후 + (New Connection) 아이콘을 클릭한다.

Respect Naming Rule 체크를 해제하고, R_Gpt를 선택한 뒤 OK를 클릭하여 서비스 연결을 마친다.

8. C coding#
기존에 작성했던 SWC_IOTest.c 코드를 아래와 같이 재작성한다.

#include "Rte_SWC_IOTest.h"
void IOTest_func()
{
IoHwAb_LevelType level;
uint16 data;
static uint32 command = 0;
if(command == 0)
{
Rte_Call_R_Gpt_EnableNotification();
Rte_Call_R_Gpt_StartTimer(15000000);
command ++;
}
Rte_Call_R_SW05_ReadDirect(&level);
Rte_Call_R_LED_Green_WriteDirect(level);
Rte_Call_R_Pot_ReadDirect(&data,1); // 0 ~ 8191
Rte_Call_R_LED_Blue_SetDutyCycle(data * 4); // 0 ~ 32768
}
void IOTest_Cbk_func()
{
static uint32 level = 0;
Rte_Call_R_LED_Red_WriteDirect(level);
level ^=1;
}
9. Build#
화면 왼쪽 위의 망치 모양 아이콘 옆에 있는 화살표를 클릭하고 Build를 클릭하여 전체 빌드를 실행한다.

빌드가 완료되었는지 확인한다.
