본문 바로가기
MCU/C2000

TMS320F28335 DSP 사양 및 CCS 프로젝트 생성 절차

by linuxgo 2025. 8. 6.
반응형

 

오래된 제품이지만 TMS320F28335는 Texas Instruments의 C2000 시리즈 디지털 신호 컨트롤러(DSC)로, 실시간 제어 애플리케이션에 최적화된 고성능 마이크로컨트롤러입니다. 이 글에서는 TMS320F28335의 주요 사양, Code Composer Studio(CCS)에서 프로젝트를 구성하는 상세 절차와 인터럽트를 사용한 LED 점멸 예제 코드를 설명합니다.

1. TMS320F28335 주요 사양

TMS320F28335는 모터 제어, 전력 변환, 산업 자동화에 적합한 32비트 부동 소수점 DSC로 주요 사양은 아래와 같습니다.

1.1 CPU 및 성능

  • 코어: 32비트 TMS320C28x, 최대 150 MHz (6.67ns 사이클 시간).
  • FPU: IEEE 754 단정밀 부동 소수점 연산.
  • MAC 연산: 16×16, 32×32 Multiply-Accumulate, 듀얼 16×16 MAC.
  • 인터럽트: PIE로 최대 96개 인터럽트 관리.

1.2 메모리

항목 사양
플래시 512 KB (256K × 16비트)
SARAM 68 KB (34K × 16비트)
부트 ROM 8 KB
OTP 1 KB
외부 메모리 XINTF, 최대 2M × 16 어드레스

1.3 주요 주변 장치

  • ADC: 12비트, 12.5 MSPS, 16채널.
  • PWM: 18개 채널, HRPWM(150 ps 정밀도).
  • 타이머: 3개 32비트 CPU 타이머.
  • 시리얼: SCI(UART) 2개, SPI 1개, I2C 1개, McBSP 1개, CAN 2개.
  • GPIO: 88개, 다중화 가능.
  • DMA: 6채널.
  • QEP: 2개 (엔코더).
  • eCAP: 4개 (캡처).

1.4 기타

  • 전원: 코어 1.8V/1.9V, I/O 3.3V.
  • 온도: -40°C ~ 85°C (산업용), -40°C ~ 125°C (자동차 등급).
  • 패키지: LQFP 176핀, BGA 179/176볼.
  • 개발 도구: CCS, C2000Ware, JTAG.

1.5 애플리케이션

모터 제어(BLDC, PMSM), 태양광 인버터, 디지털 전원, 산업 자동화, 의료 기기.

2. LED 점멸 예제 코드

아래는 TMS320F28335에서 CPU 타이머 0 인터럽트를 사용하여 GPIO0에 연결된 LED를 1초 주기로 점멸하는 코드입니다. 타이머 주기는 계산식(TIMER_PRD)으로 설정했습니다.

2.1 코드


#include "F28x_Project.h" // C2000 헤더 파일

// 타이머 주기 계산
#define SYSCLK_HZ 150000000 // 시스템 클럭: 150 MHz
#define TIMER_PERIOD_S 1.0  // 타이머 주기: 1초
#define TIMER_PRD (unsigned long)(SYSCLK_HZ * TIMER_PERIOD_S) // 타이머 PRD 계산

interrupt void cpu_timer0_isr(void); // ISR 선언

void main(void) {
    InitSysCtrl(); // 시스템 클럭 초기화

    DINT; // 인터럽트 비활성화
    InitPieCtrl(); // PIE 초기화
    IER = 0; // 인터럽트 활성화 레지스터 초기화
    IFR = 0; // 인터럽트 플래그 초기화
    InitPieVectTable(); // PIE 벡터 테이블 초기화

    EALLOW;
    GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 0; // GPIO0을 GPIO로 설정
    GpioCtrlRegs.GPADIR.bit.GPIO0 = 1;  // GPIO0을 출력으로 설정
    PieVectTable.TINT0 = &cpu_timer0_isr; // 타이머 0 ISR 등록
    CpuTimer0Regs.PRD.all = TIMER_PRD; // 타이머 주기 설정 (1초)
    CpuTimer0Regs.TCR.bit.TSS = 0; // 타이머 시작
    CpuTimer0Regs.TCR.bit.TIE = 1; // 타이머 인터럽트 활성화
    PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // PIE 타이머 0 인터럽트 활성화
    IER |= M_INT1; // 인터럽트 그룹 1 활성화
    EDIS;

    EINT; // 글로벌 인터럽트 활성화

    while(1); // 무한 루프
}

