[CANTUS EVM] UART테스트
CANTUS는 8채널의 16450호환 UART가 있다. FIFO도 16Byte가 있고.. 멋지다.
CANTUS에서 UART제어를 위해 Seial.c에 있는 U0_GetByte(), U0_PutByte()를 수정해 주면 된다. ADChip사에서 제공되는 코드는 너무많은 기능을 제공하려다 보니 오히려 복잡하고 속도도 느려질 수 있다. 그래서 데이터시트를 보고 간단히 작성해 보았다.
CANTUSPIC32 UART테스트 예제코드
CANTUS는 8채널의 16450호환 UART가 있다. FIFO도 16Byte가 있고.. 멋지다.
CANTUS에서 UART제어를 위해 Seial.c에 있는 U0_GetByte(), U0_PutByte()를 수정해 주면 된다. ADChip사에서 제공되는 코드는 너무많은 기능을 제공하려다 보니 오히려 복잡하고 속도도 느려질 수 있다. 그래서 데이터시트를 보고 간단히 작성해 보았다.
#define UART0_LSR *(volatile unsigned long*)((unsigned long)R_UART0_BASE + UART_LSR)
#define UART0_URDR *(volatile unsigned long*)((unsigned long)R_UART0_BASE + UART_RBR)
#define UART0_UTDR *(volatile unsigned char*)((unsigned long)R_UART0_BASE + UART_THR)
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;
}
#define UART0_URDR *(volatile unsigned long*)((unsigned long)R_UART0_BASE + UART_RBR)
#define UART0_UTDR *(volatile unsigned char*)((unsigned long)R_UART0_BASE + UART_THR)
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;
}
CANTUSPIC32 UART테스트 예제코드
#include "system.h"
#include "serial.h"
int main()
{
SystemInit();
Led1Init();
Led1On();
Led2Init();
Led2Off();
U0_Init(BAUD_115200);
DebugPrint("Cantus 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;
}
}
#include "serial.h"
int main()
{
SystemInit();
Led1Init();
Led1On();
Led2Init();
Led2Off();
U0_Init(BAUD_115200);
DebugPrint("Cantus 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;
}
}
반응형