Telosb에서 GPIO를 사용하는 방법
포트를 일반핀으로 사용하려면 MSP430GeneralIOC 컴포넌트를 이용하면 된다. (TinyOS-1.x 버전)
1. configuration 파일에서 MSP430GeneralIOC 컴포넌트를 추가한다.
components Main, TestM, SingleTimer, LedsC, MSP430GeneralIOC;
2. Test.nc를 TestM.nc와 와이어링을 시킨다.
MSP430 GPIO 중 포트 6의 0번 핀을 module 에서 Port0으로 사용함.
TestM.Port0 -> MSP430GeneralIOC.Port60;
MSP430 GPIO 중 포트 6의 1번 핀을 xxxM에서 Port1으로 사용함.
TestM.Port1 -> MSP430GeneralIOC.Port61;
3. TestM.nc에서는 사용 인터페이스로 등록시킨다.
uses interface MSP430GeneralIO as Port0; //MSP430 GPIO를 Port0으로 사용함.
uses interface MSP430GeneralIO as Port1; //MSP430 GPIO를 Port1으로 사용함.
4. TestM.nc의 StdControl.init() 함수안에서 포트를 초기화 시킨다.
call Port0.setLow(); //포트0의 초기값 Low.
call Port0.makeOutput(); //포트0을 출력으로 사용함.
call Port0.selectIOFunc(); //포트0을 I/O 기능으로 사용함.
call Port1.setHigh(); //포트1의 초기값 High
call Port1.makeInput(); //포트1을 입력으로 사용함.
call Port1.selectIOFunc(); //포트1을 I/O 기능으로 사용함.
5. 정해진 루틴에서 사용하는 방법
이 방법은 msp430hardware.h(/opt/tinyos-1.x/tos/platform/msp430) 에 정의된 매크로를 이용하는 것으로 먼저 해당 핀(6.0, 6.1)을 GPIO로 정의(/opt/tinyos-1.x/tos/platform/telos/hardware.h)해야 한다.
TOSH_ASSIGN_PIN(GIO0, 6, 0);
TOSH_ASSIGN_PIN(GIO1, 6, 1);
TOSH_MAKE_GIO0_OUTPUT(); //포트 0을 출력으로 사용.
TOSH_MAKE_GIO0_INPUT(); //포트 0을 입력으로 사용.
TOSH_SET_GIO0_PIN(); //포트0을 High로 출력함.
TOSH_CLR_GIO0_PIN(); //포트0을 Low로 출력함.
기타>> MSP430GeneralIOC는파일을 열어보면 사용할 수 있는 함수를 확인할 수 있다.
async command void setHigh(); //포트의 출력을 High
async command void setLow(); //포트의 출력을 Low
async command void toggle(); //포트의 출력을 Toggle
async command uint8_t getRow(); //포트의 입력값을 읽어들임
async command bool get(); //포트의 입력을 bool 형태로 읽어들임
async command void makeInput(); //포트를 입력으로 사용
async command void makeOutput(); //포트를 출력으로 사용
async command void selectModuleFunc(); //포트를 특수기능핀으로 사용
async command void selectIOFunc(); //포트를 입출력 기능핀으로 사용
참고로 모든 I/O Pin은 두 자리로 등록되어 있으므로 Port10은 1의 0번핀, Port66은 6의 6번핀으로 인식된다.
I/O 동작을 확인하는 방법은 LED가 연결된 포트를 LED 함수를 사용하지 않고 포트 함수만 가지고 테스트 해보면 이해가 쉽다.
댓글 없음:
댓글 쓰기