[MSP430]/MSP430i2015. 6. 7. 17:00

MSP430i2041 - 시리얼 통신 테스트

MSP430i2041 - 시리얼 통신 테스트




MSP430i 시리즈의 코어는 MSP430코어 이므로 전체 코드에서는 크게 달라질 사항이 없지만 테스를 위해 가장 먼저 시리얼 통신부터 연결해서 테스트 해 보도록 하자.


MSP430i시리즈이 UART는 MSP430AFE 시리즈와 거의 유사 하지만 새로운라인업이 추가되고 컴파일러가 업그레이드 되면서 레지스터 명이 많이 변경되어 코드 자체는 호환이 안되는것 같다. 





약간의 수정을 하면 기존 코드와 호환해서 사용가능하다.


MSP430i2041 UART 초기화 코드

void U0_Init(unsigned char baud)

{

    P1SEL0 |=   BIT2 | BIT3;            // P1.2/3 eUSCI_A Function

    P1SEL1 &= ~(BIT2 | BIT3);


    UCA0CTL1 |= UCSWRST;                // Hold eUSCI in reset

    UCA0CTL1 |= UCSSEL_2;               // SMCLK

    UCA0BR0   = 142;                    // 115200 baud

    UCA0BR1   = 0;

    UCA0MCTLW = 0x2200;                 // 16.384MHz/115200 = 142.22 (See UG)

    UCA0CTL1 &= ~UCSWRST;               // Release from reset

}





MSP430i2041 UART 송수신 코드

#define TXBUF0          UCA0TXBUF  

#define RXBUF0          UCA0RXBUF



void U0_PutByte(unsigned char Data)

{

    

    //while (!(U0TCTL & TXEPT));

    while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?

    TXBUF0 = Data;

}


unsigned char U0_GetByte(void)

{

    //while(!(IFG1 & URXIFG0));

    while (!(UCA0IFG&UCRXIFG));

    return RXBUF0;

}




MSP430i2041 UART 테스트 예제 코드

#include "system.h"

#include "serial.h"


void main(void)

{

unsigned int cnt = 0;

    SystemInit();

Led1Init();

Led1On();


U0_Init(BAUD_115200);

DebugPrint("MSP430i Serial Test\r\n");

while(1)

{

if(U0_IsGetByte())

{

  switch(U0_GetByte())

  {

  case '+':

  DebugPrint("Cnt=%d\r\n", cnt++);

  break;

 

case '-':

DebugPrint("Cnt=%d\r\n", cnt--);

break;  

  }

}

Led1Toggle();

Delay(200);

}








Posted by nexp

댓글을 달아 주세요