13 enum class RxTimeoutMode : uint8_t
28 uint32_t tx_buffer_size = 128,
37 static void OnInterrupt(uint8_t index);
41 RxTimeoutMode GetRxTimeoutMode()
const {
return rx_timeout_mode_; }
42 uint32_t GetRxTimeoutCount()
const {
return rx_timeout_count_; }
43 uint32_t GetRxDropCount()
const {
return rx_drop_count_; }
44 uint32_t GetTimeoutInterruptEnabledMask()
const;
45 uint32_t GetTimeoutInterruptMaskedStatus()
const;
46 uint32_t GetTimeoutInterruptRawStatus()
const;
47 uint32_t GetRxInterruptTimeoutValue()
const;
48 uint32_t GetRxFifoThresholdValue()
const;
51 WritePort _write_port;
53 static constexpr uint8_t ResolveIndex(IRQn_Type irqn)
57#if defined(UART0_BASE)
61#if defined(UART1_BASE)
65#if defined(UART2_BASE)
69#if defined(UART3_BASE)
73#if defined(UART4_BASE)
77#if defined(UART5_BASE)
81#if defined(UART6_BASE)
85#if defined(UART7_BASE)
90 return INVALID_INSTANCE_INDEX;
95 static constexpr uint8_t MAX_UART_INSTANCES = 8;
96 static constexpr uint8_t INVALID_INSTANCE_INDEX = 0xFF;
98 void HandleInterrupt();
100 void HandleRxInterrupt(uint32_t timeout_mask);
102 void HandleRxTimeoutInterrupt(uint32_t pending, uint32_t timeout_mask);
104 void DrainRxFIFO(
bool& received,
bool& pushed);
106 void HandleTxInterrupt(
bool in_isr);
108 void HandleErrorInterrupt(DL_UART_IIDX iidx);
110 void CompletePendingReadOnTimeout(
bool in_isr);
112 void ApplyRxTimeoutMode();
114 RxTimeoutMode ResolveRxTimeoutMode()
const;
116 uint32_t GetTimeoutInterruptMask()
const;
118 void ResetLinCounter();
120 void DisableTxInterrupt();
123 WriteInfoBlock tx_active_info_;
124 bool tx_active_valid_ =
false;
125 size_t tx_active_remaining_ = 0;
126 size_t tx_active_total_ = 0;
127 RxTimeoutMode rx_timeout_mode_ = RxTimeoutMode::BYTE_INTERRUPT;
128 uint32_t rx_drop_count_ = 0;
129 uint32_t rx_timeout_count_ = 0;
131 static MSPM0UART* instance_map_[MAX_UART_INSTANCES];