TMS320F28X 개발보드 V2 예제
[F28P65x / CPU1] 28X 칩과 PC간 SCI 시리얼 통신 예제 (SCI-to-USB, 택트 스위치 보고 + LED 패턴 명령, Bitfield/DriverLib/Fre
인터럽트
2026.10.02 10:29:07
조회수 39
1. 실습 안내
본 예제는 TMS320F28P65x(F28P650DK9 산업용 / F28P659DK8-Q1 차량용) 제어 모듈이 탑재된 TMS320F28X 개발보드(EVM) V2를 대상으로 합니다.F28P65x 칩의 SCI-A(UART)를 개발보드 '(11) 2채널 SCI-to-USB' 회로와 연결해 PC와 시리얼 통신을 합니다. 통신은 양방향입니다.
- 28X 칩 → PC : 개발보드 '(6) 범용 Tactile 스위치 4개'의 상태가 바뀌면
[12345 ms] SW1 ON처럼 변화 내용을 한 줄로 PC에 보냅니다. 스위치가 20ms 이상 안정된 상태만 보고하므로 채터링으로 같은 줄이 여러 번 나오지 않습니다.- PC → 28X 칩 : PC 터미널에서
led bounce, speed 300 같은 간단한 명령을 입력하면 '(8) 범용 LED 16개'의 점멸 패턴과 속도가 바뀝니다.학습 목적에 따라 Bitfield / DriverLib / FreeRTOS 3가지 구현을 모두 제공합니다.
2. 실습 준비
본 예제는 아래의 개발환경에서 컴파일/링크를 확인했습니다.1) CCS 버전 : Code Composer Studio v12.x / v20.x / v21.x (Theia)
2) 컴파일러 버전 : TI v22.6.3.LTS 이상
3) 개발보드 : TMS320F28X 개발보드 V2
4) 프로세서 모듈 : 싱크웍스 TMS320F28P65x 모듈 (F28P650DK9 / F28P659DK8-Q1)
5) 예제버전 : v1.00
6) 기타 : Mini-B 5핀 USB 케이블 1개 (PC ↔ '(11) 2채널 SCI-to-USB' 회로), 시리얼 터미널 프로그램 (CCS Serial Console, Tera Term 등)
7) 프로젝트 구성 : 학습 목적에 따라 3가지 버전을 모두 제공합니다.
- Bitfield : DriverLib을 전혀 호출하지 않고 레지스터 비트필드 구조체(SciaRegs, GpioCtrlRegs 등)만으로 구현, CPU Timer0 1ms 폴링
- Driverlib : TI 표준 HAL API 라이브러리를 활용한 구현, CPU Timer0 1ms 폴링
- FreeRTOS : SCI 수신 FIFO 인터럽트가 링버퍼에 쌓고, 태스크 1개(SciTask, 1ms 주기)가 스위치/LED/명령을 처리, 완전 정적 메모리 할당(Zero Heap)
3. 실습 예제 다운로드 (GitHub ZIP 다운로드 안내)
초보자분들도 손쉽게 다운로드하여 사용하실 수 있도록 전체 소스 코드를 GitHub에 공개해 두었습니다.아래 안내에 따라 ZIP 압축 파일로 다운로드하세요.
[다운로드 순서]
① 아래의 링크를 클릭하여 GitHub 저장소 페이지로 이동합니다.
>> [GitHub] EVM_V2_F28P65x_11_SCI_to_USB 저장소 바로가기
(※ 다이렉트 ZIP 다운로드 : EVM_V2_F28P65x_11_SCI_to_USB.zip 클릭하여 바로받기)
② GitHub 페이지 우측 상단의 초록색 <> Code ▼ 버튼을 클릭합니다.
③ 나타나는 메뉴 맨 아래의 Download ZIP 항목을 클릭하여 압축 파일을 다운로드합니다.
④ 다운로드한 ZIP 파일의 압축을 해제합니다.
- 권장 설치 경로 : C:/SyncWorks/TMS320F28X_EVM_V2_28P65x/11_SCI_to_USB
(※ 주의 : 경로 상에 한글이나 공백이 포함되지 않도록 주의해 주세요.)
4. CCS 프로젝트 불러오기 (CCS V20 기준) 및 컴파일
>> [유튜브] CCS V20 예제 프로젝트 불러오기 방법 소개 영상① Code Composer Studio(CCS)를 실행합니다.
② 상단 메뉴에서 File > Import Projects... 를 클릭합니다.
③ Specify Search Directory 버튼을 눌러 앞서 압축을 해제한 폴더를 선택합니다. (ZIP 파일을 바로 "Select archive file"로 지정해도 됩니다.)
④ 검색된 프로젝트 목록 중 실습하고자 하는 프로젝트(11_SCI_to_USB_Bitfield, 11_SCI_to_USB_Driverlib, 11_SCI_to_USB_Freertos 중 원하는 프로젝트)를 체크하여 선택합니다.
⑤ Finish 버튼을 클릭하여 프로젝트를 워크스페이스로 불러옵니다.
⑥ 프로젝트를 마우스 우클릭하여 Build Project를 수행합니다. (기본 설정: CPU1_RAM 또는 필요 시 CPU1_FLASH)
5. 예제 실행을 위한 하드웨어 점퍼선 연결 안내
아래와 같이 F28P65x 모듈의 핀-헤더와 개발보드 각 회로 블록을 점퍼 케이블로 연결합니다.| 신호 | EVM V2 핀-헤더 | 할당 신호명 | 연결 대상 |
| SCI TX | A Side 15번 핀 | GPIO42 / SCIA_TX | (11) 블록 "TX1" |
| SCI RX | A Side 17번 핀 | GPIO43 / SCIA_RX | (11) 블록 "RX1" |
| 택트 스위치 SW1 | A Side 29번 핀 | GPIO70 | (6) 블록 SW1 |
| 택트 스위치 SW2 | A Side 27번 핀 | GPIO69 | (6) 블록 SW2 |
| 택트 스위치 SW3 | A Side 25번 핀 | GPIO68 | (6) 블록 SW3 |
| 택트 스위치 SW4 | A Side 23번 핀 | GPIO67 | (6) 블록 SW4 |
| LED × 16 | A Side 65~95번 핀(홀수) | GPIO0~15 | (8) 범용 LED 16개 블록 입력 16핀에 순서대로 연결 |
* 낮은 번호(A Side 15번, GPIO42)가 TX, 높은 번호(17번, GPIO43)가 RX입니다. 점퍼선이 엇갈리지 않게 확인하세요.
* GPIO42/43은 USB0DM/DP와 같은 핀이라 USB 예제와 함께 쓰려면 점퍼선을 바꿔 꽂아야 합니다. 이 예제는 해당 핀의 아날로그 모드를 꺼서 SCI로 사용합니다.
* 개발보드 '(6) 범용 Tactile 스위치 4개' 회로는 스위치를 누르면 High(Active High)가 출력됩니다.
* '(11) 2채널 SCI-to-USB' 회로의 미니 5핀 USB 커넥터를 PC의 USB 포트와 케이블로 연결하면 PC에서 'USB Serial Port' 2개가 인식됩니다. 그중 1채널(RX1/TX1)에 해당하는 포트를 사용하세요. 어느 쪽인지는 장치관리자에서 확인할 수 있습니다.

