[MCU]/adStar2012. 12. 22. 03:00

[adStar EVM] UART 테스트

[adStar EVM] UART 테스트

 

 

adStar 는 5개의 UART(16Byte FIFO)가 있다. CANTUS에서는 8채널이 있었는데 약간 아쉬운 부분이다.


기존 CANTUS 보드와 핀맵이 조금 변경되어 코드 수정이 필요하다. adStar EVM에는 P1.0(TX0), P1.1(RX0)에 연결되어 있다.







adStar UART 초기화 함수




void U0_Init(unsigned char baud)

{

// *R_PAF4 = ((*R_PAF4)&0xfff0)|PAF4_URX0|PAF4_UTX0;   //CANTUS


 Cbi(*R_PAF1, GP_CFG(0) | GP_CFG(1));
 Sbi(*R_PAF1, F_PAF1_0_UART_TX0 | F_PAF1_1_UART_RX0);


U0_SetBaud(baud);

}





adStar UART 송수신 함수

#define ULSR_DRDY F_ULS_DRDY

#define ULSR_TEMP F_ULS_TEMP


unsigned char U0_GetByte(void)

{

while(!(UART0_LSR & ULSR_DRDY));

return UART0_URDR;

}


void U0_PutByte(unsigned char Data)

{

while(!(UART0_LSR & ULSR_TEMP));

UART0_UTDR = Data;

}





adStar UART 테스트 예제 코드

#include "system.h"

#include "serial.h"


int main()

{

SystemInit();


Led1Init();

Led2Init();

Led1On();

Led2Off();

U0_Init(BAUD_115200);

DebugPrint("ADstar EVM1\r\n");


while(1)

{

if(U0_IsGetByte())

{

switch(U0_GetByte())

{

case '0':

DebugPrint("Led1 Off\r\n");

Led1Off();

break;


case '1':

DebugPrint("Led1 On\r\n");

Led1On();

break;

default:

break;

}

}

     }

}


Posted by nexp
TAG adstar, UART

댓글을 달아 주세요

[AnalogDevice]/ADuc7K2012. 11. 17. 16:28

[ADuc7061 EVM] UART 테스트

[ADuc7061 EVM] UART 테스트

 

ADuc7061 은 정밀 24bit ADC를 내장한 아날로그 마이크로 컨트롤러이다. 24bit ADC값을 테스트 하기위해 가장 쉬운 방법으로 UART로 ADC값을 정송하는것이기 때문에 UART를 포팅하면 쉽게 가능하다.

 

보데이트는 아래와같이 설정하면 오차율 적게 설정할 수 있다.

 

 

COMSTA0 레지스터를 이용하여 송수신 상태를 체크할 수 있다.

 

ADuc7061 UART 송수신 함수

unsigned char U0_GetByte(void)
{
    while ((COMSTA0 & 0x01) != 0x01)
    {
    }
   
    return COMRX;
}

 

void U0_PutByte(unsigned char Data)
{
    COMTX = Data;
    while ((COMSTA0 & 0x40) == 0x00)   // Wait for Tx buffer empty bit to be set
    {
    }
}

 

 

 

 

ADuc7061 UART테스트 코드

초기화, 송수신 함수만 포팅하면 기존 다른 MCU에서 테스트 했던 코드를 그대로 이용할 수 있다. 큰 문제 없이 잘 동작하는것을 확인 할 수 있다.

int main(void)
{
    unsigned int cnt = 0;
    SystemInit();
 
    Led1Init();

    //Serial Init
    DebugInit(BAUD_115200);
    DebugPrint("Aduc7061 EVM Serial Program.\r\n");

   
 while(1)
 {
  //UART Debug
  if(U0_IsGetByte())
  {
   switch(DebugGetByte())
   {
    case '0':
                    DebugPrint("LED OFF = %d\r\n", cnt--);
                    Led1Off();
     break;

                case '1':
                    DebugPrint("LED ON = %d\r\n", cnt++);
                    Led1On();
                 break;      
            }
        }
 }
}

Posted by nexp
TAG ADuc7061, UART

댓글을 달아 주세요

[MSP430]/MSP430_AFE2012. 10. 28. 12:30

[MSP430AFE EVM] UART테스트

[MSP430AFE EVM] UART테스트

 

24bit ADC디버깅 하기 위해 UART를 이용하면 편리하다.

기존 MSP430 UART 코드로 동작을 하지 않아 수정하면서 정리해 보았다.

MSP430시리즈마다 UART특성이 조금씩 다른데 MSP430AFE는 MSP430F2xx 를 기준으로 하고 있다.

 

 

MSP430AFE UART블록도

 

 

 

 

 

 

U0TCTL (USART Transmit Control Register)

기존 22xx 시리즈와 레지스트 명이 달라서 조금 수정이 필요하다.

 

 

 

1Byte 전송함수

void U0_PutByte(unsigned char Data)
{
    // USART0 TX buffer ready?
    while (!(U0TCTL & TXEPT));
    TXBUF0 = Data;
}

 

 

1Byte 수신함수

unsigned char U0_GetByte(void)
{
 while(!(IFG1 & URXIFG0));

    return RXBUF0;
}

 

 

 

MSP430AFE UART테스트 예제 코드

