[MSP430FR2311 EVM] UART 테스트

[MSP430]/MSP430_FRAM | 2017.03.30 00:38
Posted by nexp

[MSP430FR2311 EVM] UART 테스트







MSP430FR2311 UART 초기화 코드

MSP430 UART Baudrate 설정 생성코드 참고


    // Configure UART pins

     P1SEL0 |= BIT6 | BIT7;                    // set 2-UART pin as second function



       // Configure UART

     UCA0CTLW0 |= UCSWRST;                     // Put eUSCI in reset

     UCA0CTLW0 |= UCSSEL__SMCLK;


     // Baud Rate calculation

     UCA0BR0 = 8;                              // 1000000/115200 = 8.68

     UCA0MCTLW = 0xD600;                 // 1000000/115200 - INT(1000000/115200)=0.68

                                                     // UCBRSx value = 0xD6 (See UG)

     UCA0BR1 = 0;

     UCA0CTLW0 &= ~UCSWRST;          // Initialize eUSCI



MSP430 에서 UART 보레이트 설정시 항상 문제가 되던 부분은 오차율인데... MCTLW 레지스터를 설정하면  보상 가능하다.


ex) 115200 @ 1Mhz 

1000000/115200 - INT(1000000/115200)=0.68

0.68 => 0.6667 -> 0xD6 





MSP430FR2311 UART 송수신 코드

unsigned char U0_GetByte(void)

{

while(!(UCA0IFG & UCRXIFG));

return UCA0RXBUF;

}


void U0_PutByte(unsigned char Data)

{

    UCA0TXBUF = Data;

    while(!(UCA0IFG & UCTXIFG));

}




참고로 CCS 에는 시리얼 포트 터미널창이 있어 간단히 UART 테스트를 해 볼수 있다.




저작자 표시 비영리 변경 금지
신고

[PIC32MZ EVM] UART 테스트

[Microchip]/PIC32MZ | 2016.12.25 01:21
Posted by nexp

[PIC32MZ EVM] UART 테스트




PIC32MZ에서 UART를 사용하려면 MPLAB Harmony Configurator 를 실행해서 UART를 활성화 하고 설정해 주면 쉽게 사용가능하다.






[PIC32MZ EVM] 보드의 UART는 RD14->TXD, RD15-RXD에 할당되어 있다.

핀 다이어그램 에서 원하는 핀을 클릭해서 설정 할 수 있다.



그러면 아래와 같은 코드들을 자동으로 생성해 준다.

void SYS_Initialize ( void* data )

{

    /* Core Processor Initialization */

    SYS_CLK_Initialize( NULL );

    sysObj.sysDevcon = SYS_DEVCON_Initialize(SYS_DEVCON_INDEX_0, (SYS_MODULE_INIT*)&sysDevconInit);

    SYS_DEVCON_PerformanceConfig(SYS_CLK_SystemFrequencyGet());

    SYS_PORTS_Initialize();


    /* Initialize Drivers */

    sysObj.drvUsart0 = DRV_USART_Initialize(DRV_USART_INDEX_0, (SYS_MODULE_INIT *)&drvUsart0InitData);

    SYS_INT_VectorPrioritySet(INT_VECTOR_UART1_TX, INT_DISABLE_INTERRUPT);

    SYS_INT_VectorSubprioritySet(INT_VECTOR_UART1_TX, INT_SUBPRIORITY_LEVEL0);

    SYS_INT_VectorPrioritySet(INT_VECTOR_UART1_RX, INT_PRIORITY_LEVEL1);

    SYS_INT_VectorSubprioritySet(INT_VECTOR_UART1_RX, INT_SUBPRIORITY_LEVEL0);

    SYS_INT_VectorPrioritySet(INT_VECTOR_UART1_FAULT, INT_PRIORITY_LEVEL1);

    SYS_INT_VectorSubprioritySet(INT_VECTOR_UART1_FAULT, INT_SUBPRIORITY_LEVEL0);


    /* Initialize System Services */


    /*** Interrupt Service Initialization Code ***/

    SYS_INT_Initialize();

  

    /* Initialize Middleware */


    /* Enable Global Interrupts */

    SYS_INT_Enable();


    /* Initialize the Application */

    APP_Initialize();

}




