ck_usart.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (C) 2017-2019 Alibaba Group Holding Limited
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2020-08-20 zx.chen header file for usart driver
  9. */
  10. #ifndef __CK_USART_H
  11. #define __CK_USART_H
  12. #include <stdio.h>
  13. #include "errno.h"
  14. #include "soc.h"
  15. #ifdef __cplusplus
  16. extern "C" {
  17. #endif
  18. #define BAUDRATE_DEFAULT 19200
  19. #define UART_BUSY_TIMEOUT 1000000
  20. #define UART_RECEIVE_TIMEOUT 1000
  21. #define UART_TRANSMIT_TIMEOUT 1000
  22. #define UART_MAX_FIFO 0x10
  23. /* UART register bit definitions */
  24. #define USR_UART_BUSY 0x01
  25. #define USR_UART_TFE 0x04
  26. #define USR_UART_RFNE 0x08
  27. #define LSR_DATA_READY 0x01
  28. #define LSR_THR_EMPTY 0x20
  29. #define IER_RDA_INT_ENABLE 0x01
  30. #define IER_THRE_INT_ENABLE 0x02
  31. #define IIR_RECV_LINE_ENABLE 0x04
  32. #define IIR_NO_ISQ_PEND 0x01
  33. #define LCR_SET_DLAB 0x80 /* enable r/w DLR to set the baud rate */
  34. #define LCR_PARITY_ENABLE 0x08 /* parity enabled */
  35. #define LCR_PARITY_EVEN 0x10 /* Even parity enabled */
  36. #define LCR_PARITY_ODD 0xef /* Odd parity enabled */
  37. #define LCR_WORD_SIZE_5 0xfc /* the data length is 5 bits */
  38. #define LCR_WORD_SIZE_6 0x01 /* the data length is 6 bits */
  39. #define LCR_WORD_SIZE_7 0x02 /* the data length is 7 bits */
  40. #define LCR_WORD_SIZE_8 0x03 /* the data length is 8 bits */
  41. #define LCR_STOP_BIT1 0xfb /* 1 stop bit */
  42. #define LCR_STOP_BIT2 0x04 /* 1.5 stop bit */
  43. #define DW_LSR_PFE 0x80
  44. #define DW_LSR_TEMT 0x40
  45. #define DW_LSR_THRE 0x40
  46. #define DW_LSR_BI 0x10
  47. #define DW_LSR_FE 0x08
  48. #define DW_LSR_PE 0x04
  49. #define DW_LSR_OE 0x02
  50. #define DW_LSR_DR 0x01
  51. #define DW_LSR_TRANS_EMPTY 0x20
  52. #define DW_IIR_THR_EMPTY 0x02 /* threshold empty */
  53. #define DW_IIR_RECV_DATA 0x04 /* received data available */
  54. #define DW_IIR_RECV_LINE 0x06 /* receiver line status */
  55. #define DW_IIR_CHAR_TIMEOUT 0x0c /* character timeout */
  56. typedef struct
  57. {
  58. union
  59. {
  60. __IM uint32_t RBR; /* Offset: 0x000 (R/ ) Receive buffer register */
  61. __OM uint32_t THR; /* Offset: 0x000 ( /W) Transmission hold register */
  62. __IOM uint32_t DLL; /* Offset: 0x000 (R/W) Clock frequency division low section register */
  63. };
  64. union
  65. {
  66. __IOM uint32_t DLH; /* Offset: 0x004 (R/W) Clock frequency division high section register */
  67. __IOM uint32_t IER; /* Offset: 0x004 (R/W) Interrupt enable register */
  68. };
  69. __IM uint32_t IIR; /* Offset: 0x008 (R/ ) Interrupt indicia register */
  70. __IOM uint32_t LCR; /* Offset: 0x00C (R/W) Transmission control register */
  71. uint32_t RESERVED0;
  72. __IM uint32_t LSR; /* Offset: 0x014 (R/ ) Transmission state register */
  73. __IM uint32_t MSR; /* Offset: 0x018 (R/ ) Modem state register */
  74. uint32_t RESERVED1[24];
  75. __IM uint32_t USR; /* Offset: 0x07c (R/ ) UART state register */
  76. } ck_usart_reg_t;
  77. #ifdef __cplusplus
  78. }
  79. #endif
  80. #endif /* __CK_USART_H */