interrupt void cpu_timer0_isr(void) {
    CpuTimer0Regs.TCR.bit.TIF = 1; // 타이머 인터럽트 플래그 초기화
    PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // PIE 그룹 1 확인
    GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1; // LED 토글
}
    

2.2 코드 설명

  • 타이머 주기: SYSCLK_HZ(150 MHz) × TIMER_PERIOD_S(1초)로 TIMER_PRD 계산, 하드코딩 제거.
  • 인터럽트 설정:
    •    DINT: 초기화 중 인터럽트 비활성화.
    •    InitPieCtrl(), IER/IFR, InitPieVectTable(): PIE 및 인터럽트 초기화.
    •    PieVectTable.TINT0: 타이머 0 ISR 연결.
    •    PIEIER1.bit.INTx7, IER |= M_INT1: 타이머 0 인터럽트 활성화.
    •   EINT: 글로벌 인터럽트 활성화.
  • GPIO: GPIO0을 출력으로 설정, LED 점멸.
  • ISR: 인터럽트 발생 시 LED 토글, 플래그(TIF, PIEACK) 초기화.

3. CCS 프로젝트 구성 절차

TMS320F28335용 CCS 프로젝트를 설정하는 상세 절차는 아래와 같이  초보자도 따라 할 수 있도록 단계별로 설명합니다.

3.1 사전 준비

3.2 CCS 설치 및 환경 설정

  1. CCS를 TI 웹사이트에서 다운로드하고 설치, C2000 MCU 지원 옵션 선택.
  2. C2000Ware를 C:\ti\c2000\C2000Ware_x_xx_xx_xx에 설치.
  3. JTAG 디버거를 연결하고, 디바이스 관리자에서 드라이버 확인.

3.3 새 프로젝트 생성

  1. File > New > CCS Project 선택.
  2. 설정:
    •    Target: TMS320F28335.
    •    Project Name: SimpleLEDTimer.
    •    Compiler Version: 최신 TI C2000 컴파일러 (예: v22.x.x).
    •    Output Type: Executable.
    •   Template: Empty Project with main.c.
    •    Linker Command File: F28335.cmd  (C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\common\cmd).
    •   Connection: JTAG 디버거 (예: XDS100v2).
  3. 프로젝트 생성 후, main.c에 위 예제 코드를 붙여넣기.

3.4 헤더 및 라이브러리 추가

  1. Properties > Build > C2000 Compiler > Include Options:
    •    C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\headers\include
    •    C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\common\include
  2. Properties > Build > C2000 Linker > File Search Path:
    •    f2833x_driverlib.lib 추가 (C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\common\lib).

3.5 컴파일러 및 링커 설정

  1. Properties > Build > C2000 Compiler > Processor Options:
    •    --float_support=fpu32 (FPU 활성화).
    •    Predefined Symbols: DEVICE_F28335 추가.
    •    Optimization: 디버깅 시 -Ooff, 배포 시 -O2.
  2. Properties > Build > C2000 Linker > Basic Options:
    •    스택 크기: --stack_size=0x300.
    •    출력 파일: SimpleLEDTimer.out.

3.6 빌드 및 디버깅

  1. Project > Build Project로 빌드, 콘솔에서 에러 확인.
  2. Run > Debug Configurations:
    •    Target: TMS320F28335.
    •    Connection: JTAG 디버거 (예: XDS100v2).
    •    Program: SimpleLEDTimer.out 자동 로드.
  3. Run > Debug로 실행, GPIO0 LED가 1초 주기로 점멸하는지 확인.
  4. 플래시 프로그래밍 (선택):
    •    Tools > On-Chip Flash로 플래시 업로드.
    •    코드 보안 모듈(CSM) 비밀번호 확인.

3.7 테스트 및 검증

  •    GPIO0 LED 점멸 확인.
  •    CCS 디버그 뷰에서 브레이크포인트 설정, IER, PIEIER 레지스터 확인.
  •    C2000Ware 예제 (C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\examples)로 추가 테스트.

4. 문제 해결

  • 인터럽트 미동작: PieVectTable.TINT0, IER, PIEIER1.bit.INTx7, ISR 플래그(TIF, PIEACK) 확인.
  • LED 미동작: GPIO0 설정(GPAMUX1, GPADIR), 개발 보드 LED 핀 번호 확인 (예: GPIO12로 변경).
  • 빌드 에러: C2000Ware 경로, --float_support=fpu32 확인.
  • JTAG 연결 오류: USB 포트, 드라이버, 보드 전원 확인.

5. 추가 리소스

반응형