MSP430Fx에서 SPI 통신을 하기 위해서는 어떻게 해야 할까...
먼저 하드웨어를 살펴보자.
MSP430은 USART0과 USART1 이 존재한다.
USART0은 uart, i2c, spi 가 가능하며, USART1은 uart, spi가 가능하다.
여기서 USART0은 CC2420과 연결되어 무선 통신에 쓰이므로 무선 통신을 사용하기 위해서 패스하고, USART1을 이용하여 spi를 사용하도록 한다.
여기서 MSP430의 결점(?)이 드러나기 시작한다. MSP430 family는 SPI를 직접 컨트롤 할 수 있는 레지스터가 없다.
앞서 언급한 듯이 USART1은 uart와 spi 통신이 가능한데, 두 가지 통신을 한꺼번에 하지 못한다.
즉, 공유자원으로 사용한다는 것이다. uart 통신을 하고자 한다면 uart 모드로 변경해야 하고, spi 통신을 하고자 한다면 spi 모드로 변경해서 사용해야한다.
둘 다 사용하고자 한다면 소프트웨어적으로 스케줄링해서 사용할 수 있다.
tinyos에서는 이를 어떻게 해야 하는지는 뒤에서 언급하도록 한다.
USART1을 SPI 모드로 사용할 경우 p.5.1 ~ p5.3이 쓰인다.
p.5.1은 마스터 모드인 경우 데이터 출력, 슬레이브인 경우 데이터 입력이 가능하다. (SIMO1)
p.5.2는 반대로 마스터 모드인 경우 데이터 입력, 슬레이브인 경우 데이터 출력이 가능하다. (SOMI1)
p.5.3의 경우 마스터인 경우 시리얼 클럭의 출력, 슬레이브인 경우 시리얼 클럭의 입력이 가능하다.
만약 MSP430을 마스터로 사용한다면 어떤 핀을 제어해야 하는지 감이 올 것이다.
다시 돌아와서 tinyos의 경우 USART1의 uart와 spi를 위해 HPL단의 컴포넌트에 레지스터 셋팅이 되어 있다.
(/opt/tinyos-1.x/tos/platform/msp430/HPLUSART1M.nc)
이를 사용하기 위해서는 top-level app단에서 인터페이스를 연결하여 call 하면 된다.
(/opt/tinyos-1.x/tos/platform/msp430/HPLUSARTControl.nc)
참고로 슬레이브 모듈에 따라 레지스터를 변경 적용해야 하는 경우도 있으니 MSP430Fx의 데이터시트를 꼭 참고해야 한다.
TIP.
TinyOS에서 StdControl interface를 이용하여 초기화할 때, SPI 모드도 초기화 하게 되면 동작이 되지 않는다. 그러므로 스케줄러에 의해 모트의 동작이 시작할 때 초기화하고 SPI로 동작하도록 해야 한다.
댓글 없음:
댓글 쓰기