TMS320F28X 개발보드 V2 예제
[F28P65x / CPU1] CLB와 SysConfig로 로터리 엔코더를 읽어 7-세그먼트에 00~99 표시하기
1. 실습 안내
본 예제는 TMS320F28P65x 제어 모듈이 탑재된 TMS320F28X 개발보드(EVM) V2를 대상으로 합니다.개발보드 '(14) 엔코더 & TACT 스위치'의 로터리 엔코더를 돌리면, '(13) 7-SEGMENT'의 두 자리 숫자가 00~99 범위에서 바뀝니다.
- 오른쪽으로 한 눈금 돌리면 +1, 왼쪽으로 한 눈금 돌리면 -1입니다.
- 00과 99를 넘어가면 반대쪽 값으로 돌아가지 않고 끝값에서 멈춥니다.
- 노브를 누르는 순간 표시 값이 00으로 리셋되고, 누르고 있는 동안 점(DP) 두 개가 켜집니다.
이번 실습의 핵심은 CLB(Configurable Logic Block, 구성 가능한 논리 블록)입니다. 엔코더 전용 주변장치인 eQEP 대신, 칩 내부의 CLB에 작은 디코더 회로를 만들어 A/B 펄스를 읽습니다.
CLB가 회전 방향과 전이 횟수를 누적하고, CPU는 약 10 ms마다 결과를 읽어 표시 값을 계산합니다.
또한 GPIO 핀 배치, CLB INPUT X-BAR, CLB 입력과 타일 설계를 SysConfig 파일 하나에서 관리합니다. 프로젝트 이름은
13_14_CLB_Encoder_Sysconfig입니다.
노브 회전 → CLB에서 검출·누적 → CPU에서 표시 값 계산 → 7-세그먼트 표시
CLB와 CPU는 같은 F28P65x 칩 내부의 기능을 나누어 그린 개념도입니다.
2. 실습 준비
프로젝트의 설정과 검증 기록에 사용된 환경은 다음과 같습니다.1) CCS : Code Composer Studio 21.x
2) SysConfig : 1.28.0
3) C2000Ware : 26.00.00.00
4) 컴파일러 : 프로젝트 지정값 TI 22.6.3.LTS, 기록된 명령줄 빌드 환경 TI 25.11.1.LTS
5) 개발보드 : TMS320F28X EVM V2
6) 프로세서 : F28P65x 모듈. 기본 프로젝트와 SysConfig의 지정 장치는 TMS320F28P650DK9 / 256ZEJ / CPU1입니다.
F28P659DK8-Q1 모듈을 사용할 때는 실제 장치에 맞게 프로젝트, SysConfig와 타깃 설정을 확인하세요.
7) 기타 : 점퍼 케이블 13개, 보드 전원, JTAG 디버그 프로브
8) 예제 버전 : v1.00
SysConfig가 필요한 예제입니다. DriverLib과 device 지원 파일은 프로젝트 안에 포함되어 있지만, 빌드 시 SysConfig 코드를 생성하려면 C2000Ware 제품 정보가 필요합니다.
별도의 개발보드 V2 보드 정의 파일은 사용하지 않으며, SysConfig에서 GPIO 번호를 직접 지정합니다.
3. 실습 예제 다운로드 (GitHub ZIP 다운로드 안내)
예제 소스는 GitHub 저장소에서 ZIP 파일로 내려받을 수 있습니다.[다운로드 순서]
① 아래 링크에서 GitHub 저장소를 엽니다.
>> [GitHub] EVM_V2_F28P65x_13_14_CLB_Encoder 저장소 바로가기
(※ 다이렉트 ZIP 다운로드: EVM_V2_F28P65x_13_14_CLB_Encoder-main.zip 내려받기)
② 저장소 첫 화면 오른쪽 위의 <> Code ▼ 버튼을 누른 뒤 Download ZIP을 선택합니다. 위의 다이렉트 ZIP 링크를 사용해도 같습니다.
③ 내려받은 ZIP 파일의 압축을 해제합니다.
④ 압축을 푼
EVM_V2_F28P65x_13_14_CLB_Encoder-main 폴더 안에서 13_14_CLB_Encoder_Sysconfig 폴더를 엽니다.>> [GitHub] SysConfig 프로젝트 폴더 바로가기
⑤ 해당 폴더 안의
CCS/13_14_CLB_Encoder_Sysconfig.projectspec 파일을 다음 4번 절차에서 Import합니다.* ZIP은 저장소 전체를 받는 파일입니다. 이번 게시글에서는 그 안의 13_14_CLB_Encoder_Sysconfig 프로젝트를 사용합니다.
* 압축 해제 후 프로젝트 파일 경로: EVM_V2_F28P65x_13_14_CLB_Encoder-main/13_14_CLB_Encoder_Sysconfig/CCS/13_14_CLB_Encoder_Sysconfig.projectspec
* 필요하면 해당 프로젝트 폴더를 C:/SyncWorks/TMS320F28X_EVM_V2_28P65x/13_14_CLB_Encoder_Sysconfig 등으로 옮겨 사용하세요. 경로에는 한글이나 공백을 넣지 않는 편이 좋습니다.
4. CCS 프로젝트 불러오기 및 컴파일
>> [유튜브] CCS V20 예제 프로젝트 불러오기 방법 소개 영상① CCS를 실행하고 C2000Ware 26.00.00.00과 SysConfig 제품이 인식되어 있는지 확인합니다.
② File > Import Projects...에서
CCS/13_14_CLB_Encoder_Sysconfig.projectspec이 들어 있는 폴더를 선택합니다.③ 검색된 13_14_CLB_Encoder_Sysconfig 프로젝트를 선택해 Import합니다.
④ 프로젝트의
13_14_CLB_Encoder_Sysconfig.syscfg를 열어 지정 장치와 핀 설정을 확인합니다.⑤ 처음에는 CPU1_RAM 구성을 선택하고 Build Project를 실행합니다. Flash에 넣을 때는 CPU1_FLASH 구성을 사용합니다.
⑥ 빌드 과정에서 SysConfig가
board.c/h, clb_config.c/h 등을 생성한 뒤 애플리케이션과 함께 컴파일합니다.* 프로젝트의 syscfg/ 폴더에는 생성 코드의 참고용 사본이 있습니다. 실제 빌드에서는 빌드 폴더의 SysConfig 생성물을 사용하므로 참고용 사본을 소스에 중복 추가하지 마세요.
* C2000Ware 제품이나 sdk.json을 찾지 못하면 CCS의 제품 인식 경로를 확인하세요. 프로젝트는 COM_TI_C2000WARE_INSTALL_DIR의 제품 정보를 참조합니다.
* 기본 타깃 설정은 F28P650DK9 / XDS2xx USB Debug Probe입니다. 실제 프로브와 칩이 다르면 targetConfigs의 .ccxml을 맞춰 주세요.
5. 예제 실행을 위한 하드웨어 점퍼선 연결 안내
개발보드의 A Side 핀-헤더를 사용합니다. 7-세그먼트용 10가닥과 엔코더용 3가닥, 합계 13가닥입니다.| 번호 | A Side 핀 | GPIO | 연결 대상 |
| 1 | 65번 | GPIO0 | (13) A1 |
| 2 | 67번 | GPIO1 | (13) B1 |
| 3 | 69번 | GPIO2 | (13) C1 |
| 4 | 71번 | GPIO3 | (13) D1 |
| 5 | 73번 | GPIO4 | (13) DP1 |
| 6 | 75번 | GPIO5 | (13) A2 |
| 7 | 77번 | GPIO6 | (13) B2 |
| 8 | 79번 | GPIO7 | (13) C2 |
| 9 | 81번 | GPIO8 | (13) D2 |
| 10 | 83번 | GPIO9 | (13) DP2 |
| 11 | 105번 | GPIO20 / 일반 입력 | (14) A상 → CLB INPUT X-BAR 입력 1 |
| 12 | 107번 | GPIO21 / 일반 입력 | (14) B상 → CLB INPUT X-BAR 입력 2 |
| 13 | 109번 | GPIO22 / 일반 입력 | (14) S/W, 누르면 High |
* (13) 블록의 헤더는 A1 B1 C1 D1 DP1 A2 B2 C2 D2 DP2 순서입니다. 각 자리의 A/B/C/D는 BCD 입력이고, 세그먼트 a/b/c/d를 직접 구동하는 핀이 아닙니다.
* 코드에서는 1번 자리를 왼쪽 십의 자리, 2번 자리를 오른쪽 일의 자리로 사용합니다.
* (14) 블록의 헤더는 A B S/W입니다. GPIO20/21을 eQEP 기능으로 설정하지 않고 일반 GPIO 입력으로 사용합니다.
* A/B는 보드의 슈미트 트리거 버퍼를 거치고, 노브 스위치는 10k 풀다운 회로를 사용하므로 이 세 입력의 칩 내부 풀업은 끕니다.
* X-BAR와 CLB1 사이의 연결은 칩 내부 신호 경로이므로 추가 점퍼선이 필요하지 않습니다.
실선 10가닥: 7-세그먼트 / 점선 3가닥: 엔코더 A·B·S/W
(큰 이미지로 열어 핀 번호와 연결 대상을 확인하세요.)
6. 예제 실행 및 동작 확인
① 13개 점퍼선을 연결하고 보드 전원과 JTAG 디버그 프로브를 연결합니다.② CCS에서 디버그를 시작하고 CPU1에 프로그램을 로드한 뒤 실행합니다.
③ 표시 동작을 확인합니다.
- 시작 시
00 표시- 오른쪽으로 돌리면 한 눈금마다
01, 02, 03 ... 증가- 왼쪽으로 돌리면 한 눈금마다 1 감소, 범위는
00~99로 제한- 노브를 누르는 순간
00 리셋, 누르는 동안 DP 두 개 점등④ CCS의 Watch / Expressions 창에 아래 변수를 등록해 관찰합니다.
| 변수 | 확인할 내용 |
displayValue | 표시 값 0~99 |
encoderPos | CLB 정방향 누적 횟수 - 역방향 누적 횟수 |
forwardCount | CPU가 마지막으로 읽은 CLB COUNTER_0 값 |
backwardCount | CPU가 마지막으로 읽은 CLB COUNTER_1 값 |
knobPressed | 노브를 누르면 1, 떼면 0 |
segOutput | GPIO0~9에 출력하는 BCD 두 자리 + DP의 10비트 값 |
⑤ 방향이 반대라면 소스의
ENCODER_REVERSE를 0에서 1로 바꾸어 다시 빌드합니다. A/B 배선을 서로 바꾸는 방법도 있습니다.⑥ 한 눈금에 값이 2씩 바뀌거나 반 눈금마다 바뀌는 경우에는
seg_counter.h의 SEGCNT_COUNTS_PER_STEP을 확인합니다. 기본값은 4이며, A/B의 네 에지를 한 눈금으로 환산하는 설정입니다.⑦ 십의 자리와 일의 자리가 반대라면 각 자리의 5개 입력과 배선 순서를 확인합니다.
위 항목은 코드에 따른 설계 동작과 보드 확인 절차입니다. 실제 보드에서의 확인 상태는 아래 8번을 참고하세요.
7. SysConfig와 CLB 동작 원리
① A/B 신호를 CLB로 전달GPIO20 → CLB INPUT X-BAR 입력 1 → CLB1 IN0GPIO21 → CLB INPUT X-BAR 입력 2 → CLB1 IN1A/B 입력은 CLB 입력단에서 동기화합니다. 노브 스위치 GPIO22는 CPU가 직접 읽습니다.
② FSM 2개와 카운터 2개로 정방향·역방향 전이를 누적
CLB 안의 FSM은 직전 A/B 상태와 현재 상태를 비교합니다. 정방향 전이는 COUNTER_0, 역방향 전이는 COUNTER_1에 각각 누적합니다. 변화가 없거나 두 입력이 동시에 바뀌는 전이는 세지 않습니다.
CPU가 펄스마다 인터럽트로 들어가 횟수를 세는 방식이 아니라, CLB 하드웨어가 검출·누적하는 방식입니다.
③ CPU는 약 10 ms마다 읽고 표시
CPU는
COUNTER_0 - COUNTER_1을 위치로 사용합니다. seg_counter 모듈이 이전 위치와의 차이를 눈금 단위로 환산하고 00~99로 제한한 뒤, 두 자리 BCD와 DP를 GPIO0~9에 출력합니다.④ 설정 파일과 초기화 순서
13_14_CLB_Encoder_Sysconfig.syscfg에서 GPIO, CLB INPUT X-BAR, CLB1 입력, Tile Design을 함께 설정합니다.초기화는 다음 순서입니다.
Board_init(); // 핀, GPIO, X-BAR, CLB 입력 초기화 initTILE1(myCLB1_BASE); // CLB 타일에 디코더 설계 기록 CLB_enableCLB(myCLB1_BASE); // 설계 기록 후 CLB 동작 시작
Board_init()은 타일 설계를 기록하는 initTILE1()을 대신 호출하지 않습니다. 따라서 SysConfig의 Enable CLB는 꺼 두고, 설계를 기록한 후 코드에서 CLB를 켭니다. 위 코드는 주변장치 초기화의 핵심 순서만 발췌한 것이며 실제 소스의 보호 레지스터 접근 구문 등은 그대로 유지합니다.설정을 바꿀 때는
.syscfg 원본을 수정하세요. 자동 생성된 board.c나 clb_config.c를 직접 수정하면 다음 생성 과정에서 덮어써집니다.
8. 프로젝트 검증 기록 및 확인 범위
프로젝트 README에 기록된 2026-10-28 기준 검증 내용은 다음과 같습니다.- SysConfig CLI로
board.c/h, clb_config.c/h 생성 확인- 생성 코드와 소스의 CPU1_RAM / CPU1_FLASH 명령줄 컴파일·링크 확인
- 이 프로젝트의 TI CLB Tool 시뮬레이션에서 정방향 COUNTER_0 누적 확인
이 예제는 CLB의 입력 연결·상태 검출·카운터 누적을 학습하기 위한 입문용 예제입니다.
| 번호 | 제목 | 작성자 | 날짜 |
|---|
- 1