void main(void)
{
    unsigned int cnt = 0;

    SystemInit();

 Led1Init();
 Led1Off();
 U0_Init(BAUD_115200);
 
 DebugPrint("MSP430 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(500);
 }   

 

Posted by nexp

댓글을 달아 주세요

[Microchip]/PIC16F2012. 5. 14. 01:01

[PIC16F723 EVM] UART 테스트

[PIC16F723 EVM] UART 테스트

 

 

 

 

PIC16F723 UART 블록도

 

 

 

 

 

PIC16F723 UART 보레이트 설정

 

 

 

PIC16F723 UART 초기화 함수

// Serial Prot0 Utility Fuction Routine
void U0_Init(unsigned char baud)
{
 U0_SetBaud(baud);
 
 TRISC6 = 0;     // TX Output
 TRISC7 = 1;     // RX Input
 
 TXSTA = 0b00000100;   // 8bit Transmission, Asynchronous Mode
        // High Speed,
 RCSTA = 0b10000000;   // Serial Port Enable, 8bit Reception
     `  
 TXEN = 1;     // TX Enable
 CREN = 1;     // RX Enable
}

 

 

 

PIC16F723 UART 송수신 함수

unsigned char U0_GetByte(void)
{
 while(!RCIF); // Wait for data in the UARTRx.

    return (RCREG);
}

 

void U0_PutByte(unsigned char Data)
{
 while(!TRMT);

 TXREG = Data;
}  

 

 

* 참고로 Hitech C 컴파일러는 무료버전을 사용하므로 printf는 지원이 안된다. 약간 다른 방법으로 구현 했는데.. 용량은 그렇게 많지 않는것 같다.

 

    Program space        used   3E9h (  1001) of  1000h words   ( 24.4%)
    Data space           used    37h (    55) of    C0h bytes   ( 28.6%)
    EEPROM space         None available
    Configuration bits   used     1h (     1) of     2h words   ( 50.0%)
    ID Location space    used     0h (     0) of     4h bytes   (  0.0%)

 

 

 

PICF723 UART 테스트 프로그램 소스

void main(void)
{
 unsigned char rx;
 unsigned int cnt = 0;
 SystemInit();
    Led1Init();
 
 U0_Init(BAUD_57600);
 DebugPrint("PIC16F723 EVM Test\r\n");

    while(1)
    {
  rx = U0_GetByte();

  switch(rx)
  {
   case '0':
    Led1Off();
    DebugPrint("LED Off = %d\r\n", cnt++);
    break;

   case '1':
    Led1On();
    U0_PutStr("LED On\r\n");
    break;
  }
    }
}

 

 

 

 

 

 

Posted by nexp

댓글을 달아 주세요

[AVR]/AT90USB2012. 1. 23. 23:30

[AT90USB1287-EX] 기본 테스트 - UART

[AT90USB1287-EX] 기본 테스트 - UART




AT90USB1287은 UART가 1포트가 있다. ATMega128과 호환을 위해 UART1에 디버깅을 위한 USB2UART 모듈을 연결할 수 있도록 했다.




USB2UART는 모듈을 이용하거나 CP2101을 보드에 실장하여 사용할 수 있는데 CP2101을 이용할 경우 AT90USB1287의 USB Device 기능과 겹치게 되므로 선택저항으로 선택해서 사용할 수 있다.







확장 UART포트





ATmega128 과 레지스터명이 약간 다르므로 수정할 필요가 있다.

AT90USB1287 UART드라이버 코드
#define _UART1_ENABLE
//-----------------------------------------------------------------------------
#if 1
#define DebugPrint      U1_printf
#define DebugInit      U1_Init
#define DebugGetByte     U1_GetByte
#define DebugIsByte      U1_IsGetByte
#endif
//-----------------------------------------------------------------------------


#elif (__MCU_TYPE__ == AVR_TYPE_USB1287) 
//------------------------------------------------------
#define U1R_DATA       UDR1
#define U1R_CSRA       UCSR1A
#define U1R_CSRB       UCSRB
#define U1R_UBRRH       UBRRH
#define U1R_UBRRL       UBRRL
#define U1R_UBRR       UBRRL
#endif

#define u1_WaitForReceive()     while(!(UCSR1A & 0x80))
#define u1_RxData()        (UDR1)

#define u1_TxData(Data)      (UDR1 = Data)
#define u1_WaitForSend()     while(!(UCSR1A & 0x20))



1Byte 전송함수
void U1_PutByte(unsigned char Data)
{
  u1_WaitForSend();
  u1_TxData(Data);;
}

1Byte 수신함수
unsigned char U1_GetByte(void)
{
 u1_WaitForReceive();
 return u1_RxData();
}



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

//-----------------------------------------------------------------------------
int main(void)
{
 //시스템 초기화
 SystemInit();
 
 //LED포트 초기화
 Led1Init();
 Led1On();

 Led2Init();
 Led2On();

 //UART Init
 DebugInit(BAUD_57600);
 DebugPrint("[AT90USB1287-EX] Test Program - UART\r\n");

 while(1)
 {
  switch(DebugGetByte())
  {
   case '0':
    Led1On();
    DebugPrint("LED1 On\r\n");
    break;
    
   case '1':
    Led1Off();
    DebugPrint("LED1 Off\r\n");
    break; 
  }
 }
}
//-----------------------------------------------------------------------------
Posted by nexp

댓글을 달아 주세요