/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
- /*******************************************************************************
- * AMetal
- * ----------------------------
- * innovating embedded platform
- *
- * Copyright (c) 2001-2018 Guangzhou ZHIYUAN Electronics Co., Ltd.
- * All rights reserved.
- *
- * Contact information:
- * web site: http://www.zlg.cn/
- *******************************************************************************/
- /**
- * \file
- * \brief USARTÇý¶¯£¬·þÎñUSART±ê×¼½Ó¿Ú
- *
- * \internal
- * \par Modification History
- * - 1.00 17-04-10 ari, first implementation
- * \endinternal
- */
- #ifndef __AM_STM32F103RBT6_USART_H
- #define __AM_STM32F103RBT6_USART_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #include "am_uart.h"
- #include "hw/amhw_stm32f103rbt6_usart.h"
- /**
- * \addtogroup am_stm32f103rbt6_if_usart
- * \copydoc am_stm32f103rbt6_usart.h
- * @{
- */
- /**
- * \name ´íÎó±àÂëºÅ£¬´íÎ󻨵÷º¯ÊýµÄcode²ÎÊý£¬ÓÉÇý¶¯´«µÝ¸øÓû§£¬Ö¸Ã÷µ±Ç°µÄ´íÎóÀàÐÍ
- *
- * ´íÎ󻨵÷º¯ÊýµÄ²ÎÊýÔÐÍ£º\n
- * int uart_err(void *p_arg, int code, void *p_data, int size);
- * p_argÊÇÓû§×¢²áµÄÓû§²ÎÊý¡£p_dataºÍsize²»Í¬µÄ´íÎóÀàÐͰüº¬µÄÐÅÏ¢ÓÐËù²»Í¬¡£
- * ¿ÉÒÔʹÓÃam_uart_callback_set() º¯ÊýÉèÖô®¿Ú´íÎ󻨵÷º¯Êý¡£
- * @{
- */
- /**
- * \brief Óû§Ö¸¶¨µÄÆäËüÖжϷ¢Éú,p_dataµÄÀàÐÍΪuint32_t£¬ÖµÎª´®¿ÚµÄÖжÏ״̬£¬·½
- * ±ãÓû§ÅжϾßÌåµÄÖжÏÔ´£¬sizeΪ1¡£
- */
- #define AM_STM32F103RBT6_USART_ERRCODE_USART_OTHER_INT 3
- /**
- * \brief ÓÃÓÚÈí¼þÁ÷¿ØµÄXON×Ö·û¶¨Ò壬ĬÈÏ0x11
- */
- #define AM_STM32F103RBT6_USART_XON 0x11
- /**
- * \brief ÓÃÓÚÈí¼þÁ÷¿ØµÄXOFF×Ö·û¶¨Ò壬ĬÈÏ0x13
- */
- #define AM_STM32F103RBT6_USART_XOFF 0x13
- /** @} */
- /**
- * \brief ´®¿ÚÉ豸ÐÅÏ¢½á¹¹Ì壬¸ÃÉ豸ÐÅÏ¢ÓÃÓÚ´®¿Ú³õʼ»¯
- */
- typedef struct am_stm32f103rbt6_usart_devinfo {
- uint32_t usart_reg_base; /**< \brief Ö¸ÏòUSART¼Ä´æÆ÷¿éµÄÖ¸Õë */
- uint8_t inum; /**< \brief ´®¿ÚÖжϺŠ*/
- int clk_num; /**< \brief ʱÖÓID */
- /**
- * \brief ´®¿ÚÅäÖñêÖ¾£¬AMHW_STM32F103RBT6_USART_DATA_*ºê»òAMHW_STM32F103RBT6_USART_PARITY_*ºê
- * »òAMHW_STM32F103RBT6_USART_STOP_*µÄ»òÖµ
- * (È磺AMHW_STM32F103RBT6_USART_DATA_8BIT|AMHW_STM32F103RBT6_USART_PARITY_NO
- * |AMHW_STM32F103RBT6_USART_STOP_1BIT)
- */
- uint8_t cfg_flags;
- uint32_t baud_rate; /**< \brief ³õʼ»¯²¨ÌØÂÊ */
- /**
- * \brief Ö¸¶¨Ê¹ÄܵįäËüÖжÏ,AMHW_STM32F103RBT6_USART_INT_*ºêÖµ»ò¶à¸öAMHW_STM32F103RBT6_USART_INT_*ºêµÄ
- * »òÖµ£¬³ýÁË(# AMHW_STM32F103RBT6237_USART_INT_TX_EMPTY_ENABLE),
- * (# AMHW_STM32F103RBT6_USART_INT_RX_VAL_ENABLE)ÕâÁ½¸öÖжϡ£
- */
- uint32_t other_int_enable;
- /** \brief RS485 ·½Ïò¿ØÖƺ¯Êý, AM_TRUE: ·¢ËÍģʽ£¬ AM_FALSE: ½ÓÊÕģʽ */
- void (*pfn_rs485_dir) (am_bool_t is_txmode);
- void (*pfn_plfm_init)(void); /**< \brief ƽ̨³õʼ»¯º¯Êý */
- void (*pfn_plfm_deinit)(void); /**< \brief ƽ̨ȥ³õʼ»¯º¯Êý */
- uint32_t gpio_ck[2]; /**< \brief ck Êä³öÒý½ÅÏà¹Ø¶¨Òå */
- uint32_t gpio_cts[2]; /**< \brief cts Êä³öÒý½ÅÏà¹Ø¶¨Òå */
- uint32_t gpio_rts[2]; /**< \brief rts ÊäÈëÒý½ÅÏà¹Ø¶¨Òå */
- } am_stm32f103rbt6_usart_devinfo_t;
- /**
- * \brief ´®¿ÚÉ豸½á¹¹Ì嶨Òå
- */
- typedef struct am_stm32f103rbt6_usart_dev {
- am_uart_serv_t uart_serv; /**< \brief ±ê×¼USART·þÎñ */
- /** \brief Ö¸ÏòÓû§×¢²áµÄtxchar_getº¯Êý */
- int (*pfn_txchar_get)(void *, char *);
- /** \brief Ö¸ÏòÓû§×¢²áµÄrxchar_putº¯Êý */
- int (*pfn_rxchar_put)(void *, char);
- /** \brief Ö¸ÏòÓû§×¢²áµÄ´íÎ󻨵÷º¯Êý */
- int (*pfn_err)(void *, int, void *, int);
- void *txget_arg; /**< \brief txchar_getº¯Êý²ÎÊý */
- void *rxput_arg; /**< \brief rxchar_putº¯Êý²ÎÊý */
- void *err_arg; /**< \brief ´íÎ󻨵÷º¯ÊýÓû§²ÎÊý */
- uint8_t flowctl_mode; /**< \brief Á÷¿ØÄ£Ê½£¨ÎÞ£¬Èí¼þ£¬Ó²¼þ£© */
- uint8_t flowctl_tx_stat; /**< \brief Á÷¿Ø·¢ËÍÆ÷״̬£¨ÓÃÓÚÈíÁ÷¿Ø£© */
- uint8_t channel_mode; /**< \brief ´®¿Úģʽ ÖжÏ/²éѯ */
- uint32_t baud_rate; /**< \brief ´®¿Ú²¨ÌØÂÊ */
- uint16_t options; /**< \brief Ó²¼þÉèÖÃÑ¡Ïî */
- uint32_t other_int_enable; /**< \brief Ö¸¶¨Ê¹ÄܵįäËüÖÐ¶Ï */
- am_bool_t rs485_en; /**< \brief ÊÇ·ñʹÄÜÁË 485 ģʽ */
- const am_stm32f103rbt6_usart_devinfo_t *p_devinfo; /**< \brief Ö¸ÏòÉ豸ÐÅÏ¢³£Á¿µÄÖ¸Õë */
- } am_stm32f103rbt6_usart_dev_t;
- /**
- * \brief ³õʼ»¯USART£¬·µ»ØUSART±ê×¼·þÎñ²Ù×÷¾ä±ú
- *
- * \param[in] p_dev : Ö¸Ïò´®¿ÚÉ豸µÄÖ¸Õë
- * \param[in] p_devinfo : Ö¸Ïò´®¿ÚÉ豸ÐÅÏ¢³£Á¿µÄÖ¸Õë
- *
- * \return USART±ê×¼·þÎñ²Ù×÷¾ä±ú£¬ÖµÎªNULLʱ±íÃ÷³õʼ»¯Ê§°Ü
- */
- am_uart_handle_t am_stm32f103rbt6_usart_init(am_stm32f103rbt6_usart_dev_t *p_dev,
- const am_stm32f103rbt6_usart_devinfo_t *p_devinfo);
- /**
- * \brief ´®¿ÚÈ¥³õʼ»¯
- *
- * \param[in] p_dev : Ö¸Ïò´®¿ÚÉ豸µÄÖ¸Õë
- */
- void am_stm32f103rbt6_usart_deinit (am_stm32f103rbt6_usart_dev_t *p_dev);
- /**
- * @}
- */
- #ifdef __cplusplus
- }
- #endif
- #endif /* __AM_STM32F103RBT6_USART_H */
- /* end of file */