'TMS320/Study'에 해당되는 글 26건

  1. 2014.07.22 [28346]부트와 간단한 예제
  2. 2014.07.21 [28346]작업환경 구성하기
  3. 2014.07.18 CMD파일
  4. 2014.07.17 rts2800_xxx.lib
  5. 2014.07.17 GlobalVariableDefs.c
  6. 2014.07.17 TMS UserGuide
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 십자성군
TMS320/Study2014. 7. 18. 00:10

cmd파일, 커맨드 파일이라고 하는것 같다.

 그 구조를 뜯어보면 아래처럼 되어있다.

 

/*
// TI File $Revision: /main/3 $
// Checkin $Date: April 23, 2007   09:09:27 $
//###########################################################################
//
// FILE:    F2812_EzDSP_RAM_lnk.cmd
//
// TITLE:   Linker Command File For F2812 eZdsp examples that run out of RAM
//          This linker file assumes the user is booting up in Jump to H0 mode
//
//###########################################################################
// $TI Release: DSP281x C/C++ Header Files V1.20 $
// $Release Date: July 27, 2009 $
//###########################################################################
*/

/* ======================================================
// For Code Composer Studio V2.2 and later
// ---------------------------------------
// In addition to this memory linker command file,
// add the header linker command file directly to the project.
// The header linker command file is required to link the
// peripheral structures to the proper locations within
// the memory map.
//
// The header linker files are found in <base>\DSP281x_Headers\cmd
//  
// For BIOS applications add:      DSP281x_Headers_BIOS.cmd
// For nonBIOS applications add:   DSP281x_Headers_nonBIOS.cmd   
========================================================= */

/* ======================================================
// For Code Composer Studio prior to V2.2
// --------------------------------------
// 1) Use one of the following -l statements to include the
// header linker command file in the project. The header linker
// file is required to link the peripheral structures to the proper
// locations within the memory map                                    */

/* Uncomment this line to include file only for non-BIOS applications */
/* -l DSP281x_Headers_nonBIOS.cmd */

/* Uncomment this line to include file only for BIOS applications */
/* -l DSP281x_Headers_BIOS.cmd */

/* 2) In your project add the path to <base>\DSP281x_headers\cmd to the
   library search path under project->build options, linker tab,
   library search path (-i).
/*========================================================= */

 

MEMORY
{
PAGE 0 :
   /* For this example, H0 is split between PAGE 0 and PAGE 1 */ 
   /* BEGIN is used for the "boot to HO" bootloader mode      */
   /* RESET is loaded with the reset vector only if           */
   /* the boot is from XINTF Zone 7.  Otherwise reset vector  */
   /* is fetched from boot ROM. See .reset section below      */
  
   RAMM0      : origin = 0x000000, length = 0x000400
   BEGIN      : origin = 0x3F8000, length = 0x000002            
   PRAMH0     : origin = 0x3F8002, length = 0x001FFE
   RESET      : origin = 0x3FFFC0, length = 0x000002          

        
PAGE 1 :

   /* For this example, H0 is split between PAGE 0 and PAGE 1 */

   RAMM1    : origin = 0x000400, length = 0x000400
   RAML1    : origin = 0x009000, length = 0x001000     /* on-chip RAM block L1 */
/*   DRAMH0   : origin = 0x3f9000, length = 0x001000 */       
}
 
 
SECTIONS
{
   /* Setup for "boot to H0" mode:
      The codestart section (found in DSP28_CodeStartBranch.asm)
      re-directs execution to the start of user code. 
      Place this section at the start of H0  */

   codestart        : > BEGIN,       PAGE = 0
   ramfuncs         : > PRAMH0       PAGE = 0 
   .text            : > PRAMH0,      PAGE = 0
   .cinit           : > PRAMH0,      PAGE = 0
   .pinit           : > PRAMH0,      PAGE = 0
   .switch          : > RAMM0,       PAGE = 0
   .reset           : > RESET,       PAGE = 0, TYPE = DSECT /* not used, */
  
   .stack           : > RAMM1,       PAGE = 1
   .ebss            : > RAML1,      PAGE = 1
   .econst          : > RAML1,      PAGE = 1     
   .esysmem         : > RAML1,      PAGE = 1

    
}

역할을 메모리 영역에 구조체를 배치해 준다는것 같다,

 

예를들어 abc라는 구조체를 DSP의 0x12345라는 주소에 집어넣고자 한다면

 

