TMS320F2806x 초기화 코드 정리
1. main() 및 인터럽트 초기화
void main(void)
{
Uint16 Loop_count = 0;
DINT; // Disable Global Interrupt
// 고속 CLOCK 설정
EALLOW; // 보호 레지스터 쓰기 허용
/* HSPCLK = SYSCLKOUT/(HISPCP*2)
* HSPCLK = 150MHz/(1*2) = 75MHz */
SysCtrlRegs.HISPCP.bit.HSPCLK = 1;
EDIS; // 보호 레지스터 쓰기 금지
// 시스템 컨트롤 초기화
InitSysCtrl();
InitInt();
EINT; // Enable Global interrupt INTM
ERTM; // Enable Global realtime interrupt DBGM
for(;;)
{
Loop_count++;
}
}
2. 매크로 정의 (인라인 어셈블리)
#define EINT __asm(" clrc INTM") // 전역 인터럽트 ON
#define DINT __asm(" setc INTM") // 전역 인터럽트 OFF
#define ERTM __asm(" clrc DBGM") // 리얼타임 인터럽트 ON
#define DRTM __asm(" setc DBGM") // 리얼타임 인터럽트 OFF
#define EALLOW __asm(" EALLOW") // 보호 레지스터 쓰기 허용
#define EDIS __asm(" EDIS") // 보호 레지스터 쓰기 금지
#define ESTOP0 __asm(" ESTOP0") // 에뮬레이션 정지 (디버그용)
3. InitSysCtrl(void) – 시스템 제어 초기화
void InitSysCtrl(void)
{
DisableDog(); // 와치독 타이머 비활성화
// ADC 및 오실레이터 캘리브레이션 (OTP → TRIM 레지스터 복사)
EALLOW; // 보호 레지스터 쓰기 허용
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; // ADC 클럭 일시 활성화
(*Device_cal)(); // 자동 캘리브레이션 함수 호출
SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 0; // ADC 클럭 원복
EDIS; // 보호 레지스터 쓰기 금지
IntOsc1Sel(); // 내부 오실레이터 1 선택 (기본)
InitPll(DSP28_PLLCR, DSP28_DIVSEL); // PLL 설정 → SYSCLKOUT 생성
InitPeripheralClocks(); // 주변 장치 클럭 활성화
}
> 초기화 단계 요약
| Step 1 | DisableDog() → 와치독 OFF |
| Step 2 | InitPll() → PLLCR 설정으로 SYSCLKOUT 생성 |
| Step 3 | Pre-scaler 설정 → 고속/저속 주변장치 클럭 조정 |
| Step 4 | InitPeripheralClocks() → 주변장치에 클럭 공급 ON |
주의: 디버그 중 Boot ROM 우회 시 (*Device_cal)() 반드시 호출!
4. InitInt(void) – 인터럽트 시스템 초기화
> 인터럽트 초기화 단계
static void InitInt(void) // 인터럽트 초기화
{
InitPieCtrl(); // Step 1: PIE 설정 레지스터 초기화
IER = 0x0000; // Step 2: CPU 인터럽트 활성화 레지스터 클리어
IFR = 0x0000; // Step 3: CPU 인터럽트 플래그 레지스터 클리어
InitPieVectTable(); // Step 4: PIE 벡터 테이블 초기화
}
단계함수설명
| Step 1 | InitPieCtrl() | PIE 개별 인터럽트 설정 플래그 모두 클리어 |
| Step 2 | IER = 0x0000 | CPU 인터럽트 활성화 레지스터 초기화 |
| Step 3 | IFR = 0x0000 | CPU 인터럽트 플래그 레지스터 클리어 |
| Step 4 | InitPieVectTable() | PIE 벡터 테이블 초기화 (ISR 연결 준비) |
참고 자료
- System Control and Interrupts Data Sheet https://www.ti.com/lit/pdf/spru712
- TMS320F2806x Technical Reference Manual
spru712h-TMS320x280x, 2801x, 2804x DSP System Control and Interrupts.pdf
0.68MB
'개발 > TI_TMS320' 카테고리의 다른 글
| TMS320 F28069 SPI EEPROM CAT25320, CAT25512 code (0) | 2025.12.18 |
|---|---|
| CMD 파일, Code Composer Studio(CCS) 빌드과정 - ti (0) | 2025.10.22 |
| TI: FLASH 에서 실행, DELAY_US 문제 (0) | 2025.10.21 |
| C2Prog 로 (CCS 없이) FW Download 하기 - TI TMS320 입문 (0) | 2025.10.20 |
| TMS320F28069 eQEP 코드 예시 2 (0) | 2025.09.09 |