14 enum class RxTimeoutMode : uint8_t
29 uint32_t tx_buffer_size = 128,
38 static void OnInterrupt(uint8_t index);
42 RxTimeoutMode GetRxTimeoutMode()
const {
return rx_timeout_mode_; }
43 uint32_t GetRxTimeoutCount()
const {
return rx_timeout_count_; }
44 uint32_t GetRxDropCount()
const {
return rx_drop_count_; }
45 uint32_t GetTimeoutInterruptEnabledMask()
const;
46 uint32_t GetTimeoutInterruptMaskedStatus()
const;
47 uint32_t GetTimeoutInterruptRawStatus()
const;
48 uint32_t GetRxInterruptTimeoutValue()
const;
49 uint32_t GetRxFifoThresholdValue()
const;
52 WritePort _write_port;
54 static constexpr uint8_t ResolveIndex(IRQn_Type irqn)
58#if defined(UART0_BASE)
62#if defined(UART1_BASE)
66#if defined(UART2_BASE)
70#if defined(UART3_BASE)
74#if defined(UART4_BASE)
78#if defined(UART5_BASE)
82#if defined(UART6_BASE)
86#if defined(UART7_BASE)
91 return INVALID_INSTANCE_INDEX;
96 static constexpr uint8_t MAX_UART_INSTANCES = 8;
97 static constexpr uint8_t INVALID_INSTANCE_INDEX = 0xFF;
99 void HandleInterrupt();
101 void HandleRxInterrupt(uint32_t timeout_mask);
103 void HandleRxTimeoutInterrupt(uint32_t pending, uint32_t timeout_mask);
105 void DrainRxFIFO(
bool& received,
bool& pushed);
107 void HandleTxInterrupt(
bool in_isr);
109 void HandleErrorInterrupt(DL_UART_IIDX iidx);
111 void ApplyRxTimeoutMode();
113 RxTimeoutMode ResolveRxTimeoutMode()
const;
115 uint32_t GetTimeoutInterruptMask()
const;
117 void ResetLinCounter();
119 void DisableTxInterrupt();
122 WriteInfoBlock tx_active_info_;
123 bool tx_active_valid_ =
false;
124 size_t tx_active_remaining_ = 0;
125 size_t tx_active_total_ = 0;
126 RxTimeoutMode rx_timeout_mode_ = RxTimeoutMode::BYTE_INTERRUPT;
127 uint32_t rx_drop_count_ = 0;
128 uint32_t rx_timeout_count_ = 0;
130 static MSPM0UART* instance_map_[MAX_UART_INSTANCES];