diff --git a/src/machine/board_arduino_mkrwifi1010.go b/src/machine/board_arduino_mkrwifi1010.go index e9df43cb..e8cf76ab 100644 --- a/src/machine/board_arduino_mkrwifi1010.go +++ b/src/machine/board_arduino_mkrwifi1010.go @@ -8,7 +8,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // used to reset into bootloader @@ -98,18 +97,7 @@ const ( ) // UART on the Arduino MKR WiFi 1010. -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM5_USART, - SERCOM: 5, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM5, _UART1.handleInterrupt) -} +var UART1 = &sercomUSART5 // I2C on the Arduino MKR WiFi 1010. var ( diff --git a/src/machine/board_arduino_nano33.go b/src/machine/board_arduino_nano33.go index 606f5e63..ae4a7cd8 100644 --- a/src/machine/board_arduino_nano33.go +++ b/src/machine/board_arduino_nano33.go @@ -58,6 +58,12 @@ const ( UART_RX_PIN Pin = PA23 ) +// UART1 on the Arduino Nano 33 connects to the onboard NINA-W102 WiFi chip. +var UART1 = &sercomUSART3 + +// UART2 on the Arduino Nano 33 connects to the normal TX/RX pins. +var UART2 = &sercomUSART5 + // I2C pins const ( SDA_PIN Pin = A4 // SDA: SERCOM4/PAD[1] diff --git a/src/machine/board_arduino_nano33_baremetal.go b/src/machine/board_arduino_nano33_baremetal.go index 79e62d24..708698e4 100644 --- a/src/machine/board_arduino_nano33_baremetal.go +++ b/src/machine/board_arduino_nano33_baremetal.go @@ -4,34 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -// UART1 on the Arduino Nano 33 connects to the onboard NINA-W102 WiFi chip. -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM3_USART, - SERCOM: 3, - } -) - -// UART2 on the Arduino Nano 33 connects to the normal TX/RX pins. -var ( - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM5_USART, - SERCOM: 5, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM3, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM5, _UART2.handleInterrupt) -} - // I2C on the Arduino Nano 33. var ( I2C0 = &I2C{ diff --git a/src/machine/board_atsame54-xpro.go b/src/machine/board_atsame54-xpro.go index c61324b6..92d1d713 100644 --- a/src/machine/board_atsame54-xpro.go +++ b/src/machine/board_atsame54-xpro.go @@ -4,7 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // Definition for compatibility, but not used @@ -240,45 +239,18 @@ var ( // UART on the SAM E54 Xplained Pro var ( // Extension Header EXT1 - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART_INT, - SERCOM: 0, - } + UART1 = &sercomUSART0 // Extension Header EXT2 - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM5_USART_INT, - SERCOM: 5, - } + UART2 = &sercomUSART5 // Extension Header EXT3 - UART3 = &_UART3 - _UART3 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM1_USART_INT, - SERCOM: 1, - } + UART3 = &sercomUSART1 // EDBG Virtual COM Port - UART4 = &_UART4 - _UART4 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM2_USART_INT, - SERCOM: 2, - } + UART4 = &sercomUSART2 ) -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM5_2, _UART2.handleInterrupt) - UART3.Interrupt = interrupt.New(sam.IRQ_SERCOM1_2, _UART3.handleInterrupt) - UART4.Interrupt = interrupt.New(sam.IRQ_SERCOM2_2, _UART4.handleInterrupt) -} - // I2C on the SAM E54 Xplained Pro var ( // Extension Header EXT1 diff --git a/src/machine/board_circuitplay_express.go b/src/machine/board_circuitplay_express.go index ad49c24b..e39784e0 100644 --- a/src/machine/board_circuitplay_express.go +++ b/src/machine/board_circuitplay_express.go @@ -67,6 +67,13 @@ const ( UART_RX_PIN = PB09 // PORTB ) +// UART1 on the Circuit Playground Express. +var ( + UART1 = &sercomUSART4 + + DefaultUART = UART1 +) + // I2C pins const ( SDA_PIN = PB02 // I2C0 external diff --git a/src/machine/board_circuitplay_express_baremetal.go b/src/machine/board_circuitplay_express_baremetal.go index b9c41cf2..cc5f2a62 100644 --- a/src/machine/board_circuitplay_express_baremetal.go +++ b/src/machine/board_circuitplay_express_baremetal.go @@ -4,23 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -// UART1 on the Circuit Playground Express. -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM4_USART, - SERCOM: 4, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM4, _UART1.handleInterrupt) -} - // I2C on the Circuit Playground Express. var ( // external device @@ -47,7 +32,3 @@ var ( var ( I2S0 = I2S{Bus: sam.I2S} ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_feather-m0.go b/src/machine/board_feather-m0.go index 17afc1ec..91e23883 100644 --- a/src/machine/board_feather-m0.go +++ b/src/machine/board_feather-m0.go @@ -4,7 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // used to reset into bootloader @@ -55,18 +54,7 @@ const ( ) // UART1 on the Feather M0. -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM1_USART, - SERCOM: 1, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, _UART1.handleInterrupt) -} +var UART1 = &sercomUSART1 // I2C pins const ( diff --git a/src/machine/board_feather-m4-can.go b/src/machine/board_feather-m4-can.go index eebc3dd4..df2327d5 100644 --- a/src/machine/board_feather-m4-can.go +++ b/src/machine/board_feather-m4-can.go @@ -4,7 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // used to reset into bootloader @@ -104,25 +103,12 @@ var ( ) var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM5_USART_INT, - SERCOM: 5, - } + UART1 = &sercomUSART5 - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART_INT, - SERCOM: 0, - } + UART2 = &sercomUSART0 ) func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM5_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, _UART2.handleInterrupt) - // turn on neopixel D7.Configure(PinConfig{Mode: PinOutput}) D7.High() diff --git a/src/machine/board_feather-m4.go b/src/machine/board_feather-m4.go index 86158ed6..b8a3854d 100644 --- a/src/machine/board_feather-m4.go +++ b/src/machine/board_feather-m4.go @@ -56,6 +56,13 @@ const ( UART2_RX_PIN = A5 ) +var ( + UART1 = &sercomUSART5 + UART2 = &sercomUSART0 + + DefaultUART = UART1 +) + // I2C pins const ( SDA_PIN = D22 // SDA: SERCOM2/PAD[0] diff --git a/src/machine/board_feather-m4_baremetal.go b/src/machine/board_feather-m4_baremetal.go index ec243f43..005de851 100644 --- a/src/machine/board_feather-m4_baremetal.go +++ b/src/machine/board_feather-m4_baremetal.go @@ -4,30 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM5_USART_INT, - SERCOM: 5, - } - - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART_INT, - SERCOM: 0, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM5_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, _UART2.handleInterrupt) -} - // I2C on the Feather M4. var ( I2C0 = &I2C{ @@ -43,7 +21,3 @@ var ( SERCOM: 1, } ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_grandcentral-m4.go b/src/machine/board_grandcentral-m4.go index c1b629c9..9e8e56d0 100644 --- a/src/machine/board_grandcentral-m4.go +++ b/src/machine/board_grandcentral-m4.go @@ -160,6 +160,16 @@ const ( UART_TX_PIN = UART1_TX_PIN // ) +// UART on the Grand Central M4 +var ( + UART1 = &sercomUSART0 + UART2 = &sercomUSART4 + UART3 = &sercomUSART1 + UART4 = &sercomUSART5 + + DefaultUART = UART1 +) + // SPI pins const ( SPI0_SCK_PIN = D66 // (PD09), also on D52 diff --git a/src/machine/board_grandcentral-m4_baremetal.go b/src/machine/board_grandcentral-m4_baremetal.go index 6f0235f9..e862b29f 100644 --- a/src/machine/board_grandcentral-m4_baremetal.go +++ b/src/machine/board_grandcentral-m4_baremetal.go @@ -4,42 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM4_2, _UART2.handleInterrupt) - UART3.Interrupt = interrupt.New(sam.IRQ_SERCOM1_2, _UART3.handleInterrupt) - UART4.Interrupt = interrupt.New(sam.IRQ_SERCOM5_2, _UART4.handleInterrupt) -} - -// UART on the Grand Central M4 -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART_INT, - SERCOM: 0, - } - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM4_USART_INT, - SERCOM: 4, - } - UART3 = &_UART3 - _UART3 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM1_USART_INT, - SERCOM: 1, - } - UART4 = &_UART4 - _UART4 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM5_USART_INT, - SERCOM: 5, - } ) // I2C on the Grand Central M4 @@ -65,7 +29,3 @@ var ( SERCOM: 2, } ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_itsybitsy-m0.go b/src/machine/board_itsybitsy-m0.go index 788fcef4..828b4620 100644 --- a/src/machine/board_itsybitsy-m0.go +++ b/src/machine/board_itsybitsy-m0.go @@ -4,7 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // used to reset into bootloader @@ -56,18 +55,9 @@ const ( // UART1 on the ItsyBitsy M0. var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM1_USART, - SERCOM: 1, - } + UART1 = &sercomUSART1 ) -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, _UART1.handleInterrupt) -} - // I2C pins const ( SDA_PIN = PA22 // SDA: SERCOM3/PAD[0] diff --git a/src/machine/board_itsybitsy-m4.go b/src/machine/board_itsybitsy-m4.go index 099ceed4..e3ad2164 100644 --- a/src/machine/board_itsybitsy-m4.go +++ b/src/machine/board_itsybitsy-m4.go @@ -54,6 +54,13 @@ const ( UART2_RX_PIN = D2 ) +var ( + UART1 = &sercomUSART3 + UART2 = &sercomUSART0 + + DefaultUART = UART1 +) + // I2C pins const ( SDA_PIN = PA12 // SDA: SERCOM2/PAD[0] diff --git a/src/machine/board_itsybitsy-m4_baremetal.go b/src/machine/board_itsybitsy-m4_baremetal.go index b555525c..0e779a2a 100644 --- a/src/machine/board_itsybitsy-m4_baremetal.go +++ b/src/machine/board_itsybitsy-m4_baremetal.go @@ -4,30 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM3_USART_INT, - SERCOM: 3, - } - - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART_INT, - SERCOM: 0, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM3_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, _UART2.handleInterrupt) -} - // I2C on the ItsyBitsy M4. var ( I2C0 = &I2C{ @@ -43,7 +21,3 @@ var ( SERCOM: 1, } ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_matrixportal-m4.go b/src/machine/board_matrixportal-m4.go index 9236e62d..ae1753ce 100644 --- a/src/machine/board_matrixportal-m4.go +++ b/src/machine/board_matrixportal-m4.go @@ -96,6 +96,14 @@ const ( UART_TX_PIN = UART1_TX_PIN ) +// UART on the MatrixPortal M4 +var ( + UART1 = &sercomUSART1 + UART2 = &sercomUSART4 + + DefaultUART = UART1 +) + // SPI pins const ( SPI0_SCK_PIN = D34 // SERCOM3[1] (ESP32 SCK) diff --git a/src/machine/board_matrixportal-m4_baremetal.go b/src/machine/board_matrixportal-m4_baremetal.go index f60a535b..5b9a6fee 100644 --- a/src/machine/board_matrixportal-m4_baremetal.go +++ b/src/machine/board_matrixportal-m4_baremetal.go @@ -4,31 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -// UART on the MatrixPortal M4 -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM1_USART_INT, - SERCOM: 1, - } - - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM4_USART_INT, - SERCOM: 4, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1_1, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM4_1, _UART2.handleInterrupt) -} - // I2C on the MatrixPortal M4 var ( I2C0 = &I2C{ @@ -50,7 +27,3 @@ var ( SERCOM: 0, } ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_metro-m4-airlift.go b/src/machine/board_metro-m4-airlift.go index 4aa24815..6525286d 100644 --- a/src/machine/board_metro-m4-airlift.go +++ b/src/machine/board_metro-m4-airlift.go @@ -57,6 +57,13 @@ const ( UART2_RX_PIN = PA07 ) +var ( + UART1 = &sercomUSART3 + UART2 = &sercomUSART0 + + DefaultUART = UART1 +) + const ( NINA_CS = PA15 NINA_ACK = PB04 diff --git a/src/machine/board_metro-m4-airlift_baremetal.go b/src/machine/board_metro-m4-airlift_baremetal.go index c390b94b..2dd84f81 100644 --- a/src/machine/board_metro-m4-airlift_baremetal.go +++ b/src/machine/board_metro-m4-airlift_baremetal.go @@ -4,30 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM3_USART_INT, - SERCOM: 3, - } - - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART_INT, - SERCOM: 0, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM3_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, _UART2.handleInterrupt) -} - // I2C on the Metro M4. var ( I2C0 = &I2C{ @@ -52,7 +30,3 @@ var ( SERCOM: 1, } ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_p1am-100.go b/src/machine/board_p1am-100.go index 46964e4e..caeaba69 100644 --- a/src/machine/board_p1am-100.go +++ b/src/machine/board_p1am-100.go @@ -79,6 +79,9 @@ const ( UART_TX_PIN Pin = PB22 // TX: SERCOM5/PAD[2] ) +// UART1 on the P1AM-100 connects to the normal TX/RX pins. +var UART1 = &sercomUSART5 + // I2C pins const ( SDA_PIN Pin = PA08 // SDA: SERCOM0/PAD[0] diff --git a/src/machine/board_p1am-100_baremetal.go b/src/machine/board_p1am-100_baremetal.go index e50dd446..067fe07e 100644 --- a/src/machine/board_p1am-100_baremetal.go +++ b/src/machine/board_p1am-100_baremetal.go @@ -4,23 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -// UART1 on the P1AM-100 connects to the normal TX/RX pins. -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM3_USART, - SERCOM: 5, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM5, _UART1.handleInterrupt) -} - // I2C on the P1AM-100. var ( I2C0 = &I2C{ diff --git a/src/machine/board_pybadge.go b/src/machine/board_pybadge.go index e175da68..a4cd61c7 100644 --- a/src/machine/board_pybadge.go +++ b/src/machine/board_pybadge.go @@ -84,6 +84,13 @@ const ( UART2_RX_PIN = A5 ) +var ( + UART1 = &sercomUSART5 + UART2 = &sercomUSART0 + + DefaultUART = UART1 +) + // I2C pins const ( SDA_PIN = PA12 // SDA: SERCOM2/PAD[0] diff --git a/src/machine/board_pybadge_baremetal.go b/src/machine/board_pybadge_baremetal.go index 259e3c38..94fa7da2 100644 --- a/src/machine/board_pybadge_baremetal.go +++ b/src/machine/board_pybadge_baremetal.go @@ -4,30 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM5_USART_INT, - SERCOM: 5, - } - - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART_INT, - SERCOM: 0, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM5_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, _UART2.handleInterrupt) -} - // I2C on the ItsyBitsy M4. var ( I2C0 = &I2C{ @@ -51,7 +29,3 @@ var ( SERCOM: 4, } ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_pyportal.go b/src/machine/board_pyportal.go index ff2fcb7f..28badad2 100644 --- a/src/machine/board_pyportal.go +++ b/src/machine/board_pyportal.go @@ -107,6 +107,12 @@ const ( UART_RX_PIN = D0 ) +var ( + UART1 = &sercomUSART4 + + DefaultUART = UART1 +) + // I2C pins const ( SDA_PIN = PB02 // SDA: SERCOM2/PAD[0] diff --git a/src/machine/board_pyportal_baremetal.go b/src/machine/board_pyportal_baremetal.go index 9dc03e63..9f7a77e0 100644 --- a/src/machine/board_pyportal_baremetal.go +++ b/src/machine/board_pyportal_baremetal.go @@ -4,22 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM4_USART_INT, - SERCOM: 4, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM4_2, _UART1.handleInterrupt) -} - // I2C on the PyPortal. var ( I2C0 = &I2C{ @@ -36,7 +22,3 @@ var ( } NINA_SPI = SPI0 ) - -var ( - DefaultUART = UART1 -) diff --git a/src/machine/board_qtpy.go b/src/machine/board_qtpy.go index 503ba6f7..64389331 100644 --- a/src/machine/board_qtpy.go +++ b/src/machine/board_qtpy.go @@ -4,7 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // used to reset into bootloader @@ -60,18 +59,7 @@ const ( ) // UART1 on the QT Py M0. -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART, - SERCOM: 0, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM0, _UART1.handleInterrupt) -} +var UART1 = &sercomUSART0 // SPI pins const ( diff --git a/src/machine/board_trinket.go b/src/machine/board_trinket.go index f97a5ccb..8df249e5 100644 --- a/src/machine/board_trinket.go +++ b/src/machine/board_trinket.go @@ -4,7 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // used to reset into bootloader @@ -46,18 +45,7 @@ const ( ) // UART1 on the Trinket M0. -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM0_USART, - SERCOM: 0, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM0, _UART1.handleInterrupt) -} +var UART1 = &sercomUSART0 // SPI pins const ( diff --git a/src/machine/board_wioterminal.go b/src/machine/board_wioterminal.go index 57bbff1b..55631d74 100644 --- a/src/machine/board_wioterminal.go +++ b/src/machine/board_wioterminal.go @@ -343,6 +343,13 @@ const ( UART2_RX_PIN = PIN_SERIAL2_RX ) +var ( + UART1 = &sercomUSART2 + + // RTL8720D + UART2 = &sercomUSART1 +) + // I2C pins const ( SDA0_PIN = PIN_WIRE_SDA // SDA: SERCOM3/PAD[0] diff --git a/src/machine/board_wioterminal_baremetal.go b/src/machine/board_wioterminal_baremetal.go index a8657f91..da333cd5 100644 --- a/src/machine/board_wioterminal_baremetal.go +++ b/src/machine/board_wioterminal_baremetal.go @@ -4,31 +4,8 @@ package machine import ( "device/sam" - "runtime/interrupt" ) -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM2_USART_INT, - SERCOM: 2, - } - - // RTL8720D - UART2 = &_UART2 - _UART2 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM1_USART_INT, - SERCOM: 1, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM2_2, _UART1.handleInterrupt) - UART2.Interrupt = interrupt.New(sam.IRQ_SERCOM1_2, _UART2.handleInterrupt) -} - // I2C on the Wio Terminal var ( I2C0 = &I2C{ diff --git a/src/machine/board_xiao.go b/src/machine/board_xiao.go index ac5ffbda..5cf87b7d 100644 --- a/src/machine/board_xiao.go +++ b/src/machine/board_xiao.go @@ -4,7 +4,6 @@ package machine import ( "device/sam" - "runtime/interrupt" ) // used to reset into bootloader @@ -61,18 +60,7 @@ const ( ) // UART1 on the Xiao -var ( - UART1 = &_UART1 - _UART1 = UART{ - Buffer: NewRingBuffer(), - Bus: sam.SERCOM4_USART, - SERCOM: 4, - } -) - -func init() { - UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM4, _UART1.handleInterrupt) -} +var UART1 = &sercomUSART4 // I2C pins const ( diff --git a/src/machine/machine_atsamd21.go b/src/machine/machine_atsamd21.go index dce28743..ac02740d 100644 --- a/src/machine/machine_atsamd21.go +++ b/src/machine/machine_atsamd21.go @@ -504,10 +504,6 @@ type UART struct { Interrupt interrupt.Interrupt } -var ( - USB = &USBCDC{Buffer: NewRingBuffer()} -) - const ( sampleRate16X = 16 lsbFirst = 1 @@ -1743,6 +1739,10 @@ type USBCDC struct { sent bool } +var ( + USB = &USBCDC{Buffer: NewRingBuffer()} +) + const ( usbcdcTxSizeMask uint8 = 0x3F usbcdcTxBankMask uint8 = ^usbcdcTxSizeMask diff --git a/src/machine/machine_atsamd21e18.go b/src/machine/machine_atsamd21e18.go index bdd53bd1..0d62e883 100644 --- a/src/machine/machine_atsamd21e18.go +++ b/src/machine/machine_atsamd21e18.go @@ -9,8 +9,23 @@ package machine import ( "device/sam" + "runtime/interrupt" ) +var ( + sercomUSART0 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM0_USART, SERCOM: 0} + sercomUSART1 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM1_USART, SERCOM: 1} + sercomUSART2 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM2_USART, SERCOM: 2} + sercomUSART3 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM3_USART, SERCOM: 3} +) + +func init() { + sercomUSART0.Interrupt = interrupt.New(sam.IRQ_SERCOM0, sercomUSART0.handleInterrupt) + sercomUSART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, sercomUSART1.handleInterrupt) + sercomUSART2.Interrupt = interrupt.New(sam.IRQ_SERCOM2, sercomUSART2.handleInterrupt) + sercomUSART3.Interrupt = interrupt.New(sam.IRQ_SERCOM3, sercomUSART3.handleInterrupt) +} + // Return the register and mask to enable a given GPIO pin. This can be used to // implement bit-banged drivers. func (p Pin) PortMaskSet() (*uint32, uint32) { diff --git a/src/machine/machine_atsamd21g18.go b/src/machine/machine_atsamd21g18.go index b5f905b3..b836b0eb 100644 --- a/src/machine/machine_atsamd21g18.go +++ b/src/machine/machine_atsamd21g18.go @@ -9,8 +9,27 @@ package machine import ( "device/sam" + "runtime/interrupt" ) +var ( + sercomUSART0 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM0_USART, SERCOM: 0} + sercomUSART1 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM1_USART, SERCOM: 1} + sercomUSART2 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM2_USART, SERCOM: 2} + sercomUSART3 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM3_USART, SERCOM: 3} + sercomUSART4 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM4_USART, SERCOM: 4} + sercomUSART5 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM5_USART, SERCOM: 5} +) + +func init() { + sercomUSART0.Interrupt = interrupt.New(sam.IRQ_SERCOM0, sercomUSART0.handleInterrupt) + sercomUSART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, sercomUSART1.handleInterrupt) + sercomUSART2.Interrupt = interrupt.New(sam.IRQ_SERCOM2, sercomUSART2.handleInterrupt) + sercomUSART3.Interrupt = interrupt.New(sam.IRQ_SERCOM3, sercomUSART3.handleInterrupt) + sercomUSART4.Interrupt = interrupt.New(sam.IRQ_SERCOM4, sercomUSART4.handleInterrupt) + sercomUSART5.Interrupt = interrupt.New(sam.IRQ_SERCOM5, sercomUSART5.handleInterrupt) +} + // Return the register and mask to enable a given GPIO pin. This can be used to // implement bit-banged drivers. func (p Pin) PortMaskSet() (*uint32, uint32) { diff --git a/src/machine/machine_atsamd51.go b/src/machine/machine_atsamd51.go index 4fc5bc62..b7c96339 100644 --- a/src/machine/machine_atsamd51.go +++ b/src/machine/machine_atsamd51.go @@ -951,10 +951,23 @@ type UART struct { } var ( - // USB is a USB CDC interface. - USB = &USBCDC{Buffer: NewRingBuffer()} + sercomUSART0 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM0_USART_INT, SERCOM: 0} + sercomUSART1 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM1_USART_INT, SERCOM: 1} + sercomUSART2 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM2_USART_INT, SERCOM: 2} + sercomUSART3 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM3_USART_INT, SERCOM: 3} + sercomUSART4 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM4_USART_INT, SERCOM: 4} + sercomUSART5 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM5_USART_INT, SERCOM: 5} ) +func init() { + sercomUSART0.Interrupt = interrupt.New(sam.IRQ_SERCOM0_2, sercomUSART0.handleInterrupt) + sercomUSART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1_2, sercomUSART1.handleInterrupt) + sercomUSART2.Interrupt = interrupt.New(sam.IRQ_SERCOM2_2, sercomUSART2.handleInterrupt) + sercomUSART3.Interrupt = interrupt.New(sam.IRQ_SERCOM3_2, sercomUSART3.handleInterrupt) + sercomUSART4.Interrupt = interrupt.New(sam.IRQ_SERCOM4_2, sercomUSART4.handleInterrupt) + sercomUSART5.Interrupt = interrupt.New(sam.IRQ_SERCOM5_2, sercomUSART5.handleInterrupt) +} + const ( sampleRate16X = 16 lsbFirst = 1 @@ -1950,6 +1963,11 @@ type USBCDC struct { sent bool } +var ( + // USB is a USB CDC interface. + USB = &USBCDC{Buffer: NewRingBuffer()} +) + const ( usbcdcTxSizeMask uint8 = 0x3F usbcdcTxBankMask uint8 = ^usbcdcTxSizeMask diff --git a/src/machine/machine_generic.go b/src/machine/machine_generic.go index 70551e27..8e6821fa 100644 --- a/src/machine/machine_generic.go +++ b/src/machine/machine_generic.go @@ -165,3 +165,14 @@ func uartRead(bus uint8, buf *byte, bufLen int) int //export __tinygo_uart_write func uartWrite(bus uint8, buf *byte, bufLen int) int + +// Some objects used by Atmel SAM D chips (samd21, samd51). +// Defined here (without build tag) for convenience. +var ( + sercomUSART0 = UART{0} + sercomUSART1 = UART{1} + sercomUSART2 = UART{2} + sercomUSART3 = UART{3} + sercomUSART4 = UART{4} + sercomUSART5 = UART{5} +)