void SYS_PORTS_Initialize(void)

{

    /* PORT D Initialization */

    PLIB_PORTS_OpenDrainEnable(PORTS_ID_0, PORT_CHANNEL_D, SYS_PORT_D_ODC);

    PLIB_PORTS_Write( PORTS_ID_0, PORT_CHANNEL_D,  SYS_PORT_D_LAT);

    PLIB_PORTS_DirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_D,  SYS_PORT_D_TRIS ^ 0xFFFF);

    PLIB_PORTS_ChangeNoticePerPortTurnOn(PORTS_ID_0, PORT_CHANNEL_D);

    PLIB_PORTS_ChannelModeSelect(PORTS_ID_0, PORT_CHANNEL_D, SYS_PORT_D_ANSEL ^ 0xFFFF, PORTS_PIN_MODE_DIGITAL);

    PLIB_PORTS_ChannelChangeNoticeEnable(PORTS_ID_0, PORT_CHANNEL_D, SYS_PORT_D_CNEN);

    PLIB_PORTS_ChannelChangeNoticePullUpEnable(PORTS_ID_0, PORT_CHANNEL_D, SYS_PORT_D_CNPU);

    PLIB_PORTS_ChannelChangeNoticePullDownEnable(PORTS_ID_0, PORT_CHANNEL_D, SYS_PORT_D_CNPD);

    

    /* PORT H Initialization */

    PLIB_PORTS_OpenDrainEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_ODC);

    PLIB_PORTS_Write( PORTS_ID_0, PORT_CHANNEL_H,  SYS_PORT_H_LAT);

    PLIB_PORTS_DirectionOutputSet( PORTS_ID_0, PORT_CHANNEL_H,  SYS_PORT_H_TRIS ^ 0xFFFF);

    PLIB_PORTS_ChangeNoticePerPortTurnOn(PORTS_ID_0, PORT_CHANNEL_H);

    PLIB_PORTS_ChannelModeSelect(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_ANSEL ^ 0xFFFF, PORTS_PIN_MODE_DIGITAL);

    PLIB_PORTS_ChannelChangeNoticeEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_CNEN);

    PLIB_PORTS_ChannelChangeNoticePullUpEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_CNPU);

    PLIB_PORTS_ChannelChangeNoticePullDownEnable(PORTS_ID_0, PORT_CHANNEL_H, SYS_PORT_H_CNPD);



    /* PPS Input Remapping */

    PLIB_PORTS_RemapInput(PORTS_ID_0, INPUT_FUNC_U1RX, INPUT_PIN_RPD14 );


    /* PPS Output Remapping */

    PLIB_PORTS_RemapOutput(PORTS_ID_0, OUTPUT_FUNC_U1TX, OUTPUT_PIN_RPD15 );

}






PIC32MZ UART 송수신 함수


void U0_PutByte (char chr)

{

   PLIB_USART_TransmitterByteSend (DRV_USART_INDEX_0, chr); 

   //U4TXREG = chr;


   while (! PLIB_USART_TransmitterIsEmpty (DRV_USART_INDEX_0));

  //while (! U4STAbits.TRMT); 

}



unsigned char U0_GetByte (char chr)

{

    while(!PLIB_USART_ReceiverDataIsAvailable(DRV_USART_INDEX_0));

    //while(U1STAbits.URXDA == 0);

    

    return PLIB_USART_ReceiverByteReceive(DRV_USART_INDEX_0);

}







XC32 컴파일러에서 printf 함수를 사용하고 싶다면 _mon_putc() 함수를 재정의 해 주면 사용할 수 있다.


void _mon_putc(char c)

