CC2530 기반 LED 제어 및 GPIO 설정 방법

LED 제어 프로그래밍 개요

CC2530 마이크로컨트롤러를 사용하여 LED를 제어하기 위해서는 기본적인 GPIO 설정과 함께 출력 상태 조작이 필요합니다. 아래 예제는 순수 레지스터 접근 방식과 함수 캡슐화 방식 두 가지로 작성되었습니다.

방법 1: 레지스터 직접 제어

#include <iocc2530.h>

void Delay(uint16_t count);
void ConfigureGpio(void);

void main(void) {
  ConfigureGpio();
  
  while (1) {
    P1_0 = ~P1_0;        // 토글 P1.0
    Delay(50000);
    P1_1 = ~P1_1;        // 토글 P1.1
    Delay(50000);
    P0_4 = ~P0_4;        // 토글 P0.4
    Delay(50000);
  }
}

void Delay(uint16_t count) {
  for (uint16_t i = 0; i < count; i++);
  for (uint16_t i = 0; i < count; i++);
  for (uint16_t i = 0; i < count; i++);
}

void ConfigureGpio(void) {
  P1DIR |= 0x03;         // P1.0, P1.1을 출력으로 설정 (비트 0~1)
  P0DIR |= 0x10;         // P0.4를 출력으로 설정 (비트 4)
  P1_0 = 1;              // 초기 상태: High (LED 소등, 공통 애노드 가정)
  P1_1 = 1;
  P0_4 = 1;
}

방법 2: 제어 함수 활용

#include <iocc2530.h>

void Delay(uint16_t count);
void ConfigureGpio(void);
void ControlLed(uint8_t ledNum, uint8_t on);

void main(void) {
  ConfigureGpio();

  while (1) {
    // 각 LED를 순차적으로 점등/소등
    ControlLed(0, 0); Delay(50000);
    ControlLed(1, 0); Delay(50000);
    ControlLed(2, 0); Delay(50000);
    
    ControlLed(0, 1); Delay(50000);
    ControlLed(1, 1); Delay(50000);
    ControlLed(2, 1); Delay(50000);
  }
}

void ControlLed(uint8_t ledNum, uint8_t on) {
  switch (ledNum) {
    case 0:
      P1_0 = (on ? 0 : 1);  // 저항성 애노드 구조 가정 시 '0'이 점등
      break;
    case 1:
      P1_1 = (on ? 0 : 1);
      break;
    case 2:
      P0_4 = (on ? 0 : 1);
      break;
  }
}

GPIO 설정 원리

CC2530의 입출력 핀은 다양한 모드로 구성 가능하며, 다음 레지스터를 통해 제어됩니다.

  • PxSEL (P0SEL, P1SEL, P2SEL): 해당 비트가 1이면 외부 장치 신호로 사용됨. 일반 GPIO 사용 시 0으로 설정.
  • PxDIR (P0DIR, P1DIR, P2DIR): 방향 설정. 1 = 출력, 0 = 입력.
  • PxINP (P0INP, P1INP, P2INP): 입력 동작 모드 결정.
    - P0의 경우, P0INP의 특정 비트로 풀업/풀다운 또는 하이임피던스 선택 가능.
    - 예: P0INP에서 관련 비트를 0으로 설정하면 3-state(High-Z), 1이면 풀업/풀다운 활성화.

전원 인가 후 기본값으로 모든 PxSEL 레지스터는 0x00이며, 이는 모든 핀이 일반 GPIO 모드로 시작함을 의미합니다. 별도의 외부 장치를 사용하지 않는 한 SEL 레지스터를 수정할 필요 없습니다.

하드웨어 및 플래싱 정보

  • 동작 전압 범위: 2V ~ 3.6V (권장: 3.3V)
  • 패키지 유형: QFN40 (40핀)
  • 프로그래밍에는 전용 하드웨어 디버거(SmartRF 등) 필요
  • 플래시 후 리셋 버튼을 눌러 프로그램 재시작
  • PC 드라이버 설치 필수 (장치 인식 실패 시 드라이버 확인 요망)

태그: CC2530 ZigBee GPIO LED control Embedded C

6월 17일 21:33에 게시됨