teensy40: move txBuffer allocation to UART declaration
Этот коммит содержится в:
родитель
34b50efdcd
коммит
6275b3a8d1
2 изменённых файлов: 25 добавлений и 18 удалений
|
@ -137,8 +137,9 @@ const (
|
||||||
|
|
||||||
var (
|
var (
|
||||||
UART1 = UART{
|
UART1 = UART{
|
||||||
Buffer: NewRingBuffer(),
|
Bus: nxp.LPUART6,
|
||||||
Bus: nxp.LPUART6,
|
Buffer: NewRingBuffer(),
|
||||||
|
txBuffer: NewRingBuffer(),
|
||||||
muxRX: muxSelect{ // D0 (PA3 [AD_B0_03])
|
muxRX: muxSelect{ // D0 (PA3 [AD_B0_03])
|
||||||
mux: nxp.IOMUXC_LPUART6_RX_SELECT_INPUT_DAISY_GPIO_AD_B0_03_ALT2,
|
mux: nxp.IOMUXC_LPUART6_RX_SELECT_INPUT_DAISY_GPIO_AD_B0_03_ALT2,
|
||||||
sel: &nxp.IOMUXC.LPUART6_RX_SELECT_INPUT,
|
sel: &nxp.IOMUXC.LPUART6_RX_SELECT_INPUT,
|
||||||
|
@ -149,8 +150,9 @@ var (
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
UART2 = UART{
|
UART2 = UART{
|
||||||
Buffer: NewRingBuffer(),
|
Bus: nxp.LPUART4,
|
||||||
Bus: nxp.LPUART4,
|
Buffer: NewRingBuffer(),
|
||||||
|
txBuffer: NewRingBuffer(),
|
||||||
muxRX: muxSelect{ // D7 (PB17 [B1_01])
|
muxRX: muxSelect{ // D7 (PB17 [B1_01])
|
||||||
mux: nxp.IOMUXC_LPUART4_RX_SELECT_INPUT_DAISY_GPIO_B1_01_ALT2,
|
mux: nxp.IOMUXC_LPUART4_RX_SELECT_INPUT_DAISY_GPIO_B1_01_ALT2,
|
||||||
sel: &nxp.IOMUXC.LPUART4_RX_SELECT_INPUT,
|
sel: &nxp.IOMUXC.LPUART4_RX_SELECT_INPUT,
|
||||||
|
@ -161,8 +163,9 @@ var (
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
UART3 = UART{
|
UART3 = UART{
|
||||||
Buffer: NewRingBuffer(),
|
Bus: nxp.LPUART2,
|
||||||
Bus: nxp.LPUART2,
|
Buffer: NewRingBuffer(),
|
||||||
|
txBuffer: NewRingBuffer(),
|
||||||
muxRX: muxSelect{ // D15 (PA19 [AD_B1_03])
|
muxRX: muxSelect{ // D15 (PA19 [AD_B1_03])
|
||||||
mux: nxp.IOMUXC_LPUART2_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_03_ALT2,
|
mux: nxp.IOMUXC_LPUART2_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_03_ALT2,
|
||||||
sel: &nxp.IOMUXC.LPUART2_RX_SELECT_INPUT,
|
sel: &nxp.IOMUXC.LPUART2_RX_SELECT_INPUT,
|
||||||
|
@ -173,8 +176,9 @@ var (
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
UART4 = UART{
|
UART4 = UART{
|
||||||
Buffer: NewRingBuffer(),
|
Bus: nxp.LPUART3,
|
||||||
Bus: nxp.LPUART3,
|
Buffer: NewRingBuffer(),
|
||||||
|
txBuffer: NewRingBuffer(),
|
||||||
muxRX: muxSelect{ // D16 (PA23 [AD_B1_07])
|
muxRX: muxSelect{ // D16 (PA23 [AD_B1_07])
|
||||||
mux: nxp.IOMUXC_LPUART3_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_07_ALT2,
|
mux: nxp.IOMUXC_LPUART3_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_07_ALT2,
|
||||||
sel: &nxp.IOMUXC.LPUART3_RX_SELECT_INPUT,
|
sel: &nxp.IOMUXC.LPUART3_RX_SELECT_INPUT,
|
||||||
|
@ -185,8 +189,9 @@ var (
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
UART5 = UART{
|
UART5 = UART{
|
||||||
Buffer: NewRingBuffer(),
|
Bus: nxp.LPUART8,
|
||||||
Bus: nxp.LPUART8,
|
Buffer: NewRingBuffer(),
|
||||||
|
txBuffer: NewRingBuffer(),
|
||||||
muxRX: muxSelect{ // D21 (PA27 [AD_B1_11])
|
muxRX: muxSelect{ // D21 (PA27 [AD_B1_11])
|
||||||
mux: nxp.IOMUXC_LPUART8_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_11_ALT2,
|
mux: nxp.IOMUXC_LPUART8_RX_SELECT_INPUT_DAISY_GPIO_AD_B1_11_ALT2,
|
||||||
sel: &nxp.IOMUXC.LPUART8_RX_SELECT_INPUT,
|
sel: &nxp.IOMUXC.LPUART8_RX_SELECT_INPUT,
|
||||||
|
@ -197,15 +202,17 @@ var (
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
UART6 = UART{
|
UART6 = UART{
|
||||||
Buffer: NewRingBuffer(),
|
Bus: nxp.LPUART1,
|
||||||
Bus: nxp.LPUART1,
|
Buffer: NewRingBuffer(),
|
||||||
|
txBuffer: NewRingBuffer(),
|
||||||
// LPUART1 not connected via IOMUXC
|
// LPUART1 not connected via IOMUXC
|
||||||
// RX: D24 (PA12 [AD_B0_12])
|
// RX: D24 (PA12 [AD_B0_12])
|
||||||
// TX: D25 (PA13 [AD_B0_13])
|
// TX: D25 (PA13 [AD_B0_13])
|
||||||
}
|
}
|
||||||
UART7 = UART{
|
UART7 = UART{
|
||||||
Buffer: NewRingBuffer(),
|
Bus: nxp.LPUART7,
|
||||||
Bus: nxp.LPUART7,
|
Buffer: NewRingBuffer(),
|
||||||
|
txBuffer: NewRingBuffer(),
|
||||||
muxRX: muxSelect{ // D28 (PC18 [EMC_32])
|
muxRX: muxSelect{ // D28 (PC18 [EMC_32])
|
||||||
mux: nxp.IOMUXC_LPUART7_RX_SELECT_INPUT_DAISY_GPIO_EMC_32_ALT2,
|
mux: nxp.IOMUXC_LPUART7_RX_SELECT_INPUT_DAISY_GPIO_EMC_32_ALT2,
|
||||||
sel: &nxp.IOMUXC.LPUART7_RX_SELECT_INPUT,
|
sel: &nxp.IOMUXC.LPUART7_RX_SELECT_INPUT,
|
||||||
|
|
|
@ -15,6 +15,10 @@ type UART struct {
|
||||||
Buffer *RingBuffer
|
Buffer *RingBuffer
|
||||||
Interrupt interrupt.Interrupt
|
Interrupt interrupt.Interrupt
|
||||||
|
|
||||||
|
// txBuffer should be allocated globally (such as when UART is created) to
|
||||||
|
// prevent it being reclaimed or cleaned up prematurely.
|
||||||
|
txBuffer *RingBuffer
|
||||||
|
|
||||||
// these hold the input selector ("daisy chain") values that select which pins
|
// these hold the input selector ("daisy chain") values that select which pins
|
||||||
// are connected to the LPUART device, and should be defined where the UART
|
// are connected to the LPUART device, and should be defined where the UART
|
||||||
// instance is declared. see the godoc comments on type muxSelect for more
|
// instance is declared. see the godoc comments on type muxSelect for more
|
||||||
|
@ -31,7 +35,6 @@ type UART struct {
|
||||||
configured bool
|
configured bool
|
||||||
msbFirst bool
|
msbFirst bool
|
||||||
transmitting volatile.Register32
|
transmitting volatile.Register32
|
||||||
txBuffer *RingBuffer
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (uart *UART) isTransmitting() bool { return uart.transmitting.Get() != 0 }
|
func (uart *UART) isTransmitting() bool { return uart.transmitting.Get() != 0 }
|
||||||
|
@ -197,9 +200,6 @@ func (uart *UART) Sync() error {
|
||||||
|
|
||||||
// WriteByte writes a single byte of data to the UART interface.
|
// WriteByte writes a single byte of data to the UART interface.
|
||||||
func (uart *UART) WriteByte(c byte) error {
|
func (uart *UART) WriteByte(c byte) error {
|
||||||
if nil == uart.txBuffer {
|
|
||||||
uart.txBuffer = NewRingBuffer()
|
|
||||||
}
|
|
||||||
uart.startTransmitting()
|
uart.startTransmitting()
|
||||||
for !uart.txBuffer.Put(c) {
|
for !uart.txBuffer.Put(c) {
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче