'ADucM360_STUDY'에 해당되는 글 1건

  1. 2014.06.14 ADuM360 UART 테스트
[AnalogDevice]/ADucM3602014. 6. 14. 17:53

ADuM360 UART 테스트

ADuM360 UART 테스트




ADucM360 UART 초기화 함수

ADucM360은 UART는 아래와 같이 GPCON레지스터를 이용해 핀맵을 2개의 포트에 할당 할 수 있다. ADucM360 EVM 에서는 P0.6, P0.7에 할당 해 두었고 USB2UART를 이용하여 PC와 UART통신이 가능하다.


P0.1/SCLK1/SCL/SIN

P0.2/MOSI1/SDA/SOUT


P0.7/POR/SOUT

P0.6/IRQ2/SIN



void U0_Init(unsigned char baud)

{

   //Select IO pins for UART.

   //pADI_GP0->GPCON |= 0x3C;                     // Configure P0.1/P0.2 for UART

    pADI_GP0->GPCON |= 0x9000;                   // Configure P0.6/P0.7 for UART

    ClkSel(CLK_CD6,CLK_CD7,CLK_CD0,CLK_CD7);     // Select CD0 for UART System clock

   

    U0_SetBaud(baud);

    

   UrtMod(pADI_UART,COMMCR_DTR,0);              // Setup modem bits

   UART IRQ sources

}




ADucM360 UART 송수신 함수

COMLSR 레지스터에서 UART 송수신 상태를 읽어서 처리하면 간단히 해결된다. 수신시는 DR비트를 송신시에는 THRE비트를 확인하여 처리한다.

unsigned char U0_GetByte(void)

{

//데이터가 수신되면

while (!(pADI_UART->COMLSR & COMLSR_DR));


//데이터 읽어옴

return pADI_UART->COMRX;

}


void U0_PutByte(unsigned char Data)

{

      //송신 FIFO가 비어지면

      while(!(pADI_UART->COMLSR & COMLSR_THRE));

    

      //데이터 전송

      pADI_UART->COMTX = Data;

}






ADucM360 UART 테스트 예제코드

int main (void)

{

    unsigned int cnt = 0;

    

    _SystemInit();

    U0_Init(BAUD_115200);

    U0_PutStr("ADucM360 UART Test\r\n");

    

    Led1Init();

    Led1On();

    

    while (1)

    {

        Led1Toggle();

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

        Delay(500);      

    }

}



Posted by nexp

댓글을 달아 주세요