Skip to content

AUTOSAR GPT 실습#

본 실습은 IO 실습을 완료한 이후 추가로 진행하는 실습이다. 따라서 IO 실습에서 작성한 프로젝트 환경(SWC_IOTest, R_SW05, R_LED_Green, R_Pot, R_LED_Blue 포트 및 RE_IOTest Runnable, SWC_IOTest.c 등)을 그대로 가져온 상태에서 시작한다.

0. 목차#

  1. Gpt 모듈 설정 (Channel Configuration)
  2. SW Component 설정 (Port 생성)
  3. Runnable 설정
  4. ECU Software Components Mapping
  5. Harmonize
  6. IoHwAb Gpt 설정
  7. Service I/O 연결
  8. C coding
  9. Build

1. Gpt 모듈 설정 (Channel Configuration)#

Ecu → Mcal → Ecud_Gpt.arxml → Gpt를 더블클릭하여 연다. 이후 All Contents → Gpt → GptChannelConfigSet → Channel Configuration으로 이동한다.

1

+ 버튼을 클릭하여 새로운 채널을 추가하고, 아래와 같이 설정한다.

  • Short Name : GptChannelConfiguration_GPTTest
  • Channel Id : 5
  • Hw Ip : pit
  • Channel Mode : GPT_CH_MODE_CONTINUOUS
  • Channel Tick Frequency : 3.0E7

2

이어서 설정한다. - Channel Tick Value Max : 4294967295 - Enable Wakeup : false - Notification : GptChannelConfiguration_GPTTest_Cbk

Module Ref는 참조할 PIT 채널이 필요하므로, 먼저 PIT 채널을 생성해 준다.

3

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

4

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

5

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

6

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

7

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

8


2. SW Component 설정 (Port 생성)#

SWC_IOTest를 클릭한 후 Ports 탭에서 Server Port를 추가한다.

9

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

10

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

11

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

12

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

13

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

14

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

15

Client Port를 하나 더 추가한다.

16

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

17

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

18


3. Runnable 설정#

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

19

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

20

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

21

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

22

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

23

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

24

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

25


4. ECU Software Components Mapping#

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

26

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

27

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

28


5. Harmonize#

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

29

Next를 클릭한다.

30

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

31

Finish를 눌러 생성을 마친다.

32


6. IoHwAb Gpt 설정#

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

33

All Contents → IoHwAbGpt → Logical로 이동하여 + 버튼을 클릭하고, 아래와 같이 설정한다.

  • Short Name : IoHwAbGptLogical_GPTTest
  • Callback Via Rte : true
  • Hw Gpt Ch Ref : GptChannelConfiguration_GPTTest

34


7. Service I/O 연결#

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

35

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

36

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

37

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

38

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

39

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

40

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

41

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

42


8. C coding#

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

43

#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를 클릭하여 전체 빌드를 실행한다.

44

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

45