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)
88 
93 
98 #else
103 
108 #endif
110 
111 /* @brief UART signals */
112 typedef enum uart_signal {
115 
116 /* @brief UART signal levels */
117 typedef enum uart_signal_level {
121 
122 /* @brief UART modem status */
123 typedef enum uart_modem_stat {
127 
128 /* @brief UART interrupt enable masks */
129 typedef enum uart_intr_enable {
134 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
136 #endif
137 #if defined(HPM_IP_FEATURE_UART_9BIT_MODE) && (HPM_IP_FEATURE_UART_9BIT_MODE == 1)
139 #endif
140 #if defined(HPM_IP_FEATURE_UART_ADDR_MATCH) && (HPM_IP_FEATURE_UART_ADDR_MATCH == 1)
144 #endif
145 #if defined(HPM_IP_FEATURE_UART_RX_LINE_ERROR_DETECT) && (HPM_IP_FEATURE_UART_RX_LINE_ERROR_DETECT == 1)
146  uart_intr_errf = UART_IER_LSR_ERRF_IRQ_EN_MASK,
147  uart_intr_break_err = UART_IER_LSR_BREAK_IRQ_EN_MASK,
148  uart_intr_framing_err = UART_IER_LSR_FRAMING_IRQ_EN_MASK,
149  uart_intr_parity_err = UART_IER_LSR_PARITY_IRQ_EN_MASK,
150  uart_intr_overrun = UART_IER_LSR_OVERRUN_IRQ_EN_MASK,
151 #endif
153 
154 /* @brief UART interrupt IDs */
155 typedef enum uart_intr_id {
162 
163 /* @brief UART status */
164 typedef enum uart_stat {
165  uart_stat_data_ready = UART_LSR_DR_MASK, /* rx data ready in fifo */
174 
178 typedef struct uart_modem_config {
183 
184 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
192 
200  uint8_t threshold;
202 #endif
203 
207 typedef struct hpm_uart_config {
208  uint32_t src_freq_in_hz;
209  uint32_t baudrate;
211  uint8_t word_length;
212  uint8_t parity;
213  uint8_t tx_fifo_level;
214  uint8_t rx_fifo_level;
215  bool dma_enable;
216  bool fifo_enable;
218 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
220 #endif
221 #if defined(HPM_IP_FEATURE_UART_9BIT_MODE) && (HPM_IP_FEATURE_UART_9BIT_MODE == 1)
223 #endif
224 #if defined(HPM_IP_FEATURE_UART_RX_EN) && (HPM_IP_FEATURE_UART_RX_EN == 1)
225  bool rx_enable;
226 #endif
228 
229 #if defined(HPM_IP_FEATURE_UART_TRIG_MODE) && (HPM_IP_FEATURE_UART_TRIG_MODE == 1)
230 typedef struct {
231  uint16_t stop_bit_len;
234  bool trig_mode;
237 #endif
238 
239 typedef struct {
240  uint8_t tx_fifo_level;
241  uint8_t rx_fifo_level;
244  bool dma_enable;
245  bool fifo_enable;
247 
248 #ifdef __cplusplus
249 extern "C" {
250 #endif
251 
258 static inline uint8_t uart_get_fifo_size(UART_Type *ptr)
259 {
260  return 16 << ((ptr->CFG & UART_CFG_FIFOSIZE_MASK) >> UART_CFG_FIFOSIZE_SHIFT);
261 }
262 
272 
281 static inline void uart_clear_rx_fifo(UART_Type *ptr)
282 {
283  while (ptr->LSR & UART_LSR_DR_MASK) {
284  ptr->RBR;
285  }
286 }
287 
288 #if defined(HPM_IP_FEATURE_UART_RX_EN) && (HPM_IP_FEATURE_UART_RX_EN == 1)
289 static inline void uart_enable_rx_function(UART_Type *ptr, bool enable)
290 {
291  if (enable) {
293  } else {
295  }
296 }
297 #endif
298 
304 static inline void uart_reset_tx_fifo(UART_Type *ptr)
305 {
306 #if defined(HPM_IP_FEATURE_UART_FCRR) && (HPM_IP_FEATURE_UART_FCRR == 1)
308 #else
309  ptr->FCR = UART_FCR_TFIFORST_MASK | (ptr->GPR);
310 #endif
311 }
312 
318 static inline void uart_reset_rx_fifo(UART_Type *ptr)
319 {
320 #if defined(HPM_IP_FEATURE_UART_FCRR) && (HPM_IP_FEATURE_UART_FCRR == 1)
322 #else
323  ptr->FCR = UART_FCR_RFIFORST_MASK | (ptr->GPR);
324 #endif
325 }
326 
332 static inline void uart_reset_all_fifo(UART_Type *ptr)
333 {
334 #if defined(HPM_IP_FEATURE_UART_FCRR) && (HPM_IP_FEATURE_UART_FCRR == 1)
336 #else
338 #endif
339 }
340 
346 static inline void uart_modem_enable_loopback(UART_Type *ptr)
347 {
348  ptr->MCR |= UART_MCR_LOOP_MASK;
349 }
350 
356 static inline void uart_modem_disable_loopback(UART_Type *ptr)
357 {
358  ptr->MCR &= ~UART_MCR_LOOP_MASK;
359 }
360 
368 {
369  ptr->MCR &= ~UART_MCR_AFE_MASK;
370 }
371 
378 {
379  ptr->MCR |= UART_MCR_AFE_MASK;
380 }
381 
388 static inline void uart_modem_config(UART_Type *ptr, uart_modem_config_t *config)
389 {
390  ptr->MCR = UART_MCR_AFE_SET(config->auto_flow_ctrl_en)
392  | UART_MCR_RTS_SET(!config->set_rts_high);
393 }
394 
401 static inline uint8_t uart_get_modem_status(UART_Type *ptr)
402 {
403  return ptr->MSR;
404 }
405 
412 static inline void uart_write_byte(UART_Type *ptr, uint8_t c)
413 {
414  ptr->THR = UART_THR_THR_SET(c);
415 }
416 
417 
424 static inline uint8_t uart_read_byte(UART_Type *ptr)
425 {
426  return (ptr->RBR & UART_RBR_RBR_MASK);
427 }
428 
438 {
439  return ((ptr->MSR & mask) != 0U) ? true : false;
440 }
441 
448 static inline void uart_disable_irq(UART_Type *ptr, uint32_t irq_mask)
449 {
450  ptr->IER &= ~irq_mask;
451 }
452 
459 static inline void uart_enable_irq(UART_Type *ptr, uint32_t irq_mask)
460 {
461  ptr->IER |= irq_mask;
462 }
463 
470 static inline uint32_t uart_get_enabled_irq(UART_Type *ptr)
471 {
472  return ptr->IER;
473 }
474 
481 static inline uint8_t uart_get_irq_id(UART_Type *ptr)
482 {
483  return (ptr->IIR & UART_IIR_INTRID_MASK);
484 }
485 
486 #if defined(HPM_IP_FEATURE_UART_RX_IDLE_DETECT) && (HPM_IP_FEATURE_UART_RX_IDLE_DETECT == 1)
487 
488 /* if HPM_IP_FEATURE_UART_E00018_FIX = 1, the IIR2 register exists, should use IIR2 to get/clear rx idle status */
489 #if !defined(HPM_IP_FEATURE_UART_E00018_FIX) || (HPM_IP_FEATURE_UART_E00018_FIX == 0)
495 static inline bool uart_is_rxline_idle(UART_Type *ptr)
496 {
497  return ((ptr->IIR & UART_IIR_RXIDLE_FLAG_MASK) != 0U) ? true : false;
498 }
499 
504 static inline void uart_clear_rxline_idle_flag(UART_Type *ptr)
505 {
506  ptr->IIR = UART_IIR_RXIDLE_FLAG_MASK; /* Write-1-Clear Logic */
507  ptr->FCR = ptr->GPR;
508 }
509 #endif
510 
516 {
518 }
519 
526 {
528 }
529 
537 
538 #endif
539 
540 #if defined(HPM_IP_FEATURE_UART_E00018_FIX) && (HPM_IP_FEATURE_UART_E00018_FIX == 1)
546 static inline bool uart_is_txline_idle(UART_Type *ptr)
547 {
548  return ((ptr->IIR2 & UART_IIR2_TXIDLE_FLAG_MASK) != 0U) ? true : false;
549 }
550 
555 static inline void uart_clear_txline_idle_flag(UART_Type *ptr)
556 {
557  ptr->IIR2 = UART_IIR2_TXIDLE_FLAG_MASK; /* Write-1-Clear Logic */
558 }
559 
565 static inline bool uart_is_rxline_idle(UART_Type *ptr)
566 {
567  return ((ptr->IIR2 & UART_IIR2_RXIDLE_FLAG_MASK) != 0U) ? true : false;
568 }
569 
574 static inline void uart_clear_rxline_idle_flag(UART_Type *ptr)
575 {
576  ptr->IIR2 = UART_IIR2_RXIDLE_FLAG_MASK; /* Write-1-Clear Logic */
577 }
578 #endif
579 
580 #if defined(HPM_IP_FEATURE_UART_9BIT_MODE) && (HPM_IP_FEATURE_UART_9BIT_MODE == 1)
586 {
588 }
589 
596 {
598 }
599 
607 
608 #endif
609 
610 
611 
618 static inline uint32_t uart_get_status(UART_Type *ptr)
619 {
620  return ptr->LSR;
621 }
622 
632 static inline bool uart_check_status(UART_Type *ptr, uart_stat_t mask)
633 {
634  return ((ptr->LSR & mask) != 0U) ? true : false;
635 }
636 
643 void uart_default_config(UART_Type *ptr, uart_config_t *config);
644 
653 
661 hpm_stat_t uart_send_byte(UART_Type *ptr, uint8_t c);
662 
670 hpm_stat_t uart_receive_byte(UART_Type *ptr, uint8_t *c);
671 
679 hpm_stat_t uart_try_receive_byte(UART_Type *ptr, uint8_t *c);
680 
689  uart_signal_t signal,
690  uart_signal_level_t level);
691 
699 
708 hpm_stat_t uart_receive_data(UART_Type *ptr, uint8_t *buf, uint32_t size_in_byte);
709 
718 hpm_stat_t uart_send_data(UART_Type *ptr, uint8_t *buf, uint32_t size_in_byte);
719 
732 hpm_stat_t uart_set_baudrate(UART_Type *ptr, uint32_t baudrate, uint32_t src_clock_hz);
733 
734 
735 #if defined(HPM_IP_FEATURE_UART_TRIG_MODE) && (HPM_IP_FEATURE_UART_TRIG_MODE == 1)
745 
753 static inline void uart_software_trig_transfer(UART_Type *ptr)
754 {
757 }
758 
767 static inline void uart_enable_hardware_trig_transfer(UART_Type *ptr, bool enable)
768 {
769  if (enable) {
771  } else {
773  }
774 }
775 
782 static inline uint8_t uart_get_data_count_in_rx_fifo(UART_Type *ptr)
783 {
784  return UART_LSR_RFIFO_NUM_GET(ptr->LSR);
785 }
786 
793 static inline uint8_t uart_get_data_count_in_tx_fifo(UART_Type *ptr)
794 {
795  return UART_LSR_TFIFO_NUM_GET(ptr->LSR);
796 }
797 #endif
798 
799 #if defined(HPM_IP_FEATURE_UART_ADDR_MATCH) && (HPM_IP_FEATURE_UART_ADDR_MATCH == 1)
806 static inline void uart_enable_9bit_transmit_mode(UART_Type *ptr, bool enable)
807 {
808  if (enable) {
812  } else {
816  }
817 }
818 
825 static inline void uart_enable_address0_match(UART_Type *ptr, uint8_t addr)
826 {
829 }
830 
837 static inline void uart_enable_address1_match(UART_Type *ptr, uint8_t addr)
838 {
841 }
842 
848 static inline void uart_disable_address0_match(UART_Type *ptr)
849 {
851 }
852 
858 static inline void uart_disable_address1_match(UART_Type *ptr)
859 {
861 }
862 
868 static inline void uart_disable_address_match(UART_Type *ptr)
869 {
871 }
872 
878 static inline bool uart_is_addr_match(UART_Type *ptr)
879 {
880  return ((ptr->IIR2 & UART_IIR2_ADDR_MATCH_MASK) != 0U) ? true : false;
881 }
882 
887 static inline void uart_clear_addr_match_flag(UART_Type *ptr)
888 {
889  ptr->IIR2 = UART_IIR2_ADDR_MATCH_MASK; /* Write-1-Clear Logic */
890 }
891 
897 static inline bool uart_is_addr_match_and_rxidle(UART_Type *ptr)
898 {
899  return ((ptr->IIR2 & UART_IIR2_ADDR_MATCH_IDLE_MASK) != 0U) ? true : false;
900 }
901 
907 {
908  ptr->IIR2 = UART_IIR2_ADDR_MATCH_IDLE_MASK; /* Write-1-Clear Logic */
909 }
910 
916 static inline bool uart_is_data_lost(UART_Type *ptr)
917 {
918  return ((ptr->IIR2 & UART_IIR2_DATA_LOST_MASK) != 0U) ? true : false;
919 }
920 
925 static inline void uart_clear_data_lost_flag(UART_Type *ptr)
926 {
927  ptr->IIR2 = UART_IIR2_DATA_LOST_MASK; /* Write-1-Clear Logic */
928 }
929 #endif
930 
937 static inline void uart_modem_write_rts_pin(UART_Type *ptr, uint8_t high)
938 {
939  if (high == true) {
940  ptr->MCR &= ~UART_MCR_RTS_MASK;
941  } else {
942  ptr->MCR |= UART_MCR_RTS_MASK;
943  }
944 }
945 
946 #if defined(HPM_IP_FEATURE_UART_DISABLE_DMA_TIMEOUT) && (HPM_IP_FEATURE_UART_DISABLE_DMA_TIMEOUT == 1)
952 static inline void uart_disable_rx_timeout_trig_dma(UART_Type *ptr)
953 {
955 }
956 
962 static inline void uart_enable_rx_timeout_trig_dma(UART_Type *ptr)
963 {
965 }
966 #endif
967 
968 #if defined(HPM_IP_FEATURE_UART_RX_LINE_ERROR_DETECT) && (HPM_IP_FEATURE_UART_RX_LINE_ERROR_DETECT == 1)
974 static inline bool uart_rx_is_fifo_error(UART_Type *ptr)
975 {
976  return ((ptr->IIR2 & UART_IIR2_LSR_ERRF_STS_MASK) != 0U) ? true : false;
977 }
978 
983 static inline void uart_clear_rx_fifo_error_flag(UART_Type *ptr)
984 {
985  ptr->IIR2 = UART_IIR2_LSR_ERRF_STS_MASK; /* Write-1-Clear Logic */
986 }
987 
993 static inline bool uart_rx_is_break(UART_Type *ptr)
994 {
995  return ((ptr->IIR2 & UART_IIR2_LSR_BREAK_STS_MASK) != 0U) ? true : false;
996 }
997 
1002 static inline void uart_clear_rx_break_flag(UART_Type *ptr)
1003 {
1004  ptr->IIR2 = UART_IIR2_LSR_BREAK_STS_MASK; /* Write-1-Clear Logic */
1005 }
1006 
1012 static inline bool uart_rx_is_framing_error(UART_Type *ptr)
1013 {
1014  return ((ptr->IIR2 & UART_IIR2_LSR_FRAMING_STS_MASK) != 0U) ? true : false;
1015 }
1016 
1021 static inline void uart_clear_rx_framing_error_flag(UART_Type *ptr)
1022 {
1023  ptr->IIR2 = UART_IIR2_LSR_FRAMING_STS_MASK; /* Write-1-Clear Logic */
1024 }
1025 
1031 static inline bool uart_rx_is_parity_error(UART_Type *ptr)
1032 {
1033  return ((ptr->IIR2 & UART_IIR2_LSR_PARITY_STS_MASK) != 0U) ? true : false;
1034 }
1035 
1040 static inline void uart_clear_rx_parity_error_flag(UART_Type *ptr)
1041 {
1042  ptr->IIR2 = UART_IIR2_LSR_PARITY_STS_MASK; /* Write-1-Clear Logic */
1043 }
1044 
1050 static inline bool uart_rx_is_overrun(UART_Type *ptr)
1051 {
1052  return ((ptr->IIR2 & UART_IIR2_LSR_OVERRUN_STS_MASK) != 0U) ? true : false;
1053 }
1054 
1059 static inline void uart_clear_rx_overrun_flag(UART_Type *ptr)
1060 {
1061  ptr->IIR2 = UART_IIR2_LSR_OVERRUN_STS_MASK; /* Write-1-Clear Logic */
1062 }
1063 
1064 #endif
1065 
1066 #if defined(HPM_IP_FEATURE_UART_DMA_STOP) && (HPM_IP_FEATURE_UART_DMA_STOP == 1)
1071 static inline void uart_rx_enable_dma_auto_stop(UART_Type *ptr)
1072 {
1073  ptr->FCRR |= UART_FCRR_DMA_STOP_EN_MASK;
1074 }
1075 
1080 static inline void uart_clear_rx_dma_auto_stop_flag(UART_Type *ptr)
1081 {
1082  ptr->FCRR = UART_FCRR_DMA_STOPPED_WRITE_CLEAR_MASK;
1083 }
1084 #endif
1085 
1086 #if defined(HPM_IP_FEATURE_UART_DE_DELAY) && (HPM_IP_FEATURE_UART_DE_DELAY == 1)
1092 static inline void uart_set_de_delay_before_start_bit(UART_Type *ptr, uint8_t delay)
1093 {
1094  ptr->MOTO_CFG = (ptr->MOTO_CFG & ~UART_MOTO_CFG_TXPRE_DLY_MASK) | UART_MOTO_CFG_TXPRE_DLY_SET(delay);
1095 }
1096 
1102 static inline void uart_set_de_delay_after_stop_bit(UART_Type *ptr, uint8_t delay)
1103 {
1104  ptr->MOTO_CFG |= UART_MOTO_CFG_TXSTOP_OPT_MASK | UART_MOTO_CFG_TXSTOP_INSERT_MASK;
1106 }
1107 
1108 #endif
1109 
1110 #ifdef __cplusplus
1111 }
1112 #endif
1117 #endif /* HPM_UART_DRV_H */
#define UART_SOC_FIFO_SIZE
Definition: hpm_soc_feature.h:148
#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_MOTO_CFG_TXSTP_BITS_MASK
Definition: hpm_uart_regs.h:435
#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_MOTO_CFG_TXSTOP_INSERT_MASK
Definition: hpm_uart_regs.h:479
#define UART_MOTO_CFG_TXSTP_BITS_SET(x)
Definition: hpm_uart_regs.h:437
#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
#define UART_FCRR_TMOUT_RXDMA_DIS_MASK
Definition: hpm_uart_regs.h:320
uint32_t hpm_stat_t
Definition: hpm_common.h:126
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:135
@ status_group_uart
Definition: hpm_common.h:139
static void uart_clear_addr_match_and_rxidle_flag(UART_Type *ptr)
Clear UART address match and rxidle Flag.
Definition: hpm_uart_drv.h:906
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:346
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:848
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:112
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
static void uart_enable_irq(UART_Type *ptr, uint32_t irq_mask)
Enable IRQ with mask.
Definition: hpm_uart_drv.h:459
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:837
static void uart_modem_disable_auto_flow_control(UART_Type *ptr)
Disable modem auto flow control.
Definition: hpm_uart_drv.h:367
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:632
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:437
uart_modem_stat
Definition: hpm_uart_drv.h:123
static void uart_disable_txline_idle_detection(UART_Type *ptr)
Disable UART TX Idle Line detection logic.
Definition: hpm_uart_drv.h:595
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:753
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_disable_irq(UART_Type *ptr, uint32_t irq_mask)
Disable IRQ with mask.
Definition: hpm_uart_drv.h:448
static void uart_enable_txline_idle_detection(UART_Type *ptr)
Enable UART TX Idle Line detection logic.
Definition: hpm_uart_drv.h:585
static bool uart_is_addr_match(UART_Type *ptr)
Determine whether address match for 9bit mode.
Definition: hpm_uart_drv.h:878
uart_intr_id
Definition: hpm_uart_drv.h:155
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:782
static void uart_enable_address0_match(UART_Type *ptr, uint8_t addr)
uart enable address0 match
Definition: hpm_uart_drv.h:825
static bool uart_is_txline_idle(UART_Type *ptr)
Determine whether UART TX Line is idle.
Definition: hpm_uart_drv.h:546
static void uart_enable_rx_function(UART_Type *ptr, bool enable)
Definition: hpm_uart_drv.h:289
static void uart_clear_txline_idle_flag(UART_Type *ptr)
Clear UART TX Line Idle Flag.
Definition: hpm_uart_drv.h:555
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:481
static void uart_modem_enable_auto_flow_control(UART_Type *ptr)
Enable modem auto flow control.
Definition: hpm_uart_drv.h:377
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:188
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:525
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:897
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:806
static void uart_reset_tx_fifo(UART_Type *ptr)
Reset TX Fifo.
Definition: hpm_uart_drv.h:304
uart_signal_level
Definition: hpm_uart_drv.h:117
static uint8_t uart_read_byte(UART_Type *ptr)
Read byte from RX.
Definition: hpm_uart_drv.h:424
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:515
static bool uart_is_data_lost(UART_Type *ptr)
Determine whether data lost for 9bit mode.
Definition: hpm_uart_drv.h:916
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:937
struct uart_modem_config uart_modem_config_t
UART modem config.
static void uart_modem_config(UART_Type *ptr, uart_modem_config_t *config)
Configure modem.
Definition: hpm_uart_drv.h:388
static uint32_t uart_get_status(UART_Type *ptr)
Get status.
Definition: hpm_uart_drv.h:618
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:858
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:258
static void uart_enable_hardware_trig_transfer(UART_Type *ptr, bool enable)
uart enable hardware trigger mode
Definition: hpm_uart_drv.h:767
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:412
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:318
static void uart_clear_data_lost_flag(UART_Type *ptr)
Clear UART data lost Flag.
Definition: hpm_uart_drv.h:925
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:332
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:401
static uint32_t uart_get_enabled_irq(UART_Type *ptr)
Get Enabled IRQ.
Definition: hpm_uart_drv.h:470
static void uart_disable_address_match(UART_Type *ptr)
uart disable address match(address0 and address1)
Definition: hpm_uart_drv.h:868
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:793
static void uart_clear_addr_match_flag(UART_Type *ptr)
Clear UART address match Flag.
Definition: hpm_uart_drv.h:887
uart_stat
Definition: hpm_uart_drv.h:164
static void uart_clear_rx_fifo(UART_Type *ptr)
uart clear rx fifo by reading data
Definition: hpm_uart_drv.h:281
static void uart_clear_rxline_idle_flag(UART_Type *ptr)
Clear UART RX Line Idle Flag.
Definition: hpm_uart_drv.h:574
static bool uart_is_rxline_idle(UART_Type *ptr)
Determine whether UART RX Line is idle.
Definition: hpm_uart_drv.h:565
uart_intr_enable
Definition: hpm_uart_drv.h:129
static void uart_modem_disable_loopback(UART_Type *ptr)
Disable modem loopback.
Definition: hpm_uart_drv.h:356
@ uart_signal_rts
Definition: hpm_uart_drv.h:113
@ uart_modem_stat_cts
Definition: hpm_uart_drv.h:124
@ uart_modem_stat_dcts_changed
Definition: hpm_uart_drv.h:125
@ uart_intr_id_tx_slot_avail
Definition: hpm_uart_drv.h:157
@ uart_intr_id_rx_data_avail
Definition: hpm_uart_drv.h:158
@ uart_intr_id_rx_line_stat
Definition: hpm_uart_drv.h:159
@ uart_intr_id_modem_stat
Definition: hpm_uart_drv.h:156
@ uart_intr_id_rx_timeout
Definition: hpm_uart_drv.h:160
@ 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:190
@ uart_rxline_idle_cond_rxline_logic_one
Definition: hpm_uart_drv.h:189
@ uart_signal_level_low
Definition: hpm_uart_drv.h:119
@ uart_signal_level_high
Definition: hpm_uart_drv.h:118
@ 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_27_bytes
Definition: hpm_uart_drv.h:82
@ uart_fifo_21_bytes
Definition: hpm_uart_drv.h:76
@ 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_fifo_28_bytes
Definition: hpm_uart_drv.h:83
@ uart_tx_fifo_trg_lt_one_quarter
Definition: hpm_uart_drv.h:97
@ uart_tx_fifo_trg_lt_three_quarters
Definition: hpm_uart_drv.h:95
@ uart_fifo_12_bytes
Definition: hpm_uart_drv.h:67
@ uart_rx_fifo_trg_gt_three_quarters
Definition: hpm_uart_drv.h:92
@ uart_fifo_18_bytes
Definition: hpm_uart_drv.h:73
@ uart_tx_fifo_trg_lt_half
Definition: hpm_uart_drv.h:96
@ uart_fifo_23_bytes
Definition: hpm_uart_drv.h:78
@ uart_fifo_10_bytes
Definition: hpm_uart_drv.h:65
@ uart_fifo_22_bytes
Definition: hpm_uart_drv.h:77
@ uart_fifo_4_bytes
Definition: hpm_uart_drv.h:59
@ uart_fifo_24_bytes
Definition: hpm_uart_drv.h:79
@ uart_fifo_5_bytes
Definition: hpm_uart_drv.h:60
@ uart_fifo_17_bytes
Definition: hpm_uart_drv.h:72
@ uart_fifo_19_bytes
Definition: hpm_uart_drv.h:74
@ uart_fifo_32_bytes
Definition: hpm_uart_drv.h:87
@ uart_fifo_3_bytes
Definition: hpm_uart_drv.h:58
@ uart_rx_fifo_trg_not_empty
Definition: hpm_uart_drv.h:89
@ 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_20_bytes
Definition: hpm_uart_drv.h:75
@ uart_fifo_2_bytes
Definition: hpm_uart_drv.h:57
@ uart_fifo_30_bytes
Definition: hpm_uart_drv.h:85
@ uart_fifo_25_bytes
Definition: hpm_uart_drv.h:80
@ uart_fifo_26_bytes
Definition: hpm_uart_drv.h:81
@ uart_fifo_29_bytes
Definition: hpm_uart_drv.h:84
@ uart_rx_fifo_trg_gt_half
Definition: hpm_uart_drv.h:91
@ uart_tx_fifo_trg_not_full
Definition: hpm_uart_drv.h:94
@ uart_rx_fifo_trg_gt_one_quarter
Definition: hpm_uart_drv.h:90
@ uart_fifo_31_bytes
Definition: hpm_uart_drv.h:86
@ 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:166
@ uart_stat_parity_error
Definition: hpm_uart_drv.h:167
@ uart_stat_transmitter_empty
Definition: hpm_uart_drv.h:171
@ uart_stat_tx_slot_avail
Definition: hpm_uart_drv.h:170
@ uart_stat_line_break
Definition: hpm_uart_drv.h:169
@ uart_stat_data_ready
Definition: hpm_uart_drv.h:165
@ uart_stat_rx_fifo_error
Definition: hpm_uart_drv.h:172
@ uart_stat_framing_error
Definition: hpm_uart_drv.h:168
@ uart_intr_addr_datalost
Definition: hpm_uart_drv.h:143
@ uart_intr_rx_data_avail_or_timeout
Definition: hpm_uart_drv.h:130
@ uart_intr_modem_stat
Definition: hpm_uart_drv.h:133
@ uart_intr_rx_line_stat
Definition: hpm_uart_drv.h:132
@ uart_intr_addr_match
Definition: hpm_uart_drv.h:141
@ uart_intr_tx_slot_avail
Definition: hpm_uart_drv.h:131
@ uart_intr_addr_match_and_rxidle
Definition: hpm_uart_drv.h:142
@ uart_intr_tx_line_idle
Definition: hpm_uart_drv.h:138
@ uart_intr_rx_line_idle
Definition: hpm_uart_drv.h:135
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:207
uint8_t num_of_stop_bits
Definition: hpm_uart_drv.h:210
uint8_t parity
Definition: hpm_uart_drv.h:212
uint8_t rx_fifo_level
Definition: hpm_uart_drv.h:214
bool rx_enable
Definition: hpm_uart_drv.h:225
bool fifo_enable
Definition: hpm_uart_drv.h:216
uint8_t tx_fifo_level
Definition: hpm_uart_drv.h:213
uint8_t word_length
Definition: hpm_uart_drv.h:211
uart_rxline_idle_config_t rxidle_config
Definition: hpm_uart_drv.h:219
uint32_t src_freq_in_hz
Definition: hpm_uart_drv.h:208
uart_rxline_idle_config_t txidle_config
Definition: hpm_uart_drv.h:222
uart_modem_config_t modem_config
Definition: hpm_uart_drv.h:217
uint32_t baudrate
Definition: hpm_uart_drv.h:209
bool dma_enable
Definition: hpm_uart_drv.h:215
UART Idle config, suitable for RX and TX.
Definition: hpm_uart_drv.h:196
bool detect_irq_enable
Definition: hpm_uart_drv.h:198
uint8_t threshold
Definition: hpm_uart_drv.h:200
uart_rxline_idle_cond_t idle_cond
Definition: hpm_uart_drv.h:199
bool detect_enable
Definition: hpm_uart_drv.h:197
Definition: hpm_uart_drv.h:239
uint8_t rx_fifo_level
Definition: hpm_uart_drv.h:241
bool fifo_enable
Definition: hpm_uart_drv.h:245
bool reset_tx_fifo
Definition: hpm_uart_drv.h:242
bool reset_rx_fifo
Definition: hpm_uart_drv.h:243
bool dma_enable
Definition: hpm_uart_drv.h:244
uint8_t tx_fifo_level
Definition: hpm_uart_drv.h:240
UART modem config.
Definition: hpm_uart_drv.h:178
bool loop_back_en
Definition: hpm_uart_drv.h:180
bool auto_flow_ctrl_en
Definition: hpm_uart_drv.h:179
bool set_rts_high
Definition: hpm_uart_drv.h:181
Definition: hpm_uart_drv.h:230
bool en_stop_bit_insert
Definition: hpm_uart_drv.h:232
bool trig_clr_rxfifo
Definition: hpm_uart_drv.h:235
uint16_t stop_bit_len
Definition: hpm_uart_drv.h:231
bool hardware_trig
Definition: hpm_uart_drv.h:233
bool trig_mode
Definition: hpm_uart_drv.h:234