레이블이 MCU-MSP430인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MCU-MSP430인 게시물을 표시합니다. 모든 게시물 표시

8/10/2017

CCS MSP430의 Breakpoint 기능 및 Graph 기능

1. MSP430 JTAG의 고급 사용 

  • MSP430 CCS Manual
2.2.1 Breakpoint Types 에 본인의 MCU에 따라 지원되는 기능과 HW Breakpoint 제한이 있으니 확인해봐야한다.

  http://www.ti.com/lit/ug/slau157ao/slau157ao.pdf

아래의 기능을 MSP430으로 한정 지어서 생각할 필요는 없으며, 다른 TI Chip에게도 해당이 되는 일이기에 같이 설명한다.

1.1 HW Breakpoint의 작동원리 

기존에 설명했듯이 MSP430의 Debug는 JTAG이 지원을 하며, HW Breakpointer를 지원하 디버깅이 쉽게 가능하다.
물론 Breakpointer 기능이 SW로 구현이 가능하며, 이는 또한 Software debugger 필요하겠지만,  여기서 설명하는 것은 JTAG을 이용한 HW breakpoint 기능이다.
하지만 좀 더 많은 기능을 사용해보기 위해서 아래와 같이 BreakPointer의 원리와 구성을 알아보자.

  • HW BreakPoint의 기본동작
HW BreakPointer를 Source의 Line에 설정하면, 아래와 같이 설정화면이 나오는데, Action의 기능이 나오고 기타 기능이 나온다.
기본적으로 동작원리는 얼추 비슷하다. 심볼테이블에서에 실제 주소를 찾아 이 부분이 Cache에 들어올때
확인하여 그부분을 멈추는 것이다.



1.2 Breakpoint 세부설정 

상위에서 기본동작 원리를 알았으니, 이제 아래에서 세부적으로 더 설정이 가능한지 알아보자.
Breakpoint에는 Properties라는 설정이 있는데, 이는 세부적인 Control을 가능하게 만들어준다.

  • Breakpoint Properties 설정 



  • 기본설정구성 
Trigger 0:  구성
  -  Location:  현재 사용중인 a.out format
  -  Access :
  1. instruction fetch:  fetch 할 때 비교 하여  멈춤 

Skip Count:  설정
    Current Count 설정

Instruction Fetch 설정할 경우

Action :
  1. Remain Halted :  Trigger 의 조건이 맞을 경우, 멈추는 것 
  2. Refresh All Windows:  Trigger의 조건이 맞을 경우, 현재 CCS의 Window를 Refresh 



  • Breakpoint 관련 Manual 
  다양한 Breakpoint의 기능을 사용하고 싶다면 아래의 글을 읽어보도록 하자. 

  http://www.ti.com/lit/an/slaa393f/slaa393f.pdf
  https://drive.google.com/open?id=0B_ehveuLi8MVcVRwa3ZpNEZGSGc


2. HW Breakpoint 응용


아래와 같이 Register->View Memory at Address를 하면 쉽게 아래와 같이 주소를 알수 있으며,
이것을 상위 BreakPoint와 조합을 이용하여 사용이 가능하다.


본인이 원하는 Breakpoint를 별도로 설정하고 Register를 감시하자.
Watchpoint 를 사용해도 좋다.



아래 보면, Breakpointer list에 등록이 되어 있고 사용중인 지 항상확인해야 한다.




  • View->Expressions
이전에도 설명 했지만, Expressions에서는 주로 전역변수를 등록하여 감시가 가능하며, 여기서 아래와 같이 이중 포인터 설정가능하다.
(Local 변수도 가능하지만 제한적으로 가능)
쉽게 등록하는 방법은 Watchpoint로 등록하는 방법이고, 직접 여기에 전역변수를 본인이 직접 넣어도 무방하다.
다만 여기에는 Symboltable 기반으로 작동이 되는것 같다.


Breakpointer와 항상 사용하다보면 아래와 같이 이부분을 변경하며 Debug하게 된다.

간단한 사용의 예를 아래와 같이 정리한다.
아래는 txmsg는 배열선언 했으며, 이고, txhead는 일반 value 선언했다.
이를 이용하여 아래와 같이 C 프로그래밍처럼 배열참조가 가능하다.

각 Value에 우측 마우스를 이용하여 다음과 같은 메뉴가 나오며, 이를 이용하여 좀 더 나은 디버깅을 해보자.
  1. View Memory :  Memory 창에서 전역변수의 주소를 볼수가 있다.  
  2. View Memory at Address :  전역변수의 값의 주소를 볼수가 있다. 
  3. Number Format:  Value의 Format을 변경한다. (중요) 
  4. Graph는 추후 설명 



2.1 전역변수 Graph 설정

상위에서 HW BreakPointer의 설정을 이제 Graph에 적용을 해보자.
아래와 같이 설정하면, Breakpointer는 멈추지 않고 Graph를 Refresh 하고 그려줄 것이다.

  1. Breakpointer Properties -> Action -> Refresh All Windows 설정 
  2. Expression 창에서 전역변수를 등록
  3. 전역변수 우클릭으로 Graph 창 설정  
or

  1. Tools->Single Time 설정 
  2. Gprah Properties 설정 ( Start Address 설정 중요 )


아래의 기능은 아이콘 형태로 제공되므로 잘 찾아보자. 

  • Graph Properties를 설정
  1. Start Address : 전역변수 주소 
  2. Sampling Rate :  본인은 원하는 Rate
  3. Grid Style :  본인인 원하는 설정 
  4. Time Display Unit :  Sample or ms or us 





  • 추가적인 설정 
  1. Reset Graph: 그래프를 처음부터 보고 싶다고 한다면 
  2. (Disable/Enable) Continuous Refresh : 지속적으로 보고 싶다고 한다면. 
  3. Refresh on Halt :  Halt일 경우 Refresh 기능 



  http://processors.wiki.ti.com/index.php/Data_Breakpoint/Watchpoint
  http://processors.wiki.ti.com/index.php/Breakpoint
  https://www.youtube.com/watch?v=-iGnh0_9YxE

7/01/2017

MSP430 Project 관리 및 Debug

1. CCSV6의 MSP430 지원 및 확인사항 

CCSv6에서는 현재의 MSP430을 지원 해주고 있지만 CCS의 Version에 따라 Compiler의 Version이 달라진다.

특히 MSP430의 TI Compiler 의 Version은 상당히 민감한 것 같다. 이부분은 반드시 확인을 해놔야 하며 ,
기존 TI Compiler version 을 사용할 수 있다면 기존 Version으로 사용하도록 노력해야겠다.

MSP430의 Compiler는 TI Compiler 와 GCC를 동시 지원해주고 있지만, Compiler에 따라 사용하는 방법 역시 조금씩 다르다.

특히 ISR 부분을 보면 다른 부분을 쉽게 알수 있을 것이다. Link Script인 *.cmd File과
연동하는 부분 역시 다르다.

  • MSP430 Debugger 확인
기본의 XDS와 다르게 아래의 전용 USB Debugger 사용
- MSP-FET430UIF

CCS Version에 따라 상위에 Firmware version이 변경이 될수 있으므로 가능하면 상위 Version을 사용하는것이 좋을 것 같다.

  http://www.ti.com/tool/msp-fet430uif

특징은 UART로 ISP(in-system programming)기능을 가지고 있으며, JTAG기능도 포함을 하고 있다. (이부분은 AVR과 동일)
MSP430으로 내부 Flash에 저장할때는 ISP를 이용하고, JTAG 관련하여 HW Debug 가능.


  • MSP430 CCS  User Manual
  https://drive.google.com/open?id=0B_ehveuLi8MVd2ZCS3d5bjR3RHM


1.1 CCS의 Project의 기본정보확인

아래에서 둘중 하나로 Project의 기본속성을 확인하고 Compiler version을 확인하고,
File Format 확인 하자


File->Properties 선택
General 확인

Project Explorer창에서 Project의 선택
우측 마우스 클릭 후 Property 선택
General 확인




  • CCSv6  MSP430 추가설치 
만약 본인의 CCSv6에서 MSP430관련부분이 없다면, 추가 Package로 설치를 해야한다.

  View->CCS App Center




1.2 MSP430의 Project 관리 (Properties 세부설정)  

상위 Project의 Properties를 세부 설정을 살펴보면 아래와 같다.
아래의 항목들은 참조하여도 좋다

CCS의 기본사용법에서 Project관리에 대한 설명을 하지 않은 것 같아 이부분을 추가설명하고자 이부분을 넣으며, 이 부분은 구지 MSP430으로 제한적으로 생각하지 말자.

  • CCS의 기본사용법 

  https://ahyuo.blogspot.com/2015/07/ccs-v6.html

  • CCS Project 생성 및 기본 Project 가져오는 방법 

  https://ahyuo.blogspot.kr/2017/06/ccsv6-project.html


  • Linked Resource (Link가 될때, 참조되는 PATH) 
   추가방법은 변수를 이용하던지 직접 추가하면, 본인의 Project에 추가가 된다.




  • Build->MSP430 Compiler->include Options
Include 에러가 났을 경우 아래를 검토하고, 만약 Configuration을 두개를 사용한다면 둘다 별도로 설정



  • General->Manage Configuration 

현재 Access Point와 End Device를 Application을 동시에 진행을 하기 때문아래와 같이 분리하여 진행하고 있다.



  • Build->MSP430 Compiler->Advanced Options->Predefined Symbols
   직접 define해서 사용해서 사용하고 있음



  • Build->MSP430 Compiler->Advanced Options->Command Files


  아래와 같이 End Device 와 Access Point 와 --define을 적용하여 사용하고 있다.




2. CCS를 이용한 Debug 소개

- MSP-FET430UIF

상위 Debugger가 ISP기능과 JTAG을 지원해주기 때문에,  CCS에서 JTAG을 이용한 고급 Debug기능이 가능하다.

*ISP기능은 일반적으로 Serial로 SPI통신으로 File을 Upload해주는 기술 (AVR도 동일하게사용)


소스를 빌드 후 Project에서 아래와 같이 *.out 생성되었다면 Debug 순서는 다음과 같다.

  1. Debug As->Code Composer Debug Session 실행  or F11 실행 or Run->Debug
  2. ISP로 Firmware Download 진행 
  3. CCS Debug 창에서 JTAG을 Debug 진행 




  • 실행 및 Debug 
빌드시 최종파일 형식은 A.out Format으로 나올 것이다. 그리고 또한 이 File에 Debug 정보를 포함하여
Debug를 시작하면 CMD 정보기반으로 MSP430의 Flash에 저장 및 RAM에 Loading 된다. 그리고 더불어 Source에서 Line에 더블 클릭을해서 HW Break pointer설정도 가능하여 JTAG기반의 Debugging도 가능하다.
Linkscript는  *.cmd  File로 해보면, 간단히 분석이 가능하며,쉽게 분석이 가능하다.

  • JTAG 기능 사용시 같이 봐야할 Debug기능 
  1. View->Register를 이용하여 각종 Register 확인 및 수정가능 
  2. View->Breakpointers: JTAG을 이용하여 소스에 BreakPointer를 설정가능 
  3. View->Variables: JTAG을 이용하여 Debug시 Suspend일 경우 변수 값을 볼수 있다.
  4. View->Expressions: JTAG을 이용하여 Variables 값을 추적하여 볼수 있다. 
  5. View->Disassembly: JTAG을 이용하여 Debug시 자동으로 Assembly 언어로 보여준다. 
  6. View->Modules: 현재 COFF (a.out) 파일의 정보 및 Symbol Table 정보를 정확하게 볼수 있다. 
  7. View->Outline : 현재 File의 함수이름과 전역변수 정보, Include 정보만 알려준다. 
  8. View->Other ( MSP430 -> Target)  MSP430의 Voltage도 감지가능

* 1번은 Suspend Mode에서 사용
* 2번은 Source의 Line에 더블클릭하고 설정하고, Breakpointers 창에서 이를 확인


2.1 CCS Debug 사용법 (JTAG Debug)
상위대로 ISP를 이용하여 진행하면, Source에 원하는 Line에 HW Break Point 사용하여, 관련 정보를 보는 것이 가능하다.
이 정보 뿐만 아니라, 현재 사용 중인 변수 값도 실시간으로 변화 값을 알수 있다.
정말 편리한 기능이므로 이용하여 사용해 보자.

  • View->Breakpoints
