/soc/stm/drivers/include/uart/am_stm32f103rbt6_usart.h

https://github.com/zlgopen/ametal · C Header · 173 lines · 48 code · 42 blank · 83 comment · 0 complexity · fb3085bc048e880fa400179e1e75dafa MD5 · raw file

  1. /*******************************************************************************
  2. * AMetal
  3. * ----------------------------
  4. * innovating embedded platform
  5. *
  6. * Copyright (c) 2001-2018 Guangzhou ZHIYUAN Electronics Co., Ltd.
  7. * All rights reserved.
  8. *
  9. * Contact information:
  10. * web site: http://www.zlg.cn/
  11. *******************************************************************************/
  12. /**
  13. * \file
  14. * \brief USARTÇý¶¯£¬·þÎñUSART±ê×¼½Ó¿Ú
  15. *
  16. * \internal
  17. * \par Modification History
  18. * - 1.00 17-04-10 ari, first implementation
  19. * \endinternal
  20. */
  21. #ifndef __AM_STM32F103RBT6_USART_H
  22. #define __AM_STM32F103RBT6_USART_H
  23. #ifdef __cplusplus
  24. extern "C" {
  25. #endif
  26. #include "am_uart.h"
  27. #include "hw/amhw_stm32f103rbt6_usart.h"
  28. /**
  29. * \addtogroup am_stm32f103rbt6_if_usart
  30. * \copydoc am_stm32f103rbt6_usart.h
  31. * @{
  32. */
  33. /**
  34. * \name ´íÎó±àÂëºÅ£¬´íÎ󻨵÷º¯ÊýµÄcode²ÎÊý£¬ÓÉÇý¶¯´«µÝ¸øÓû§£¬Ö¸Ã÷µ±Ç°µÄ´íÎóÀàÐÍ
  35. *
  36. * ´íÎ󻨵÷º¯ÊýµÄ²ÎÊýÔ­ÐÍ£º\n
  37. * int uart_err(void *p_arg, int code, void *p_data, int size);
  38. * p_argÊÇÓû§×¢²áµÄÓû§²ÎÊý¡£p_dataºÍsize²»Í¬µÄ´íÎóÀàÐͰüº¬µÄÐÅÏ¢ÓÐËù²»Í¬¡£
  39. * ¿ÉÒÔʹÓÃam_uart_callback_set() º¯ÊýÉèÖô®¿Ú´íÎ󻨵÷º¯Êý¡£
  40. * @{
  41. */
  42. /**
  43. * \brief Óû§Ö¸¶¨µÄÆäËüÖжϷ¢Éú,p_dataµÄÀàÐÍΪuint32_t£¬ÖµÎª´®¿ÚµÄÖжÏ״̬£¬·½
  44. * ±ãÓû§ÅжϾßÌåµÄÖжÏÔ´£¬sizeΪ1¡£
  45. */
  46. #define AM_STM32F103RBT6_USART_ERRCODE_USART_OTHER_INT 3
  47. /**
  48. * \brief ÓÃÓÚÈí¼þÁ÷¿ØµÄXON×Ö·û¶¨Ò壬ĬÈÏ0x11
  49. */
  50. #define AM_STM32F103RBT6_USART_XON 0x11
  51. /**
  52. * \brief ÓÃÓÚÈí¼þÁ÷¿ØµÄXOFF×Ö·û¶¨Ò壬ĬÈÏ0x13
  53. */
  54. #define AM_STM32F103RBT6_USART_XOFF 0x13
  55. /** @} */
  56. /**
  57. * \brief ´®¿ÚÉ豸ÐÅÏ¢½á¹¹Ì壬¸ÃÉ豸ÐÅÏ¢ÓÃÓÚ´®¿Ú³õʼ»¯
  58. */
  59. typedef struct am_stm32f103rbt6_usart_devinfo {
  60. uint32_t usart_reg_base; /**< \brief Ö¸ÏòUSART¼Ä´æÆ÷¿éµÄÖ¸Õë */
  61. uint8_t inum; /**< \brief ´®¿ÚÖжϺŠ*/
  62. int clk_num; /**< \brief ʱÖÓID */
  63. /**
  64. * \brief ´®¿ÚÅäÖñêÖ¾£¬AMHW_STM32F103RBT6_USART_DATA_*ºê»òAMHW_STM32F103RBT6_USART_PARITY_*ºê
  65. * »òAMHW_STM32F103RBT6_USART_STOP_*µÄ»òÖµ
  66. * (È磺AMHW_STM32F103RBT6_USART_DATA_8BIT|AMHW_STM32F103RBT6_USART_PARITY_NO
  67. * |AMHW_STM32F103RBT6_USART_STOP_1BIT)
  68. */
  69. uint8_t cfg_flags;
  70. uint32_t baud_rate; /**< \brief ³õʼ»¯²¨ÌØÂÊ */
  71. /**
  72. * \brief Ö¸¶¨Ê¹ÄܵįäËüÖжÏ,AMHW_STM32F103RBT6_USART_INT_*ºêÖµ»ò¶à¸öAMHW_STM32F103RBT6_USART_INT_*ºêµÄ
  73. * »òÖµ£¬³ýÁË(# AMHW_STM32F103RBT6237_USART_INT_TX_EMPTY_ENABLE),
  74. * (# AMHW_STM32F103RBT6_USART_INT_RX_VAL_ENABLE)ÕâÁ½¸öÖжϡ£
  75. */
  76. uint32_t other_int_enable;
  77. /** \brief RS485 ·½Ïò¿ØÖƺ¯Êý, AM_TRUE: ·¢ËÍģʽ£¬ AM_FALSE: ½ÓÊÕģʽ */
  78. void (*pfn_rs485_dir) (am_bool_t is_txmode);
  79. void (*pfn_plfm_init)(void); /**< \brief ƽ̨³õʼ»¯º¯Êý */
  80. void (*pfn_plfm_deinit)(void); /**< \brief ƽ̨ȥ³õʼ»¯º¯Êý */
  81. uint32_t gpio_ck[2]; /**< \brief ck Êä³öÒý½ÅÏà¹Ø¶¨Òå */
  82. uint32_t gpio_cts[2]; /**< \brief cts Êä³öÒý½ÅÏà¹Ø¶¨Òå */
  83. uint32_t gpio_rts[2]; /**< \brief rts ÊäÈëÒý½ÅÏà¹Ø¶¨Òå */
  84. } am_stm32f103rbt6_usart_devinfo_t;
  85. /**
  86. * \brief ´®¿ÚÉ豸½á¹¹Ì嶨Òå
  87. */
  88. typedef struct am_stm32f103rbt6_usart_dev {
  89. am_uart_serv_t uart_serv; /**< \brief ±ê×¼USART·þÎñ */
  90. /** \brief Ö¸ÏòÓû§×¢²áµÄtxchar_getº¯Êý */
  91. int (*pfn_txchar_get)(void *, char *);
  92. /** \brief Ö¸ÏòÓû§×¢²áµÄrxchar_putº¯Êý */
  93. int (*pfn_rxchar_put)(void *, char);
  94. /** \brief Ö¸ÏòÓû§×¢²áµÄ´íÎ󻨵÷º¯Êý */
  95. int (*pfn_err)(void *, int, void *, int);
  96. void *txget_arg; /**< \brief txchar_getº¯Êý²ÎÊý */
  97. void *rxput_arg; /**< \brief rxchar_putº¯Êý²ÎÊý */
  98. void *err_arg; /**< \brief ´íÎ󻨵÷º¯ÊýÓû§²ÎÊý */
  99. uint8_t flowctl_mode; /**< \brief Á÷¿ØÄ£Ê½£¨ÎÞ£¬Èí¼þ£¬Ó²¼þ£© */
  100. uint8_t flowctl_tx_stat; /**< \brief Á÷¿Ø·¢ËÍÆ÷״̬£¨ÓÃÓÚÈíÁ÷¿Ø£© */
  101. uint8_t channel_mode; /**< \brief ´®¿Úģʽ ÖжÏ/²éѯ */
  102. uint32_t baud_rate; /**< \brief ´®¿Ú²¨ÌØÂÊ */
  103. uint16_t options; /**< \brief Ó²¼þÉèÖÃÑ¡Ïî */
  104. uint32_t other_int_enable; /**< \brief Ö¸¶¨Ê¹ÄܵįäËüÖÐ¶Ï */
  105. am_bool_t rs485_en; /**< \brief ÊÇ·ñʹÄÜÁË 485 ģʽ */
  106. const am_stm32f103rbt6_usart_devinfo_t *p_devinfo; /**< \brief Ö¸ÏòÉ豸ÐÅÏ¢³£Á¿µÄÖ¸Õë */
  107. } am_stm32f103rbt6_usart_dev_t;
  108. /**
  109. * \brief ³õʼ»¯USART£¬·µ»ØUSART±ê×¼·þÎñ²Ù×÷¾ä±ú
  110. *
  111. * \param[in] p_dev : Ö¸Ïò´®¿ÚÉ豸µÄÖ¸Õë
  112. * \param[in] p_devinfo : Ö¸Ïò´®¿ÚÉ豸ÐÅÏ¢³£Á¿µÄÖ¸Õë
  113. *
  114. * \return USART±ê×¼·þÎñ²Ù×÷¾ä±ú£¬ÖµÎªNULLʱ±íÃ÷³õʼ»¯Ê§°Ü
  115. */
  116. am_uart_handle_t am_stm32f103rbt6_usart_init(am_stm32f103rbt6_usart_dev_t *p_dev,
  117. const am_stm32f103rbt6_usart_devinfo_t *p_devinfo);
  118. /**
  119. * \brief ´®¿ÚÈ¥³õʼ»¯
  120. *
  121. * \param[in] p_dev : Ö¸Ïò´®¿ÚÉ豸µÄÖ¸Õë
  122. */
  123. void am_stm32f103rbt6_usart_deinit (am_stm32f103rbt6_usart_dev_t *p_dev);
  124. /**
  125. * @}
  126. */
  127. #ifdef __cplusplus
  128. }
  129. #endif
  130. #endif /* __AM_STM32F103RBT6_USART_H */
  131. /* end of file */