'UART'에 해당되는 글 25건

  1. 2014.07.20 TM4C123 - UART UART 테스트
  2. 2014.07.06 M052LBN EVM - UART테스트
  3. 2014.06.14 ADuM360 UART 테스트
  4. 2014.05.04 STM8S - UART 테스트
  5. 2014.04.05 dsPIC33E - UART 테스트
[TI]/TM4C2014. 7. 20. 23:00

TM4C123 - UART UART 테스트

TM4C123 - UART UART 테스트




TM4C123 UART 특징

Tiva TM4C123FH6PM의 UART의 특징은 아래와 같다.

눈여겨 볼 만한 사항으로 64핀 패키지에서도 8채널 UART를 사용할 수 있고 485모드, 가변 FIFO 등등을 들수 있을것 같다.

 - 8Ch UART

 -  Programmable baud-rate generator allowing speeds up to 5 Mbps , 10 Mbps 

 - FIFO trigger levels of 1/8, 1/4, 1/2, 3/4, and 7/8

 - Separate 16x8 transmit (TX) and receive (RX) FIFOs

 - IrDA serial-IR (SIR) encoder/decoder providing

 - EIA-485 9-bit support



64핀 패키지에서  최대 8채널을 사용할 수 있다. 

아래와 같이 8채널 할당이 가능하다.




TM4C123 UART블록도





TM4C123 UART 초기화 함수

void U0_Init(unsigned char baud)

{

    // Enable the GPIO Peripheral used by the UART.

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);


    // Enable UART0

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);


    // Configure GPIO Pins for UART mode.

    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);

    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);

    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);


    // Use the internal 16MHz oscillator as the UART clock source.

    UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);


    U0_SetBaud(baud);

}




TM4C123 UART 송수신 함수 

UARTFR 레지스터를 확인해서 처리해주면 된다.

void U0_PutByte(unsigned char Data)

{

    // Wait until space is available.

    while(HWREG(UART0_BASE + UART_O_FR) & UART_FR_TXFF)

    {

    }


    HWREG(UART0_BASE + UART_O_DR) = Data;

}



unsigned char U0_GetByte(void)

{

    // Wait until a char is available.

    while(HWREG(UART0_BASE + UART_O_FR) & UART_FR_RXFE)

    {

    }


    return(HWREG(UART0_BASE + UART_O_DR));

}









Posted by nexp

댓글을 달아 주세요

Cortex-M/NUVOTON2014. 7. 6. 23:00

M052LBN EVM - UART테스트

M052LBN - UART테스트




M052LBN UART 특징

M0521은 2채널의 UART가 있다. 그리고 FIFO 있고.. RS485 9bit 모지원한다. 저렴한 MCU에서 지원은 좋은것 같다.


 - Separate receive / transmit 16/16 bytes entry FIFO for data payloads

 - hardware auto-flow control and flow control

 - Supports RS-485 9-bit mode

 - Supports hardware or software enable to program RTS pin to control RS-485 transmission direction directly



M052LBN UART 블록도




M052LBN UART 초기화 코드

void U0_Init(unsigned char baud)

{

    SYS_UnlockReg();    

    /* Enable UART module clock */

    CLK_EnableModuleClock(UART0_MODULE);


    /* Select UART module clock source */

    CLK_SetModuleClock(UART0_MODULE, CLK_CLKSEL1_UART_S_PLL, CLK_CLKDIV_UART(1));


    /* Set P3 multi-function pins for UART0 RXD and TXD */

    SYS->P3_MFP &= ~(SYS_MFP_P30_Msk | SYS_MFP_P31_Msk);

    SYS->P3_MFP |= (SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0);


    /* Lock protected registers */

    SYS_LockReg(); 

    

    U0_SetBaud(baud);

}




M052LBN UART 송수신 함수

void U0_PutByte(unsigned char Data)

{

while((UART0->FSR & UART_FSR_TE_FLAG_Msk) == 0);

UART0->THR = Data;    

}


unsigned char U0_GetByte(void)

{

while(UART0->FSR & UART_FSR_RX_EMPTY_Msk); 

return UART0->RBR;

}




