Skip to content

Commit c27235b

Browse files
committed
teensy40: move txBuffer allocation to UART declaration
1 parent a371265 commit c27235b

File tree

2 files changed

+37
-30
lines changed

2 files changed

+37
-30
lines changed

src/machine/board_teensy40.go

+33-26
Original file line numberDiff line numberDiff line change
@@ -137,47 +137,54 @@ const (
137137

138138
var (
139139
UART1 = UART{
140-
Buffer: NewRingBuffer(),
141-
Bus: nxp.LPUART6,
142-
rxMux: nxp.IOMUXC_LPUART6_RX_SELECT_INPUT_DAISY_GPIO_AD_B0_03_ALT2, // D0 (PA3 [AD_B0_03])
143-
txMux: nxp.IOMUXC_LPUART6_TX_SELECT_INPUT_DAISY_GPIO_AD_B0_02_ALT2, // D1 (PA2 [AD_B0_02])
140+
Bus: nxp.LPUART6,
141+
Buffer: NewRingBuffer(),
142+
txBuffer: NewRingBuffer(),
143+
rxMux: nxp.IOMUXC_LPUART6_RX_SELECT_INPUT_DAISY_GPIO_AD_B0_03_ALT2, // D0 (PA3 [AD_B0_03])
144+
txMux: nxp.IOMUXC_LPUART6_TX_SELECT_INPUT_DAISY_GPIO_AD_B0_02_ALT2, // D1 (PA2 [AD_B0_02])
144145
}
145146
UART2 = UART{
146-
Buffer: NewRingBuffer(),
147-
Bus: nxp.LPUART4,
148-
rxMux: nxp.IOMUXC_LPUART4_RX_SELECT_INPUT_DAISY_GPIO_B1_01_ALT2, // D7 (PB17 [B1_01])
149-
txMux: nxp.IOMUXC_LPUART4_TX_SELECT_INPUT_DAISY_GPIO_B1_00_ALT2, // D8 (PB16 [B1_00])
147+
Bus: nxp.LPUART4,
148+
Buffer: NewRingBuffer(),
149+
txBuffer: NewRingBuffer(),
150+
rxMux: nxp.IOMUXC_LPUART4_RX_SELECT_INPUT_DAISY_GPIO_B1_01_ALT2, // D7 (PB17 [B1_01])
151+
txMux: nxp.IOMUXC_LPUART4_TX_SELECT_INPUT_DAISY_GPIO_B1_00_ALT2, // D8 (PB16 [B1_00])
150152
}
151153
UART3 = UART{
152-
Buffer: NewRingBuffer(),
153-
Bus: nxp.LPUART2,
154-
rxMux: nxp.IOMUXC_LPUART2_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_03_ALT2, // D15 (PA19 [AD_B1_03])
155-
txMux: nxp.IOMUXC_LPUART2_TX_SELECT_INPUT_DAISY_GPIO_AD_B1_02_ALT2, // D14 (PA18 [AD_B1_02])
154+
Bus: nxp.LPUART2,
155+
Buffer: NewRingBuffer(),
156+
txBuffer: NewRingBuffer(),
157+
rxMux: nxp.IOMUXC_LPUART2_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_03_ALT2, // D15 (PA19 [AD_B1_03])
158+
txMux: nxp.IOMUXC_LPUART2_TX_SELECT_INPUT_DAISY_GPIO_AD_B1_02_ALT2, // D14 (PA18 [AD_B1_02])
156159
}
157160
UART4 = UART{
158-
Buffer: NewRingBuffer(),
159-
Bus: nxp.LPUART3,
160-
rxMux: nxp.IOMUXC_LPUART3_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_07_ALT2, // D16 (PA23 [AD_B1_07])
161-
txMux: nxp.IOMUXC_LPUART3_TX_SELECT_INPUT_DAISY_GPIO_AD_B1_06_ALT2, // D17 (PA22 [AD_B1_06])
161+
Bus: nxp.LPUART3,
162+
Buffer: NewRingBuffer(),
163+
txBuffer: NewRingBuffer(),
164+
rxMux: nxp.IOMUXC_LPUART3_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_07_ALT2, // D16 (PA23 [AD_B1_07])
165+
txMux: nxp.IOMUXC_LPUART3_TX_SELECT_INPUT_DAISY_GPIO_AD_B1_06_ALT2, // D17 (PA22 [AD_B1_06])
162166
}
163167
UART5 = UART{
164-
Buffer: NewRingBuffer(),
165-
Bus: nxp.LPUART8,
166-
rxMux: nxp.IOMUXC_LPUART8_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_11_ALT2, // D21 (PA27 [AD_B1_11])
167-
txMux: nxp.IOMUXC_LPUART8_TX_SELECT_INPUT_DAISY_GPIO_AD_B1_10_ALT2, // D20 (PA26 [AD_B1_10])
168+
Bus: nxp.LPUART8,
169+
Buffer: NewRingBuffer(),
170+
txBuffer: NewRingBuffer(),
171+
rxMux: nxp.IOMUXC_LPUART8_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_11_ALT2, // D21 (PA27 [AD_B1_11])
172+
txMux: nxp.IOMUXC_LPUART8_TX_SELECT_INPUT_DAISY_GPIO_AD_B1_10_ALT2, // D20 (PA26 [AD_B1_10])
168173
}
169174
UART6 = UART{
170-
Buffer: NewRingBuffer(),
171-
Bus: nxp.LPUART1,
175+
Bus: nxp.LPUART1,
176+
Buffer: NewRingBuffer(),
177+
txBuffer: NewRingBuffer(),
172178
// LPUART1 not connected via IOMUXC
173179
// RX: D24 (PA12 [AD_B0_12])
174180
// TX: D25 (PA13 [AD_B0_13])
175181
}
176182
UART7 = UART{
177-
Buffer: NewRingBuffer(),
178-
Bus: nxp.LPUART7,
179-
rxMux: nxp.IOMUXC_LPUART7_RX_SELECT_INPUT_DAISY_GPIO_EMC_32_ALT2, // D28 (PC18 [EMC_32])
180-
txMux: nxp.IOMUXC_LPUART7_TX_SELECT_INPUT_DAISY_GPIO_EMC_31_ALT2, // D29 (PD31 [EMC_31])
183+
Bus: nxp.LPUART7,
184+
Buffer: NewRingBuffer(),
185+
txBuffer: NewRingBuffer(),
186+
rxMux: nxp.IOMUXC_LPUART7_RX_SELECT_INPUT_DAISY_GPIO_EMC_32_ALT2, // D28 (PC18 [EMC_32])
187+
txMux: nxp.IOMUXC_LPUART7_TX_SELECT_INPUT_DAISY_GPIO_EMC_31_ALT2, // D29 (PD31 [EMC_31])
181188
}
182189
)
183190

src/machine/machine_mimxrt1062_uart.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ type UART struct {
1515
Buffer *RingBuffer
1616
Interrupt interrupt.Interrupt
1717

18+
// txBuffer should be allocated globally (such as when UART is created) to
19+
// prevent it being reclaimed or cleaned up prematurely.
20+
txBuffer *RingBuffer
21+
1822
// These hold the input selector ("daisy chain") values of the IOMUXC
1923
// controller that selects which pins are connected to the LPUART device;
2024
// define these where the UART instance is declared.
@@ -30,7 +34,6 @@ type UART struct {
3034
configured bool
3135
msbFirst bool
3236
transmitting volatile.Register32
33-
txBuffer *RingBuffer
3437
}
3538

3639
func (uart *UART) isTransmitting() bool { return uart.transmitting.Get() != 0 }
@@ -195,9 +198,6 @@ func (uart *UART) Sync() error {
195198

196199
// WriteByte writes a single byte of data to the UART interface.
197200
func (uart *UART) WriteByte(c byte) error {
198-
if nil == uart.txBuffer {
199-
uart.txBuffer = NewRingBuffer()
200-
}
201201
uart.startTransmitting()
202202
for !uart.txBuffer.Put(c) {
203203
}

0 commit comments

Comments
 (0)