본인이 원하는 Source Line에 더블 Click하게 될 경우 아래에 Breakpoints 창에 추가가 된다.
View->Breakpoints를 설정하여 Debug를 설정
아래의 JTAG Debug 기능과 같이 사용해보고, Run Menu를 보면 다양한 기능을 제공해주고 있다.

  1. Run->Resume 
  2. Run->Suspend
  3. Run->Step info 
  4. Run->Step over
  5. Run->Step return 
  6. Run->Go Main 
  7. Run->Reset->Hard Reset or Soft Reset

아래의 창은 각각의 Source Line에 Breakpoint를 설정해 놓고 사용할 것 인지 설정하는 것이다.
한번 설정하면, 이 List에 기록이 되어져 있다.


  • View->Expressions

View->Expressions창은 본인이 원하는 전역변수 or Register를 직접추가하여 변수의 변화를 알수 있어 Debug하기가 쉬어진다.
다만 추가할 경우, 본인이 직접 이름을 추가해서 넣어야 한다.
그리고, 더불어 아래의 Disassembly 와 Source 창을 함께 놓고 보면 좋다.
Suspend Mode 일 경우 각 Source 창에서 변수를 마우스로 가르키면, 변수의 값을 알수 있다.


  • View->Variables
변수지만, Stack을 사용하는 Local 변수가 추적해주는 시스템이기에, 이것을 사용하기위해서는 상위의 Line 별로 Debug를 해야한다.
예를 들면, Step info 로 지속적으로 함수를 디버그하면 함수내의 변수 변화를 추적가능하다.





  • View->Registers 
Register 창을 이용하여 현재 MSP430의 상태를 정확하게 파악이 가능하며 Debug가 쉽다.
그리고, Expression에 이를 등록하여 봐도 된다.



  C:\ti\ccsv6\ccs_base\common\targetdb\boards
  C:\ti\ccsv6\ccs_base\common\targetdb\cpus

  http://processors.wiki.ti.com/index.php/Creating_Custom_Memory_Mapped_CCStudio_Register_Windows

  • View->Outline 과  View->Module 
View->Module창은 현재 올라간 COFF 파일의 Symbol Table 및 각종 정보를 쉽게 파악이 가능하며,
View->Outline은 현재 File의 함수 와 전역변수 및 Include 정보를 제공하여 쉽게 볼수 있다.




  • View->Memory Browser 
Pointer or RAM 의 Address를 정확한 정보를 보기 위해서 아래와 같이 본다.



2.2 CCS Debug 사용법 (Board 동작중)

상위는 항상 CCS에서 *.out을 ISP로 올려서 CCS로 Debug하는 방식이지만, 기본 동작 중에
Debugging 하고 싶을 경우가 발생한다.

** 2.1과 다른점은 ISP를 이용하지 않고, 보드가 동작 중에 CCS Debug를 사용하는 점이 다르다.
하지만 기능상의 제약은 따른다.


이럴 경우 아래와 같은 경우 절차로 실행하면 된다.
  1. View->Target Configuration 창 CCS Debug 추가 
  2. 본인의 *.ccxml을 선택 후 우측마우스 클릭 (MSP430F5438A.ccmxl)
  3. Launch selected configuration 실행 
  4. Run->Connect Target 실행 
  5. 각 View를 통해 현재의 정보를 확인 



아래와 같이 Target Configuration의 ccxml로 제어를 한다.





2.3 MSP430 의 기본 TEST 및 Debug

  • EVM 기본 TEST 
EVM 일 경우, 각 CLOCK 및 전류도 측정이 가능하여 다양하게 TEST가 가능하다.

  1. Clock 설정 후 각 CLOCK의 Output을 확인 ( ACLK, SMCLK, MLCK)  ( PINxSEL 확인)
  2. UCSI의 UART기능이 처음 구현이 되어있지 않다면 LED or 여분의 PIN을 이용하여 Debugging (스코프 이용)
  3. CCS는 Debug Mode를 적극 이용 


3. Hex File 생성 방법 

Hex File을 생성하는 방법을 소개하고 이를 이용하여 Flash하는 방법을 알아보자

IAR도 Hex File 생성이 가능하며 내 경우는 IAR에서 MSP430을 사용해보지 않았아서 이부분은 생략


3.1 CCS에서 Hex File 생성방법 

