오래된 제품이지만 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 코드
/**
* main.c
*/
#include "DSP28x_Project.h" // DSP2833x용 프로젝트 헤더
#define BLINKY_LED_GPIO 31 // GPIO31을 LED 출력으로 사용
// 타이머 설정 매크로 (ConfigCpuTimer용)
#define TIMER_FREQ_MHZ 150.0 // SYSCLKOUT: 150 MHz
#define TIMER_PERIOD_US 1000000.0 // 1초 (마이크로초 단위)
// ISR 선언
interrupt void cpu_timer0_isr(void);
void setupGpio(void)
{
EALLOW;
// GPIO31 설정: MUX=0 (GPIO 모드), DIR=1 (출력), PUD=0 (풀업 활성화, 선택)
GpioCtrlRegs.GPAMUX2.bit.GPIO31 = 0; // GPIO31 MUX (GPAMUX2에 위치)
GpioCtrlRegs.GPADIR.bit.GPIO31 = 1; // 출력 모드
GpioCtrlRegs.GPAPUD.bit.GPIO31 = 0; // 풀업 활성화 (노이즈 방지)
EDIS;
}
void main(void)
{
InitSysCtrl(); // 시스템 클럭 초기화 (150 MHz)
InitGpio(); // 기본 GPIO 초기화
setupGpio(); // 사용자 GPIO 설정 (LED 출력)
DINT; // 인터럽트 비활성화
InitPieCtrl(); // PIE 초기화
IER = 0x0000; // 인터럽트 활성화 레지스터 초기화
IFR = 0x0000; // 인터럽트 플래그 초기화
InitPieVectTable(); // PIE 벡터 테이블 초기화
InitCpuTimers(); // CPU 타이머 초기화 (Timer0,1,2)
EALLOW;
// ISR 매핑: TINT0 → PIE Group 1, INTx7
PieVectTable.TINT0 = &cpu_timer0_isr;
// 타이머 설정: 150 MHz, 1초 주기
ConfigCpuTimer(&CpuTimer0, TIMER_FREQ_MHZ, TIMER_PERIOD_US);
CpuTimer0Regs.TCR.bit.TSS = 0; // 타이머 시작
CpuTimer0Regs.TCR.bit.TIE = 1; // 인터럽트 활성화
// PIE 및 IER 활성화
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // TINT0 인터럽트 활성화
IER |= M_INT1; // Group 1 활성화
EDIS;
EINT; // 글로벌 인터럽트 활성화
ERTM; // 실시간 디버그 이벤트 활성화
for(;;)
{
// 무한 루프: ISR이 LED 토글 처리
}
}
interrupt void cpu_timer0_isr(void)
{
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // PIE ACK 먼저
CpuTimer0Regs.TCR.bit.TIF = 1; // TIF 플래그 클리어
GpioDataRegs.GPATOGGLE.bit.GPIO31 = 1; // GPIO31 토글 (LED 깜빡임)
CpuTimer0.InterruptCount++; // 인터럽트 카운터 증가 (디버깅용)
}
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 사전 준비
- 하드웨어: TMS320F28335 개발 보드(TMDSDOCK28335), JTAG 디버거(XDS100v2 등), USB 케이블.
- 소프트웨어:
- CCS(v12 이상 권장).
- C2000ware(헤더, 라이브러리, 예제 포함).
- JTAG 드라이버 (CCS 설치 시 포함).
- 문서: TMS320F28335 데이터시트, 기술 참조 매뉴얼.
3.2 CCS 설치 및 환경 설정
- CCS를 TI 웹사이트에서 다운로드하고 설치, C2000 MCU 지원 옵션 선택.
- C2000Ware를
C:\ti\c2000\C2000Ware_x_xx_xx_xx
에 설치. - JTAG 디버거를 연결하고, 디바이스 관리자에서 드라이버 확인.
3.3 새 프로젝트 생성
- File > New > CCS Project 선택.
- 설정:
- Target:
TMS320F28335
. - Project Name:
SimpleLEDTimer
. - Compiler Version: 최신 TI C2000 컴파일러 (예: v22.x.x).
- Output Type: Executable.
- Template:
Empty Project with main.c
. - Linker Command File: 28335_RAM_lnk.cmd (
C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\common\cmd
). - Connection: JTAG 디버거 (예: XDS100v2).
- Target:
- 프로젝트 생성 후,
main.c
에 위 예제 코드를 붙여넣기.
3.4 헤더 및 라이브러리 추가
- Properties > Build > C2000 Compiler > Include Options:
- INSTALLROOT_2833X: C:\ti\c2000\C2000Ware_6_00_00_00\device_support\f2833x
- INSTALLROOT_IQMATH:C:\ti\c2000\C2000Ware_6_xx_xx_xx\libraries\math\IQmath\c28
- INSTALLROOT_FASTRTS : C:\ti\c2000\C2000Ware_6_xx_xx_xx\libraries\math\FPUfastRTS\c28
- "${INSTALLROOT_2833X}/headers/include"
- "${INSTALLROOT_2833X}/common/include"
- "${INSTALLROOT_IQMATH}/include"
- "${INSTALLROOT_FASTRTS}/include"
- Properties > Build > C2000 Linker > File Search Path:
3.5 컴파일러 및 링커 설정
- Properties > Build > C2000 Compiler > Processor Options:
--float_support=fpu32
(FPU 활성화).- Predefined Symbols: "_DEBUG" , "LARGE_MODEL" 추가.
- Optimization: 디버깅 시
-Ooff
, 배포 시-O2
.
- Properties > Build > C2000 Linker > Basic Options:
- 스택 크기:
--stack_size=0x300
. - 출력 파일:
SimpleLEDTimer.out
.
- 스택 크기:
3.6 빌드 및 디버깅
- Project > Build Project로 빌드, 콘솔에서 에러 확인.
- Run > Debug Configurations:
- Target:
TMS320F28335
. - Connection: JTAG 디버거 (예: XDS100v2).
- Program:
SimpleLEDTimer.out
자동 로드.
- Target:
- Run > Debug로 실행, GPIO0 LED가 1초 주기로 점멸하는지 확인.
- 플래시 프로그래밍 (선택):
- 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. 추가 리소스
'MCU > C2000' 카테고리의 다른 글
TMS320F28388D DSP Driverlib 기반 프로젝트 설정 및 기본 프로그램 작성 절차 (0) | 2025.08.08 |
---|---|
TMS320F28335 DSP ePWM SPWM 생성 (0) | 2025.08.07 |
TMS320F28335 DSP ePWM Half-Bridge 상보 출력 설정 방법 (0) | 2025.08.07 |
TMS320F28335 DSP SCI 사용법: Bitfield 구조 활용 (0) | 2025.08.07 |
TI C2000 Lockstep 완벽 정리: 기능 안전을 위한 필수 기술 (0) | 2025.08.06 |
TMS320F28377D DSP SCI 사용법: Bitfield 구조 활용 예제 코드(수정) (0) | 2025.08.06 |
TMS320F28377D DSP ADC 트리거 모드 사용: Bitfield 구조 활용(수정) (0) | 2025.08.06 |
TMS320F28377D DSP ADC 사용법 : Bitfield 구조 활용 예제 코드(수정) (0) | 2025.08.06 |