6. 예제 실행 및 동작 확인
① JTAG 에뮬레이터를 연결하고 디버그(Debug, F11) 후 실행(Resume, F8)합니다.② 시리얼 터미널 설정 (CCS V20 Serial Console) : CCS V20에서는 Serial Console을 엽니다.
- 상단 메뉴에서 View > Open View 메뉴를 누른 후 'serial console'을 입력해 검색하고 엔터를 눌러 선택합니다.
- Serial Console 뷰 오른쪽 위의 Connect/Disconnect COM PORT 아이콘(아래 사진의 빨간 네모)을 누릅니다.
- COM Port 창에서 Port와 Baud Rate 등을 선택해 COM 포트를 연결합니다.
* Port : COMx (PC 환경마다 다를 수 있습니다. / 장치관리자에서 확인, 예: COM34 (FTDI))
* Baud Rate : 115200 / Parity : none / Data Size : 8 / Stop Bits : 1
(Tera Term 같은 다른 시리얼 터미널 프로그램도 같은 설정으로 사용할 수 있습니다.)

③ 시작 확인 : 터미널에 아래 문구가 나오고, LED16에는 기본 패턴(run, 100ms)으로 러닝 라이트가 돕니다.
[F28P65x] SCI-to-USB example (SCI-A, 115200 8N1)tact switch events are reported, type 'help' + Enter④ 스위치 보고 확인 : 택트 스위치를 누르거나 떼면 부팅 후 시간(ms)과 함께 한 줄이 출력됩니다.
[12345 ms] SW1 ON[12480 ms] SW1 OFF
⑤ LED 패턴 변경 확인 : 터미널에 아래 명령을 입력하고 엔터를 누릅니다.
-
led <패턴> : off(모두 끔), blink(전체 점멸), run(러닝 라이트), bounce(좌우 왕복), count(이진 카운터) 또는 0~4-
speed <ms> : LED 갱신 주기 (20 ~ 2000 ms)-
stat : 수신/송신 바이트 수, 현재 LED 패턴·속도, 스위치 상태 출력-
clear : 누적 카운터 초기화, help : 명령 목록예)
led bounce 를 입력하면 LED 한 개가 양 끝을 오가고, speed 300 을 입력하면 이동 속도가 느려집니다.⑥ CCS WATCH 창 관찰 (기존 Expressions) : 상단 메뉴 View > Watch (기존 CCS v12 이하는 View > Expressions) 창에 아래 변수를 등록합니다.
-
rxCount, txCount, rxErrorCount : 통신 통계-
tactState : 스위치 상태 (비트0=SW1 ~ 비트3=SW4, 1=눌림)-
swEventCount : PC로 보고한 스위치 변화 횟수-
ledPattern, ledSpeedMs : 현재 LED 패턴 번호와 갱신 주기
7. 참고 — 3가지 버전 실측 메모리 사용량 비교
동일한 동작을 세 가지 방식으로 구현했을 때 RAM 사용량(CPU1_RAM 빌드 기준)이 얼마나 달라지는지 실제로 빌드해서 비교했습니다. 링커 맵의 온칩 RAM 사용량을 합산한 값입니다.| 버전 | RAM 사용량 합계 |
| Bitfield | 6,193 B (6.0 KB) |
| DriverLib | 6,934 B (6.8 KB) |
| FreeRTOS | 10,273 B (10.0 KB) |
Bitfield 버전이 가장 작은 이유는 애플리케이션 코드가 DriverLib 함수 호출 대신 레지스터를 직접 다루기 때문이고, FreeRTOS 버전이 가장 큰 이유는 커널 자체 코드/데이터(태스크 스택, TCB, 스케줄러)와 수신 링버퍼가 추가되기 때문입니다.
| 번호 | 제목 | 작성자 | 날짜 |
|---|
- 1