CCS에서 Hex File을 생성하는 방법을 제공을 하며 이를 이용하여 Gang으로 Flash가 가능하다.



  • How to Generate MSP430 Binary Files
MSP430의 HEX File 생성 시키는 방법

  http://processors.wiki.ti.com/index.php/Generating_and_Loading_MSP430_Binary_Files
  http://processors.wiki.ti.com/index.php/Hex_Utility_in_CCS


3.2  MSP-FET430UIF을 이용하여 Hex Flash 방법 


  • Hex File 기반으로 MSP430 Flash 하는 방법 
  Gang 과 MSP-FET430UIF 을 이용하여 Flash 방법소개
  https://e2e.ti.com/support/microcontrollers/msp430/f/166/p/237820/833683


  • 방법-1 ( 사실 Gang의 위한 Program들) 
아래의 프로그램은 기본적으로 무료 프로그램은 아니며, 일단 유료지만, 무료로 이용가능한 기간이 있다
그리고, MSP-FET430UIF의 Firmware Version이 맞아야 제대로 동작이 가능하다.
이부분을 체크해야한다. 현재 Reset 만 확인했으며, 나의 경우는 Firmware Version이 맞지 않아 현재 Update 고려중

  https://www.elprotronic.com/productdata

  1. FET-Pro-430 Software Pkg. - LITE
  2. FET-Pro-430 Software Pkg. - STD

  • 방법-2 
아직 사용해보지 못한 방법
  http://www.ti.com/tool/msp430-flasher

  • 방법-3 
아직 사용해보지 못한 방법
  http://dlbeer.co.nz/mspdebug/


4. GDB관련정보 

Compiler를 GCC를 사용할 경우, GDB 사용하는 법

  http://processors.wiki.ti.com/index.php/GDB_with_MSP430_and_CCSv6

6/21/2017

MSP430 기본자료

1. MSP430과 다른 MCU비교 

TI의 Main MCU로 MSP430이 많이 이용되어진다고 하지만, Atmel의 AVR or ST micronics의 STM이 많이 이용이 되어지는 것 사실인 것 같다.

실제로 최근에 IOT 일 관련때문에 다시 AVR과 STM 관련해서 MCU들을 다시 사용해봤지만 사용하기가 편한 MCU는 STM or AVR 인 것 같다.
나만의 생각일지는 모르겠지만 풍부한 예제소스와 사용하기 쉬운 인터페이스 인 것 같다.
특히 STM의 경우는 ARM 기반으로 하기때문에 너무 이상적이고 이게 MCU 라고도 생각이 들 정도였다.

일문제로 인하여 TI MSP430 사용하고 있지만, 다른 MCU에 비해 개발의 편이성에 관련된 큰 장점을 발견하지 못하고 있지만
사용을 하다보니 다른 MCU 못지않게 좋은 부분도 많이 발견되고 특히 저전력부분에 있어서는 MSP430는 좋겠다라고 생각이 든다.
하지만 개발의 편이성 부분은 다소 떨어지는 것과 MSP430간의 호환성이 떨어지는 것은 어쩔수 없는 것 같다.

1.1 MSP430의 호환성

아래의 Wiki를 보고, TI사이트를 가보면 상당히 많은 MSP430의 종류가 존재한다.
그리고, 아래 series로 갈수로 고사양의 MCU 이며, 다양한 Peripherals 지원 해주고 성능이 좋다.
하지만 아래의 Series로 갈수록 호환성은 떨어지며, TI에서 예제를 제공해주고 있지만, Github or
다른 Opensource를 많이 발견하지 못하고 있다. 나의 검색능력이 떨어져서 그런건지 모르겠다.

하여튼 내가 사용하는 msp430f5438a는 다른 MSP430과 호환이 잘되지 않아 좀 많이 고쳐줘야 한다.
컴파일러는 현재 TI Complier로 사용하고 있으며, 다른 예제소스를 가지고 한번에 빌드되는 것은 거의 보지를 못했다.
이 관련 Series의 예제를 찾아 관련 Register 부분을 수정하면 문제해결이 된다.

  • MSP430 Series 
  1. MSP430x1xx series
  2. MSP430F2xx series
  3. MSP430G2xx series
  4. MSP430x3xx series
  5. MSP430x4xx series
  6. MSP430x5xx series
  7. MSP430x6xx series


