Refix c64x: uart API and null_uart
[keystone-rtos/ibl.git] / src / hw / uart / c66x_uart / evmc66x_uart.c
index 639e130db3c32d4d31ce347365a48ba95394de93..1f0472efb86f39772c961730495501d9a89aeed5 100755 (executable)
 
 static void uart_delay_cycles(uint32_t cycles)
 {
-       while (cycles--) {
-               asm ("NOP");
-       }
+    while (cycles--) {
+        asm ("NOP");
+    }
 }
 
+/******************************************************************************
+ *
+ * Function:    uart_init
+ *
+ * Description: This function initializes UART peripheral for C66x
+ *
+ * Parameters: str    - string to print
+ *             length - length of the string to print
+ *
+ * Return Value: none
+ ******************************************************************************/
 void uart_init(void)
 {
-       uint16_t uiBaudRate;
-    uint8_t uiDLLVal = 0;
-    uint8_t uiDLHVal = 0;
+    uint8_t DLL_val = 0;
+    uint8_t DLH_val = 0;
 
-    // Allows access to the divisor latches of the baud generator during a
-    // read or write operation (DLL and DLH)
+    /* Setting baud rate to 115200 */
+    DLL_val = (uint8_t )(0x00FF & BAUD_RATE_115200);
+    DLH_val = (uint8_t )(0x00FF & (BAUD_RATE_115200  >> 8));
 
-    hUartRegs->LCR = 0x80;
+    /* Allows access to the divisor latches of the baud generator during a
+       read or write operation (DLL and DLH) */
 
-    // Set the baudrate,for accessing LCR[7] should be enable
-    hUartRegs->DLL  = DLL_VAL;
-    hUartRegs->DLH  = DLM_VAL;
+    uart_registers->LCR = 0x80;
 
-    // Allows access to the receiver buffer register (RBR),
-    // the transmitter holding register (THR), and the
-    // interrupt enable register (IER) selected.
-    hUartRegs->LCR = 0x18;
+    /* Set the baudrate,for accessing LCR[7] should be enable */
+    uart_registers->DLL  = DLL_val;
+    uart_registers->DLH  = DLH_val;
 
-    // Disable THR, RHR, Receiver line status interrupts
-    hUartRegs->IER = 0;
+    /* Allows access to the receiver buffer register (RBR),
+       the transmitter holding register (THR), and the
+       interrupt enable register (IER) selected. */
+    uart_registers->LCR = 0x18;
+
+    /* Disable THR, RHR, Receiver line status interrupts */
+    uart_registers->IER = 0;
 
     /* If autoflow control is desired,
-    * write appropriate values to the modem
-    * control register (MCR). Note that all UARTs
-    * do not support autoflow control, see
-    * the device-specific data manual for supported features.
-    *
-    * MCR
-    * ====================================================
-    * Bit  Field   Value   Description
-    * 5    AFE     0       Autoflow control is disabled
-    * 4    LOOP    0       Loop back mode is disabled.
-    * 1    RTS     0       RTS control (UARTn_RTS is disabled,
-    *                      UARTn_CTS is only enabled.)
-    * =====================================================
-    *
-    *
-    */
-
-    hUartRegs->MCR = 0;
+     * write appropriate values to the modem
+     * control register (MCR). Note that all UARTs
+     * do not support autoflow control, see
+     * the device-specific data manual for supported features.
+     *
+     * MCR
+     * ====================================================
+     * Bit  Field   Value   Description
+     * 5    AFE     0       Autoflow control is disabled
+     * 4    LOOP    0       Loop back mode is disabled.
+     * 1    RTS     0       RTS control (UARTn_RTS is disabled,
+     *                      UARTn_CTS is only enabled.)
+     * =====================================================
+     *
+     *
+     */
+
+    uart_registers->MCR = 0;
 
     /* Choose the desired response to
-    * emulation suspend events by configuring
-    * the FREE bit and enable the UART by setting
-    * the UTRST and URRST bits in the power and
-    * emulation management register (PWREMU_MGMT).
-    *
-    *
-    * PWREMU_MGMT
-    * =================================================
-    * Bit  Field   Value   Description
-    * 14   UTRST   1       Transmitter is enabled
-    * 13   URRST   1       Receiver is enabled
-    * 0    FREE    1       Free-running mode is enabled
-    * ===================================================
-    *
-    */
-    hUartRegs->PWREMU_MGMT = 0x6001;
+     * emulation suspend events by configuring
+     * the FREE bit and enable the UART by setting
+     * the UTRST and URRST bits in the power and
+     * emulation management register (PWREMU_MGMT).
+     *
+     *
+     * PWREMU_MGMT
+     * =================================================
+     * Bit  Field   Value   Description
+     * 14   UTRST   1       Transmitter is enabled
+     * 13   URRST   1       Receiver is enabled
+     * 0    FREE    1       Free-running mode is enabled
+     * ===================================================
+     *
+     */
+    uart_registers->PWREMU_MGMT = 0x6001;
 
     /* Cleanup previous data (rx trigger is also set to 0)*/
-    /* Set FCR = 0x07;        */
-    hUartRegs->FCR = 0xC1;
-
-    /* Setting baud rate to 115200 */
-    uiBaudRate = 88;
+    uart_registers->FCR = 0xC1;
 
     /* Setting the baud rate */
-    hUartRegs->LCR = 0x80;
-    uiDLLVal = (uint8_t )(0x00FF & uiBaudRate);
-    uiDLHVal = (uint8_t )(0x00FF & (uiBaudRate  >> 8));
-
-    // Set the baudrate,for accessing LCR[7] should be enable
-    hUartRegs->DLL  = uiDLLVal;
-    hUartRegs->DLH  = uiDLHVal;
-    hUartRegs->LCR  = 0x03;
-
-    hUartRegs->LCR = 0x80;
-    uiDLLVal = (uint8_t )(0x00FF & uiBaudRate);
-    uiDLHVal = (uint8_t )(0x00FF & (uiBaudRate  >> 8));
-    // Set the baudrate,for accessing LCR[7] should be enable
-    hUartRegs->DLL  = uiDLLVal;
-    hUartRegs->DLH  = uiDLHVal;
-    hUartRegs->LCR = 0x03;
+    uart_registers->LCR = 0x80;
+
+    /* Set the baudrate,for accessing LCR[7] should be enable */
+    uart_registers->DLL  = DLL_val;
+    uart_registers->DLH  = DLH_val;
+    uart_registers->LCR  = 0x03;
 
     return;
 }
 
 /******************************************************************************
  *
- * Function:   uart_write_byte
+ * Function:    uart_write_byte
  *
- * Description:        This function writes a byte of data to UART device
+ * Description: This function writes a byte of data to UART device
  *
- * Parameters: uint8_t uchAddress - Address of 8-bit register
- *                             uint8_t uchByte -  8-bit data to write to THR
+ * Parameters:  byte    -  8-bit data to write to THR
  *
  * Return Value: none
  ******************************************************************************/
