HPM SDK
HPMicro Software Development Kit
hpm_uart_drv.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2022-2024 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_UART_DRV_H
9 #define HPM_UART_DRV_H
10 #include "hpm_common.h"
11 #include "hpm_uart_regs.h"
12 #include "hpm_soc_feature.h"
13 
25 enum {
27 };
28 
29 /* @brief Parity */
30 typedef enum parity {
37 
38 /* @brief Stop bits */
39 typedef enum num_of_stop_bits {
44 
45 /* @brief Word length */
46 typedef enum word_length {
52 
53 /* @brief UART fifo trigger levels */
54 typedef enum uart_fifo_trg_lvl {
55 #if defined(HPM_IP_FEATURE_UART_FINE_FIFO_THRLD) && (HPM_IP_FEATURE_UART_FINE_FIFO_THRLD == 1)
72 
77 
82 #else
87 
92 #endif
94 
95 /* @brief UART signals */
96 typedef enum uart_signal {
99 
100 /* @brief UART signal levels */
101 typedef enum uart_signal_level {
105 
106 /* @brief UART modem status */
107 typedef enum uart_modem_stat {
111 
112 /* @brief UART interrupt enable masks */
113 typedef enum uart_intr_enable {
118 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
120 #endif
121 #if defined(HPM_IP_FEATURE_UART_9BIT_MODE) && (HPM_IP_FEATURE_UART_9BIT_MODE == 1)
123 #endif
124 #if defined(HPM_IP_FEATURE_UART_ADDR_MATCH) && (HPM_IP_FEATURE_UART_ADDR_MATCH == 1)
128 #endif
130 
131 /* @brief UART interrupt IDs */
132 typedef enum uart_intr_id {
139 
140 /* @brief UART status */
141 typedef enum uart_stat {
142  uart_stat_data_ready = UART_LSR_DR_MASK, /* rx data ready in fifo */
151 
155 typedef struct uart_modem_config {
160 
161 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
169 
177  uint8_t threshold;
179 #endif
180 
184 typedef struct hpm_uart_config {
185  uint32_t src_freq_in_hz;
186  uint32_t baudrate;
188  uint8_t word_length;
189  uint8_t parity;
190  uint8_t tx_fifo_level;
191  uint8_t rx_fifo_level;
192  bool dma_enable;
193  bool fifo_enable;
195 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
197 #endif
198 #if defined(HPM_IP_FEATURE_UART_9BIT_MODE) && (HPM_IP_FEATURE_UART_9BIT_MODE == 1)
200 #endif
201 #if defined(HPM_IP_FEATURE_UART_RX_EN) && (HPM_IP_FEATURE_UART_RX_EN == 1)
202  bool rx_enable;
203 #endif
205 
206 #if defined(HPM_IP_FEATURE_UART_TRIG_MODE) && (HPM_IP_FEATURE_UART_TRIG_MODE == 1)
207 typedef struct {
208  uint16_t stop_bit_len;
211  bool trig_mode;
214 #endif
215 
216 typedef struct {
217  uint8_t tx_fifo_level;
218  uint8_t rx_fifo_level;
221  bool dma_enable;
222  bool fifo_enable;
224 
225 #ifdef __cplusplus
226 extern "C" {
227 #endif
228 
235 static inline uint8_t uart_get_fifo_size(UART_Type *ptr)
236 {
237  return 16 << ((ptr->CFG & UART_CFG_FIFOSIZE_MASK) >> UART_CFG_FIFOSIZE_SHIFT);
238 }
239 
249 
258 static inline void uart_clear_rx_fifo(UART_Type *ptr)
259 {
260  while (ptr->LSR & UART_LSR_DR_MASK) {
261  ptr->RBR;
262  }
263 }
264 
265 #if defined(HPM_IP_FEATURE_UART_RX_EN) && (HPM_IP_FEATURE_UART_RX_EN == 1)
266 static inline void uart_enable_rx_function(UART_Type *ptr, bool enable)
267 {
268  if (enable) {
270  } else {
272  }
273 }
274 #endif
275 
281 static inline void uart_reset_tx_fifo(UART_Type *ptr)
282 {
283 #if defined(HPM_IP_FEATURE_UART_FCRR) && (HPM_IP_FEATURE_UART_FCRR == 1)
285 #else
286  ptr->FCR = UART_FCR_TFIFORST_MASK | (ptr->GPR);
287 #endif
288 }
289 
295 static inline void uart_reset_rx_fifo(UART_Type *ptr)
296 {
297 #if defined(HPM_IP_FEATURE_UART_FCRR) && (HPM_IP_FEATURE_UART_FCRR == 1)
299 #else
300  ptr->FCR = UART_FCR_RFIFORST_MASK | (ptr->GPR);
301 #endif
302 }
303 
309 static inline void uart_reset_all_fifo(UART_Type *ptr)
310 {
311 #if defined(HPM_IP_FEATURE_UART_FCRR) && (HPM_IP_FEATURE_UART_FCRR == 1)
313 #else
315 #endif
316 }
317 
323 static inline void uart_modem_enable_loopback(UART_Type *ptr)
324 {
325  ptr->MCR |= UART_MCR_LOOP_MASK;
326 }
327 
333 static inline void uart_modem_disable_loopback(UART_Type *ptr)
334 {
335  ptr->MCR &= ~UART_MCR_LOOP_MASK;
336 }
337 
345 {
346  ptr->MCR &= ~UART_MCR_AFE_MASK;
347 }
348 
355 {
356  ptr->MCR |= UART_MCR_AFE_MASK;
357 }
358 
365 static inline void uart_modem_config(UART_Type *ptr, uart_modem_config_t *config)
366 {
367  ptr->MCR = UART_MCR_AFE_SET(config->auto_flow_ctrl_en)
369  | UART_MCR_RTS_SET(!config->set_rts_high);
370 }
371 
378 static inline uint8_t uart_get_modem_status(UART_Type *ptr)
379 {
380  return ptr->MSR;
381 }
382 
389 static inline void uart_write_byte(UART_Type *ptr, uint8_t c)
390 {
391  ptr->THR = UART_THR_THR_SET(c);
392 }
393 
394 
401 static inline uint8_t uart_read_byte(UART_Type *ptr)
402 {
403  return (ptr->RBR & UART_RBR_RBR_MASK);
404 }
405 
415 {
416  return ((ptr->MSR & mask) != 0U) ? true : false;
417 }
418 
425 static inline void uart_disable_irq(UART_Type *ptr, uart_intr_enable_t irq_mask)
426 {
427  ptr->IER &= ~irq_mask;
428 }
429 
436 static inline void uart_enable_irq(UART_Type *ptr, uart_intr_enable_t irq_mask)
437 {
438  ptr->IER |= irq_mask;
439 }
440 
447 static inline uint32_t uart_get_enabled_irq(UART_Type *ptr)
448 {
449  return ptr->IER;
450 }
451 
458 static inline uint8_t uart_get_irq_id(UART_Type *ptr)
459 {
460  return (ptr->IIR & UART_IIR_INTRID_MASK);
461 }
462 
463 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
464 
465 /* if HPM_IP_FEATURE_UART_E00018_FIX = 1, the IIR2 register exists, should use IIR2 to get/clear rx idle status */
466 #if !defined(HPM_IP_FEATURE_UART_E00018_FIX) || (HPM_IP_FEATURE_UART_E00018_FIX == 0)
472 static inline bool uart_is_rxline_idle(UART_Type *ptr)
473 {
474  return ((ptr->IIR & UART_IIR_RXIDLE_FLAG_MASK) != 0U) ? true : false;
475 }
476 
481 static inline void uart_clear_rxline_idle_flag(UART_Type *ptr)
482 {
483  ptr->IIR = UART_IIR_RXIDLE_FLAG_MASK; /* Write-1-Clear Logic */
484  ptr->FCR = ptr->GPR;
485 }
486 #endif
487 
493 {
495 }
496 
503 {
505 }
506 
514 
515 #endif
516 
517 #if defined(HPM_IP_FEATURE_UART_E00018_FIX) && (HPM_IP_FEATURE_UART_E00018_FIX == 1)
523 static inline bool uart_is_txline_idle(UART_Type *ptr)
524 {
525  return ((ptr->IIR2 & UART_IIR2_TXIDLE_FLAG_MASK) != 0U) ? true : false;
526 }
527 
532 static inline void uart_clear_txline_idle_flag(UART_Type *ptr)
533 {
534  ptr->IIR2 = UART_IIR2_TXIDLE_FLAG_MASK; /* Write-1-Clear Logic */
535 }
536 
542 static inline bool uart_is_rxline_idle(UART_Type *ptr)
543 {
544  return ((ptr->IIR2 & UART_IIR2_RXIDLE_FLAG_MASK) != 0U) ? true : false;
545 }
546 
551 static inline void uart_clear_rxline_idle_flag(UART_Type *ptr)
552 {
553  ptr->IIR2 = UART_IIR2_RXIDLE_FLAG_MASK; /* Write-1-Clear Logic */
554 }
555 #endif
556 
557 #if defined(HPM_IP_FEATURE_UART_9BIT_MODE) && (HPM_IP_FEATURE_UART_9BIT_MODE == 1)
563 {
565 }
566 
573 {
575 }
576 
584 
585 #endif
586 
587 
588 
595 static inline uint32_t uart_get_status(UART_Type *ptr)
596 {
597  return ptr->LSR;
598 }
599 
609 static inline bool uart_check_status(UART_Type *ptr, uart_stat_t mask)
610 {
611  return ((ptr->LSR & mask) != 0U) ? true : false;
612 }
613 
620 void uart_default_config(UART_Type *ptr, uart_config_t *config);
621 
630 
638 hpm_stat_t uart_send_byte(UART_Type *ptr, uint8_t c);
639 
647 hpm_stat_t uart_receive_byte(UART_Type *ptr, uint8_t *c);
648 
656 hpm_stat_t uart_try_receive_byte(UART_Type *ptr, uint8_t *c);
657 
666  uart_signal_t signal,
667  uart_signal_level_t level);
668 
676 
685 hpm_stat_t uart_receive_data(UART_Type *ptr, uint8_t *buf, uint32_t size_in_byte);
686 
695 hpm_stat_t uart_send_data(UART_Type *ptr, uint8_t *buf, uint32_t size_in_byte);
696 
709 hpm_stat_t uart_set_baudrate(UART_Type *ptr, uint32_t baudrate, uint32_t src_clock_hz);
710 
711 
712 #if defined(HPM_IP_FEATURE_UART_TRIG_MODE) && (HPM_IP_FEATURE_UART_TRIG_MODE == 1)
722 
730 static inline void uart_software_trig_transfer(UART_Type *ptr)
731 {
734 }
735 
744 static inline void uart_enable_hardware_trig_transfer(UART_Type *ptr, bool enable)
745 {
746  if (enable) {
748  } else {
750  }
751 }
752 
759 static inline uint8_t uart_get_data_count_in_rx_fifo(UART_Type *ptr)
760 {
761  return UART_LSR_RFIFO_NUM_GET(ptr->LSR);
762 }
763 
770 static inline uint8_t uart_get_data_count_in_tx_fifo(UART_Type *ptr)
771 {
772  return UART_LSR_TFIFO_NUM_GET(ptr->LSR);
773 }
774 #endif
775 
776 #if defined(HPM_IP_FEATURE_UART_ADDR_MATCH) && (HPM_IP_FEATURE_UART_ADDR_MATCH == 1)
783 static inline void uart_enable_9bit_transmit_mode(UART_Type *ptr, bool enable)
784 {
785  if (enable) {
789  } else {
793  }
794 }
795 
802 static inline void uart_enable_address0_match(UART_Type *ptr, uint8_t addr)
803 {
806 }
807 
814 static inline void uart_enable_address1_match(UART_Type *ptr, uint8_t addr)
815 {
818 }
819 
825 static inline void uart_disable_address0_match(UART_Type *ptr)
826 {
828 }
829 
835 static inline void uart_disable_address1_match(UART_Type *ptr)
836 {
838 }
839 
845 static inline void uart_disable_address_match(UART_Type *ptr)
846 {
848 }
849 
855 static inline bool uart_is_addr_match(UART_Type *ptr)
856 {
857  return ((ptr->IIR2 & UART_IIR2_ADDR_MATCH_MASK) != 0U) ? true : false;
858 }
859 
864 static inline void uart_clear_addr_match_flag(UART_Type *ptr)
865 {
866  ptr->IIR2 = UART_IIR2_ADDR_MATCH_MASK; /* Write-1-Clear Logic */
867 }
868 
874 static inline bool uart_is_addr_match_and_rxidle(UART_Type *ptr)
875 {
876  return ((ptr->IIR2 & UART_IIR2_ADDR_MATCH_IDLE_MASK) != 0U) ? true : false;
877 }
878 
884 {
885  ptr->IIR2 = UART_IIR2_ADDR_MATCH_IDLE_MASK; /* Write-1-Clear Logic */
886 }
887 
893 static inline bool uart_is_data_lost(UART_Type *ptr)
894 {
895  return ((ptr->IIR2 & UART_IIR2_DATA_LOST_MASK) != 0U) ? true : false;
896 }
897 
902 static inline void uart_clear_data_lost_flag(UART_Type *ptr)
903 {
904  ptr->IIR2 = UART_IIR2_DATA_LOST_MASK; /* Write-1-Clear Logic */
905 }
906 #endif
907 
914 static inline void uart_modem_write_rts_pin(UART_Type *ptr, uint8_t high)
915 {
916  if (high == true) {
917  ptr->MCR &= ~UART_MCR_RTS_MASK;
918  } else {
919  ptr->MCR |= UART_MCR_RTS_MASK;
920  }
921 }
922 
923 #if defined(HPM_IP_FEATURE_UART_DISABLE_DMA_TIMEOUT) && (HPM_IP_FEATURE_UART_DISABLE_DMA_TIMEOUT == 1)
929 static inline void uart_disable_rx_timeout_trig_dma(UART_Type *ptr)
930 {
931  ptr->FCRR |= UART_FCRR_TMOUT_RXDMA_DIS_MASK;
932 }
933 
939 static inline void uart_enable_rx_timeout_trig_dma(UART_Type *ptr)
940 {
941  ptr->FCRR &= ~UART_FCRR_TMOUT_RXDMA_DIS_MASK;
942 }
943 #endif
944 
945 #ifdef __cplusplus
946 }
947 #endif
952 #endif /* HPM_UART_DRV_H */
#define UART_ADDR_CFG_A1_EN_MASK
Definition: hpm_uart_regs.h:167
#define UART_ADDR_CFG_ADDR1_MASK
Definition: hpm_uart_regs.h:190
#define UART_LSR_DR_MASK
Definition: hpm_uart_regs.h:1002
#define UART_ADDR_CFG_ADDR1_SET(x)
Definition: hpm_uart_regs.h:192
#define UART_FCRR_RFIFORST_MASK
Definition: hpm_uart_regs.h:400
#define UART_IIR2_TXIDLE_FLAG_MASK
Definition: hpm_uart_regs.h:225
#define UART_IER_EADDRM_IDLE_MASK
Definition: hpm_uart_regs.h:554
#define UART_IER_ETHEI_MASK
Definition: hpm_uart_regs.h:601
#define UART_IDLE_CFG_TX_IDLE_EN_MASK
Definition: hpm_uart_regs.h:62
#define UART_IER_ELSI_MASK
Definition: hpm_uart_regs.h:591
#define UART_ADDR_CFG_RXEN_9BIT_MASK
Definition: hpm_uart_regs.h:154
#define UART_MOTO_CFG_SWTRG_MASK
Definition: hpm_uart_regs.h:425
#define UART_IIR2_ADDR_MATCH_MASK
Definition: hpm_uart_regs.h:237
#define UART_MCR_RTS_SET(x)
Definition: hpm_uart_regs.h:861
#define UART_MCR_AFE_MASK
Definition: hpm_uart_regs.h:834
#define UART_MSR_CTS_MASK
Definition: hpm_uart_regs.h:1014
#define UART_IER_EADDRM_MASK
Definition: hpm_uart_regs.h:544
#define UART_ADDR_CFG_TXEN_9BIT_MASK
Definition: hpm_uart_regs.h:132
#define UART_IIR2_DATA_LOST_MASK
Definition: hpm_uart_regs.h:259
#define UART_LSR_TFIFO_NUM_GET(x)
Definition: hpm_uart_regs.h:899
#define UART_MCR_LOOP_MASK
Definition: hpm_uart_regs.h:846
#define UART_ADDR_CFG_ADDR0_MASK
Definition: hpm_uart_regs.h:200
#define UART_IDLE_CFG_RX_IDLE_EN_MASK
Definition: hpm_uart_regs.h:110
#define UART_IIR_RXIDLE_FLAG_MASK
Definition: hpm_uart_regs.h:639
#define UART_LSR_PE_MASK
Definition: hpm_uart_regs.h:979
#define UART_IER_EDATLOST_MASK
Definition: hpm_uart_regs.h:564
#define UART_MSR_DCTS_MASK
Definition: hpm_uart_regs.h:1026
#define UART_MOTO_CFG_HWTRG_EN_MASK
Definition: hpm_uart_regs.h:445
#define UART_ADDR_CFG_ADDR0_SET(x)
Definition: hpm_uart_regs.h:202
#define UART_ADDR_CFG_A0_EN_MASK
Definition: hpm_uart_regs.h:177
#define UART_ADDR_CFG_RXEN_ADDR_MSB_MASK
Definition: hpm_uart_regs.h:144
#define UART_MCR_LOOP_SET(x)
Definition: hpm_uart_regs.h:848
#define UART_FCR_RFIFORST_MASK
Definition: hpm_uart_regs.h:718
#define UART_IER_ERXIDLE_MASK
Definition: hpm_uart_regs.h:524
#define UART_LSR_OE_MASK
Definition: hpm_uart_regs.h:990
#define UART_FCR_TFIFORST_MASK
Definition: hpm_uart_regs.h:705
#define UART_LSR_ERRF_MASK
Definition: hpm_uart_regs.h:911
#define UART_IIR_INTRID_MASK
Definition: hpm_uart_regs.h:660
#define UART_IER_EMSI_MASK
Definition: hpm_uart_regs.h:581
#define UART_IIR2_RXIDLE_FLAG_MASK
Definition: hpm_uart_regs.h:213
#define UART_LSR_FE_MASK
Definition: hpm_uart_regs.h:965
#define UART_IER_ETXIDLE_MASK
Definition: hpm_uart_regs.h:534
#define UART_LSR_TEMT_MASK
Definition: hpm_uart_regs.h:923
#define UART_FCRR_TFIFORST_MASK
Definition: hpm_uart_regs.h:387
#define UART_LSR_LBREAK_MASK
Definition: hpm_uart_regs.h:952
#define UART_CFG_FIFOSIZE_MASK
Definition: hpm_uart_regs.h:294
#define UART_MCR_AFE_SET(x)
Definition: hpm_uart_regs.h:836
#define UART_IER_ERBI_MASK
Definition: hpm_uart_regs.h:614
#define UART_IDLE_CFG_RXEN_MASK
Definition: hpm_uart_regs.h:85
#define UART_LSR_THRE_MASK
Definition: hpm_uart_regs.h:936
#define UART_IIR2_ADDR_MATCH_IDLE_MASK
Definition: hpm_uart_regs.h:248
#define UART_RBR_RBR_MASK
Definition: hpm_uart_regs.h:490
#define UART_LSR_RFIFO_NUM_GET(x)
Definition: hpm_uart_regs.h:890
#define UART_MCR_RTS_MASK
Definition: hpm_uart_regs.h:859
#define UART_THR_THR_SET(x)
Definition: hpm_uart_regs.h:502
#define UART_CFG_FIFOSIZE_SHIFT
Definition: hpm_uart_regs.h:295
uint32_t hpm_stat_t
Definition: hpm_common.h:123
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:132
@ status_group_uart
Definition: hpm_common.h:136
static void uart_clear_addr_match_and_rxidle_flag(UART_Type *ptr)
Clear UART address match and rxidle Flag.
Definition: hpm_uart_drv.h:883
void uart_config_transfer_trig_mode(UART_Type *ptr, uart_trig_config_t *config)
uart configure transfer trigger mode
Definition: hpm_uart_drv.c:360
hpm_stat_t uart_flush(UART_Type *ptr)
Flush sending buffer/fifo.
Definition: hpm_uart_drv.c:242
enum num_of_stop_bits num_of_stop_bits_t
static void uart_modem_enable_loopback(UART_Type *ptr)
Enable modem loopback.
Definition: hpm_uart_drv.h:323
hpm_stat_t uart_init(UART_Type *ptr, uart_config_t *config)
Initialization.
Definition: hpm_uart_drv.c:96
static void uart_disable_address0_match(UART_Type *ptr)
uart disable address0 match
Definition: hpm_uart_drv.h:825
hpm_stat_t uart_receive_data(UART_Type *ptr, uint8_t *buf, uint32_t size_in_byte)
Receive bytes blocking.
Definition: hpm_uart_drv.c:297
uart_signal
Definition: hpm_uart_drv.h:96
hpm_stat_t uart_try_receive_byte(UART_Type *ptr, uint8_t *c)
Try to receive one byte without checking data ready status.
Definition: hpm_uart_drv.c:278
enum uart_intr_enable uart_intr_enable_t
hpm_stat_t uart_set_baudrate(UART_Type *ptr, uint32_t baudrate, uint32_t src_clock_hz)
Sets UART baudrate.
Definition: hpm_uart_drv.c:201
static void uart_enable_address1_match(UART_Type *ptr, uint8_t addr)
uart enable address1 match
Definition: hpm_uart_drv.h:814
static void uart_modem_disable_auto_flow_control(UART_Type *ptr)
Disable modem auto flow control.
Definition: hpm_uart_drv.h:344
hpm_stat_t uart_init_txline_idle_detection(UART_Type *ptr, uart_rxline_idle_config_t txidle_config)
Configure UART TX Line detection.
Definition: hpm_uart_drv.c:340
static bool uart_check_status(UART_Type *ptr, uart_stat_t mask)
Check uart status according to the given status mask.
Definition: hpm_uart_drv.h:609
static bool uart_check_modem_status(UART_Type *ptr, uart_modem_stat_t mask)
Check modem status with given mask.
Definition: hpm_uart_drv.h:414
uart_modem_stat
Definition: hpm_uart_drv.h:107
static void uart_disable_irq(UART_Type *ptr, uart_intr_enable_t irq_mask)
Disable IRQ with mask.
Definition: hpm_uart_drv.h:425
static void uart_disable_txline_idle_detection(UART_Type *ptr)
Disable UART TX Idle Line detection logic.
Definition: hpm_uart_drv.h:572
enum hpm_uart_rxline_idle_cond uart_rxline_idle_cond_t
UART Idle detection conditions, suitable for RX and TX.
static void uart_software_trig_transfer(UART_Type *ptr)
uart software trigger transmit
Definition: hpm_uart_drv.h:730
hpm_stat_t uart_send_data(UART_Type *ptr, uint8_t *buf, uint32_t size_in_byte)
Send bytes blocking.
Definition: hpm_uart_drv.c:307
enum uart_intr_id uart_intr_id_t
enum word_length word_length_t
static void uart_enable_txline_idle_detection(UART_Type *ptr)
Enable UART TX Idle Line detection logic.
Definition: hpm_uart_drv.h:562
static bool uart_is_addr_match(UART_Type *ptr)
Determine whether address match for 9bit mode.
Definition: hpm_uart_drv.h:855
uart_intr_id
Definition: hpm_uart_drv.h:132
static uint8_t uart_get_data_count_in_rx_fifo(UART_Type *ptr)
UART get data count in rx fifo.
Definition: hpm_uart_drv.h:759
static void uart_enable_address0_match(UART_Type *ptr, uint8_t addr)
uart enable address0 match
Definition: hpm_uart_drv.h:802
static bool uart_is_txline_idle(UART_Type *ptr)
Determine whether UART TX Line is idle.
Definition: hpm_uart_drv.h:523
static void uart_enable_rx_function(UART_Type *ptr, bool enable)
Definition: hpm_uart_drv.h:266
static void uart_clear_txline_idle_flag(UART_Type *ptr)
Clear UART TX Line Idle Flag.
Definition: hpm_uart_drv.h:532
parity
Definition: hpm_uart_drv.h:30
enum uart_stat uart_stat_t
static uint8_t uart_get_irq_id(UART_Type *ptr)
Get interrupt identification.
Definition: hpm_uart_drv.h:458
static void uart_modem_enable_auto_flow_control(UART_Type *ptr)
Enable modem auto flow control.
Definition: hpm_uart_drv.h:354
enum uart_modem_stat uart_modem_stat_t
hpm_uart_rxline_idle_cond
UART Idle detection conditions, suitable for RX and TX.
Definition: hpm_uart_drv.h:165
hpm_stat_t uart_send_byte(UART_Type *ptr, uint8_t c)
Send one byte after checking thresh hold status.
Definition: hpm_uart_drv.c:223
static void uart_disable_rxline_idle_detection(UART_Type *ptr)
Disable UART RX Idle Line detection logic.
Definition: hpm_uart_drv.h:502
static bool uart_is_addr_match_and_rxidle(UART_Type *ptr)
Determine whether address match and rx idle for 9bit mode.
Definition: hpm_uart_drv.h:874
struct hpm_uart_config uart_config_t
UART config.
static void uart_enable_9bit_transmit_mode(UART_Type *ptr, bool enable)
uart enable 9bit transmit mode
Definition: hpm_uart_drv.h:783
static void uart_reset_tx_fifo(UART_Type *ptr)
Reset TX Fifo.
Definition: hpm_uart_drv.h:281
uart_signal_level
Definition: hpm_uart_drv.h:101
static uint8_t uart_read_byte(UART_Type *ptr)
Read byte from RX.
Definition: hpm_uart_drv.h:401
word_length
Definition: hpm_uart_drv.h:46
static void uart_enable_rxline_idle_detection(UART_Type *ptr)
Enable UART RX Idle Line detection logic.
Definition: hpm_uart_drv.h:492
static bool uart_is_data_lost(UART_Type *ptr)
Determine whether data lost for 9bit mode.
Definition: hpm_uart_drv.h:893
hpm_stat_t uart_init_rxline_idle_detection(UART_Type *ptr, uart_rxline_idle_config_t rxidle_config)
Configure UART RX Line detection.
Definition: hpm_uart_drv.c:319
static void uart_modem_write_rts_pin(UART_Type *ptr, uint8_t high)
Write RTS level for uart modem mode.
Definition: hpm_uart_drv.h:914
struct uart_modem_config uart_modem_config_t
UART modem config.
static void uart_enable_irq(UART_Type *ptr, uart_intr_enable_t irq_mask)
Enable IRQ with mask.
Definition: hpm_uart_drv.h:436
static void uart_modem_config(UART_Type *ptr, uart_modem_config_t *config)
Configure modem.
Definition: hpm_uart_drv.h:365
static uint32_t uart_get_status(UART_Type *ptr)
Get status.
Definition: hpm_uart_drv.h:595
num_of_stop_bits
Definition: hpm_uart_drv.h:39
static void uart_disable_address1_match(UART_Type *ptr)
uart disable address1 match
Definition: hpm_uart_drv.h:835
enum uart_signal_level uart_signal_level_t
void uart_default_config(UART_Type *ptr, uart_config_t *config)
Get default config.
Definition: hpm_uart_drv.c:27
static uint8_t uart_get_fifo_size(UART_Type *ptr)
Get fifo size.
Definition: hpm_uart_drv.h:235
static void uart_enable_hardware_trig_transfer(UART_Type *ptr, bool enable)
uart enable hardware trigger mode
Definition: hpm_uart_drv.h:744
enum uart_signal uart_signal_t
struct hpm_uart_rxline_idle_detect_config uart_rxline_idle_config_t
UART Idle config, suitable for RX and TX.
static void uart_write_byte(UART_Type *ptr, uint8_t c)
Write byte to TX.
Definition: hpm_uart_drv.h:389
uart_fifo_trg_lvl
Definition: hpm_uart_drv.h:54
static void uart_reset_rx_fifo(UART_Type *ptr)
Reset RX Fifo.
Definition: hpm_uart_drv.h:295
static void uart_clear_data_lost_flag(UART_Type *ptr)
Clear UART data lost Flag.
Definition: hpm_uart_drv.h:902
hpm_stat_t uart_receive_byte(UART_Type *ptr, uint8_t *c)
Receive one byte after checking data ready status.
Definition: hpm_uart_drv.c:259
static void uart_reset_all_fifo(UART_Type *ptr)
[in] Reset both TX and RX Fifo
Definition: hpm_uart_drv.h:309
enum parity parity_setting_t
void uart_config_fifo_ctrl(UART_Type *ptr, uart_fifo_ctrl_t *ctrl)
uart config fifo control
Definition: hpm_uart_drv.c:371
enum uart_fifo_trg_lvl uart_fifo_trg_lvl_t
void uart_set_signal_level(UART_Type *ptr, uart_signal_t signal, uart_signal_level_t level)
Set uart signal output level.
Definition: hpm_uart_drv.c:288
static uint8_t uart_get_modem_status(UART_Type *ptr)
Get modem status.
Definition: hpm_uart_drv.h:378
static uint32_t uart_get_enabled_irq(UART_Type *ptr)
Get Enabled IRQ.
Definition: hpm_uart_drv.h:447
static void uart_disable_address_match(UART_Type *ptr)
uart disable address match(address0 and address1)
Definition: hpm_uart_drv.h:845
static uint8_t uart_get_data_count_in_tx_fifo(UART_Type *ptr)
UART get data count in tx fifo.
Definition: hpm_uart_drv.h:770
static void uart_clear_addr_match_flag(UART_Type *ptr)
Clear UART address match Flag.
Definition: hpm_uart_drv.h:864
uart_stat
Definition: hpm_uart_drv.h:141
static void uart_clear_rx_fifo(UART_Type *ptr)
uart clear rx fifo by reading data
Definition: hpm_uart_drv.h:258
static void uart_clear_rxline_idle_flag(UART_Type *ptr)
Clear UART RX Line Idle Flag.
Definition: hpm_uart_drv.h:551
static bool uart_is_rxline_idle(UART_Type *ptr)
Determine whether UART RX Line is idle.
Definition: hpm_uart_drv.h:542
uart_intr_enable
Definition: hpm_uart_drv.h:113
static void uart_modem_disable_loopback(UART_Type *ptr)
Disable modem loopback.
Definition: hpm_uart_drv.h:333
@ uart_signal_rts
Definition: hpm_uart_drv.h:97
@ uart_modem_stat_cts
Definition: hpm_uart_drv.h:108
@ uart_modem_stat_dcts_changed
Definition: hpm_uart_drv.h:109
@ uart_intr_id_tx_slot_avail
Definition: hpm_uart_drv.h:134
@ uart_intr_id_rx_data_avail
Definition: hpm_uart_drv.h:135
@ uart_intr_id_rx_line_stat
Definition: hpm_uart_drv.h:136
@ uart_intr_id_modem_stat
Definition: hpm_uart_drv.h:133
@ uart_intr_id_rx_timeout
Definition: hpm_uart_drv.h:137
@ parity_none
Definition: hpm_uart_drv.h:31
@ parity_always_1
Definition: hpm_uart_drv.h:34
@ parity_even
Definition: hpm_uart_drv.h:33
@ parity_odd
Definition: hpm_uart_drv.h:32
@ parity_always_0
Definition: hpm_uart_drv.h:35
@ uart_rxline_idle_cond_state_machine_idle
Definition: hpm_uart_drv.h:167
@ uart_rxline_idle_cond_rxline_logic_one
Definition: hpm_uart_drv.h:166
@ uart_signal_level_low
Definition: hpm_uart_drv.h:103
@ uart_signal_level_high
Definition: hpm_uart_drv.h:102
@ word_length_5_bits
Definition: hpm_uart_drv.h:47
@ word_length_7_bits
Definition: hpm_uart_drv.h:49
@ word_length_6_bits
Definition: hpm_uart_drv.h:48
@ word_length_8_bits
Definition: hpm_uart_drv.h:50
@ stop_bits_1_5
Definition: hpm_uart_drv.h:41
@ stop_bits_2
Definition: hpm_uart_drv.h:42
@ stop_bits_1
Definition: hpm_uart_drv.h:40
@ uart_fifo_16_bytes
Definition: hpm_uart_drv.h:71
@ uart_fifo_7_bytes
Definition: hpm_uart_drv.h:62
@ uart_fifo_9_bytes
Definition: hpm_uart_drv.h:64
@ uart_fifo_11_bytes
Definition: hpm_uart_drv.h:66
@ uart_tx_fifo_trg_lt_one_quarter
Definition: hpm_uart_drv.h:81
@ uart_tx_fifo_trg_lt_three_quarters
Definition: hpm_uart_drv.h:79
@ uart_fifo_12_bytes
Definition: hpm_uart_drv.h:67
@ uart_rx_fifo_trg_gt_three_quarters
Definition: hpm_uart_drv.h:76
@ uart_tx_fifo_trg_lt_half
Definition: hpm_uart_drv.h:80
@ uart_fifo_10_bytes
Definition: hpm_uart_drv.h:65
@ uart_fifo_4_bytes
Definition: hpm_uart_drv.h:59
@ uart_fifo_5_bytes
Definition: hpm_uart_drv.h:60
@ uart_fifo_3_bytes
Definition: hpm_uart_drv.h:58
@ uart_rx_fifo_trg_not_empty
Definition: hpm_uart_drv.h:73
@ uart_fifo_8_bytes
Definition: hpm_uart_drv.h:63
@ uart_fifo_14_bytes
Definition: hpm_uart_drv.h:69
@ uart_fifo_15_bytes
Definition: hpm_uart_drv.h:70
@ uart_fifo_2_bytes
Definition: hpm_uart_drv.h:57
@ uart_rx_fifo_trg_gt_half
Definition: hpm_uart_drv.h:75
@ uart_tx_fifo_trg_not_full
Definition: hpm_uart_drv.h:78
@ uart_rx_fifo_trg_gt_one_quarter
Definition: hpm_uart_drv.h:74
@ uart_fifo_13_bytes
Definition: hpm_uart_drv.h:68
@ uart_fifo_1_byte
Definition: hpm_uart_drv.h:56
@ uart_fifo_6_bytes
Definition: hpm_uart_drv.h:61
@ status_uart_no_suitable_baudrate_parameter_found
Definition: hpm_uart_drv.h:26
@ uart_stat_overrun_error
Definition: hpm_uart_drv.h:143
@ uart_stat_parity_error
Definition: hpm_uart_drv.h:144
@ uart_stat_transmitter_empty
Definition: hpm_uart_drv.h:148
@ uart_stat_tx_slot_avail
Definition: hpm_uart_drv.h:147
@ uart_stat_line_break
Definition: hpm_uart_drv.h:146
@ uart_stat_data_ready
Definition: hpm_uart_drv.h:142
@ uart_stat_rx_fifo_error
Definition: hpm_uart_drv.h:149
@ uart_stat_framing_error
Definition: hpm_uart_drv.h:145
@ uart_intr_addr_datalost
Definition: hpm_uart_drv.h:127
@ uart_intr_rx_data_avail_or_timeout
Definition: hpm_uart_drv.h:114
@ uart_intr_modem_stat
Definition: hpm_uart_drv.h:117
@ uart_intr_rx_line_stat
Definition: hpm_uart_drv.h:116
@ uart_intr_addr_match
Definition: hpm_uart_drv.h:125
@ uart_intr_tx_slot_avail
Definition: hpm_uart_drv.h:115
@ uart_intr_addr_match_and_rxidle
Definition: hpm_uart_drv.h:126
@ uart_intr_tx_line_idle
Definition: hpm_uart_drv.h:122
@ uart_intr_rx_line_idle
Definition: hpm_uart_drv.h:119
Definition: hpm_uart_regs.h:12
__RW uint32_t IDLE_CFG
Definition: hpm_uart_regs.h:14
__RW uint32_t MCR
Definition: hpm_uart_regs.h:35
__RW uint32_t ADDR_CFG
Definition: hpm_uart_regs.h:15
__W uint32_t FCR
Definition: hpm_uart_regs.h:32
__R uint32_t MSR
Definition: hpm_uart_regs.h:37
__RW uint32_t IIR
Definition: hpm_uart_regs.h:31
__R uint32_t RBR
Definition: hpm_uart_regs.h:22
__R uint32_t LSR
Definition: hpm_uart_regs.h:36
__RW uint32_t CFG
Definition: hpm_uart_regs.h:17
__RW uint32_t IIR2
Definition: hpm_uart_regs.h:16
__W uint32_t THR
Definition: hpm_uart_regs.h:23
__RW uint32_t FCRR
Definition: hpm_uart_regs.h:19
__RW uint32_t GPR
Definition: hpm_uart_regs.h:38
__RW uint32_t MOTO_CFG
Definition: hpm_uart_regs.h:20
__RW uint32_t IER
Definition: hpm_uart_regs.h:27
UART config.
Definition: hpm_uart_drv.h:184
uint8_t num_of_stop_bits
Definition: hpm_uart_drv.h:187
uint8_t parity
Definition: hpm_uart_drv.h:189
uint8_t rx_fifo_level
Definition: hpm_uart_drv.h:191
bool rx_enable
Definition: hpm_uart_drv.h:202
bool fifo_enable
Definition: hpm_uart_drv.h:193
uint8_t tx_fifo_level
Definition: hpm_uart_drv.h:190
uint8_t word_length
Definition: hpm_uart_drv.h:188
uart_rxline_idle_config_t rxidle_config
Definition: hpm_uart_drv.h:196
uint32_t src_freq_in_hz
Definition: hpm_uart_drv.h:185
uart_rxline_idle_config_t txidle_config
Definition: hpm_uart_drv.h:199
uart_modem_config_t modem_config
Definition: hpm_uart_drv.h:194
uint32_t baudrate
Definition: hpm_uart_drv.h:186
bool dma_enable
Definition: hpm_uart_drv.h:192
UART Idle config, suitable for RX and TX.
Definition: hpm_uart_drv.h:173
bool detect_irq_enable
Definition: hpm_uart_drv.h:175
uint8_t threshold
Definition: hpm_uart_drv.h:177
uart_rxline_idle_cond_t idle_cond
Definition: hpm_uart_drv.h:176
bool detect_enable
Definition: hpm_uart_drv.h:174
Definition: hpm_uart_drv.h:216
uint8_t rx_fifo_level
Definition: hpm_uart_drv.h:218
bool fifo_enable
Definition: hpm_uart_drv.h:222
bool reset_tx_fifo
Definition: hpm_uart_drv.h:219
bool reset_rx_fifo
Definition: hpm_uart_drv.h:220
bool dma_enable
Definition: hpm_uart_drv.h:221
uint8_t tx_fifo_level
Definition: hpm_uart_drv.h:217
UART modem config.
Definition: hpm_uart_drv.h:155
bool loop_back_en
Definition: hpm_uart_drv.h:157
bool auto_flow_ctrl_en
Definition: hpm_uart_drv.h:156
bool set_rts_high
Definition: hpm_uart_drv.h:158
Definition: hpm_uart_drv.h:207
bool en_stop_bit_insert
Definition: hpm_uart_drv.h:209
bool trig_clr_rxfifo
Definition: hpm_uart_drv.h:212
uint16_t stop_bit_len
Definition: hpm_uart_drv.h:208
bool hardware_trig
Definition: hpm_uart_drv.h:210
bool trig_mode
Definition: hpm_uart_drv.h:211