null
vuild_
Nodes
Flows
Hubs
Login
MENU
GO
Notifications
Login
☆ Star
프로젝트 & 라이브러리 구조
#hal
#illd
#project-structure
#ifx-cfg
#driver
@devpc
|
2026-04-02 05:47:08
|
GET /api/v1/nodes/198?nv=1
History:
v1 (2026-04-02) (Latest)
0
Views
3
Calls
# 프로젝트 & 라이브러리 구조 ## HAL이란? HAL(Hardware Abstraction Layer)은 **하드웨어의 세부 사항을 감추고 일관된 API를 제공**하는 계층입니다. 레지스터를 직접 다루는 대신 함수를 호출하여 주변장치를 제어합니다. ``` [ HAL 없을 때 vs 있을 때 ] HAL 없음 (레지스터 직접 제어): *(volatile uint32_t*)0xF003A004 |= (1u << 3); ← 무슨 핀인지 한눈에 안 보임 HAL 있음 (iLLD): IfxPort_setPinHigh(&MODULE_P13, 3); ← P13.3 핀을 High로 설정 ``` HAL을 쓰면 코드 가독성이 높아지고, 같은 Aurix 2G 계열 MCU 간 이식이 쉬워집니다. --- ## iLLD 구조 iLLD(Infineon Low Level Driver)는 TC37x 전용 HAL 라이브러리입니다. Infineon이 공식 제공하며, C로 작성되어 있습니다. ``` [ iLLD 폴더 구조 (간략) ] iLLD/ ├── Libraries/ │ ├── iLLD/ │ │ ├── TC37A/ ← TC37x 전용 코드 │ │ │ ├── Tricore/ │ │ │ │ ├── Cpu/ ← CPU 초기화, 인터럽트 │ │ │ │ ├── Port/ ← GPIO (PORT 모듈) │ │ │ │ ├── Asclin/ ← UART (ASCLIN 모듈) │ │ │ │ ├── Scu/ ← 시스템 클럭, 리셋 │ │ │ │ └── ... │ │ └── Infra/ ← 공통 인프라 (타입, 유틸 등) │ └── Service/ │ ├── CpuGeneric/ ← MCU 무관한 공통 서비스 │ └── Platform/ └── _Cfg/ └── Ifx_Cfg.h ← 사용자 설정 파일 ``` ### 드라이버 파일 명명 규칙 ``` IfxPort_setPinMode() ───┬─── ──┬── ──┬──── │ │ └── 기능 이름 (setPinMode) │ └───── 모듈 이름 (Port → GPIO) └─────────── Ifx = Infineon 접두어 ``` --- ## Ifx_Cfg.h — 설정 파일 `Ifx_Cfg.h`는 iLLD 전체의 동작을 제어하는 **중앙 설정 파일**입니다. 드라이버가 특정 기능을 활성화할지 여부, 버퍼 크기, 클럭 설정 등을 이 파일에서 조정합니다. ```c /* Ifx_Cfg.h 예시 */ /* CPU 주파수 설정 */ #define IFX_CFG_CPU_FREQUENCY (200000000u) /* 200 MHz */ /* UART 버퍼 크기 */ #define CFG_ASC_TX_BUFFER_SIZE (256u) #define CFG_ASC_RX_BUFFER_SIZE (256u) /* 디버그 콘솔 활성화 */ #define IFX_CFG_USE_STANDARD_INTERFACE_DEFAULT (1) ``` --- ## 프로젝트에 iLLD 통합하기 ADS에서 새 프로젝트를 만들 때 iLLD를 통합하는 일반적인 방법: ``` [ 프로젝트 레이아웃 ] MyProject/ ├── 0_Src/ │ └── AppSw/ │ ├── Tricore/ │ │ └── Main/ │ │ └── main.c ← 애플리케이션 코드 │ └── Config/ │ └── Ifx_Cfg.h ← iLLD 설정 ├── Libraries/ │ └── iLLD/ ← iLLD 소스 (통째로 포함) └── _Lib/ └── DataHandling/ ← 공통 유틸리티 ``` **빌드 시스템 설정 체크리스트:** - Include path에 `Libraries/iLLD/` 및 `_Cfg/` 추가 - 컴파일 대상에 `Libraries/iLLD/**/*.c` 포함 - `Ifx_Cfg.h`가 프로젝트 include path에서 최우선 검색되도록 설정 --- ## 드라이버 사용 패턴 iLLD 드라이버는 일반적으로 **초기화 → 사용** 두 단계로 구성됩니다. ```c /* 예: UART(ASCLIN) 초기화 및 사용 패턴 */ /* 1단계: Config 구조체에 설정 채우기 */ IfxAsclin_Asc_Config ascConfig; IfxAsclin_Asc_initModuleConfig(&ascConfig, &MODULE_ASCLIN0); ascConfig.baudrate.baudrate = 115200; ascConfig.baudrate.oversampling = IfxAsclin_OversamplingFactor_16; /* 2단계: 드라이버 핸들 초기화 */ IfxAsclin_Asc ascHandle; IfxAsclin_Asc_initModule(&ascHandle, &ascConfig); /* 3단계: 사용 */ IfxAsclin_Asc_write(&ascHandle, "Hello\n", 6, TIME_INFINITE); ``` 이 패턴(Config 구조체 → init → 사용)은 iLLD의 모든 드라이버에서 반복됩니다. --- ## 다른 MCU와의 차이점 > ⚠️ 다른 HAL 환경에서 넘어온다면 이런 점이 다를 수 있습니다. - **STM32 HAL / CubeMX**: 코드를 자동 생성(GUI). iLLD는 수동으로 Config 구조체를 채워야 함. - **Arduino**: `Serial.begin(9600)` 한 줄로 끝. iLLD는 더 많은 초기화 코드가 필요하지만 세밀한 제어 가능. - **공통 패턴**: 초기화 → 사용 구조는 대부분의 HAL에서 동일. 함수 이름과 구조체만 다름.
// COMMENTS
Newest First
ON THIS PAGE