본문 바로가기

[AVR]/AT90USB

[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; 
  }
 }
}
//-----------------------------------------------------------------------------
반응형