{

     U0_PutByte(c);






저작자 표시 비영리 변경 금지
신고
TAG PIC32MZ, UART

MSP432 EVM - UART 테스트

[MSP430]/MSP432 | 2016.05.07 20:00
Posted by nexp

MSP432 EVM - UART 테스트





MSP43는 총 4개의 UART를 가지고 있다.

MSP432 EVM의 UART는 EUSCI_A0_BASE의 P1.2->RXD, P1.3->TXD 에 할당이 되어 있다.



MSP432의 보레이트 설정은 MSP430 보레이트 계산기를 이용하면 동일하게 설정 가능하다.

http://software-dl.ti.com/msp430/msp430_public_sw/mcu/msp430/MSP430BaudRateConverter/



MSP432 UART 초기화 설정 코드


const eUSCI_UART_Config uartConfig =

{

        EUSCI_A_UART_CLOCKSOURCE_SMCLK,          // SMCLK Clock Source

        13,                                      // BRDIV = 13

        0,                                       // UCxBRF = 0

        37,                                      // UCxBRS = 37

        EUSCI_A_UART_NO_PARITY,                  // No Parity

        EUSCI_A_UART_MSB_FIRST,                  // MSB First

        EUSCI_A_UART_ONE_STOP_BIT,               // One stop bit

        EUSCI_A_UART_MODE,                       // UART mode

        EUSCI_A_UART_OVERSAMPLING_BAUDRATE_GENERATION  // Oversampling

};



    /* Selecting P1.2 and P1.3 in UART mode */

    MAP_GPIO_setAsPeripheralModuleFunctionInputPin(GPIO_PIN2 | GPIO_PIN3, GPIO_PRIMARY_MODULE_FUNCTION);


    /* Setting DCO to 24MHz (upping Vcore) */

    FlashCtl_setWaitState(FLASH_BANK0, 2);

    FlashCtl_setWaitState(FLASH_BANK1, 2);

    MAP_PCM_setCoreVoltageLevel(PCM_VCORE1);

    CS_setDCOCenteredFrequency(CS_DCO_FREQUENCY_24);


    /* Configuring UART Module */

    MAP_UART_initModule(EUSCI_A0_BASE, &uartConfig);


    /* Enable UART module */

    MAP_UART_enableModule(EUSCI_A0_BASE);





MSP432 UART 송수신 함수 코드 

unsigned char U0_GetByte(void)

{

    unsigned char  temp = 0;

    temp = MAP_UART_receiveData(EUSCI_A0_BASE);


    return temp;

}


void U0_PutByte(unsigned char Data)

{

    MAP_UART_transmitData(EUSCI_A0_BASE, Data);

}




저작자 표시 비영리 변경 금지
신고

[SAMD21 EVM] - UART 테스트

[ATMEL]/SAMD21 | 2016.02.14 02:15
Posted by nexp

[SAMD21 EVM] - UART 테스트





SAM D 시리즈의 특징으로 멀티 SERCOM모듈을 들수 있다. SERCOM 은 I2C, SPI or USART를 쉽게 할당해서 유연하게 사용 할 수 있는 장점이 있다. 특히 IO핀을 다양한 형태로 할당 할 수 있으므로 PCB설계에 있어 자유롭게 제작 가능하다. 





SAMD21 UART 초기화 설정 코드

SAMD21 EVM의 UART는 SERCOM2의 PA13(PAD1)->RXD, PA14(PAD2)->TXD 에 할당이 되어 있으므로 아래와 같이 핀맵 설정할 수 있다.

struct usart_config usart_conf;


usart_get_config_defaults(&usart_conf);

usart_conf.mux_setting = USART_RX_1_TX_2_XCK_3;

usart_conf.pinmux_pad0 = PINMUX_UNUSED;

usart_conf.pinmux_pad1 = PINMUX_PA13C_SERCOM2_PAD1; //RXD

usart_conf.pinmux_pad2 = PINMUX_PA14C_SERCOM2_PAD2; //TXD

usart_conf.pinmux_pad3 = PINMUX_UNUSED;

usart_conf.baudrate    = baudrate;


       stdio_serial_init(&_UART0, SERCOM2, &usart_conf);

usart_enable(&_UART0); 




SAMD21 UART 송수신 함수 코드 

unsigned char U0_GetByte(void)

{

    uint16_t  temp = 0;

    while(STATUS_OK != usart_read_wait(&_UART0, &temp));


    return temp;

}


void U0_PutByte(unsigned char Data)

{

    while(STATUS_OK !=usart_write_wait(&_UART0, Data));

}




SAMD21 UART 테스트 소스코드

int main(void)

{

_SystemInit();


//config_led();

    Led1Init();

    Led2Init();

    Led1On();

    Led2On();

    

    U0_Init(BAUD_115200);

    DebugPrint("SAMD21 UART Test\r\n");


while (true)

    {

        Led1Toggle(); 

        

        U0_PutByte(U0_GetByte());

}

}






SAMD21 UART 하드웨어 설계시 주의 사항


SAMD 시리즈 데이터 시트를 보면 시리얼 포트 설정은 SERCOM_PAD로해서 소프트웨어로 쉽게 할당 가능한것 처럼 되어 있다.




하지만 아래와 같이 실제로 각 포트의 PAD에 할당 가능한 기능이 제한적이다. PAD1의 경우 TXD 할당이 안된다. PAD1의 핀을 사용하려면 주의가 필요하다. 장점만 내세우고 있지만 제약사항이 있어 이런점이 아쉬운 점이다. GPIO 할당에 있어 SWITCH MAXRIX 를 지원하는 LPC800 시리즈와 비교해 보면 상당히 아쉬운점이 있는것 같다.



SAMD21 EVM 보드의 UART는 PA13(PAD1)->TXD, PA14(PAD2)->RXD 로 디자인 했지만 PAD1에 TXD 할당이 되지 않아 두 핀을 바꿔서 사용하고 있다.



참고로 SAMD21 부트로더 기본 시리얼 포트는 아래와 같다. 다음 디자인에는 고려 해봐야 할것 같다.

PA23 (115200, 8, N, 1) SERCOM3 PAD1 (UART RXD)


PA22 (115200, 8, N, 1) SERCOM3 PAD0 (UART TXD)


저작자 표시 비영리 변경 금지
신고

STM32F4 UART interrupt 테스트

[ST_MICRO]/STM32F4 | 2014.12.15 18:17
Posted by nexp

STM32F4 UART interrupt 테스트



void U0_SetInt(void)

{

    /* NVIC for USART1 */

    HAL_NVIC_SetPriority(USART1_IRQn, 0, 1);

    HAL_NVIC_EnableIRQ(USART1_IRQn);

    

      /* Enable the UART Data Register not empty Interrupt */

    __HAL_UART_ENABLE_IT(&UartHandle, UART_IT_RXNE);

}




void USART1_IRQHandler(void)

{

    U0_PutByte(U0_GetByte());

}


저작자 표시 비영리 변경 금지
신고

TM4C123 - UART UART 테스트

[TI]/TM4C | 2014.07.20 23:00
Posted by nexp

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

}









