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);
}
}