반응형
이 문서는 Texas Instruments의 Code Composer Studio(CCS)에서 TMS320F28388D 마이크로컨트롤러를 사용한 프로젝트 설정 절차와, GPIO를 활용한 기본 LED 토글 프로그램을 작성하는 방법을 설명하고 상세한 주석과 함께 예제 코드를 제공합니다.
1. 개발 환경 준비
1.1 소프트웨어 및 하드웨어 요구사항
- 소프트웨어:
- Code Composer Studio (CCS): v12.8.1 (Eclipse 기반, Theia 기반 v20.x는 C2000 호환성 문제로 비권장)
- C2000Ware SDK: TMS320F28388D 지원 (Texas Instruments 웹사이트에서 다운로드, 예: C:\ti\c2000\C2000Ware_x_xx_xx_xx)
- TI XDS 디버그 프로브 드라이버: XDS110, XDS200 등
- 하드웨어:
- TMS320F28388D 개발 보드 (예: TMDSCNCD28388D 제어 카드)
- JTAG 디버그 프로브 (예: XDS110 USB)
- USB 케이블 및 PC
1.2 사전 확인
- C2000Ware가 설치되어 있는지 확인하세요 (C:\ti\c2000\C2000Ware_x_xx_xx_xx).
- CCS가 올바르게 설치되었으며, 최신 TI C2000 컴파일러(예: v20.2.0.LTS)가 포함되어 있는지 확인하세요.
- 개발 보드의 회로도를 확인하여 LED가 연결된 GPIO 핀(예: GPIO0)을 파악하세요.
2. CCS에서 새 프로젝트 생성
2.1 워크스페이스 설정
- CCS를 실행하고 워크스페이스 경로를 선택합니다 (예: C:\Users\YourName\workspace_ccs).
- 새 워크스페이스를 사용하거나 기존 워크스페이스를 선택한 후, Launch를 클릭합니다.
2.2 프로젝트 생성
- File → New → CCS Project를 선택합니다.
- 프로젝트 설정:
- Project Name: LED_Toggle_F28388D
- Device:
- Family: C2000
- Device: TMS320F28388D
- Compiler Version: TI v20.2.0.LTS (최신 버전 권장)
- Project Type: Empty Project
- Output Type: Executable
- Target Connection: XDS110 USB Debug Probe (사용 중인 프로브 선택)
- Verify Connection: [Verify] 버튼으로 연결 확인
- [Finish]를 클릭하여 프로젝트 생성.
- 프로젝트 구조:
- 생성된 프로젝트는 Project Explorer에 표시됩니다.
- .ccsproject, .cproject, .project 파일과 .settings 폴더는 CCS 메타데이터로, 수동 편집은 피하세요.
3. 프로젝트 구성
3.1 C2000Ware 라이브러리 추가
TMS320F28388D는 C2000Ware의 헤더 및 소스 파일이 필요합니다.
- C2000Ware 경로 확인:
- 기본 설치 경로: C:\ti\c2000\C2000Ware_x_xx_xx_xx
- 설치되지 않았다면 TI 웹사이트에서 다운로드하세요.
- Include 경로 추가:
- Project Explorer에서 프로젝트 우클릭 → Properties → Build → C2000 Compiler → Include Options.
- 추가 경로:
- ${C2000WARE_ROOT}/device_support/f2838x/headers/include
- ${C2000WARE_ROOT}/device_support/f2838x/common/include
- Build → C2000 Linker → File Search Path에 라이브러리 경로 추가:
- ${C2000WARE_ROOT}/device_support/f2838x/common/lib
- [OK]로 저장.
- 소스 파일 추가:
- Project Explorer에서 프로젝트 우클릭 → New → File → main.c 생성.
- C2000Ware의 device.c를 프로젝트에 추가:
- 경로: C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2838x\common\source\device.c
- Add Files to Project로 링크하거나 복사.
3.2 타겟 구성 파일
- 타겟 구성 파일 생성:
- File → New → Target Configuration File → 이름: F28388D.ccxml → [Finish].
- Connection: XDS110 USB Debug Probe.
- Device: TMS320F28388D.
- [Save]로 저장.
- GEL 파일 (선택 사항):
- C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2838x\common\target_configs에서 GEL 파일을 추가하여 초기화를 자동화할 수 있습니다.
4. 기본 LED 토글 프로그램
아래는 GPIO0을 사용해 LED를 토글하는 프로그램입니다.
이 코드는 폴링(polling) 방식으로 동작하며, while 루프 내에서 GPIO 상태를 토글하고 지연(DEVICE_DELAY_US)을 통해 LED를 주기적으로 깜빡이게 합니다. 따라서 다음과 같은 이유로 인터럽트 초기화가 필요하지 않습니다:
- 인터럽트 미사용: 현재 코드는 타이머, ADC, 또는 외부 이벤트에 의한 인터럽트를 사용하지 않으므로 Interrupt_initModule()과 Interrupt_initVectorTable()이 필요 없음.
- 글로벌 인터럽트 불필요: EINT는 인터럽트가 활성화된 경우에만 필요하며, 이 코드에서는 인터럽트가 없으므로 불필요.
- 실시간 디버그 불필요: ERTM은 디버깅 중 실시간 인터럽트를 처리할 때 사용되지만, 이 프로그램은 인터럽트를 사용하지 않으므로 불필요.
- 명시적 비활성화: 오히려, 예제에서는 불필요한 인터럽트가 트리거되지 않도록 Interrupt_disableMaster()를 호출하여 글로벌 인터럽트를 비활성화하는 것이 일반적.
현재 LED 토글 프로그램에는 인터럽트 초기화 코드(Interrupt_initModule(), Interrupt_initVectorTable(), EINT, ERTM)가 필요하지 않습니다. 그러나 향후 타이머 인터럽트나 외부 이벤트 기반으로 LED를 제어하려는 경우, 이 초기화 코드들을 추가해야 합니다.
4.1 main.c 코드
main.c에 다음 코드를 작성합니다. GPIO0이 LED에 연결되어 있다고 가정하며, LED 회로가 액티브-하이인지 확인해야 합니다.
// 필요한 헤더 파일 포함
#include "device.h" // TMS320F28388D 디바이스 관련 정의
#include "driverlib.h" // C2000 드라이버 라이브러리 (GPIO 및 인터럽트 함수 포함)
#include <stdint.h> // 표준 정수 타입 사용
// 메인 함수
void main(void)
{
// 1. 디바이스 초기화
Device_init(); // 시스템 클럭, PLL, 플래시 초기화
Device_initGPIO(); // GPIO 모듈 초기화 (GPIO 레지스터 활성화)
// 2. 인터럽트 초기화 (향후 인터럽트 사용을 대비)
Interrupt_initModule(); // 인터럽트 컨트롤러 초기화
// - 인터럽트 우선순위, 그룹, 레지스터 설정
Interrupt_initVectorTable(); // 인터럽트 벡터 테이블 초기화
// - ISR 핸들러 주소 설정 준비
EINT; // 글로벌 인터럽트 활성화 (CLRC INTM)
ERTM; // 실시간 디버그 모드 활성화 (CLRC DBGM)
// 3. GPIO0 설정 (LED 연결, 보드 회로도 확인 필요)
GPIO_setPinConfig(GPIO_0_GPIO0); // GPIO0을 일반 GPIO로 설정
// - GPIO_0_GPIO0: GPIO0을 GPIO 기능으로 설정 (f2838x_pinmux.h)
// - 확인: 올바른 사용, 다른 기능 사용 시 GPIO_0_EPWM1A 등 변경
GPIO_setDirectionMode(0, GPIO_DIR_MODE_OUT); // GPIO0을 출력 모드로 설정
// - 0: GPIO0, GPIO_DIR_MODE_OUT: 출력 모드
// - 확인: 올바른 사용, LED 제어에 적합
GPIO_setPadConfig(0, GPIO_PIN_TYPE_STD); // 표준 GPIO 핀 타입 설정
// - GPIO_PIN_TYPE_STD: 풀업/풀다운 비활성화
// - 확인: LED 출력에 적합
GPIO_writePin(0, 0); // 초기 상태: LED 끄기 (액티브-하이 기준)
// - 0: GPIO0, 두 번째 0: 로우 출력
// - 확인: 올바른 사용, 액티브-로우 LED의 경우 0은 켜짐
// 4. 무한 루프에서 LED 토글 (폴링 방식)
while(1)
{
GPIO_togglePin(0); // GPIO0 상태 토글 (LED 켜기/끄기)
DEVICE_DELAY_US(500000); // 500ms 지연 (0.5초 간격)
}
}
4.2 GPIO 함수 사용법
- GPIO_setPinConfig(GPIO_0_GPIO0);
- 기능: GPIO0을 일반 GPIO로 설정 (멀티플렉싱 설정).
- 주의사항: TMS320F28388D는 멀티코어 디바이스로, CPU1에서 GPIO0을 제어한다고 가정. 다른 기능(예: PWM)을 사용할 경우 적절한 매크로(예: GPIO_0_EPWM1A)로 변경.
- GPIO_setDirectionMode(0, GPIO_DIR_MODE_OUT);
- 기능: GPIO0을 출력 모드로 설정.
- 주의사항: GPIO 번호는 0~159 사이여야 하며, 보드의 LED 핀과 일치해야 함.
- GPIO_setPadConfig(0, GPIO_PIN_TYPE_STD);
- 기능: GPIO0의 전기적 특성을 표준 타입(풀업/풀다운 비활성화)으로 설정.
- 주의사항: 입력 핀(예: 버튼)으로 사용할 경우 GPIO_PIN_TYPE_PULLUP을 고려.
- GPIO_writePin(0, 0);
- 기능: GPIO0을 로우(0)로 설정하여 LED 끄기 (액티브-하이 기준).
- 주의사항: LED가 액티브-로우인 경우 GPIO_writePin(0, 1)로 변경하여 테스트.
5. 프로젝트 빌드 및 디버깅
5.1 빌드
- 빌드 실행:
- Project Explorer에서 프로젝트 우클릭 → Build Project.
- 성공 시 Debug 폴더에 .out 파일 생성.
- 오류 발생 시 Problems 뷰에서 메시지 확인 (헤더 경로, 링커 스크립트 점검).
- 빌드 설정:
- Properties → Build → C2000 Compiler:
- 최적화 수준: -O0 (디버깅 용이).
- Include 경로 확인.
- C2000 Linker:
- 링커 스크립트: 2838x_RAM_lnk_cpu1.cmd (C2000Ware에서 제공).
- Properties → Build → C2000 Compiler:
5.2 디버깅
- 타겟 연결:
- 개발 보드와 JTAG 프로브(XDS110)를 PC에 연결.
- Run → Debug Configurations → F28388D.ccxml 선택 → [Debug].
- 프로그램 실행:
- 디버그 세션 시작 후 main()에서 중단.
- Run → Resume (F8)로 실행.
- GPIO0에 연결된 LED가 0.5초 간격으로 깜빡이는지 확인.
- Breakpoints, Watch Variables 등으로 디버깅 가능.
6. 문제 해결 및 추가 팁
6.1 문제 해결
- GPIO 동작 안 함:
- Device_initGPIO() 호출 확인.
- GPIO0이 보드의 LED 핀인지 회로도 확인.
- JTAG 연결 상태 점검.
- LED 동작 이상:
- 액티브-하이/로우 확인. GPIO_writePin(0, 1)로 테스트.
- GPIO 번호 확인 (예: GPIO34가 LED일 수 있음).
- 컴파일 오류:
- driverlib.h, device.h 포함 확인.
- C2000Ware include 경로 점검.
6.2 추가 팁
- C2000Ware 예제:
- C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2838x\examples에서 관련 예제 참고.
- 리소스 탐색기:
- CCS의 Resource Explorer로 TMS320F28388D 문서 및 예제 탐색.
- TI E2E 포럼:
- 추가적인 기술 지원 필요 시 TI 커뮤니티 활용.
반응형
'MCU > C2000' 카테고리의 다른 글
[TMS320F28335] LLC 공진 컨버터 설계 및 제어 코드 가이드 (0) | 2025.08.09 |
---|---|
[TMS320F28388D] ADC 사용법: DriverLib API로 ADC 설정 및 코드 (0) | 2025.08.08 |
[TMS320F28388D] CPU 타이머 사용법 : Driverlib API로 CPU 타이머 설정과 예제 (0) | 2025.08.08 |
[TMS320F28388D] SCI 사용법: Driverlib API로 UART 설정 및 예제 (0) | 2025.08.08 |
[TMS320F28335 ]ePWM SPWM 생성 (0) | 2025.08.07 |
[TMS320F28335] ePWM 하프 브리지 상보 출력 설정 (0) | 2025.08.07 |
[TMS320F28335] SCI 사용법: Bitfield 구조 활용 (0) | 2025.08.07 |
[TMS320F28335] GPIO 사용법: Bitfield 구조 활용 (0) | 2025.08.07 |