이 글에서는 Texas Instruments의 MSP430FR6989 LaunchPad를 사용해 기본 프로젝트를 설정하고, LED 깜빡이기 프로그램을 작성하는 방법을 설명합니다. 또한 MSP430FR6989의 하드웨어 사양과 LaunchPad의 핀맵을 다룹니다. Code Composer Studio (CCS)를 사용하며, 초보자도 따라 할 수 있도록 단계별로 안내합니다.
1. MSP430FR6989 하드웨어 사양
MSP430FR6989는 Texas Instruments의 초저전력 16비트 마이크로컨트롤러(MCU)로, FRAM 기반의 MSP430FR6xx 시리즈에 속합니다. 주요 사양은 다음과 같습니다:
- 아키텍처: 16비트 RISC, 최대 16MHz 클럭
- 메모리:
- 128KB FRAM (비휘발성 메모리, 초저전력, 고속 쓰기, 높은 내구성)
- 2KB SRAM
- 전원 공급: 1.8V ~ 3.6V (SVS 제한에 따라 최소 전압 설정)
- 초저전력 모드:
- 액티브 모드: 약 100µA/MHz
- 스탠바이(LPM3, VLO): 0.4µA (일반)
- RTC(LPM3.5): 0.35µA (일반)
- 셧다운(LPM4.5): 0.02µA (일반)
- 주변 장치:
- 12비트 ADC (최대 16개 외부 입력 채널, 내부 참조 및 샘플-홀드)
- LCD 드라이버 (최대 320 세그먼트 지원, 콘트라스트 제어 포함)
- 확장 스캔 인터페이스(ESI, 회전 감지용 듀얼 아날로그 프론트엔드)
- AES-256 암호화 모듈
- UART/SPI/I2C, 타이머, DMA, 비교기
- 입출력: 최대 83개의 GPIO 핀
- 패키지: 100핀 LQFP, 80핀 LQFP 등
MSP-EXP430FR6989 LaunchPad는 온보드 에뮬레이션(eZ-FET), 에너지 측정 기능, 320세그먼트 LCD 디스플레이, 버튼(S1, S2), LED(P1.0: 빨간색, P9.7: 녹색)를 포함하며, 40핀 BoosterPack 확장을 지원합니다.
2. MSP430FR6989 LaunchPad 핀맵
MSP-EXP430FR6989 LaunchPad는 40핀 BoosterPack 커넥터를 통해 다양한 기능을 제공합니다. 아래는 주요 핀과 해당 기능을 요약한 내용입니다:
- P1.0: 빨간색 LED (GPIO 출력, 기본 설정), BoosterPack 핀 J1.1
- P9.7: 녹색 LED (GPIO 출력, 기본 설정), BoosterPack 핀 J2.20
- P1.1: 버튼 S2 (GPIO 입력), BoosterPack 핀 J1.2
- P1.2: 버튼 S1 (GPIO 입력), BoosterPack 핀 J1.3
- P3.0, P3.1: UART (UCA0TXD, UCA0RXD, 백채널 UART로 사용 가능), BoosterPack 핀 J1.4, J1.5
- P2.0 ~ P2.7: LCD 세그먼트 핀 (COM0 ~ COM3, S0 ~ S3), BoosterPack 핀 J2.11 ~ J2.18
- P4.0 ~ P4.7: 다목적 GPIO, ADC 입력, 타이머, BoosterPack 핀 J1.6 ~ J1.10, J2.11 ~ J2.13
- RST/NMI/SBWTDIO: 리셋 및 Spy-Bi-Wire 데이터, BoosterPack 핀 J2.8
- TEST/SBWTCK: Spy-Bi-Wire 클럭, BoosterPack 핀 J2.10
참고:
- 핀은 소프트웨어로 다기능(GPIOs, UART, SPI, I2C, ADC 등)으로 설정 가능합니다.
- LCD 관련 핀은 온보드 320세그먼트 LCD 구동에 주로 사용됩니다.
- BoosterPack 핀맵은 표준을 따르며, 외부 모듈(무선, 센서 등) 연결 시 호환성을 확인해야 합니다.
- 자세한 핀 기능은 MSP430FR6989 데이터시트(slas789c)와 LaunchPad 사용자 가이드(slau627a)를 참조하세요.
3. 개발 환경 설정
필요 도구
- 하드웨어: MSP-EXP430FR6989 LaunchPad 개발 키트
- 소프트웨어:
- Code Composer Studio (CCS) 최신 버전
- MSP430Ware (CCS 설치 시 포함)
- USB 드라이버 (LaunchPad 연결 시 CCS에서 자동 설치)
설치 단계
- CCS 설치:
- Texas Instruments 공식 웹사이트(www.ti.com)에서 CCS를 다운로드하고 설치합니다.
- 설치 중 MSP430 관련 패키지를 포함하도록 선택합니다.
- MSP430Ware 확인:
- CCS를 실행한 후, View > Resource Explorer를 열어 MSP430Ware가 설치되어 있는지 확인합니다. MSP430Ware는 드라이버 라이브러리와 예제 코드를 제공합니다.
- LaunchPad 연결:
- MSP-EXP430FR6989를 USB 케이블로 컴퓨터에 연결합니다.
- Windows의 디바이스 매니저에서 "MSP Debug Interface"가 표시되는지 확인합니다. 드라이버는 CCS 설치 시 자동으로 설치됩니다.
4. CCS에서 기본 프로젝트 설정
프로젝트 생성
- CCS를 열고 File > New > CCS Project를 선택합니다.
- 프로젝트 설정:
- Target: MSP430FR6989
- Project Name: BlinkLED (또는 원하는 이름)
- Project Type: Empty Project (with main.c)
- Compiler: TI의 최신 컴파일러
- Output Type: Executable
- Finish를 클릭하여 프로젝트를 생성합니다.
빌드 설정 확인
- 프로젝트 탐색기에서 프로젝트를 우클릭하고 Properties를 선택합니다.
- General 탭에서 Device Variant가 MSP430FR6989로 설정되어 있는지 확인합니다.
- Include Options에서 MSP430 드라이버 라이브러리 경로가 포함되어 있는지 확인합니다 (예: ${MSP430WARE}/driverlib/MSP430FR5xx_6xx).
5. LED 프로그램 작성
MSP430FR6989 LaunchPad에는 P1.0 (빨간색 LED)와 P9.7 (녹색 LED)가 연결되어 있습니다. 아래는 두 LED를 약 1초 간격으로 번갈아 깜빡이는 코드입니다.
#include <msp430.h>
void initGPIO(void)
{
// 미사용 포트 초기화 (모두 출력 Low)
P1OUT = 0; P1DIR = 0xFF;
P2OUT = 0; P2DIR = 0xFF;
P3OUT = 0; P3DIR = 0xFF;
P4OUT = 0; P4DIR = 0xFF;
P5OUT = 0; P5DIR = 0xFF;
P6OUT = 0; P6DIR = 0xFF;
P7OUT = 0; P7DIR = 0xFF;
P8OUT = 0; P8DIR = 0xFF;
P9OUT = 0; P9DIR = 0xFF;
PEOUT = 0; PEDIR = 0xFF;
PJOUT = 0; PJDIR = 0xFF;
}
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // Watchdog Timer 비활성화
initGPIO();
// P1.0 (빨간색 LED) 설정
P1DIR |= BIT0; // P1.0을 출력으로 설정
P1OUT &= ~BIT0; // 초기 상태: LED 꺼짐
// P9.7 (녹색 LED) 설정
P9DIR |= BIT7; // P9.7을 출력으로 설정
P9OUT &= ~BIT7; // 초기 상태: LED 꺼짐
// LPM5 잠금 해제 (GPIO 활성화)
PM5CTL0 &= ~LOCKLPM5;
while(1)
{
P1OUT ^= BIT0; // 빨간색 LED 토글
P9OUT ^= BIT7; // 녹색 LED 토글
// 저전력 모드 진입 + 전역 인터럽트 허용
__bis_SR_register(LPM3_bits | GIE); }
}
// Timer_A0 CCR0 인터럽트 서비스 루틴
#pragma vector = TIMER0_A0_VECTOR
__interrupt void Timer0_A0_ISR(void)
{
P1OUT ^= BIT0; // 빨간 LED 토글
P9OUT ^= BIT7; // 녹색 LED 토글
}
6. MSP430 기본 코드 작성 시 필수 항목
Watchdog Timer 비활성화
- 기본적으로 WDT는 동작 상태라서 코드가 멈추면 리셋을 걸어버립니다.
- 실습/테스트용 기본 코드에서는 보통 꺼줍니다.
WDTCTL = WDTPW | WDTHOLD; // WDT 비활성화
GPIO 미사용 포트 초기화
- 사용하지 않는 포트는 출력(Output) + Low로 설정해야 불필요한 전류 소모 방지.
- 모든 포트를 초기화한 뒤, 필요한 핀만 다시 설정하는 습관이 좋습니다.
P1OUT = 0; P1DIR = 0xFF;
P2OUT = 0; P2DIR = 0xFF;
...
PEOUT = 0; PEDIR = 0xFF;
PJOUT = 0; PJDIR = 0xFF;
LPM5 잠금 해제
- FR 시리즈(MSP430FRxxxx)는 전원이 켜지면 기본적으로 GPIO가 High-Z(잠금) 상태.
- 반드시 아래 코드로 잠금 해제해야 핀 동작 가능.
PM5CTL0 &= ~LOCKLPM5; // GPIO 활성화
클럭 설정 (필요 시)
- 기본 클럭은 보통 DCO(약 1MHz).
- 더 정확한 딜레이나 Timer 동작이 필요하면 클럭을 원하는 주파수로 설정.
CSCTL0_H = CSKEY >> 8; // CS 레지스터 Unlock
CSCTL1 = DCOFSEL_3 | DCORSEL; // 예: DCO = 8MHz
CSCTL2 = SELA__VLOCLK | SELS__DCOCLK | SELM__DCOCLK;
CSCTL3 = DIVA__1 | DIVS__1 | DIVM__1;
CSCTL0_H = 0; // CS 레지스터 Lock
저전력 모드(LPM) 활용
- MSP430의 강점은 초저전력 → 메인 루프에서는 대기 모드 진입.
- 이벤트(인터럽트) 발생 시만 깨어나도록 설계.
__bis_SR_register(LPM3_bits | GIE); // LPM3 진입 + 인터럽트 허용
Timer/인터럽트 기반 동작
- __delay_cycles()는 CPU가 계속 동작 → 비효율적.
- Timer를 이용한 인터럽트 기반 설계가 기본.
7. 문제 해결
- USB 연결 문제:
- 디바이스 매니저에서 "MSP Debug Interface"가 표시되지 않으면 USB 케이블을 확인하거나 CCS를 재설치합니다.
- 빌드 에러:
- 프로젝트 속성에서 올바른 디바이스(MSP430FR6989)와 컴파일러가 선택되었는지 확인합니다.
- MSP430Ware 라이브러리 경로가 올바르게 설정되었는지 확인합니다.
- LED가 동작하지 않음:
- 코드에서 P1.0과 P9.7이 올바르게 설정되었는지 확인합니다.
- LaunchPad의 점퍼 설정이 올바른지 확인합니다 (특히 LED 관련 점퍼).