TI의 TMS320F28377D는 C2000 Delfino 시리즈의 32비트 마이크로컨트롤러로, USB, I2C, McBSP, uPP와 같은 다양한 통신 인터페이스를 지원하여 데이터 전송, 센서 인터페이스, 오디오 처리, 고속 병렬 데이터 전송 등에 적합합니다. 이 글에서는 TMS320F28377D의 USB, I2C, McBSP, uPP 모듈의 상세한 설정 방법, Bitfield 구조를 활용한 레지스터 설정, 그리고 실용적인 예제 코드를 제공하여 초보자와 숙련된 개발자 모두가 쉽게 활용할 수 있도록 돕겠습니다. 모든 예제는 Code Composer Studio(CCS)와 C2000Ware 환경에서 실행 가능합니다.
1. TMS320F28377D 통신 모듈 개요
TMS320F28377D는 다양한 통신 인터페이스를 제공하며, 각 모듈은 고속 및 정밀한 데이터 전송을 지원합니다. 아래는 주요 통신 모듈의 사양입니다:
1.1 USB (Universal Serial Bus)
- 사양: USB 2.0 Full-Speed (12Mbps), 호스트/디바이스 모드 지원
- 주요 기능:
- 엔드포인트: 4개의 양방향 엔드포인트 (EP0~EP3)
- FIFO: 4KB 통합 FIFO
- DMA 지원
- 인터럽트: USB 이벤트 기반 인터럽트 (연결, 데이터 전송 등)
- 용도: 외부 장치 연결, 데이터 로깅, 펌웨어 업데이트
1.2 I2C (Inter-Integrated Circuit)
- 사양: 최대 400kHz (Fast Mode), 7비트/10비트 주소 지정
- 주요 기능:
- 마스터/슬레이브 모드
- 멀티마스터 지원
- 인터럽트: 데이터 전송/수신, 에러 처리
- 용도: 센서, EEPROM, 디스플레이 모듈 인터페이스
1.3 McBSP (Multichannel Buffered Serial Port)
- 사양: 고속 직렬 통신, 최대 50Mbps
- 주요 기능:
- 풀 듀플렉스 통신
- 다채널 지원 (최대 128채널)
- 데이터 포맷: 8/12/16/20/24/32비트
- 인터럽트 및 DMA 지원
- 용도: 오디오 코덱, 디지털 신호 처리, SPI 호환 통신
1.4 uPP (Universal Parallel Port)
- 사양: 고속 병렬 데이터 전송, 최대 75MHz
- 주요 기능:
- 8비트/16비트 데이터 전송
- 단일/듀얼 채널 모드
- DMA 연동
- 용도: 고속 ADC/DAC, FPGA 인터페이스, 대용량 데이터 전송
2. Bitfield 설정 상세
TMS320F28377D의 통신 모듈 레지스터는 Bitfield 구조로 정의되어 있어, F2837xD_usb.h, F2837xD_i2c.h, F2837xD_mcbsp.h, F2837xD_upp.h 헤더 파일을 통해 접근합니다. Bitfield는 명확한 비트 단위 설정으로 코드 가독성과 유지보수성을 높입니다. 주요 레지스터와 Bitfield는 다음과 같습니다:
2.1 USB 주요 레지스터
- USB0CTRL: USB 컨트롤러 활성화/비활성화
- bit.USBMODE: 디바이스(0) 또는 호스트(1) 모드
- bit.ENABLE: USB 모듈 활성화
- USB0TXIS: 전송 인터럽트 상태
- USB0RXIS: 수신 인터럽트 상태
- USB0TXCSRLn: 엔드포인트 n 전송 제어/상태
- bit.TXRDY: 전송 준비
- bit.FIFONE: FIFO 비움
- USB0RXCSRLn: 엔드포인트 n 수신 제어/상태
- bit.RXRDY: 수신 준비
2.2 I2C 주요 레지스터
- I2CMCR: 마스터 제어
- bit.MFE: 마스터 기능 활성화
- bit.SFE: 슬레이브 기능 활성화
- I2CPSC: 프리스케일러 (I2C 클럭 설정)
- I2CMDR: 모드 레지스터
- bit.STT: 시작 조건 생성
- bit.STP: 정지 조건 생성
- bit.MST: 마스터/슬레이브 선택
- I2CFFTX: FIFO 전송 제어
- bit.I2CFFEN: FIFO 활성화
2.3 McBSP 주요 레지스터
- MCBSP_DRR: 데이터 수신 레지스터
- MCBSP_DXR: 데이터 전송 레지스터
- MCBSP_SPCR1/2: 직렬 포트 제어
- bit.RRDY: 수신 데이터 준비
- bit.XRDY: 전송 데이터 준비
- bit.CLKSTP: 클럭 정지 모드
- MCBSP_RCR1/2: 수신 제어
- bit.RWDLEN1: 수신 워드 길이
- MCBSP_XCR1/2: 전송 제어
- bit.XWDLEN1: 전송 워드 길이
2.4 uPP 주요 레지스터
- UPPCTL: uPP 제어
- bit.EN: uPP 활성화
- bit.MODE: 단일(0) 또는 듀얼(1) 채널
- UPPCHCTL: 채널 제어
- bit.DATARATE: 데이터 전송 속도
- UPPDMACTL: DMA 제어
- bit.DMAEN: DMA 활성화
- UPPINTEN: 인터럽트 활성화
3. 통신 모듈 설정 절차
각 모듈을 효과적으로 설정하려면 다음 단계를 따릅니다:
3.1 시스템 초기화
- InitSysCtrl(): 시스템 클럭과 PLL 초기화 (SYSCLK=200MHz)
- 인터럽트 비활성화 및 PIE 초기화: DINT, InitPieCtrl, InitPieVectTable
- 보호된 레지스터 접근: EALLOW와 EDIS 사용
3.2 모듈 클럭 활성화
- USB: CpuSysRegs.PCLKCR13.bit.USB_A = 1
- I2C: CpuSysRegs.PCLKCR10.bit.I2C_A = 1
- McBSP: CpuSysRegs.PCLKCR10.bit.MCBSP_A = 1
- uPP: CpuSysRegs.PCLKCR13.bit.UPP_A = 1
3.3 GPIO 설정
- 각 모듈의 핀을 적절한 기능으로 설정 (예: GpioCtrlRegs.GPAMUX1)
- 입력/출력 방향 설정 (GpioCtrlRegs.GPADIR)
3.4 모듈별 설정
- USB:
- 모드 선택 (디바이스/호스트)
- 엔드포인트 설정 및 FIFO 구성
- 인터럽트 활성화
- I2C:
- 클럭 설정 (I2CPSC, I2CCLKL/H)
- 마스터/슬레이브 모드 설정
- 데이터 전송/수신 설정
- McBSP:
- 데이터 워드 길이 및 프레임 설정
- 클럭 및 프레임 동기화 설정
- 인터럽트 또는 DMA 설정
- uPP:
- 데이터 포맷 및 채널 설정
- DMA 연동 설정
- 인터럽트 활성화
3.5 모듈 실행
- 모듈 활성화 및 데이터 전송 시작
- 인터럽트 또는 폴링 방식으로 데이터 처리
4. 통신 모듈 설정 고려사항
- 클럭 설정: SYSCLK(200MHz)를 기반으로 각 모듈의 클럭 분주 설정
- 인터럽트 관리: PIE 그룹 및 CPU 인터럽트 활성화 확인
- GPIO 충돌 방지: 동일한 핀을 다른 모듈과 공유하지 않도록 주의
- 데이터 포맷: 각 모듈의 데이터 길이 및 포맷 일치 확인
- DMA 활용: 고속 데이터 전송 시 DMA 사용 권장
- 에러 처리: NACK, 버스 충돌, FIFO 오버플로우 등 에러 처리 로직 포함
5. 실용적인 예제 코드 (Bitfield 구조)
아래는 TMS320F28377D의 USB, I2C, McBSP, uPP 모듈을 Bitfield 구조로 설정한 실용적인 예제 코드입니다. 각 예제는 기본적인 기능을 구현하며, CCS와 C2000Ware 환경에서 실행 가능합니다.
5.1 예제 1: USB 디바이스 모드 (데이터 전송)
// File: usb_device.c
// Description: TMS320F28377D USB 디바이스 모드 예제 (Bitfield 구조)
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28377D
#include "F28x_Project.h"
void main(void) {
// 시스템 초기화
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// GPIO 설정
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 2; // GPIO34: USB0DM
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 2; // GPIO35: USB0DP
GpioCtrlRegs.GPBDIR.bit.GPIO31 = 1; // GPIO31: LED
GpioDataRegs.GPBSET.bit.GPIO31 = 1; // LED 켜기
EDIS;
// USB 클럭 활성화
EALLOW;
CpuSysRegs.PCLKCR13.bit.USB_A = 1;
EDIS;
// USB 디바이스 모드 설정
EALLOW;
Usb0Regs.USB0CTRL.bit.USBMODE = 0; // 디바이스 모드
Usb0Regs.USB0CTRL.bit.ENABLE = 1; // USB 모듈 활성화
Usb0Regs.USB0FADDR.bit.FADDR = 0; // 기본 주소
EDIS;
// 엔드포인트 1 설정 (IN 전송)
Usb0Regs.USB0TXMAXP1.bit.MAXLOAD = 64; // 최대 패킷 크기 64바이트
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 0; // 전송 준비 초기화
// 테스트 데이터 전송
Uint16 data[] = {0x1234, 0x5678};
Usb0Regs.USB0TXFIFO1 = data[0]; // FIFO에 데이터 쓰기
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 1; // 전송 시작
for(;;); // 무한 루프
}
설명:
- 기능: USB 디바이스 모드로 설정, 엔드포인트 1을 통해 테스트 데이터 전송
- 설정: USB0DM/DP 핀 설정, 디바이스 모드, 64바이트 패킷
- GPIO: GPIO34(USB0DM), GPIO35(USB0DP), GPIO31(LED)
- 출력: USB 연결 시 데이터 전송, LED ON
5.2 예제 2: USB 인터럽트 기반 데이터 전송
// File: usb_interrupt.c
// Description: TMS320F28377D USB 인터럽트 기반 데이터 전송 예제 (Bitfield 구조)
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28377D
#include "F28x_Project.h"
volatile Uint16 data_index = 0;
volatile Uint16 data[] = {0x1111, 0x2222, 0x3333, 0x4444};
__interrupt void usb_isr(void) {
if(Usb0Regs.USB0TXIS.bit.EP1) { // 엔드포인트 1 전송 인터럽트
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 0; // 전송 플래그 클리어
if(data_index < 4) {
Usb0Regs.USB0TXFIFO1 = data[data_index++]; // 다음 데이터 쓰기
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 1; // 전송 시작
}
Usb0Regs.USB0TXIS.bit.EP1 = 0; // 인터럽트 플래그 클리어
}
PieCtrlRegs.PIEACK.all = PIEACK_GROUP7; // PIE 그룹 7 ACK
}
void main(void) {
// 시스템 초기화
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// 인터럽트 벡터 설정
EALLOW;
PieVectTable.USB0_INT = &usb_isr; // USB 인터럽트 벡터
EDIS;
// GPIO 설정
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 2; // GPIO34: USB0DM
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 2; // GPIO35: USB0DP
GpioCtrlRegs.GPBDIR.bit.GPIO31 = 1; // GPIO31: LED
GpioDataRegs.GPBSET.bit.GPIO31 = 1; // LED 켜기
EDIS;
// USB 클럭 활성화
EALLOW;
CpuSysRegs.PCLKCR13.bit.USB_A = 1;
EDIS;
// USB 디바이스 모드 설정
EALLOW;
Usb0Regs.USB0CTRL.bit.USBMODE = 0; // 디바이스 모드
Usb0Regs.USB0CTRL.bit.ENABLE = 1; // USB 모듈 활성화
Usb0Regs.USB0FADDR.bit.FADDR = 0; // 기본 주소
Usb0Regs.USB0TXIE.bit.EP1 = 1; // 엔드포인트 1 인터럽트 활성화
EDIS;
// 엔드포인트 1 설정 (IN 전송)
Usb0Regs.USB0TXMAXP1.bit.MAXLOAD = 64; // 최대 패킷 크기 64바이트
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 0; // 전송 준비 초기화
// 인터럽트 활성화
PieCtrlRegs.PIEIER7.bit.INTx5 = 1; // USB 인터럽트 (그룹 7)
IER |= M_INT7; // CPU 인터럽트 7 활성화
EINT; // 글로벌 인터럽트 활성화
// 초기 데이터 전송
Usb0Regs.USB0TXFIFO1 = data[data_index++]; // 첫 데이터 쓰기
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 1; // 전송 시작
for(;;); // 무한 루프
}
설명:
- 기능: USB 디바이스 모드로 설정, 인터럽트를 사용하여 순차적으로 데이터 배열 전송
- 설정: USB0DM/DP 핀 설정, 디바이스 모드, 64바이트 패킷, 엔드포인트 1 인터럽트 활성화
- GPIO: GPIO34(USB0DM), GPIO35(USB0DP), GPIO31(LED)
- 출력: USB 연결 시 순차 데이터 전송, LED ON
5.3 예제 3: USB 벌크 전송 (수신 및 전송)
// File: usb_bulk.c
// Description: TMS320F28377D USB 벌크 전송 예제 (Bitfield 구조)
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28377D
#include "F28x_Project.h"
volatile Uint16 received_data;
void main(void) {
// 시스템 초기화
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// GPIO 설정
EALLOW;
GpioCtrlRegs.GPBMUX1.bit.GPIO34 = 2; // GPIO34: USB0DM
GpioCtrlRegs.GPBMUX1.bit.GPIO35 = 2; // GPIO35: USB0DP
GpioCtrlRegs.GPBDIR.bit.GPIO31 = 1; // GPIO31: LED
GpioDataRegs.GPBSET.bit.GPIO31 = 1; // LED 켜기
EDIS;
// USB 클럭 활성화
EALLOW;
CpuSysRegs.PCLKCR13.bit.USB_A = 1;
EDIS;
// USB 디바이스 모드 설정
EALLOW;
Usb0Regs.USB0CTRL.bit.USBMODE = 0; // 디바이스 모드
Usb0Regs.USB0CTRL.bit.ENABLE = 1; // USB 모듈 활성화
Usb0Regs.USB0FADDR.bit.FADDR = 0; // 기본 주소
EDIS;
// 엔드포인트 1 설정 (IN 전송)
Usb0Regs.USB0TXMAXP1.bit.MAXLOAD = 64; // 최대 패킷 크기 64바이트
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 0; // 전송 준비 초기화
// 엔드포인트 2 설정 (OUT 수신)
Usb0Regs.USB0RXMAXP2.bit.MAXLOAD = 64; // 최대 패킷 크기 64바이트
Usb0Regs.USB0RXCSRL2.bit.RXRDY = 0; // 수신 준비 초기화
for(;;) {
// 데이터 수신
if(Usb0Regs.USB0RXCSRL2.bit.RXRDY) {
received_data = Usb0Regs.USB0RXFIFO2; // 데이터 읽기
Usb0Regs.USB0RXCSRL2.bit.RXRDY = 0; // 수신 플래그 클리어
// 수신 데이터 에코 전송
Usb0Regs.USB0TXFIFO1 = received_data; // 데이터 쓰기
Usb0Regs.USB0TXCSRL1.bit.TXRDY = 1; // 전송 시작
}
}
}
설명:
- 기능: USB 디바이스 모드로 설정, 엔드포인트 2로 데이터 수신 후 엔드포인트 1로 에코 전송
- 설정: USB0DM/DP 핀 설정, 디바이스 모드, 64바이트 패킷, 벌크 전송
- GPIO: GPIO34(USB0DM), GPIO35(USB0DP), GPIO31(LED)
- 출력: USB로 수신된 데이터 에코 전송, LED ON
5.4 예제 4: I2C 마스터 모드 (EEPROM 쓰기/읽기)
// File: i2c_eeprom.c
// Description: TMS320F28377D I2C 마스터 모드 예제 (Bitfield 구조)
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28377D
#include "F28x_Project.h"
void main(void) {
// 시스템 초기화
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// GPIO 설정
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO32 = 1; // GPIO32: I2C SDA
GpioCtrlRegs.GPAMUX2.bit.GPIO33 = 1; // GPIO33: I2C SCL
GpioCtrlRegs.GPBDIR.bit.GPIO31 = 1; // GPIO31: LED
GpioDataRegs.GPBSET.bit.GPIO31 = 1; // LED 켜기
EDIS;
// I2C 클럭 활성화
EALLOW;
CpuSysRegs.PCLKCR10.bit.I2C_A = 1;
EDIS;
// I2C 설정 (Bitfield 사용)
I2caRegs.I2CPSC.all = 9; // 프리스케일러: 200MHz/(9+1)=20MHz
I2caRegs.I2CCLKL = 50; // SCL 주기 Low (400kHz)
I2caRegs.I2CCLKH = 50; // SCL 주기 High
I2caRegs.I2CMDR.bit.MST = 1; // 마스터 모드
I2caRegs.I2CMDR.bit.FREE = 1; // Free run
I2caRegs.I2COAR.bit.OAR = 0x50; // 슬레이브 주소 (예: EEPROM)
// 데이터 쓰기
I2caRegs.I2CCNT = 2; // 2바이트 전송
I2caRegs.I2CDXR.bit.DATA = 0x00; // 주소
I2caRegs.I2CMDR.bit.STT = 1; // 시작 조건
while(I2caRegs.I2CSTR.bit.BB); // 버스 비지 대기
I2caRegs.I2CDXR.bit.DATA = 0xAA; // 데이터 쓰기
I2caRegs.I2CMDR.bit.STP = 1; // 정지 조건
for(;;); // 무한 루프
}
설명:
- 기능: I2C 마스터 모드로 EEPROM에 데이터 쓰기
- 설정: 400kHz SCL, 슬레이브 주소 0x50, 2바이트 전송
- GPIO: GPIO32(SDA), GPIO33(SCL), GPIO31(LED)
- 출력: I2C 데이터 전송, LED ON
5.5 예제 5: McBSP SPI 모드 (데이터 전송)
// File: mcbsp_spi.c
// Description: TMS320F28377D McBSP SPI 모드 예제 (Bitfield 구조)
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28377D
#include "F28x_Project.h"
void main(void) {
// 시스템 초기화
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// GPIO 설정
EALLOW;
GpioCtrlRegs.GPAMUX2.bit.GPIO20 = 3; // GPIO20: McBSP MDXA
GpioCtrlRegs.GPAMUX2.bit.GPIO21 = 3; // GPIO21: McBSP MDRA
GpioCtrlRegs.GPAMUX2.bit.GPIO22 = 3; // GPIO22: McBSP MCLKXA
GpioCtrlRegs.GPAMUX2.bit.GPIO23 = 3; // GPIO23: McBSP MFSXA
GpioCtrlRegs.GPBDIR.bit.GPIO31 = 1; // GPIO31: LED
GpioDataRegs.GPBSET.bit.GPIO31 = 1; // LED 켜기
EDIS;
// McBSP 클럭 활성화
EALLOW;
CpuSysRegs.PCLKCR10.bit.MCBSP_A = 1;
EDIS;
// McBSP 설정 (SPI 마스터 모드, Bitfield 사용)
McbspaRegs.SPCR2.bit.GRST = 0; // 리셋
McbspaRegs.SPCR1.bit.RRST = 0;
McbspaRegs.SPCR2.bit.FRST = 0;
McbspaRegs.SPCR2.bit.CLKSTP = 2; // SPI 클럭 모드
McbspaRegs.PCR.bit.CLKXM = 1; // 클럭 마스터
McbspaRegs.PCR.bit.FSXM = 1; // 프레임 동기 마스터
McbspaRegs.RCR1.bit.RWDLEN1 = 5; // 16비트 데이터
McbspaRegs.XCR1.bit.XWDLEN1 = 5; // 16비트 데이터
McbspaRegs.SRGR1.bit.CLKGDV = 19; // 클럭 분주 (200MHz/(19+1)=10MHz)
McbspaRegs.SPCR2.bit.GRST = 1; // 리셋 해제
McbspaRegs.SPCR1.bit.RRST = 1;
McbspaRegs.SPCR2.bit.FRST = 1;
// 데이터 전송
McbspaRegs.DXR1.all = 0x55AA; // 테스트 데이터
while(!McbspaRegs.SPCR2.bit.XRDY); // 전송 준비 대기
McbspaRegs.SPCR2.bit.XSYNCERR = 0; // 동기화 에러 클리어
for(;;); // 무한 루프
}
설명:
- 기능: McBSP를 SPI 마스터 모드로 설정, 16비트 테스트 데이터 전송
- 설정: 10MHz 클럭, 16비트 데이터, SPI 모드
- GPIO: GPIO20(MDXA), GPIO21(MDRA), GPIO22(MCLKXA), GPIO23(MFSXA), GPIO31(LED)
- 출력: SPI 데이터 전송, LED ON
5.6 예제 6: uPP 8비트 데이터 전송
// File: upp_8bit.c
// Description: TMS320F28377D uPP 8비트 데이터 전송 예제 (Bitfield 구조)
// Compiler: Code Composer Studio (TI C2000 Compiler)
// Target: TMS320F28377D
#include "F28x_Project.h"
void main(void) {
// 시스템 초기화
InitSysCtrl();
DINT;
InitPieCtrl();
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
// GPIO 설정
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0 = 2; // GPIO0: uPP DATA0
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 2; // GPIO1: uPP CLK
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 2; // GPIO2: uPP START
GpioCtrlRegs.GPBDIR.bit.GPIO31 = 1; // GPIO31: LED
GpioDataRegs.GPBSET.bit.GPIO31 = 1; // LED 켜기
EDIS;
// uPP 클럭 활성화
EALLOW;
CpuSysRegs.PCLKCR13.bit.UPP_A = 1;
EDIS;
// uPP 설정 (Bitfield 사용)
UppARegs.UPPCTL.bit.EN = 0; // 비활성화
UppARegs.UPPCTL.bit.MODE = 0; // 단일 채널
UppARegs.UPPCHCTL.bit.DATARATE = 0; // 1x 클럭 속도
UppARegs.UPPDMACTL.bit.DMAEN = 0; // DMA 비활성화
UppARegs.UPPCTL.bit.EN = 1; // uPP 활성화
// 데이터 전송
UppARegs.UPPTXDAT = 0xAA; // 8비트 테스트 데이터
while(!UppARegs.UPPINTSTS.bit.TXEMPTY); // 전송 완료 대기
for(;;); // 무한 루프
}
설명:
- 기능: uPP를 단일 채널 8비트 모드로 설정, 테스트 데이터 전송
- 설정: 8비트 데이터, 단일 채널, DMA 비활성화
- GPIO: GPIO0(DATA0), GPIO1(CLK), GPIO2(START), GPIO31(LED)
- 출력: uPP 데이터 전송, LED ON
6. 사용 방법
6.1 환경 설정
- C2000Ware 설치: C:\ti\c2000\C2000Ware_x_xx_xx_xx에서 라이브러리 다운로드
- CCS 프로젝트: TMS320F28377D 타겟으로 프로젝트 생성, F28x_Project.h 포함
- 링커 파일: device_support\f2837xd 폴더에서 링커 파일 추가
6.2 코드 실행
- 각 예제를 별도의 .c 파일로 저장하거나, main.c에 복사
- 원하는 예제만 실행되도록 다른 코드 주석 처리
6.3 하드웨어 준비
- USB: USB0DM/DP 핀에 USB 케이블 연결
- I2C: SDA/SCL 핀에 EEPROM 또는 센서 연결
- McBSP: SPI 호환 장치 연결 (예: 오디오 코덱)
- uPP: 고속 병렬 장치 (예: FPGA) 연결
- LED: GPIO31에 LED 연결 (정상 동작 확인용)
6.4 디버깅
- CCS Expressions 창: 레지스터 상태 확인 (예: I2caRegs.I2CSTR, Usb0Regs.USB0TXCSRL1)
- 인터럽트 플래그: PIEACK, 모듈별 상태 레지스터 점검
- 오실로스코프: 클럭 및 데이터 신호 확인
- 에러 확인: NACK, 동기화 에러, FIFO 상태 점검
7. 추가 팁
- 캘리브레이션: USB 및 uPP 사용 시 Device_cal() 호출로 클럭 보정
- 노이즈 감소: I2C 및 McBSP 라인에 풀업 저항 또는 필터 사용
- C2000Ware 참고: C:\ti\c2000\C2000Ware_x_xx_xx_xx\device_support\f2837xd\examples\cpu1
- 문제 해결:
- USB 연결 실패: USB0CTRL 설정 및 케이블 점검
- I2C NACK 에러: 슬레이브 주소 및 풀업 저항 확인
- McBSP 동기화 실패: 클럭 및 프레임 설정 점검
- uPP 전송 실패: UPPINTSTS 확인
- TI 리소스: TI E2E 포럼, C2000Ware 예제
8. 결론
이 문서는 TMS320F28377D의 USB, I2C, McBSP, uPP 모듈 설정 방법과 Bitfield 구조를 활용한 예제 코드를 제공하여 다양한 통신 애플리케이션에 쉽게 적용할 수 있도록 구성했습니다. USB 디바이스 모드, 인터럽트 기반 전송, 벌크 전송, I2C EEPROM 통신, McBSP SPI 모드, uPP 데이터 전송 예제를 통해 초보자부터 숙련된 개발자까지 활용 가능합니다.
키워드: TMS320F28377D, USB, I2C, McBSP, uPP, C2000, 마이크로컨트롤러, Code Composer Studio, Bitfield, 통신 인터페이스, 데이터 전송, SPI, 병렬 통신
'MCU > C2000' 카테고리의 다른 글
[TI C2000]TMS320F28377D, TMS320F28379D, TMS320F28388D 비교 (2) | 2025.08.18 |
---|---|
[TI C2000]CMD 파일: 상세 설명, 구조, 작성 방법 및 예제(C2000 CMD File: Detailed Explanation, Structure, Writing Methods, and Examples) (2) | 2025.08.18 |
[TMS320F28377D] FPU, TMU, VCU-II 사용법 : 예제 코드 및 활용 가이드 (1) | 2025.08.18 |
[TMS320F28377D] DAC 및 Fault Trip Zones 사용법 : Bitfield 구조 활용 예제 코드 (0) | 2025.08.18 |
[TMS320F28377D] SDFM 사용법 : Bitfield 구조 활용 예제 코드 (1) | 2025.08.18 |
[TMS320F28377D] ePWM CMPASS 사용법: Bitfield 구조 활용 예제 코드 (0) | 2025.08.18 |
[TMS320F28377D] SPI 사용법 : Bitfield 구조 활용 예제 코드 (2) | 2025.08.18 |
[TMS320F28377D] DMA 사용법 : Bitfield 구조 활용 예제 코드 (0) | 2025.08.18 |