반응형
오래된 제품이지만 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 사전 준비
- 하드웨어: TMS320F28335 개발 보드(TMDSDOCK28335), JTAG 디버거(XDS100v2 등), USB 케이블.
- 소프트웨어:
- 문서: 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:
F28335.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:
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
- 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 컴파일러 및 링커 설정
- Properties > Build > C2000 Compiler > Processor Options:
--float_support=fpu32
(FPU 활성화).- Predefined Symbols:
DEVICE_F28335
추가. - 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' 카테고리의 다른 글
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 |
TMS320F28335 DSP GPIO 사용법: 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 |