M052LBN RS485 기능 







Posted by nexp

댓글을 달아 주세요

[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

댓글을 달아 주세요

[ST_MICRO]/STM82014. 5. 4. 19:00

STM8S - UART 테스트

STM8S - UART 테스트




SS-Type EVM 보드와 USB2UART를 이용하여 STM8S UART 테스트를 진행했다.



STM8S UART 블록도

뭐 그리 특별한것은 없고 다른 8bit MCU와 같이 간단한 레지스터 구조로 구성되어 있다. 몇가지 레지스터만 확인하면 될것 같다.



STM8S UART 송수신 함수

unsigned char U0_GetByte(void)

{

while ((UART1->SR & UART1_FLAG_RXNE) == RESET);

return UART1->DR;

}



void U0_PutByte(unsigned char Data)

{

    UART1->DR = Data;


    while ((UART1->SR & (u8) UART1_FLAG_TXE) == RESET);

}



STM8S UART 테스트 예제

int main( void )

{

    unsigned int cnt = 0;


    SystemInit();

    

    DebugInit(BAUD_115200);

    U0_PutStr("test\r\n");


    Led1Init();

    Led1On();

    

    while(1)

    {

        Led1Toggle();

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

        Delay(500);

    }

    

    return 0;

}







STM8S UART 인터럽트 테스트

UART 인터럽트 초기화함수로 UART1_ITConfig() 를 이요하면되고 STM32와 유사해서 코드 수정하는데 편한것 같다.

    UART1_ITConfig(UART1_IT_RXNE, ENABLE);

    enable();



STM8S  UART 인터럽트 핸들러 함수

INTERRUPT_HANDLER(UART1_RX_IRQHandler, 18)

{

    unsigned char data;


    U0_PutByte(U0_GetByte());

}



Posted by nexp

댓글을 달아 주세요

[Microchip]/dsPIC33E2014. 4. 5. 21:30

dsPIC33E - UART 테스트

dsPIC33E - UART 테스트





dsPIC33E UART 블록도




dsPIC33E UART 초기화 코드

UART도 약간의 레지스터 변화가 있어 코드수정이 필요하다.


void U0_Init(unsigned char baud)

{

U0_TXINIT();

U0_RXINIT();


U0_SetBaud(baud);


U1MODEbits.STSEL = 0; // 1 스톱 비트

U1MODEbits.PDSEL = 0; // No 패리티, 8비트  데이터 전송

U1MODEbits.ABAUD = 0; // Autobaud 중지

U1MODEbits.BRGH = 1;


U1STAbits.UTXISEL1 = 1; //인터럽트 사용 중지

U1STAbits.UTXISEL0 = 1; //인터럽트 사용 중지

U1STAbits.URXISEL  = 0; //1 문자 수신후, 인터럽트 발생


U1MODEbits.UARTEN   = 1; //UART1 모듈 동작 시작 설정

U1STAbits.UTXEN     = 1; //UART1 Tx 동작 설정


IFS0bits.U1TXIF = 0; //UART1 송신 인터럽트 플래그 클리어

IFS0bits.U1RXIF = 0; //UART1 수신 인터럽트 플래그 클리어


IEC0bits.U1TXIE = 0; //UART1 송신 인터럽트 중지

IEC0bits.U1RXIE = 0; //UART1 수신 인터럽트 중지


IEC4bits.U1EIE = 0; //UART1 에러 인터럽트 중지

}




dsPIC33E UART 송수신 함수

#define u0_WaitForReceive() while(!IFS0bits.U1RXIF);(IFS0bits.U1RXIF = 0)

#define u0_RxData() (U1RXREG)


#define u0_TxData(Data) (U1TXREG = Data)

#define u0_WaitForSend() while(!U1STAbits.TRMT)


#define u0_IsReceiveData() (IFS0bits.U1RXIF)



unsigned char U0_GetByte(void)

{

u0_WaitForReceive();

return u0_RxData();

}


void U0_PutByte(unsigned char Data)

{

u0_TxData(Data);

u0_WaitForSend();

}




Posted by nexp

댓글을 달아 주세요