본문 바로가기

[MSP430]/MSP430-S

[MSP430G ] 양방향 Soft UART 테스트

[MSP430G ] 양방향 Soft UART 테스트



MSP430G2231을 이용하여 양방향 UART통신을 테스트 해 보았다. MSP430G 시리즈는 저전력, 저렴함을 강점으로 내새우기 때문에 UART가 없어 소프트웨어 UART를 이용하는데 지난번에는 간단히 송신만 테스트 했었다. 이번에는 송수신 모두 되도록 수정해서 테스트 해 보았다.

실험 결과 8Mhz에서 115200bps까지 통신이 잘된다.



UART 드라이버 함수의 U0_PutByte(), U0_GetByte() 부분을 수정하고 나머지는 TimerA인터럽트에서 처리 하면 간한히 송수신 가능하다.
[config.h]
#define  TXD  BIT1    // TXD on P1.1
#define  RXD  BIT2    // RXD on P1.2

#define SOFT_UART_INIT()  P1SEL |= TXD;\
        P1DIR |= TXD;\
        P1IES |= RXD;\
        P1IFG &= ~RXD;\
        P1IE |= RXD;


[serial.c]
void U0_PutByte(unsigned char Data)
{
 TXByte = Data;
 
 while(isReceiving);   // Wait for RX completion
 TXByte |= 0x100;   // Add stop bit to TXByte (which is logical 1)
 TXByte = TXByte << 1;   // Add start bit (which is logical 0)
 BitCnt = 0xA;    // Load Bit counter, 8 bits + ST/SP

 CCTL0 = OUT;    // TXD Idle as Mark
 TACTL = TASSEL_2 + MC_2;  // SMCLK, continuous mode
 CCR0 = TAR;    // Initialize compare register 
 CCR0 += Bit_time;   // Set time till first bit 
 CCTL0 =  CCIS0 + OUTMOD0 + CCIE;  // Set signal, intial value, enable interrupts
 while ( CCTL0 & CCIE );   // Wait for previous TX completion
}

unsigned char U0_GetByte(void)
{
 while(!hasReceived);

 // Clear the flag 
 hasReceived = 0; 
    return RXByte;
}




MSP430G2231 Soft UART 테스트 예제 코드
#include "system.h"
#include "serial.h"

void main(void)
{
 //System Initialize
 SystemInit();
 
 //UART초기화
 U0_Init(BAUD_115200);
 
 Led1Init();
 Led1On();

  U0_PutStr("MSP430 Serial Test\r\n"); 
 
 while (1)
 {
  if(U0_IsGetByte())
  {
   switch(U0_GetByte())
   {  
    case '0':
     Led1Off();
     U0_PutStr("Led1Off()\r\n"); 
     break;
     
    case '1':
     Led1On();
     U0_PutStr("Led1On()\r\n");      
     break;   
   }
  }




MSP430G2231 UART테스트 동영상



핸드폰과 Bluetooth을 이용한 램프제어 테스트 동영상
반응형