본 소스에 선처리 잡업 코드로

#pragma Data_SECTION(abc,"ABC");

를 해주고

 

커맨드 파일 내의 SECTION안에

SECTION{

...

ABC : >ASDF, PAGE = 1

...

}

 

MEMORY{

 

PAGE 1:

...

ASDF : origin = 0x12345, length = 0x1000

...

}

 

위와같이 해주면 ASDF라는 메모리 영역이 0x12345 에서 시작하여 0x1000의 크기를 갖으며

ABC로 이름붙여진 abc구조체가 그 영역에 들어가게 된다.

 

이러한 MEMORY{} 구간의 정의들은 DSP메모리맵을 기준으로 할당된다. 따라서 자신이 사용하는 DSP에 맞는 cmd파일을 적용하도록 하자.

 

이 설정은 properties의 General의 맨 하단의 두번째의 메뉴인 Linker command file을 통해서 링크 시킬 수 있다.

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

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
rts2800_xxx.lib  (0) 2014.07.17
GlobalVariableDefs.c  (0) 2014.07.17
TMS UserGuide  (0) 2014.07.17
Posted by 십자성군
TMS320/Study2014. 7. 17. 23:58

공부하는 내용

rts 라이브러리가 가지는 의미, 역할


Start!


프로젝트에 우클릭 메뉴로 들어가는 Properties의 General에서 제일 하단의 Run Time Suppor Library를 선택할 수 있다.

DSP281x_CodeStartBranch.asm 에 의해 호출되는 이 라이브러리는 Library가 의미하는바와 같이 '공통적으로 쓰일 수 있는 함수를 모아 놓은 파일'일 것이다. 그리고 rts는 Runtime, 실행시를 의미한다.

 

우리가 개발할 때, C코드로 작성하는데 이것이 아무런 준비도 없이 실행될까? 포인터 등 각종 기법을 사용한 이 코드가 실행되기 위해서는 이를 위한 적절한 환경 및 준비가 필요할 것이다.(초기화된 데이터, 포인터, 전역변수 등등) 그런데 이러한 작업은 플랫폼에 관계없이 모든 C프로그램의 공통적인 부분이기에 Library화 해놓는다. 이것이 rts인 것이다.

 

이러한 rts2800_~.lib는 C언어로 작성된, 프로그램을 실행시키기 전에 실행되는 함수들의 집합 이라고 할 수 있다.

 

rts2800.lib               는 24계열의 DSP에

rts2800_ml.lib           는 28계열

rts2800_fpu3232.lib    는 FPU(Floating Point Unit)가 내장된 28계열에서 사용하며

 

더 빠른 부동소수점 연산을 위해서는 rts2800_fpu32_fast_suplement.lib를 함께 컴파일 한다.

 

여기까지가 대략적인 의의이고 좀 더 자세히 알고싶다면 아래로!

---------------------------------------------------------------------------------------------------------

rts 라이브러리의 역할은 아래와 같다. 핸드북보다 조금 길게 설명한다.

 

1.Stack확보 및 Stack Pointer 설정

Stack은 메모리의 일종으로 우리가 사용하는 C함수간의 데이터 전송시에 이용된다.(함수 A에서 함수 B에 변수를 전달 한다던가)

이 때, 우선 Ram 영역에 Stack 메모리를 확보(할당)하는 작업을 해 두어야 하는데 이를 Run Time Support Library가 해준다. 

 

C언어를 좀 해보신 분들은 포인터의 개념을 잘 알고 있을 것이다. 간단하게 주소 개념으로 설명하자면, 우리가 코딩한 함수나 데이터는 어딘가에 저장되어 있을 것이고 이 데이터에 접근하려면 이들이 어디에 저장되어 있는지 알아야 한다. 즉 '어디에 저장되어 있는가'를 나타내는 주소를 저장하는 변수가 포인터라고 할 수 있다. Stack Pointer는 이 Stack메모리의 주소를 저장하고 있을 것이다. 그리고 이의 설정 역시 Run Time Support Library가 한다.

 

2.연산 비트 설정

math.h가 요구하는 연산을 정확하게 처리하기 위해서, CPU내부의 각종 상태 비트들을 설정한다.

자세히는 아직 모르겠지만, math.h에서 미리 구성해놓은 연산(상수, 삼각함수 포함하여)을 좀 더 효율적이고 정확하게 처리하기 위한 비트설정을 미리 해두고 실제 우리가 함수를 사용할 때는 바로 그 비트들에 접근하여 연산한다고 생각하면 되겠다.

 

