TI TMS320 입문 연재 입니다.
>. CCS, C2000Ware, sprc191 (sprc097) 설치, compile
>. XDS100, XDS200 로 CCS Debug 하기
>. FLASH 에서 실행, DELAY_US 문제 == 본글
>. UniFlash 로 (CCS 없이) FW Download 하기(Driver 설치)
>. C2Prog 로 (CCS 없이) FW Download 하기
>. C2000Ware Sample code 를 다른곳으로 가져 가기
>. CCS, 다른 ( 옛날 ) Compiler (CGT) 버전 설치
>. TMS320 F28069 CCS SCI(UART) source
>. TMS320 F28069 CCS PWM source
>. TMS320 F28069 CCS ADC source
>>. TMS320 error: program will not fit into available memory
>>. Code Composer Studio(CCS) 빌드과정, CMD 파일
==========================================
( 최초 만들기: 251021 , 마지막 바꾸기 : 251021 )
본글 목차
1. FLASH 에서 실행 하게 설정
2. 실행
3. DELAY_US 문제
==========================================
1. FLASH 에서 실행 하게 설정
FW 가 RAM에서 실행 될지 FLASH 에서 실행 될지는 ~\common\cmd\~.cmd 파일에 정의 되어 있읍니다.
여기서는 TT TMS320F28069 를 쓰므로,
> RAM 에서 실행 할때는 28069_RAM_lnk.cmd 를 사용 하였는데
> FLASH 에서 실행 할때는 28069_RAM_lnk.cmd 를 빼고(excluded), F28069.cmd 을 포함 시킵니다.

2. 실행
> Project > Build Projects 하면 빌드가 되고

> Run > Debug Projects 하면 실행 되고,

> Run > Flash Project 하면 보드에 다운로드 됩니다. 이후 Reset(껏다 켬) 을 하면 다운로드 된것이 돌아 갑니다.
3. DELAY_US 문제
1) 근데, 막상 실행을 시켰는데, 먹통이 될 때가 있읍니다.
바보가 되는 이유는 여러가지가 있겠지만, 여기서는 그중 1가지를 다룹니다.
디버그를 따라 가다 보면, DELAY_US() 에서
C28xx: Breakpoint Manager: Error enabling this function: This task cannot be accomplished with the existing AET resources.
와 같은 에러가 나는 경우 입니다.
2) DELAY_US 는 디파인으로, DSP28x_usDelay() 로 되어 있고,
#define DELAY_US(A) DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) - 9.0L) / 5.0L)
3) DSP28x_usDelay 를 찾어 보면, F2806x_usDelay.asm 에 아래와 같은 코드 가 있읍니다.
;// *IMPORTANT*
;// IF RUNNING FROM FLASH, PLEASE COPY OVER THE SECTION "ramfuncs" FROM FLASH
;// TO RAM PRIOR TO CALLING InitSysCtrl(). THIS PREVENTS THE MCU FROM THROWING
;// AN EXCEPTION WHEN A CALL TO DELAY_US() IS MADE.
;//
.def _DSP28x_usDelay
.sect "ramfuncs"
.global __DSP28x_usDelay
_DSP28x_usDelay:
SUB ACC,#1
BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0
LRETR
4) 이 코드를 보면
;// IF RUNNING FROM FLASH, PLEASE COPY OVER THE SECTION "ramfuncs" FROM FLASH
;// TO RAM PRIOR TO CALLING InitSysCtrl(). THIS PREVENTS THE MCU FROM THROWING
;// AN EXCEPTION WHEN A CALL TO DELAY_US() IS MADE.
라고, 즉 Flash 에서 실행 할때는 InitSysCtrl() 부르기 전에 ramfuncs 을 복사 하라는 말 입니다.
5) ramfuncs 을 복사
> ramfuncs 을 복사 하는 아래 코드
// Initialize Internal FLASH Memory Control Registers
memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (Uint32)&RamfuncsLoadSize);
InitFlash();
를 InitSysCtrl(); 앞에 넣으면 됩니다.
근데 , 꼭 그 앞이 아니고, InitPieCtrl(); 다음에 넣어도. 돌아 가네요
> 참고로 memcpy 를 쓰기 위해서는
가 있어야 합니다.
6) ramfunc 으로 설정
> 빌드 뒤 ~.map 파일을 보면
ramfuncs 0 003e8000 00000004 RUN ADDR = 00008000
003e8000 00000004 F2806x_usDelay.obj (ramfuncs)
와 같이 ramfunc 설정은 잘 되어 있읍니다.
즉 F2806x_usDelay 은 추가 설정이 필요 하지 않읍니다.
하지만, 혹시 다른 함수가 RAM 에서 돌아 야 할 경우는 아래와 같이 설정 하시면 됩니다.
이 코드는 sciaRxFifoIsr 을 RAM 에서 실행 하라는 뜻 입니다.
===========================
다음 글은
> UniFlash 로 (CCS 없이) FW Download 하기(Driver 설치)
입니다.
============================
수고 하셨읍니다.
도움이 되셨으면, 댓글 부탁합니다. 댓글 하나에 힘이 됩니다.
고맙읍니다.
'개발 > TI_TMS320' 카테고리의 다른 글
| 초기화 코드 정리: InitSysCtrl , InitInt 등 : TMS320 (0) | 2025.10.24 |
|---|---|
| CMD 파일, Code Composer Studio(CCS) 빌드과정 - ti (0) | 2025.10.22 |
| C2Prog 로 (CCS 없이) FW Download 하기 - TI TMS320 입문 (0) | 2025.10.20 |
| TMS320F28069 eQEP 코드 예시 2 (0) | 2025.09.09 |
| TMS320F28069 eQEP 코드 예시 1 (0) | 2025.09.09 |