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/부품2014. 7. 27. 19:18

밸런싱 로봇에 쓰고있는 로터리 엔코더이다.

 

관련자료는 여기에 :

엔코더.zip

 

설명

2채널의 적분영 출력(quadrature outputs)

Optional index(3번째 채널)??

CPR(cycles per revolution) : 50 to 1024 : 1회전당 싸이클 수 ???

PPR(pulses per revolution) : 200 to 4000 : 1회전당 발생 펄스 수

Fit shaft diameters : 2mm to 10mm

 

사용하는 모터:

PM DC모터

BLDC 모터

Stepping 모터

 

로터리 엔코더는 적분형(Incremental)과 절대형(Absolute)이 있다. 이 엔코더는 적분형(I)이다.

 

Waveform은 다음과 같다.

2개의 위상으로 A와 B의 위상을 대조하고 Z(회전)을 검출한다.

즉, A가 하강중일 때 B가 하강하는 것을 검출하여 회전을 체크한다.

 

구조와 작동환경은 아래와 같다.

 

 

 

공급전윈 : 5V

최대 공급전류 : 버전에 따라 40mA 또는 85mA

최대 주파수 : 100kHz

Load capacitance(?) : 100pF Max

 

Odering Information은 확인불가했다.

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 십자성군
TMS320/Study2014. 7. 22. 11:26

3개의 pdf를 올립니다. 기본적인 설명이 있으니 한번쯤 읽어보기를 추천

 

 

Delfino_EVM용_처음시작하기_프로젝트만들기(28346).pdf

 

TMS320C28346_HEX유틸리티_사용법.pdf

 

Datasheet_TMS320C28346_Value_M_V100.pdf

 

외장 플래시 프로그래머 설명서.pdf

 

 

그럼 간단하게 문서를 읽으면서 시작하자.

■우선 모듈 기본 설명서부터 보면 '입력전압 허용범위'는 4.0V ~ 5.0V 이다. 초과할 경우 제품손상이 우려되므로 주의하자

 

■JTAG의 전압은 기본적으로 5V로 설정되어 있으나 에뮬레이터에 따라 3.3V로 바꿔주어야 하기도 한다.

 

■부트모드 설정[SARAM, Stand Alone]

아래는 TMS320C28346의 부트모드 종류이다.

 

 

SARAM 메모리는 휘발성이기 때문에 MCU의 전원이 꺼지면 메모리가 리셋된다(지워진다.)

플래시 메모리는 비휘발성으로 메모리의 한계는 있지만 전원이 꺼져도 데이터가 유지된다.

비휘발성 메모리에 데이터를 써놓으면 디버깅 없이도 전원만 공급하면 저장한 코드에 의해 칩이 독립적으로 동작할 수 있는데 이를 'Stand-alone'상태라 한다. 그러나 TMS320C28346 보급형 모듈은 내부플래시 메모리가 없기 때문에 외부플래시메모리를 사용하여야 한다. 이는 DSP칩과 SPI통신으로 연결되어 있으며 SPI-A 부트모드로 구동할 수 있다.

 

 

 

--

커넥트 핀에 대한것은 추후에 하고 간단하게 LED예제를 해보자. 싱크웍스에서 외장 플래시 프로그램에 대한 예제를 받아서 실습한다.

 

플래시라이팅 과정은 다음과 같다.

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

5V TTL 레벨의 신호를 +3.3V형의 DSP에 접속하는 방법  (0) 2014.07.25
[2812]부트모드 선택  (0) 2014.07.23
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
rts2800_xxx.lib  (0) 2014.07.17
Posted by 십자성군
TMS320/Study2014. 7. 21. 21:06

 사정이 생겨서 2812, 28346을 동시에 다루게 되었다.

어차피 CCS의 작업환경 구성하는것이야 다 똑같으니 참고가 되었으면 한다.

 

 

 1.CCS Project 생성

 

 

 

28346을 사용하는 상황이며 에뮬레이터를 XDS100을 쓰고있다.

 

2.Linked Resources

필수사항은 아니지만 한번 확인하자. 다음과 같다.

 

간단하게 접근할 수 있도록 몇가지 경로에 이름이 붙여져 있다.

 

 

3.기본 소스(DSP2834x_common,header)첨부

syncworks 홈페이지에서 구할 수 있는 DSP 메모리, 함수 관련 자료를 받아 프로젝트에 첨부해야한다.

헤더파일을 인식할 수 있게 해주자.

 

방법은 2가지다

1.폴더째로 프로젝트 폴더에 넣는다.

2.아래와 같이 경로를 설정하여준다.

 

 

5.라이브러리 패스 설정

위와 거의 같은 맥락이다.

 

 

 

주의!

:두가지 방법을 동시에 하면 충돌이 발생하여 에러가 생긴다. #10053인지 #10056인지와 #10010이 동시 발생

 

END

 

추가: 위의 header와 common

BOOT_EXM_V500.zip

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

[2812]부트모드 선택  (0) 2014.07.23
[28346]부트와 간단한 예제  (0) 2014.07.22
CMD파일  (0) 2014.07.18
rts2800_xxx.lib  (0) 2014.07.17
GlobalVariableDefs.c  (0) 2014.07.17
Posted by 십자성군