1. TMS320F28335 CPU Timer 모듈 개요
TI의 TMS320F28335는 C2000 Delfino 시리즈의 32비트 마이크로컨트롤러로, 실시간 제어 애플리케이션에서 타이밍 제어 및 주기적 작업 스케줄링에 적합합니다. CPU Timer 모듈은 정확한 시간 측정, 주기적 인터럽트 생성, 그리고 타이밍 기반 작업을 수행하는 데 사용됩니다. 이 문서에서는 TMS320F28335의 CPU Timer 설정 방법, Bitfield 구조를 활용한 레지스터 설정, 그리고 실용적인 예제 코드를 제공하여 초보자와 숙련된 개발자 모두 쉽게 활용할 수 있도록 돕습니다.
주요 사양
- 타이머 수: 3개의 독립적인 32비트 CPU Timer (Timer0, Timer1, Timer2)
- 클럭 소스: 시스템 클럭(SYSCLK, 최대 150MHz)
- 해상도: SYSCLK의 역수 (150MHz에서 약 6.67ns)
- 주기 설정: 32비트 주기 레지스터 (TIM, PRD)
- 인터럽트: 타이머 만료 시 인터럽트 발생
- 동작 모드:
- 단일 실행 (One-shot)
- 연속 실행 (Continuous)
- 주요 기능:
- 주기적 타이밍 제어
- 인터럽트 기반 이벤트 트리거
- 프리스케일링 지원
- 용도: PWM 동기화, 주기적 샘플링, 타임아웃 감지, 스케줄링
2. CPU Timer Bitfield 설정 상세
TMS320F28335의 CPU Timer 레지스터는 Bitfield 구조로 정의되어 있으며, F2833x_cputimer.h 헤더 파일을 통해 접근합니다. 주요 레지스터는 다음과 같습니다:
2.1 TCR (Timer Control Register)
- bit.TSS: 타이머 시작/정지 (0: 시작, 1: 정지)
- bit.TRB: 타이머 리로드 (1: TIM 레지스터를 PRD 값으로 리로드)
- bit.FREE_SOFT: 에뮬레이션 동작 모드
- 00: 에뮬레이션 시 정지
- 01/10: 에뮬레이션 시 계속 실행
- bit.TIE: 타이머 인터럽트 활성화 (1: 활성화)
- bit.TIF: 타이머 인터럽트 플래그 (1: 인터럽트 발생, 쓰기 1로 클리어)
2.2 TPR (Timer Prescale Register)
- bit.PSC: 현재 프리스케일러 값 (0~255)
- bit.PSCH: 상위 8비트 프리스케일러 값 (0~255)
2.3 TIM (Timer Counter Register)
- 32비트 카운터 값, 감소 카운터로 동작
2.4 PRD (Timer Period Register)
- 32비트 주기 값, TIM이 0에 도달하면 PRD 값으로 리로드
3. CPU Timer 설정 절차
- 시스템 초기화:
- InitSysCtrl()로 시스템 클럭과 PLL 초기화
- 인터럽트 비활성화 및 PIE 초기화 (DINT, InitPieCtrl, InitPieVectTable)
- 타이머 클럭 활성화:
- CPU Timer는 SYSCLK에서 동작하므로 별도 클럭 활성화 불필요
- 타이머 설정:
- TCR.bit.TSS를 1로 설정하여 타이머 정지
- PRD 레지스터에 주기 값 설정 (PRD = SYSCLK * 원하는 시간 / 프리스케일러)
- TPR.bit.PSC로 프리스케일러 설정
- TCR.bit.TRB를 1로 설정하여 TIM 레지스터 리로드
- 인터럽트 설정 (필요 시):
- TCR.bit.TIE를 1로 설정하여 인터럽트 활성화
- PIE 벡터 테이블에 ISR(Interrupt Service Routine) 등록
- 타이머 실행:
- TCR.bit.TSS를 0으로 설정하여 타이머 시작
4. CPU Timer 설정 고려사항
- 클럭 설정: SYSCLK(150MHz)에서 프리스케일러로 시간 단위 조정
- 주기 계산: PRD = (원하는 시간(s) * SYSCLK(Hz)) / (프리스케일러 + 1)
- 인터럽트: PIE 그룹 1(Timer0), 그룹 7(Timer1, Timer2) 사용
- 에뮬레이션: FREE_SOFT 설정으로 디버깅 중 동작 제어
- 정확도: 긴 주기 사용 시 프리스케일러 활용 권장
5. 실용적인 CPU Timer 예제 코드 (Bitfield 구조)
아래는 TMS320F28335 CPU Timer를 Bitfield 구조로 설정한 5개의 예제 코드입니다. GPIO와 타이머 설정은 별도의 함수로 분리되었으며, 각 라인에 상세한 주석이 추가되었습니다. Code Composer Studio(CCS)와 C2000Ware 환경에서 실행 가능합니다.
5.1 예제 1: 기본 타이머 설정 (1초 주기 LED 토글)
// File: cpu_timer_basic.c
// Description: TMS320F28335 CPU Timer0로 1초 주기 LED 토글 예제
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28335
#include "F28x_Project.h"
// GPIO 설정 함수
void ConfigureGPIO(void) {
EALLOW; // 보호된 레지스터 접근 허용
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34를 출력으로 설정 (LED용)
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // GPIO34를 High로 설정하여 LED 켬
EDIS; // 보호된 레지스터 접근 비허용
}
// CPU Timer0 설정 함수
void ConfigureCPUTimer0(void) {
EALLOW; // 보호된 레지스터 접근 허용
CpuTimer0Regs.TCR.bit.TSS = 1; // 타이머 정지
CpuTimer0Regs.PRD.all = 150000000 - 1; // 주기 설정: 1초 (150MHz / 1 = 150,000,000)
CpuTimer0Regs.TPR.bit.PSC = 0; // 프리스케일러 1/1
CpuTimer0Regs.TPRH.bit.PSCH = 0; // 상위 프리스케일러 1/1
CpuTimer0Regs.TCR.bit.TRB = 1; // TIM 레지스터를 PRD 값으로 리로드
CpuTimer0Regs.TCR.bit.TSS = 0; // 타이머 시작
EDIS; // 보호된 레지스터 접근 비허용
}
void main(void) {
InitSysCtrl(); // 시스템 클럭(150MHz)과 PLL 초기화
DINT; // 모든 인터럽트 비활성화
InitPieCtrl(); // PIE 컨트롤러 초기화
IER = 0x0000; // CPU 인터럽트 레지스터 비활성화
IFR = 0x0000; // 인터럽트 플래그 레지스터 클리어
InitPieVectTable(); // PIE 인터럽트 벡터 테이블 초기화
ConfigureGPIO(); // GPIO 설정 함수 호출
ConfigureCPUTimer0(); // CPU Timer0 설정 함수 호출
for(;;) { // 무한 루프: 타이머 동작 확인
if (CpuTimer0Regs.TCR.bit.TIF == 1) { // 타이머 인터럽트 플래그 확인
CpuTimer0Regs.TCR.bit.TIF = 1; // 플래그 클리어
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; // LED 토글
CpuTimer0Regs.TCR.bit.TRB = 1; // 타이머 리로드
}
}
}
설명:
- 기능: CPU Timer0를 사용하여 1초 주기로 GPIO34(LED) 토글
- 설정: 주기 150,000,000(1초 @ 150MHz), 프리스케일러 1/1
- GPIO: GPIO34(LED)
- 출력: GPIO34에서 LED가 1초 주기로 켜짐/꺼짐
5.2 예제 2: 인터럽트 기반 타이머 (500ms 주기)
// File: cpu_timer_interrupt.c
// Description: TMS320F28335 CPU Timer0 인터럽트로 500ms 주기 LED 토글 예제
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28335
#include "F28x_Project.h"
// 인터럽트 서비스 루틴: CPU Timer0 인터럽트 처리
__interrupt void cpu_timer0_isr(void) {
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; // LED 토글
CpuTimer0Regs.TCR.bit.TIF = 1; // 인터럽트 플래그 클리어
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // PIE 그룹 1 인터럽트 ACK
}
// GPIO 설정 함수
void ConfigureGPIO(void) {
EALLOW; // 보호된 레지스터 접근 허용
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34를 출력으로 설정 (LED용)
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // GPIO34를 High로 설정하여 LED 켬
EDIS; // 보호된 레지스터 접근 비허용
}
// CPU Timer0 설정 함수
void ConfigureCPUTimer0(void) {
EALLOW; // 보호된 레지스터 접근 허용
CpuTimer0Regs.TCR.bit.TSS = 1; // 타이머 정지
CpuTimer0Regs.PRD.all = 75000000 - 1; // 주기 설정: 500ms (150MHz * 0.5 = 75,000,000)
CpuTimer0Regs.TPR.bit.PSC = 0; // 프리스케일러 1/1
CpuTimer0Regs.TPRH.bit.PSCH = 0; // 상위 프리스케일러 1/1
CpuTimer0Regs.TCR.bit.TRB = 1; // TIM 레지스터를 PRD 값으로 리로드
CpuTimer0Regs.TCR.bit.TIE = 1; // 인터럽트 활성화
CpuTimer0Regs.TCR.bit.TSS = 0; // 타이머 시작
EDIS; // 보호된 레지스터 접근 비허용
}
void main(void) {
InitSysCtrl(); // 시스템 클럭(150MHz)과 PLL 초기화
DINT; // 모든 인터럽트 비활성화
InitPieCtrl(); // PIE 컨트롤러 초기화
IER = 0x0000; // CPU 인터럽트 레지스터 비활성화
IFR = 0x0000; // 인터럽트 플래그 레지스터 클리어
InitPieVectTable(); // PIE 인터럽트 벡터 테이블 초기화
EALLOW; // 보호된 레지스터 접근 허용
PieVectTable.TINT0 = &cpu_timer0_isr; // CPU Timer0 인터럽트 벡터를 ISR 함수에 연결
EDIS; // 보호된 레지스터 접근 비허용
ConfigureGPIO(); // GPIO 설정 함수 호출
ConfigureCPUTimer0(); // CPU Timer0 설정 함수 호출
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // PIE 그룹 1에서 CPU Timer0 인터럽트 활성화
IER |= M_INT1; // CPU 인터럽트 그룹 1 활성화
EINT; // 글로벌 인터럽트 활성화
ERTM; // 실시간 모드 활성화: 디버깅 시 인터럽트 실시간 처리
for(;;); // 무한 루프: 타이머 인터럽트 동작 지속
}
설명:
- 기능: CPU Timer0 인터럽트를 사용하여 500ms 주기로 GPIO34(LED) 토글
- 설정: 주기 75,000,000(500ms @ 150MHz), 프리스케일러 1/1, 인터럽트 활성화
- GPIO: GPIO34(LED)
- 출력: GPIO34에서 LED가 500ms 주기로 켜짐/꺼짐
5.3 예제 3: 프리스케일러를 사용한 긴 주기 타이머 (10초)
// File: cpu_timer_prescale.c
// Description: TMS320F28335 CPU Timer0 프리스케일러로 10초 주기 LED 토글 예제
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28335
#include "F28x_Project.h"
// GPIO 설정 함수
void ConfigureGPIO(void) {
EALLOW; // 보호된 레지스터 접근 허용
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34를 출력으로 설정 (LED용)
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // GPIO34를 High로 설정하여 LED 켬
EDIS; // 보호된 레지스터 접근 비허용
}
// CPU Timer0 설정 함수
void ConfigureCPUTimer0(void) {
EALLOW; // 보호된 레지스터 접근 허용
CpuTimer0Regs.TCR.bit.TSS = 1; // 타이머 정지
CpuTimer0Regs.PRD.all = 15000000 - 1; // 주기 설정: 10초 / 100 = 150,000,000 / 100
CpuTimer0Regs.TPR.bit.PSC = 99; // 프리스케일러 1/100
CpuTimer0Regs.TPRH.bit.PSCH = 0; // 상위 프리스케일러 1/1
CpuTimer0Regs.TCR.bit.TRB = 1; // TIM 레지스터를 PRD 값으로 리로드
CpuTimer0Regs.TCR.bit.TSS = 0; // 타이머 시작
EDIS; // 보호된 레지스터 접근 비허용
}
void main(void) {
InitSysCtrl(); // 시스템 클럭(150MHz)과 PLL 초기화
DINT; // 모든 인터럽트 비활성화
InitPieCtrl(); // PIE 컨트롤러 초기화
IER = 0x0000; // CPU 인터럽트 레지스터 비활성화
IFR = 0x0000; // 인터럽트 플래그 레지스터 클리어
InitPieVectTable(); // PIE 인터럽트 벡터 테이블 초기화
ConfigureGPIO(); // GPIO 설정 함수 호출
ConfigureCPUTimer0(); // CPU Timer0 설정 함수 호출
for(;;) { // 무한 루프: 타이머 동작 확인
if (CpuTimer0Regs.TCR.bit.TIF == 1) { // 타이머 인터럽트 플래그 확인
CpuTimer0Regs.TCR.bit.TIF = 1; // 플래그 클리어
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; // LED 토글
CpuTimer0Regs.TCR.bit.TRB = 1; // 타이머 리로드
}
}
}
설명:
- 기능: CPU Timer0를 프리스케일러를 사용하여 10초 주기로 GPIO34(LED) 토글
- 설정: 주기 15,000,000(10초 @ 150MHz / 100), 프리스케일러 1/100
- GPIO: GPIO34(LED)
- 출력: GPIO34에서 LED가 10초 주기로 켜짐/꺼짐
5.4 예제 4: 다중 타이머 동기화 (Timer0와 Timer1)
// File: cpu_timer_sync.c
// Description: TMS320F28335 CPU Timer0와 Timer1 동기화로 LED 토글 예제
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28335
#include "F28x_Project.h"
// GPIO 설정 함수
void ConfigureGPIO(void) {
EALLOW; // 보호된 레지스터 접근 허용
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34를 출력으로 설정 (LED1용)
GpioCtrlRegs.GPBDIR.bit.GPIO33 = 1; // GPIO33를 출력으로 설정 (LED2용)
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // GPIO34를 High로 설정하여 LED1 켬
GpioDataRegs.GPBSET.bit.GPIO33 = 1; // GPIO33를 High로 설정하여 LED2 켬
EDIS; // 보호된 레지스터 접근 비허용
}
// CPU Timer0 설정 함수 (Master)
void ConfigureCPUTimer0(void) {
EALLOW; // 보호된 레지스터 접근 허용
CpuTimer0Regs.TCR.bit.TSS = 1; // 타이머 정지
CpuTimer0Regs.PRD.all = 150000000 - 1; // 주기 설정: 1초 (150MHz / 1 = 150,000,000)
CpuTimer0Regs.TPR.bit.PSC = 0; // 프리스케일러 1/1
CpuTimer0Regs.TPRH.bit.PSCH = 0; // 상위 프리스케일러 1/1
CpuTimer0Regs.TCR.bit.TRB = 1; // TIM 레지스터를 PRD 값으로 리로드
CpuTimer0Regs.TCR.bit.TSS = 0; // 타이머 시작
EDIS; // 보호된 레지스터 접근 비허용
}
// CPU Timer1 설정 함수 (Slave, Timer0에 동기화)
void ConfigureCPUTimer1(void) {
EALLOW; // 보호된 레지스터 접근 허용
CpuTimer1Regs.TCR.bit.TSS = 1; // 타이머 정지
CpuTimer1Regs.PRD.all = 75000000 - 1; // 주기 설정: 500ms (150MHz * 0.5 = 75,000,000)
CpuTimer1Regs.TPR.bit.PSC = 0; // 프리스케일러 1/1
CpuTimer1Regs.TPRH.bit.PSCH = 0; // 상위 프리스케일러 1/1
CpuTimer1Regs.TCR.bit.TRB = 1; // TIM 레지스터를 PRD 값으로 리로드
CpuTimer1Regs.TCR.bit.TSS = 0; // 타이머 시작
EDIS; // 보호된 레지스터 접근 비허용
}
void main(void) {
InitSysCtrl(); // 시스템 클럭(150MHz)과 PLL 초기화
DINT; // 모든 인터럽트 비활성화
InitPieCtrl(); // PIE 컨트롤러 초기화
IER = 0x0000; // CPU 인터럽트 레지스터 비활성화
IFR = 0x0000; // 인터럽트 플래그 레지스터 클리어
InitPieVectTable(); // PIE 인터럽트 벡터 테이블 초기화
ConfigureGPIO(); // GPIO 설정 함수 호출
ConfigureCPUTimer0(); // CPU Timer0 설정 함수 호출 (Master)
ConfigureCPUTimer1(); // CPU Timer1 설정 함수 호출 (Slave)
for(;;) { // 무한 루프: 타이머 동작 확인
if (CpuTimer0Regs.TCR.bit.TIF == 1) { // Timer0 인터럽트 플래그 확인
CpuTimer0Regs.TCR.bit.TIF = 1; // 플래그 클리어
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; // LED1 토글
CpuTimer0Regs.TCR.bit.TRB = 1; // Timer0 리로드
}
if (CpuTimer1Regs.TCR.bit.TIF == 1) { // Timer1 인터럽트 플래그 확인
CpuTimer1Regs.TCR.bit.TIF = 1; // 플래그 클리어
GpioDataRegs.GPBTOGGLE.bit.GPIO33 = 1; // LED2 토글
CpuTimer1Regs.TCR.bit.TRB = 1; // Timer1 리로드
}
}
}
설명:
- 기능: CPU Timer0(1초)와 Timer1(500ms)을 사용하여 두 개의 LED(GPIO34, GPIO33)를 각각 다른 주기로 토글
- 설정: Timer0 주기 150,000,000(1초 @ 150MHz), Timer1 주기 75,000,000(500ms @ 150MHz), 프리스케일러 1/1
- GPIO: GPIO34(LED1), GPIO33(LED2)
- 출력: GPIO34에서 LED1이 1초 주기로, GPIO33에서 LED2가 500ms 주기로 켜짐/꺼짐
5.5 예제 5: One-Shot 타이머 (타임아웃 감지)
// File: cpu_timer_oneshot.c
// Description: TMS320F28335 CPU Timer0 One-Shot 모드로 타임아웃 감지 예제
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28335
#include "F28x_Project.h"
// 인터럽트 서비스 루틴: CPU Timer0 인터럽트 처리
__interrupt void cpu_timer0_isr(void) {
GpioDataRegs.GPBTOGGLE.bit.GPIO34 = 1; // LED 토글 (타임아웃 표시)
CpuTimer0Regs.TCR.bit.TIF = 1; // 인터럽트 플래그 클리어
CpuTimer0Regs.TCR.bit.TSS = 1; // 타이머 정지 (One-Shot 모드)
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1; // PIE 그룹 1 인터럽트 ACK
}
// GPIO 설정 함수
void ConfigureGPIO(void) {
EALLOW; // 보호된 레지스터 접근 허용
GpioCtrlRegs.GPBDIR.bit.GPIO34 = 1; // GPIO34를 출력으로 설정 (LED용)
GpioDataRegs.GPBSET.bit.GPIO34 = 1; // GPIO34를 High로 설정하여 LED 켬
EDIS; // 보호된 레지스터 접근 비허용
}
// CPU Timer0 설정 함수 (One-Shot)
void ConfigureCPUTimer0(void) {
EALLOW; // 보호된 레지스터 접근 허용
CpuTimer0Regs.TCR.bit.TSS = 1; // 타이머 정지
CpuTimer0Regs.PRD.all = 300000000 - 1; // 주기 설정: 2초 (150MHz * 2 = 300,000,000)
CpuTimer0Regs.TPR.bit.PSC = 0; // 프리스케일러 1/1
CpuTimer0Regs.TPRH.bit.PSCH = 0; // 상위 프리스케일러 1/1
CpuTimer0Regs.TCR.bit.TRB = 1; // TIM 레지스터를 PRD 값으로 리로드
CpuTimer0Regs.TCR.bit.TIE = 1; // 인터럽트 활성화
CpuTimer0Regs.TCR.bit.TSS = 0; // 타이머 시작
EDIS; // 보호된 레지스터 접근 비허용
}
void main(void) {
InitSysCtrl(); // 시스템 클럭(150MHz)과 PLL 초기화
DINT; // 모든 인터럽트 비활성화
InitPieCtrl(); // PIE 컨트롤러 초기화
IER = 0x0000; // CPU 인터럽트 레지스터 비활성화
IFR = 0x0000; // 인터럽트 플래그 레지스터 클리어
InitPieVectTable(); // PIE 인터럽트 벡터 테이블 초기화
EALLOW; // 보호된 레지스터 접근 허용
PieVectTable.TINT0 = &cpu_timer0_isr; // CPU Timer0 인터럽트 벡터를 ISR 함수에 연결
EDIS; // 보호된 레지스터 접근 비허용
ConfigureGPIO(); // GPIO 설정 함수 호출
ConfigureCPUTimer0(); // CPU Timer0 설정 함수 호출
PieCtrlRegs.PIEIER1.bit.INTx7 = 1; // PIE 그룹 1에서 CPU Timer0 인터럽트 활성화
IER |= M_INT1; // CPU 인터럽트 그룹 1 활성화
EINT; // 글로벌 인터럽트 활성화
ERTM; // 실시간 모드 활성화: 디버깅 시 인터럽트 실시간 처리
for(;;); // 무한 루프: 타임아웃 감지 후 동작 확인
}
설명:
- 기능: CPU Timer0를 One-Shot 모드로 사용하여 2초 타임아웃 후 GPIO34(LED) 토글
- 설정: 주기 300,000,000(2초 @ 150MHz), 프리스케일러 1/1, 인터럽트 활성화, One-Shot 모드
- GPIO: GPIO34(LED)
- 출력: 2초 후 GPIO34에서 LED 토글 후 타이머 정지
6. 사용 방법
6.1 환경 설정
- C2000Ware 설치: C:\ti\c2000\C2000Ware_x_xx_xx_xx
- CCS 프로젝트: TMS320F28335 타겟으로 프로젝트 생성, F28x_Project.h 포함
- 링커 파일: device_support\f2833x 폴더에서 링커 파일 추가
6.2 코드 실행
- 각 예제를 별도의 .c 파일로 저장하거나, main.c에 복사
- 다른 예제 코드 주석 처리
6.3 하드웨어 준비
- LED 연결: GPIO34, GPIO33에 LED 연결
- 디버깅 도구: CCS와 JTAG 에뮬레이터 사용
6.4 디버깅
- CCS Expressions 창: CpuTimer0Regs.TIM, CpuTimer0Regs.PRD, CpuTimer0Regs.TCR 확인
- 인터럽트 플래그: CpuTimer0Regs.TCR.bit.TIF로 타이머 상태 점검
- 타이머 카운터: CpuTimer0Regs.TIM으로 현재 카운터 값 확인
7. 추가 팁
- 캘리브레이션: Device_cal() 호출로 정확한 클럭 캴리브레이션
- 타이머 선택: Timer0은 시스템 전용으로 예약될 수 있으므로, Timer1 또는 Timer2 사용 고려
- C2000Ware 참고: C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2833x\examples\cpu1\cpu_timer
- 문제 해결:
- 타이머 동작 없음: TCR.bit.TSS, PRD 설정 확인
- 인터럽트 실패: TCR.bit.TIE, PIEIER1.bit.INTx7 확인
- TI 리소스: TI E2E 포럼, C2000Ware 예제
8. 결론
이 문서는 TMS320F28335 CPU Timer 모듈의 설정 방법과 Bitfield 구조를 활용한 예제 코드를 제공하여 다양한 타이밍 제어 애플리케이션에 적용 가능하도록 구성했습니다.
키워드: TMS320F28335, CPU Timer, C2000, Delfino, 타이머, 마이크로컨트롤러, Code Composer Studio, 인터럽트, 프리스케일러, 주기적 스케줄링, One-Shot, 다중 타이머