1.2 MSP430F438A 의 전체 기능 

MCU 치고는 상당히 좋고 다양한 많은 기능을 가지고 있다. DMA기능을 가지고 있다는 것에 사실 놀랐고,
Timer 기능과 Power Management를 위해서 내부에 LDO를 따로 구성을 하고 있다.
일단 MCU이기에 FLASH 와 RAM은 기본으로 가지고 있으며, 외부 clock을 사용 안한다면, 내부 oscillator도 가지고 있다.

  • msp430f5438a


  http://www.ti.com/product/MSP430F5438A


  • 상세 Manual 
상위 Datasheet에는 세부 Register 설정 및 동작내용을 표시하지 않고 있지만,
6. Detailed Description 에 세부 Datasheet들을 Link로 연결해주고 있다.
가장 중요한 부분이기에 세밀하게 잘 봐야 한다.

CCS의 View->Register를 이용하여 각 개별의 값을 읽고 사용할수도 있다.


1.3 MSP430의 CLOCK 의 구성 

상위 msp430f5438a의 UCS 부분을 보면 Clock의 Source 부분과 이를 FLL를 이용하여 , (PLL처럼) Clock을 증가시켜
3종류의 Clock을 최종적으로 만들어 낸다.

  •  Unified Clock System (UCS)  - Source Clock 
     우선알아둬야할 기능이며 CLOCK관련 부분이기에 가장 중요하다.
  1. XT1CLK:  기본 외부 external clock으로 Low or High frequency 32KHz 사용 (XTIN/XTOUT)
  2. VLOCLK: internal oscillator (very low power)  10KHz
  3. DCOCLK: Internal digitally controlled oscillator ( FLL 이용)
  4. XT2CLK: external crystals (XT2IN/XTOUT)

      
  •  Unified Clock System (UCS) 
      상위 Source를 이용하여, 아래의 Clock을 만들어내며, PLL과 유사한 FLL을 이용한다. 
  1. MCLK(Main Clock): CPU 동작을 위한 Clock으로 DCO(Digitally Controlled Oscillator) or 외부 크리스탈에 의해 설정이 된다.
  2. ACLK(Auxiliary Clock): VLO(Very Low Power Oscillator) 
  3. SMCLK(Sub-Main Clock):  개별 Device를 위한 Clock으로 내장된 DCO or 외부 크리스탈로 설정 

Clock관련부분에 설정 및 동작에 대해 설명해주고 있다.

  http://www.ti.com/lit/ug/slau390e/slau390e.pdf
싱크웍스의 자료

  http://www.mcublog.co.kr/1806


  • 나의 경우는 설정의 예 
XT1CLK을 사용하며, 32KHz를 외부공급
  1. 8MHz  (MCLK 과 SMCLK) 설정 , ACLK 32KHz
  2. 15MHz (MCLK과 SMCLK)  설정, ACLK  32KHz
  3. 25MHz (MCLK과 SMCLK)  설정, ACLK  32KHz


1.4 MSP430 Peripheral 설정 방법 

모든 PIN들은 기본적으로 GIO가 가능하며, PINMUX를 해야한다. 그러기때문에,  우선적으로 해야 할일이 PIN 설정이다.

MSP430의 PINMUX 역할이 PINxSEL 이며, 경우에 따라 추가적으로 Pull up과 Pull down 설정도 적용이 되는지는 정확히 모르겠다.

특히한 사항은 UART or I2C or SPI는 USCI Interface라는 것을 이용하여 이곳에서 설정을 변경해서 만들어주어야 한다.

  • MSP430 peripherals 이용시 확인사항 
    예를들면USCI을 통한 UART or I2C or SPI 통신
  1. 개별 PORT의 PIN 설정을 반드시 확인. (GPIO설정시 세부설정)  
  2. PORT의 PINxSEL 은 PINMUX와 동일 (PIN설정)
  3. Peripherals 의 Clock Source를 확인하고 설정 
  4. Peripherals Reset 기능확인 
  5. Peripherals 세부설정방법 확인 
  6. ISR 가능여부 확인 ( 관련 TI Example 참조)