3.데이터 초기화

 상수변수의 초기화를 코드 실행 전에 해준다.

 무슨 말인가 하면 우리가 전역변수 등에 int x = 3; 이라는 선언을 했다고 했을 때, 이는 main의 실행 전에 이루어져야 하는 작업이다. 또한 이 x라는 변수는 Run Time중에 변경 가능한 값이다. 즉, 휘발성 이라는 것이다. 따라서 Ram과 같은 휘발성(volatile)메모리에서 운용 되어야 한다.

 rts는 플래시 메모리에 저장된 x=3이라는 상수 변수를, 적절한 램 영역에 x=3 이라고 초기화 해준다.

 

주의

 이러한 변수의 초기화를 굉장히 많이 해줄 때 주의할 사항이 있다. 만약 DSP281_CodeStartBranch.asm에서 Watchdog의 사용여부를 설정하는 것이 아니라, main()함수에서 이를 설정한다면, 문제가 생길 수 있다. rts가 상수 변수의 초기화를 하는데, 8비트 카운터인 Watchdog이 2^8인 256을 헤아리는 동안 CPU가 적절한 동작을 하지 않는다면, Watchdog이 CPU에 이상이 있다고 판단하여 CPU를 리셋시킬 수 있다. 따라서 Watchdog의 사용설정을 main에서 한다면 이 상수변수 초기화를 짧게 해주어야 하거나, 차라리 어셈블리 내에서 설정하는것이 나을 수도 있다.

 

※개인적인 의견이지만 어셈블리에서 사용을 정지시키고 상수변수 초기화 후 main()에 들어와서 다시 사용하도록 해야하지 않을까?

 

추가

.C2000에서 lib파일을 만들기 위한 소스 코드가 rts.src이다.

.핸드북을 보면 CodeStartBranch에서 _c_int00 이라는 코드가 있다. rts.src 코드의 시작점이 _c_int00이다. 즉, DSP281x_CodeStartBranch.asm에 의해서 rts.src가 fms(rts2800_ml.lib)를 사용할 수 있게 해주는 것이다. 그리고 rts.src는 마지막에 call _main을 수행하여 main 함수를 호출한다.

.call _main의 '_'는 C코드와 어셈블리 코드가 상호 호출하는 레이블을 구분하기 위한 기호이다. 따라서 '_'기호를 보면 어셈블리와 C에서 상호 사용되는 것이라고 이해하면 된다.

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

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
GlobalVariableDefs.c  (0) 2014.07.17
TMS UserGuide  (0) 2014.07.17
Posted by 십자성군
TMS320/Study2014. 7. 17. 23:40

제공해주는 두 종의 자료 DSP281x_common, DSP2812_headers가 있다.

여기서 DSP2812_headers의 source에 DSP281x_GlobalvariableDefs.c 가 있다.

이는 DSP281x_Device.h를 인클루드 하며 이는 또한 SysCtrl.h를 포함한 각종 헤더파일들을 인클루드 한다.

 

GlobalvariableDefinition. 즉, 전역변수 정의 인데 즉 DSP의 각종 레지스터들에 대한 정보를 포함하고 있다고 할 수 있겠다.

 

DSP의 비트필드(레지스터를 맵처럼 정돈해 놓은 구조체들)와 주변회로(GPIO,SCI,CAN,SPI..등등)을 변수처럼 불러서 사용할 수 있도록 기본 레지스터 설정 함수들이 짜여져 있는 것이다.

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

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
rts2800_xxx.lib  (0) 2014.07.17
TMS UserGuide  (0) 2014.07.17
Posted by 십자성군
TMS320/Study2014. 7. 17. 23:28

사용중인 DSP는 TMS320F2812 이다.

이에 대한

 

Datasheet

Application Notes

UserGuide

를 이용하여 공부한다

 

아래 블로그에서 찾아서 사용하자

:http://blog.naver.com/zeratool2/80105232899

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

[28346]부트와 간단한 예제  (0) 2014.07.22
[28346]작업환경 구성하기  (0) 2014.07.21
CMD파일  (0) 2014.07.18
rts2800_xxx.lib  (0) 2014.07.17
GlobalVariableDefs.c  (0) 2014.07.17
Posted by 십자성군