저작자 표시 비영리 변경 금지
신고

M052LBN EVM - UART테스트

Cortex-M/NUVOTON | 2014.07.06 23:00
Posted by nexp

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 기능 







저작자 표시 비영리 변경 금지
신고

ADuM360 UART 테스트

[AnalogDevice]/ADucM360 | 2014.06.14 17:53
Posted by nexp

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

    }

}



저작자 표시 비영리 변경 금지
신고

STM8S - UART 테스트

[ST_MICRO]/STM8 | 2014.05.04 19:00
Posted by nexp

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

}



저작자 표시 비영리 변경 금지
신고

dsPIC33E - UART 테스트

[Microchip]/dsPIC33E | 2014.04.05 21:30
Posted by nexp

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

}




저작자 표시 비영리 변경 금지
신고

블로그 이미지

nexp

카테고리

분류 전체보기 (1550)
[MyProject] (48)
[TI] (75)
[NXP] (51)
[ST_MICRO] (128)
[FreeScale] (31)
[MSP430] (139)
[Microchip] (131)
Cortex-M (36)
[ATMEL] (29)
[AnalogDevice] (22)
[Embedded] (2)
ARM9 (24)
[AVR] (80)
[DSP] (111)
[8051] (21)
[MCU] (50)
[INTERFACE] (210)
[AppBoard] (23)
[ROBOT] (25)
[MODULE] (127)
[SENSOR] (41)
[DATA] (21)
[FPGA] (29)
[EVB] (1)
[Proramming] (38)
[MyLog] (6)
[IDEA] (0)
[Utility] (19)
[Book] (24)
취미생활 (4)
[Link] (2)

티스토리 툴바