yc11xx_uart.h 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. /*
  2. * Copyright 2016, yichip Semiconductor(shenzhen office)
  3. * All Rights Reserved.
  4. *
  5. * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Yichip Semiconductor;
  6. * the contents of this file may not be disclosed to third parties, copied
  7. * or duplicated in any form, in whole or in part, without the prior
  8. * written permission of Yichip Semiconductor.
  9. */
  10. /** @file
  11. *
  12. * uart support for application
  13. */
  14. #ifndef _UART_H_
  15. #define _UART_H_
  16. #include <stdio.h>
  17. #include <stdint.h>
  18. #include <stdbool.h>
  19. #include "yc11xx.h"
  20. #include "yc_drv_common.h"
  21. #include "ycdef.h"
  22. #define printf_log //print log
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26. #define UARTE_BAUDRATE_BAUDRATE_Baud4800 (0xa710) /*!< 4800 baud */
  27. #define UARTE_BAUDRATE_BAUDRATE_Baud9600 (0x9388) /*!< 9600 baud */
  28. #define UARTE_BAUDRATE_BAUDRATE_Baud14400 (0x8d05) /*!< 14400 baud */
  29. #define UARTE_BAUDRATE_BAUDRATE_Baud19200 (0x89c4) /*!< 19200 baud */
  30. //#define UARTE_BAUDRATE_BAUDRATE_Baud28800 (0x875C) /*!< 28800 baud */
  31. //#define UARTE_BAUDRATE_BAUDRATE_Baud31250 (0x8800) /*!< 31250 baud */
  32. #define UARTE_BAUDRATE_BAUDRATE_Baud38400 (0x84e2) /*!< 38400 baud */
  33. #define UARTE_BAUDRATE_BAUDRATE_Baud56000 (0x8359) /*!< 56000 baud */
  34. #define UARTE_BAUDRATE_BAUDRATE_Baud57600 (0x8341) /*!< 57600 baud */
  35. #define UARTE_BAUDRATE_BAUDRATE_Baud76800 (0x8271) /*!< 76800 baud */
  36. #define UARTE_BAUDRATE_BAUDRATE_Baud115200 (0x81A0) /*!< 115200 baud */
  37. #define UARTE_BAUDRATE_BAUDRATE_Baud230400 (0x80d0) /*!< 230400 baud */
  38. #define UARTE_BAUDRATE_BAUDRATE_Baud256000 (0x80bb) /*!< 250000 baud */
  39. #define UARTE_BAUDRATE_BAUDRATE_Baud460800 (0x8068) /*!< 460800 baud */
  40. #define UARTE_BAUDRATE_BAUDRATE_Baud921600 (0x8034) /*!< 921600 baud */
  41. #define UARTE_BAUDRATE_BAUDRATE_Baud1M (0x8030) /*!< 1Mega baud */
  42. #define IS_UARTE_BAUDRATE(BAUDRATE) ((BAUDRATE > 0) && (BAUDRATE<= UARTE_BAUDRATE_BAUDRATE_Baud4800))
  43. #define UARTN_BAUDRATE_BAUDRATE_Baud4800 (0x0710) /*!< 4800 baud */
  44. #define UARTN_BAUDRATE_BAUDRATE_Baud9600 (0x0388) /*!< 9600 baud */
  45. #define UARTN_BAUDRATE_BAUDRATE_Baud14400 (0x0d05) /*!< 14400 baud */
  46. #define UARTN_BAUDRATE_BAUDRATE_Baud19200 (0x09c4) /*!< 19200 baud */
  47. //#define UARTN_BAUDRATE_BAUDRATE_Baud28800 (0x075C) /*!< 28800 baud */
  48. //#define UARTN_BAUDRATE_BAUDRATE_Baud31250 (0x0800) /*!< 31250 baud */
  49. #define UARTN_BAUDRATE_BAUDRATE_Baud38400 (0x04e2) /*!< 38400 baud */
  50. #define UARTN_BAUDRATE_BAUDRATE_Baud56000 (0x0359) /*!< 56000 baud */
  51. #define UARTN_BAUDRATE_BAUDRATE_Baud57600 (0x0341) /*!< 57600 baud */
  52. #define UARTN_BAUDRATE_BAUDRATE_Baud76800 (0x0271) /*!< 76800 baud */
  53. #define UARTN_BAUDRATE_BAUDRATE_Baud115200 (0x01A0) /*!< 115200 baud */
  54. #define UARTN_BAUDRATE_BAUDRATE_Baud230400 (0x00d0) /*!< 230400 baud */
  55. #define UARTN_BAUDRATE_BAUDRATE_Baud256000 (0x00bb) /*!< 250000 baud */
  56. #define UARTN_BAUDRATE_BAUDRATE_Baud460800 (0x0068) /*!< 460800 baud */
  57. #define UARTN_BAUDRATE_BAUDRATE_Baud921600 (0x0034) /*!< 921600 baud */
  58. #define UARTN_BAUDRATE_BAUDRATE_Baud1M (0x1000) /*!< 1Mega baud */
  59. #define IS_UARTN_BAUDRATE(BAUDRATE) ((BAUDRATE > 0) && (BAUDRATE<= UARTN_BAUDRATE_BAUDRATE_Baud4800))
  60. /** @
  61. * @defgroup USART_Word_Length
  62. */
  63. #define USART_WordLength_8b (0<<2)
  64. #define USART_WordLength_9b (1<<2)
  65. #define IS_USART_WORD_LENGTH(LENGTH) (((LENGTH) == USART_WordLength_8b) || \
  66. ((LENGTH) == USART_WordLength_9b))
  67. /** @defgroup USART_Stop_Bits
  68. * @{
  69. */
  70. #define USART_StopBits_1 (0<<3)
  71. #define USART_StopBits_2 (1<<3)
  72. #define IS_USART_STOPBITS(STOPBITS) (((STOPBITS) == USART_StopBits_1) || \
  73. ((STOPBITS) == USART_StopBits_2) )
  74. /**
  75. * @}
  76. */
  77. /** @defgroup USART_Parity
  78. * @{
  79. */
  80. #define USART_Parity_Even (0<<1)
  81. #define USART_Parity_Odd (1 << 1)
  82. #define IS_USART_PARITY(PARITY) ( ((PARITY) == USART_Parity_Even) || \
  83. ((PARITY) == USART_Parity_Odd))
  84. /**
  85. * @}
  86. */
  87. /** @defgroup USART_Mode
  88. * @{
  89. */
  90. #define USART_Mode_Single_Line (1<<6)
  91. #define USART_Mode_duplex (0<<6)
  92. #define IS_USART_MODE(MODE) (((MODE) == USART_Mode_Single_Line) ||\
  93. ((MODE) == USART_Mode_duplex))
  94. /**
  95. * @}
  96. */
  97. /** @defgroup USART_Hardware_Flow_Control
  98. * @{
  99. */
  100. #define USART_HardwareFlowControl_None (0<<4)
  101. #define USART_HardwareFlowControl_ENABLE (1<<4)
  102. #define IS_USART_HARDWARE_FLOW_CONTROL(CONTROL)\
  103. (((CONTROL) == USART_HardwareFlowControl_None) || \
  104. ((CONTROL) == USART_HardwareFlowControl_ENABLE))
  105. /**
  106. * @}
  107. */
  108. #define uart_DMA_buf_len 128
  109. /** @defgroup USART_TXLen
  110. * @{
  111. */
  112. #define IS_USART_TXLen(TxLen) ((TxLen > 0) && (TxLen <= uart_DMA_buf_len))
  113. /**
  114. * @}
  115. */
  116. /** @defgroup USART_RXLen
  117. * @{
  118. */
  119. #define IS_USART_RXLen(RxLen) ((RxLen > 0) && (RxLen <= uart_DMA_buf_len))
  120. /**
  121. * @}
  122. */
  123. /**
  124. * @brief USART channel define
  125. */
  126. typedef enum
  127. {
  128. UARTA = 0,
  129. UARTB,
  130. }USART_TypeDef;
  131. #define IS_USARTAB(USARTx) (USARTx == UARTA)||\
  132. (USARTx == UARTB)
  133. /**
  134. * @brief USART Init Structure definition
  135. */
  136. /** @defgroup USART_RXBuffer
  137. * @{
  138. */
  139. #define IS_USART_RXBuffer(RxBuffer) ((RxBuffer > 0x10000000) ||(RxBuffer < 0x10001fff) ) |\
  140. ((RxBuffer < 0x10004000) ||(RxBuffer > 0x10004fff))|\
  141. ((RxBuffer < 0x10010000) ||(RxBuffer > 0x10013fff))
  142. /**
  143. * @}
  144. */
  145. /** @defgroup USART_TXBuffer
  146. * @{
  147. */
  148. #define IS_USART_TXBuffer(TxBuffer) ((0x10000000 < TxBuffer ) ||(TxBuffer < 0x10001fff) ) |\
  149. ((TxBuffer < 0x10004000) ||(TxBuffer > 0x10004fff))|\
  150. ((TxBuffer < 0x10010000) ||(TxBuffer > 0x10013fff))
  151. /**
  152. * @}
  153. */
  154. typedef struct
  155. {
  156. uint32_t USART_BaudRate; /*!< This member configures the USART communication baud rate.
  157. The baud rate is computed using the following formula:
  158. - IntegerDivider = ((PCLKx) / (8 * (OVR8+1) * (USART_InitStruct->USART_BaudRate)))
  159. - FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 8 * (OVR8+1)) + 0.5
  160. Where OVR8 is the "oversampling by 8 mode" configuration bit in the CR1 register. */
  161. uint16_t USART_WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
  162. This parameter can be a value of @ref USART_Word_Length */
  163. uint16_t USART_StopBits; /*!< Specifies the number of stop bits transmitted.
  164. This parameter can be a value of @ref USART_Stop_Bits */
  165. uint16_t USART_Parity; /*!< Specifies the parity mode.
  166. This parameter can be a value of @ref USART_Parity
  167. @note When parity is enabled, the computed parity is inserted
  168. at the MSB position of the transmitted data (9th bit when
  169. the word length is set to 9 data bits; 8th bit when the
  170. word length is set to 8 data bits). */
  171. uint16_t USART_Mode; /*!< Specifies wether the Receive or Transmit mode is enabled or disabled.
  172. This parameter can be a value of @ref USART_Mode */
  173. uint16_t USART_HardwareFlowControl; /*!< Specifies wether the hardware flow control mode is enabled
  174. or disabled.
  175. This parameter can be a value of @ref USART_Hardware_Flow_Control */
  176. uint16_t USART_TXLen; /*!< Specifies Tx DMA buff len */
  177. uint16_t USART_RXLen; /*!< Specifies Rx DMA buff len */
  178. // uint32_t USART_TxBuffer; /*!Tx ring buffer start addr */
  179. // uint32_t USART_RxBuffer; /*!Rx ring buffer start addr */
  180. } USART_InitTypeDef;
  181. void USART_Init(USART_TypeDef USARTx, USART_InitTypeDef* USART_InitStruct);
  182. void USART_DeInit(USART_TypeDef USARTx);
  183. void USART_SendData(USART_TypeDef USARTx, uint8_t Data);
  184. uint16_t USART_ReceiveData(USART_TypeDef USARTx);
  185. uint16_t USART_GetRxCount(USART_TypeDef USARTx);
  186. uint16_t USART_ReadDatatoBuff(USART_TypeDef USARTx, uint8_t* RxBuff, uint16_t RxSize);
  187. uint16_t USART_SendDataFromBuff(USART_TypeDef USARTx, uint8_t* TxBuff, uint16_t TxLen);
  188. #ifdef __cplusplus
  189. }
  190. #endif
  191. #endif /* _UART_H_ */