mbed library sources. Supersedes mbed-src.

Fork of mbed by teralytic

Revision:
0:9b334a45a8ff
Child:
144:ef7eb2e8f9f7
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/targets/hal/TARGET_WIZNET/TARGET_W7500x/W7500x_Peripheral_Library/W7500x_uart.c	Thu Oct 01 15:25:22 2015 +0300
@@ -0,0 +1,387 @@
+/**
+  ******************************************************************************
+  * @file    W7500x_uart.c
+  * @author  
+  * @version 
+  * @date    
+  * @brief   
+  ******************************************************************************
+  * @attention
+  *
+ *
+  ******************************************************************************
+  */
+
+/* Includes ------------------------------------------------------------------*/
+#include "W7500x.h"
+#include "W7500x_uart.h"
+
+void UART_StructInit(UART_InitTypeDef* UART_InitStruct)
+{
+  /* UART_InitStruct members default value */
+  UART_InitStruct->UART_BaudRate = 115200;
+  UART_InitStruct->UART_WordLength = UART_WordLength_8b ;
+  UART_InitStruct->UART_StopBits = UART_StopBits_1;
+  UART_InitStruct->UART_Parity = UART_Parity_No ;
+  UART_InitStruct->UART_Mode = UART_Mode_Rx | UART_Mode_Tx;
+  UART_InitStruct->UART_HardwareFlowControl = UART_HardwareFlowControl_None ;  
+}
+
+void UART_DeInit(UART_TypeDef *UARTx)
+{
+    
+}
+
+uint32_t UART_Init(UART_TypeDef *UARTx, UART_InitTypeDef* UART_InitStruct)
+{
+	float baud_divisor;
+    uint32_t tmpreg=0x00, uartclock=0x00;
+    uint32_t integer_baud = 0x00, fractional_baud = 0x00;
+
+	assert_param(IS_UART_01_PERIPH(UARTx));
+	assert_param(IS_UART_WORD_LENGTH(UART_InitStruct->UART_WordLength));
+	assert_param(IS_UART_PARITY(UART_InitStruct->UART_Parity));
+	assert_param(IS_UART_STOPBITS(UART_InitStruct->UART_StopBits));
+	assert_param(IS_UART_HARDWARE_FLOW_CONTROL(UART_InitStruct->UART_HardwareFlowControl));
+	assert_param(IS_UART_MODE(UART_InitStruct->UART_Mode));
+
+
+    UARTx->CR &= ~(UART_CR_UARTEN); 
+
+    // Set baudrate
+    CRG->UARTCLK_SSR = CRG_UARTCLK_SSR_RCLK;  // Set UART Clock using internal Oscilator ( 8MHz )
+    uartclock =  (8000000UL) /  (1 << CRG->UARTCLK_PVSR);
+
+    baud_divisor = ((float)uartclock / (16 * UART_InitStruct->UART_BaudRate));
+    integer_baud = (uint32_t)baud_divisor;
+    fractional_baud = (uint32_t)((baud_divisor - integer_baud) * 64 + 0.5);
+
+    UARTx->IBRD = integer_baud;
+    UARTx->FBRD = fractional_baud;
+
+
+    tmpreg = UARTx->LCR_H;
+    tmpreg &= ~(0x00EE);
+    tmpreg |= (UART_InitStruct->UART_WordLength | UART_InitStruct->UART_StopBits | UART_InitStruct->UART_Parity);
+    UARTx->LCR_H |= tmpreg;
+
+    tmpreg = UARTx->CR;
+    tmpreg &= ~(UART_CR_CTSEn | UART_CR_RTSEn | UART_CR_RXE | UART_CR_TXE | UART_CR_UARTEN);
+    tmpreg |= (UART_InitStruct->UART_Mode | UART_InitStruct->UART_HardwareFlowControl);
+    UARTx->CR |= tmpreg;
+
+    UARTx->CR |= UART_CR_UARTEN;
+
+    return 0;
+}
+
+
+void UART_SendData(UART_TypeDef* UARTx, uint16_t Data)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+
+    UARTx->DR = Data;
+}
+
+
+uint16_t UART_ReceiveData(UART_TypeDef* UARTx)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+
+    return (uint16_t)(UARTx->DR);
+}
+
+
+void UART_SendBreak(UART_TypeDef* UARTx)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+
+    UARTx->LCR_H |= UART_LCR_H_BRK; 
+}
+
+
+FlagStatus UART_GetRecvStatus(UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS)
+{
+    FlagStatus bitstatus = RESET;
+
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_RECV_STATUS(UART_RECV_STATUS));
+
+    if( (UARTx->STATUS.RSR & UART_RECV_STATUS) != (uint16_t)RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+
+void UART_ClearRecvStatus(UART_TypeDef* UARTx, uint16_t UART_RECV_STATUS)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_RECV_STATUS(UART_RECV_STATUS));
+
+    UARTx->STATUS.ECR = (uint16_t)UART_RECV_STATUS;
+}
+
+
+FlagStatus UART_GetFlagStatus(UART_TypeDef* UARTx, uint16_t UART_FLAG)
+{
+    FlagStatus bitstatus = RESET;
+
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_FLAG(UART_FLAG));
+
+    if ((UARTx->FR & UART_FLAG) != (uint16_t)RESET)
+    {
+        bitstatus = SET;    
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+ 
+    return bitstatus;
+    
+}
+
+/*
+void UART_ClearFlag(UART_TypeDef* UARTx, uint16_t UART_FLAG)
+{
+
+}
+*/
+
+void UART_ITConfig(UART_TypeDef* UARTx, uint16_t UART_IT, FunctionalState NewState)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_IT_FLAG(UART_IT));
+
+    if ( NewState != DISABLE )
+    {
+        UARTx->IMSC |= UART_IT;
+    }
+    else
+    {
+        UARTx->ICR |= UART_IT;
+    }
+}
+
+
+ITStatus UART_GetITStatus(UART_TypeDef* UARTx, uint16_t UART_IT)
+{
+    ITStatus bitstatus = RESET;
+
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_IT_FLAG(UART_IT));
+
+    if ((UARTx->MIS & UART_IT) != (uint16_t)RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+void UART_ClearITPendingBit(UART_TypeDef* UARTx, uint16_t UART_IT)
+{
+    assert_param(IS_UART_01_PERIPH(UARTx));
+    assert_param(IS_UART_IT_FLAG(UART_IT));
+
+    UARTx->ICR |= UART_IT;
+}
+
+
+void S_UART_DeInit()
+{
+
+}
+
+uint32_t S_UART_Init(uint32_t baud)
+{
+    uint32_t tmpreg=0x00;
+
+    S_UART_SetBaud(baud);
+
+    tmpreg = UART2->CTRL;
+    tmpreg &= ~(S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
+    tmpreg |= (S_UART_CTRL_RX_EN | S_UART_CTRL_TX_EN);
+    UART2->CTRL = tmpreg;
+
+    return 0;
+}
+
+void S_UART_SetBaud(uint32_t baud)
+{
+    uint32_t uartclock = 0x00, integer_baud = 0x00;
+
+    if(CRG->FCLK_SSR == CRG_FCLK_SSR_RCLK)
+    {
+        uartclock = INTERN_XTAL;
+    }
+    else if(CRG->FCLK_SSR == CRG_FCLK_SSR_OCLK)
+    {
+        uartclock = EXTERN_XTAL;
+    }
+    else
+    {
+        uartclock = GetSystemClock();
+    }
+
+    integer_baud = (uint32_t)(uartclock / baud);
+    UART2->BAUDDIV = integer_baud;
+}
+
+void S_UART_SendData(uint16_t Data)
+{
+    while(UART2->STATE & S_UART_STATE_TX_BUF_FULL);
+    UART2->DATA = Data;
+}
+
+uint16_t S_UART_ReceiveData()
+{
+    return (uint16_t)(UART2->DATA);
+}
+
+
+FlagStatus S_UART_GetFlagStatus(uint16_t S_UART_STATE)
+{
+    FlagStatus bitstatus = RESET;
+
+    assert_param(IS_S_UART_STATE(S_UART_STATE));
+
+    if ((UART2->STATE & S_UART_STATE) != (FlagStatus)RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+void S_UART_SetCTRL(uint16_t S_UART_CTRL, FunctionalState NewState)
+{
+    if ( NewState != DISABLE )
+    {
+        UART2->CTRL |= S_UART_CTRL;
+    }
+    else
+    {
+        UART2->CTRL &= ~(S_UART_CTRL);
+    }
+}
+
+
+void S_UART_ITConfig(uint16_t S_UART_CTRL, FunctionalState NewState)
+{
+    assert_param(IS_S_UART_CTRL_FLAG(S_UART_CTRL));
+
+    if ( NewState != DISABLE )
+    {
+        UART2->CTRL |= S_UART_CTRL;
+    }
+    else
+    {
+        UART2->CTRL &= ~(S_UART_CTRL);
+    }
+}
+
+ITStatus S_UART_GetITStatus(uint16_t S_UART_INTSTATUS)
+{
+    ITStatus bitstatus = RESET;
+
+    assert_param(IS_S_UART_INTSATUS(S_UART_INTSTATUS));
+
+    if ((UART2->INT.STATUS & (S_UART_INTSTATUS)) != (uint16_t) RESET)
+    {
+        bitstatus = SET;
+    }
+    else
+    {
+        bitstatus = RESET;
+    }
+
+    return bitstatus;
+}
+
+void S_UART_ClearITPendingBit(uint16_t S_UART_INTSTATUS)
+{
+    assert_param(IS_S_UART_INTSATUS(S_UART_INTSTATUS));
+
+    UART2->INT.CLEAR |= (S_UART_INTSTATUS);
+}
+
+
+/**************************************************/
+// It will be moved to application board's driver */
+/**************************************************/
+uint8_t UartPutc(UART_TypeDef* UARTx, uint8_t ch)
+{
+    UART_SendData(UARTx,ch);
+
+    while(UARTx->FR & UART_FR_BUSY);
+
+    return (ch);
+}
+
+void UartPuts(UART_TypeDef* UARTx, uint8_t *str)
+{
+    uint8_t ch;
+
+    do{
+        ch = *str;
+        if(ch != (uint8_t)0x0)
+        {
+            UartPutc(UARTx, ch);
+        }
+        *str++;
+    }while(ch != 0);
+}
+
+uint8_t UartGetc(UART_TypeDef* UARTx)
+{
+    while(UARTx->FR & UART_FR_RXFE);
+
+    return (UARTx->DR & 0xFF);
+}
+
+
+uint8_t S_UartPutc(uint8_t ch)
+{
+    S_UART_SendData(ch);
+
+    return (ch);
+}
+
+void S_UartPuts(uint8_t *str)
+{
+    uint8_t ch;
+
+    do{
+        ch = *str;
+        if(ch != (uint8_t)0x0)
+        {
+            S_UART_SendData(ch);
+        }
+        *str++;
+    }while(ch != 0);
+}
+
+uint8_t S_UartGetc()
+{
+    while( (UART2->STATE & S_UART_STATE_RX_BUF_FULL) == 0 ); 
+    return (uint8_t)S_UART_ReceiveData();
+}
+
+