[MSP430G ] 양방향 Soft UART 테스트
MSP430G2231을 이용하여 양방향 UART통신을 테스트 해 보았다. MSP430G 시리즈는 저전력, 저렴함을 강점으로 내새우기 때문에 UART가 없어 소프트웨어 UART를 이용하는데 지난번에는 간단히 송신만 테스트 했었다. 이번에는 송수신 모두 되도록 수정해서 테스트 해 보았다.
실험 결과 8Mhz에서 115200bps까지 통신이 잘된다.
UART 드라이버 함수의 U0_PutByte(), U0_GetByte() 부분을 수정하고 나머지는 TimerA인터럽트에서 처리 하면 간한히 송수신 가능하다.
MSP430G2231 Soft UART 테스트 예제 코드
MSP430G2231 UART테스트 동영상
핸드폰과 Bluetooth을 이용한 램프제어 테스트 동영상
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;
}
#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;
}
}
#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을 이용한 램프제어 테스트 동영상
반응형