공부하는 내용
전처리기 pragma의 간단한 소개, 함수 섹션
초기화와 관련된 간단한 소개
Start!
DSP를 사용하다 보면 자주 쓰게될 InitSysCtrl() 함수는 칩 초기화 작업을 기술한 함수이고, DSP281x_SysCtrl.c에 있다.
칩 초기화를 이해하려면 칩 내부구조를 자세히 알고 있어야 하지만 기능적인 부분의 이해는 어렵지 않다.
우리 입맛에 맞게 초기화를 하고 싶다면 이 코드를 기초로 코드를 작성하면 되겠다.
그전에 DSP281x_SysCtrl.h라는 파일이 있음을 숙지하라. c파일에서는 함수정의 등이 있지만 h파일에는 레지스트리 구조가 구조체 형식으로 정의되어 있으니 Datasheet와 함께 봄이 좋다.
1.
최초에 DSP281x_Device.h와 DSP281x_Examples.h를 인클루드 하고 있다.
DSP281x_Device.h는 주요 MMR을 정의하고 있으며
DSP281x_Examples.h는 TI의 예제에서 자주 사용되는 중요 함수들이 정의되어 있다.
2.
다음으로 #pragma CODE_SECTION(InitFlash, "ramfuncs");라고 되어있다.
pragma는 전처리기(preprocessor)을 의미하고 C컴파일러에 지시를 내릴 때 사용하는 명령이다. pragma의 지시어는 once, comment, loop등 다양하다. 이에 대해서는 인터넷 검색으로 많은 정보를 얻을 수 있을 것이다.
CODE_SECTION이나 DATA_SECTION 이라는 키워드는 C언어에서 사용자 정의 섹션을 정의할 때 사용된다. 이 둘은 각각 코드 섹션 및 데이터 섹션 정의에 사용된다.
CODE_SECTION(InitFlash, "ramfunc")라는 말은 InitFlash 라는 함수를 ramfunc라는 섹션으로 정의하는 것을 뜻한다.
DATA_SECTION함수는 특정 데이터를 메모리 영역에 주입하기 위해 사용된다. 즉, 특정 데이터를 모아서 특정 섹션으로 구분지어 링커에게 특정 영역에 배치하도록 지시하는 것이다. 예를들어 #pragma DATA_SECTION(coeff,"m_coeff")는 coeff라는 배열을 C컴파일러의 pragma 전처리기를 통해서 m_coeff라는 섹션으로 처리한 것이다.
3.
다음으로 나오는 InitSysCtrl(void)에는 세 함수가 있다.
DisableDog() : Watchdog을 무력화
InitPll(0xA) : PLLCR레지스터를 설정, 원하는 시스템 클럭 생성
InitPeripheralClocks() : peripheral 클럭 설정(CPU로부터 나가는 주변 회로 공급 클럭의 주파수 설정 및 클럭 공급 여부 설정)
위에 대해서는 별개의 글에서 다루겠다.
'TMS320 > Study' 카테고리의 다른 글
DSP281x_SysCtrl.c <좀더 자세히> (0) | 2014.08.06 |
---|---|
전처리기(Precompiler) pragma (0) | 2014.08.06 |
DSP281x_CodeStartBranch.asm (0) | 2014.08.05 |
asm(" nop") (0) | 2014.08.05 |
DSP와 표준C의 차이 (0) | 2014.08.05 |