TI Example 소스도 간단히 구현을 하였기때문에 본인이 작성을 원한다면, 더 구체적으로
동작원리를 어느정도 이해를 해야겠다.


  • UART를 이용한 Printf 구현 
  MSP430 관련 CCS Studio 설정 (RS232 - Printf 설정)
  http://processors.wiki.ti.com/index.php/Printf_support_for_MSP430_CCSTUDIO_compiler


만약 Printf가 정상동작하지 않는다면, Properties의 설정을 다시 한번 확인해보고, 문제가 발생한다면, heap도 고쳐보자.

  • CCS의 별도 설정 (Printf 관련)



minimal->full 변경 (추후 Release 할 경우 다시 원상복귀)


기본으로 Enable CIO Function use






  • Timer의 Clock 
Timer는 현재 Source Clock을 ALCK 기준으로 사용을 하고 있으며, 이렇게 구현해야지
추후 Clock 이 변경이 되어도 별문제가 없을 것 같다.

  http://www.ti.com/lit/ug/slau400e/slau400e.pdf



  • ADC12 구현 
ADC의 경우 ISR로 구현로도 구현이 가능하며, 성능은 200-ksps 이상이 나온다고 한다.
현재 나의 경우는 ADC를 한개를 사용을 하기때문에 그리고, 빠른 사용을 위해서 ISR를 사용하고 있으며
ISR 루틴안에서 P1.x로 Clock을 만들어 Scope로 성능을 측정하고 있다.

  1. Repeat-Single-Channel Mode 설정 
  2. Pulse Sample Mode 설정 
  3. ADC12CTL0의 ADC12SHT0x ADC12CLK cycles을 줄이며 성능을 높이고 있다. 
  4. ISR 루틴구성 
  5. ISR 루틴에서 해당 Channel 값을 저장 
  http://www.ti.com/lit/ug/slau406e/slau406e.pdf



  • MSP430F5438A의 기본예제 구성 

  http://www.ti.com/lit/zip/slac375


2. MSP430의 Debugger 지원기능 

현재 사용중인 디버거는 아래와 같으며, USB Interface 형식으로 PC와 연결된다.
- MSP-FET430UIF

JTAG기능과 Serial을 통하여 SPI 형식으로 Target연결되어 File을 Upload 및 Download를 진행을 한다.
AVR의 ISP와 거의 유사한 방식으로 방식이지만, JTAG기능이 추가되어 CCS와 JTAG Debug가 지원이 가능하다.



MSP430의 기본내용 및 설명

  https://en.wikipedia.org/wiki/TI_MSP430


3. MSP430의 Linkscirpt 

MSP430에서 Linkscript와 연결하여 사용해야 할일이 어느 정도 있으며 이 부분은 Compiler의 종류에 따라 변경된다.
그리고 이부분은 정확하게 이해는 하고 있어야 한다. 현재 CCS의 Linkscript는 *.cmd File로 제공해주고 있다.
나의 경우는 lnk_msp430f5438a.cmd 이며 설정만 변경하면 생성이 된다.





3.1 ISR의 기본이해 

Manual의 6.3 Interrupt Vector Addresses을 보면 대충알 수 있다.

*.cmd의 INT00 ~ INTxx 까지의 주소이며 이 주소를 보면 상위 Manual의 주소와 일치한다.



  lnk_msp430f5438a.cmd 파일 
      ........ 
    RTC          : { * ( .int41 ) } > INT41 type = VECT_INIT
    PORT2        : { * ( .int42 ) } > INT42 type = VECT_INIT
    USCI_B3      : { * ( .int43 ) } > INT43 type = VECT_INIT
    USCI_A3      : { * ( .int44 ) } > INT44 type = VECT_INIT
    USCI_B1      : { * ( .int45 ) } > INT45 type = VECT_INIT
    USCI_A1      : { * ( .int46 ) } > INT46 type = VECT_INIT
    PORT1        : { * ( .int47 ) } > INT47 type = VECT_INIT
    TIMER1_A1    : { * ( .int48 ) } > INT48 type = VECT_INIT
    TIMER1_A0    : { * ( .int49 ) } > INT49 type = VECT_INIT
    DMA          : { * ( .int50 ) } > INT50 type = VECT_INIT
    USCI_B2      : { * ( .int51 ) } > INT51 type = VECT_INIT
    USCI_A2      : { * ( .int52 ) } > INT52 type = VECT_INIT
    TIMER0_A1    : { * ( .int53 ) } > INT53 type = VECT_INIT
    TIMER0_A0    : { * ( .int54 ) } > INT54 type = VECT_INIT
    ADC12        : { * ( .int55 ) } > INT55 type = VECT_INIT
    USCI_B0      : { * ( .int56 ) } > INT56 type = VECT_INIT
    USCI_A0      : { * ( .int57 ) } > INT57 type = VECT_INIT
    WDT          : { * ( .int58 ) } > INT58 type = VECT_INIT
    TIMER0_B1    : { * ( .int59 ) } > INT59 type = VECT_INIT
    TIMER0_B0    : { * ( .int60 ) } > INT60 type = VECT_INIT
    UNMI         : { * ( .int61 ) } > INT61 type = VECT_INIT
    SYSNMI       : { * ( .int62 ) } > INT62 type = VECT_INIT
    .reset       : {}               > RESET  /* MSP430 Reset vector         */ 


  • ISR의 예제   
