TMS320/Study2014. 8. 6. 13:26

 

'TMS320 > Study' 카테고리의 다른 글

DSP281x_Device.h  (0) 2014.08.07
DSP281x_SysCtrl.c <좀더 자세히>  (0) 2014.08.06
DSP281x_SysCtrl.c  (0) 2014.08.06
DSP281x_CodeStartBranch.asm  (0) 2014.08.05
asm(" nop")  (0) 2014.08.05
Posted by 십자성군
TMS320/Study2014. 8. 6. 11:52

공부하는 내용

전처리기 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
Posted by 십자성군
TMS320/Study2014. 8. 5. 21:59

공부하는 내용



Start!


이번 내용은 간단하게 그렇구나~ 하고 읽어주는 정도로 충분하다.

 

어셈블리... 일단 필자는 모른다. 현재 참고중인 핸드북 책에서는 쉽다고 한다. 일이 닥치면 금방 할 수 있다고 한다. 하지만 어셈블리는 그 플랫폼에 맞게 되어있기 때문에 이식성이 떨어진다. 요즈음의 C컴파일러의 효율이 뛰어나고 MCU의 데이터 처리 효율도 뛰어나서 어셈블리의 필요성도 낮아졌다. 딱히 이 파일이 없어도 잘 돌아가지 않는가? 게다가 딱히 어셈블리를 위한 가이드북도 없다!

 

그런데 이 코드를 잘 활용하면 DSP의 프로그램을 매우 효율적이고 쉽게 구현할 수 있다고 한다.

그렇다고 어셈블리를 배울 필요는 없다. 28x용 어셈블리는 위의 CodeStartBranch.asm하나로 충분하다고 하고 이해하고 이용하는 정도면 충분하다고 한다. 만약 깊게 들어가야 한다면 차후에 다루도록 하겠다. 이 파일의 코드를 이해하고자 한다면 핸드북을 참고하기를 바란다. 그렇게 길지도 않다.

 

끝내기 전에 약간 언급하고자 한다.

28x DSP에서 코드가 실행되는 과정:MC모드 기준