-static void uart_write_byte(uint8_t uchByte)
+static inline void uart_write_byte(uint8_t byte)
 {
-    while (!(hUartRegs->LSR & UART_LSR_THRE_MASK)) {
-       uart_delay_cycles(10000);
+    while (!(uart_registers->LSR & UART_LSR_THRE_MASK)) {
+        uart_delay_cycles(10000);
     }
-    hUartRegs->THR = (UART_THR_DATA_MASK & uchByte);
+    uart_registers->THR = (UART_THR_DATA_MASK & byte);
     return;
 }
 
-void uart_write_string(uint8_t * str, uint32_t length)
+/******************************************************************************
+ *
+ * Function:    uart_write_string
+ *
+ * Description: This function writes a string of data to UART device
+ *
+ * Parameters: str    - string to print
+ *             length - length of the string to print, maximum is 80
+ *
+ * Return Value: none
+ ******************************************************************************/
+void uart_write_string(char * str, uint32_t length)
 {
-       uint32_t i;
-       uart_write_byte((uint8_t)0x0D);
-       uart_write_byte((uint8_t)0x0A);
-       for(i = 0; i < length; i++)
-       {
-               uart_write_byte(str[i]);
-       }
+    uint32_t i;
+    if (length==0)
+    {
+       /*Maximum length is 80 */
+       length=80;
+    }
+    for(i = 0; i < length; i++) {
+        if(str[i]=='\0') break;
+        uart_write_byte((uint8_t)str[i]);
+    }
+    uart_write_byte((uint8_t)0x0D);
+    uart_write_byte((uint8_t)0x0A);
 }