아래와 같이 ADC ISR를 작성할 경우 TI Compiler와 GCC Compiler를 구분하 Programming 해야 한다.
일반적으로 GCC의 경우 __attribute__() 안에 넣고, 작성하지만 CCS or IAR의 TI Compiler는 다르다
Linkscript와 연결하고 싶다면 아래의 규칙을 따르도록하자
ADC12_VECTOR는 결국 *.cmd 파일의 INTxx와 Mapping이 된다.

#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector = ADC12_VECTOR
__interrupt void ADC12_ISR(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(ADC12_VECTOR))) ADC12_ISR (void)
#else
#error Compiler not supported!
#endif
{
 .....
}


3.2 Flash에 환경변수 저장방법 

*.cmd File을 분석해보면, Flash 부분은 .text section  과 .cinit  section 영역 주로 사용자 Code만을 위한 공간이다.
하지만 infoA/B/C/D를 별도로 구분지어 기본적으로 저장을 하지 않는다.
MSP430의 환경변수를 저장할 수 있도록 구성해놓은 Memroy Map인 것 같으며 사용법을 알아두자.

  • MSP430의 Memory MAP의 구성
  1. INFOA
  2. INFOB
  3. INFOC
  4. INFOD
아래와 같이 CCS에서 간단히 사용을 해보자. 하지만 Compiler가 변경이 되면 사용법도 약간씩 변경이 되므로 아래를 참고하자.

#pragma DATA_SECTION(sMYENV, ".infoD")   
const uint8_t *sMYENV = {0x12, 0x34, 0x56, 0x78};


char * env_Addr = (char *)0x1800;
  x = env_Addr[0];
  x = env_Addr[1];
  x = env_Addr[2];
  x = env_Addr[3];


Flash 와 CMD File의 조합
  http://processors.wiki.ti.com/index.php/Placing_Variables_in_Specific_Memory_Location_-_MSP430



  • INFOx Memory 사용할 경우 MSP430의 Debug option 설정 

다음과 같은 에러를 쉽게 볼수 있다.
- MSP430: File Loader: Verification failed: Values at address


아래와 같이 Erase Option은  Erase main Memory Only 설정이 되어 있어 Info에 Erase를 하지 못한다.

Erase Option

  1. Erase main memory only (기본설정)
  2. Erase main and Information memory 변경
이외에도 Allow Read/Write/Erase access to BSL memory 존재하지만, *cmd 파일에서  접근을 하지 않기 때문에 사용하지 않고 있다. 


  https://e2e.ti.com/support/microcontrollers/msp430/f/166/t/481653


  • Flash를 EEPROM으로 이용하는 방법 
MSP430에는 EEPROM을 제공하지 않기때문에 EEPROM 사용할 경우 이를 대신할 방법
  http://processors.wiki.ti.com/index.php/Emulating_EEPROM_in_MSP430_Flash


3.3 Debug를 위하여 Map 파일 분석 

CCS를 이용하여 JTAG Debug를 이용한다면 많은 이용 필요없겠지만, File의 용도를 알아두기 위해서 적어둔다.

빌드 하면, Linux 처럼  *.map 파일 생성이 되며, 이를 통하여 관련 library와 symbol table 과 주소등을 관련 정보가 가능하다