MCU를 MC모드(Micro Computer)모드로 운영할 경우 DSP칩이 부트할 경우 Program Counter(PC)에 0x3F FFC0가 실린다. 여기에는 리셋 벡터가 고정되어 있는데 이 주소는 내부 버스를 통해, TI가 마스킹한 Boot Rom을 가리킨다.(MC 말고도 MP(Micro Processor 모드가 있다.). 이 Boot Rom에 Boot Loader라는 작은 복사 프로그램이 있으며 MC모드일 때 이것이 실행된다. DSP281x_CodeStartBranch.asm 에는 Watchdog의 사용여부를 묻는 어셈블리 코드가 있다. rts2800_ml.lib도 관계되어 있다.

 

더 자세히는 보류..

 

 

 

 

 

'TMS320 > Study' 카테고리의 다른 글

전처리기(Precompiler) pragma  (0) 2014.08.06
DSP281x_SysCtrl.c  (0) 2014.08.06
asm(" nop")  (0) 2014.08.05
DSP와 표준C의 차이  (0) 2014.08.05
.gel 파일 대충 이해하기  (0) 2014.08.05
Posted by 십자성군
TMS320/Study2014. 8. 5. 21:16

asm("    nop")구문은 인라인 어셈블리(inline assembly)함수로, C 코드에 간단한 어셈블리 구문을 곧바로 삽입하는 역할을 한다.

브레이크 포인트, 푸르부 포인트, 프로파일링 등을 쉽게 하기 위한 구문이며 이에 대하여 이 글에 점점 추가하도록 하겠다.

'TMS320 > Study' 카테고리의 다른 글

DSP281x_SysCtrl.c  (0) 2014.08.06
DSP281x_CodeStartBranch.asm  (0) 2014.08.05
DSP와 표준C의 차이  (0) 2014.08.05
.gel 파일 대충 이해하기  (0) 2014.08.05
[이론]풀-업 저항과 풀-다운 저항2  (0) 2014.07.27
Posted by 십자성군
TMS320/Study2014. 8. 5. 20:35

1.

 

소프트웨어 프로그래밍을 위해서 자주 사용하는 stdio.h나 math.h는 표준 C에서 정의된 각종 입출력 함수와 수학함수가 정의되어 있다.

하지만 DSP같은 임베디드 프로세서에는 '표준 입출력 장치가 없다' 그런데도 표준 입출력 함수를 사용한다면, DSP는 메모리 영역인 stack, heap에서 '가상 입출력 장치'를 만들어서 데이터 입출력을 하게 된다. 언뜻 보기만 해도 매우 거추장스럽고 느려질 것 같지 않은가? 하드웨어가 됐든 소프트웨어가 됐든 신속 정확 간결이 중요하거늘 이는 매우 치명적인 문제가 될 수 있다.

 

더욱이 math.h는, 표준 C는 플랫폼(리눅스던, ARM이던, WINDOWS던)을 가리지 않고 수행되어야 하기 때문에 범용성을 높인 대신 어느 한 플랫폼에 최적화 되어있지는 않다. 즉, DSP에 있어서는 비효율적일 수 밖에 없다는 것이다. 따라서 TI에서는 DSP에 적합한 효율이 좋은 수치함수를 IQmath로 제공하고 있다.

 

2.

28X DSP는 일부 데이터 형이 C와 다르다.

 

 

 

char 

short 

int 

long 

long long 

float 

double 

long double 

 C

16 

32 

32 

64 

32 

64 

64 

 28X

16 

16 

16 

32 

 

32 

32 

64 

 

char, int, double의 크기가 다르며 long long이 없다.

따라서 double을 쓸것 없이 float를 사용하면 된다. 일반 C플랫폼과 DSP간의 데이터 교환이 있을 경우 이런 bit차이에 조심하여야 하겠다.

 

'TMS320 > Study' 카테고리의 다른 글

DSP281x_CodeStartBranch.asm  (0) 2014.08.05
asm(" nop")  (0) 2014.08.05
.gel 파일 대충 이해하기  (0) 2014.08.05
[이론]풀-업 저항과 풀-다운 저항2  (0) 2014.07.27
[이론]풀-업 저항과 풀-다운 저항  (0) 2014.07.27
Posted by 십자성군
TMS320/Study2014. 8. 5. 17:29

GEL : General Environment Languages 로 Code Composer 사용 환경을 좀 더 편리하도록 하기 위해 고안한 스크립트 언어 이다.

 

여기서는 f2812.gel 파일을 살펴볼텐데, CCS3.3같은곳에서는 따로 볼 수 있을 듯 하지만 일단 5.0에서는 ti폴더의 ti\ccsv5\ccs_base\emulation\gel폴더에 있다. 파일을 열면 개요를 확인할 수 있다.

 

/********************************************************************/
/* f2812.gel                                                        */
/* Version 4.00.1                                                   */
/*                                                                  */
/* This GEL file is to be used with the TMS320F2812 DSP.            */
/* Changes may be required to support specific hardware designs.    */
/*                                                                  */
/* Code Composer Studio supports six reserved GEL functions that    */
/* automatically get executed if they are defined. They are:        */
/*                                                                  */
/* StartUp()              - Executed whenever CCS is invoked        */
/* OnReset()              - Executed after Debug->Reset CPU         */
/* OnRestart()            - Executed after Debug->Restart           */
/* OnPreFileLoaded()      - Executed before File->Load Program      */
/* OnFileLoaded()         - Executed after File->Load Program       */
/* OnTargetConnect()      - Executed after Debug->Connect           */
/*                                                                  */
/********************************************************************/

 

여기서 소개되는 함수는 아래와 같다.

1.StartUp

2.OnReset

3.OnRestart

4.OnPreFileLoaded

5.OnFileLoaded

6.OnTargetConnect

 

그 외에도 다양한 함수들이 많으며 hotmenu어쩌고 하는 함수들도 많이 보인다. 이들 내용중에는 DSP에 바로 명령을 보내거나 레지스터에 값을 보내는 내용도 있기 때문에 만약 이들을 제대로 이해하지 못한 상태에서 다루는 것은 굉장히 위험한 행동이다.

 

현재 CCS.V5 에서는 볼 수 없지만 GEL이라는 메뉴를 사용했지만 현재는 Scripts라는 메뉴를 사용하는듯 하다.

 

위 사진은 디버그 모드에 들어간 사진이다. Scripts메뉴가 활성화 된다. 이들은 GEL파일이 있기 때문에 활성화 되는 것으로 이들이 없었다면 개발자는 수작업으로 필요한 레지스터들을 'Watch window'로 불러야 할 것이다. 이런 레지스터리 관련 작업을 스크립트 언어로 수행할 수 있도록 한것이 GEL프로그램이다.

 

이런 GEL프로그램을 이해없이 잘못짜면... 당연히 대형사고가 터질 수 있지 않을까? 아무것도 모르는 상태로 레지스트리를 건드는 행동이라고 할 수 있겠다.

 

이 F2812.gel파일은 프로젝트와 함께 있지 않다. GEL파일은 칩에서 자동적으로 처리하는것이 아니기 때문에 절대적으로 의존하면 안된다. 레지스트리를 건드는 용도로 사용할 것이 아닌, MMR등을 '관찰'하는 용도로 사용하는 것이 바람직할 것이다.

Posted by 십자성군
TMS320/Study2014. 7. 27. 22:13

풀 업 저항과 풀 다운 저항을 사용하는 이유에 대해서 앞의 floating을 보충한다.

 

다음의 그림을 보자

 

 

 

 

두 그림 다 풀 업, 풀 다운 저항을 사용하지 않은 경우이다.

사용한 게이트는 not 게이트 이다.

 

1번 그림에 대해서 생각해 보자. 스위치가 닫혔을 경우 NOT게이트의 입력에 0이 입력되고 input에 1이 입력될 것이다. 그렇다면 스위차가 열렸을 경우는? 게이트에 아무 입력이 연결되지 못한다.

[이 부분은 이해가 잘 안된 부분]

스위치가 끊어지거나 연결되지 않은 상태는 대부분의 게이트에서 입력(high)으로 받아들인다. 또한 전자적인 잡음에 의해서 입력이 low가 될 수 있다. 이는 굉장히 불안정한 상태인 것이다.

 

그럼 2번 그림을 보자.

게이트에 입력을 직접 연결하였다. 스위치가 off가 되면 VCC에서 게이트로 입력이 들어가고 ON상태가 되면... 앞의 글을 봤다면 게이트로 전류가 흐른다고 생각할 지도 모르지만, GND쪽으로 저항이 0이기 때문에 그쪽으로 전류가 흐르고 전원과 접지가 바로 붙어버린다. 따라서 쇼트가 일어나 과전류가 흘러 전선이 탈 수 있다.

 

즉 1번 그림에 대하여 VCC를 붙여주어 입력을 확실히 하여 floating을 해결하고, 이로 인해 생길 수 있는 쇼트를 풀 업 또는 풀 다운 저항으로 해결한다.

Posted by 십자성군
TMS320/Study2014. 7. 27. 22:01

추가 참고 : http://blog.xcoda.net/77


풀 업(pull-up)저항과 풀 다운(pull-down)저항의 용도는

'여러 가지 입력들로부터 안전하게 동작할 수 있도록 하기 위한 것'이다.

 

두 저항의 차이점은 아래와 같다.

풀 업 저항 : 전원 쪽으로 연결

풀 다운 저항 : 접지 쪽으로 연결

 

 

pull-up                                    pull-down

 

구체적으로 들어가기에 앞서 플로팅(floating)에 대해 이해가 필요하다.

 

플로팅이란?

 칩에 입력을 5V(1) 또는 0V(0)을 가할 때, 입력 자체를 가하지 않는 경우에는 칩 자체에 5V를 입력하였는지 1V를 입력하였는지 모르며 이는 오작동의 원인이 될 수 있다. 이런 상태를 floating되었다고 한다.

 이런 상태는 1V등을 잡음으로 볼 수 있어 시스템이 잡음에 취햑하고 불안정해진다. 이를 해결하기 위해 풀 업 또는 풀 다운 저항을 이용하는 것이다.

 

아래 그림을 보자

 

 [풀 업 저항]

 

풀업 저항을 사용 할 경우, 스위치를 열어 놓으면 회로에 5V가 입력되고 회로에 입력을 몰라도 항상 5V의 전압을 가진 상태가 된다.

스위치를 닫는다면 GND로 전류가 흐르고 회로의 전압은 0V가 되어 1을 입력한 것으로 인식하게 된다. [풀 업 저항]은 핀을 높은 저항에 매달아 두는 이미지를 의미한다.

 

 

 

위처럼 스위치를 닫으면 핀의 전압이 0V가 된다.

 

[풀 다운 저항]

 

 

 

 

 

항상 그라운드(땅 바닥)에 묶어둔다는 이미지로 '풀 다운 저항'이라고 부른다.

스위치를 open 할 경우 전류가 항상 그라운드로 흘러가기 때문에 0, close 할 경우 소량의 전류가 나가지만 대량의 전류가 흘러 들어와 1이 된다.

Posted by 십자성군
TMS320/Study2014. 7. 25. 23:17


'TMS320 > Study' 카테고리의 다른 글

[이론]풀-업 저항과 풀-다운 저항2  (0) 2014.07.27
[이론]풀-업 저항과 풀-다운 저항  (0) 2014.07.27
[2812]부트모드 선택  (0) 2014.07.23
[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
Posted by 십자성군
TMS320/Study2014. 7. 23. 12:02

메뉴얼 첨부함

 

Datasheet_F2812_BUS_M_V220.pdf

 

 

 

 

 

open되어있는 곳은 저항으로 연결되어 있지 않으므로 전압이 인가되지 않으므로 풀다운 되어 0이라고 보면 된다. 반대로 4.7k 저항이 연결되어 있는 부분은 3.3v로 풀업되어 1이라고 본다.  Flash/Rom에 라이팅 하고 싶다면 위의 표를 보고 풀업/다운 시켜주면 되겠다.

그런데 x는 뭐지?

'TMS320 > Study' 카테고리의 다른 글

[이론]풀-업 저항과 풀-다운 저항  (0) 2014.07.27
5V TTL 레벨의 신호를 +3.3V형의 DSP에 접속하는 방법  (0) 2014.07.25
[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
Posted by 십자성군