sam: simplify definition of SERCOM UART peripherals
Instead of defining them separately for each board, define them once in the chip definition and later simply use &sercomUART1 etc. to refer to them. This is simpler and less error-prone. I found two bugs while working on this: - The P1AM-100 board mixed SERCOM 5 and SERCOM 3. It looks like SERCOM 5 was intended, based on the used pins. - The Adafruit Matrix Portal appears to have configured the wrong interrupt. Unfortunately, I can't test these fixes. However, they make it clear that such a change is important to avoid bugs. I tested this commit on the PyBadge and the Circuit Playground Express.
Этот коммит содержится в:
родитель
478dd3a28d
коммит
e50885a6f2
35 изменённых файлов: 156 добавлений и 402 удалений
|
@ -8,7 +8,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// used to reset into bootloader
|
// used to reset into bootloader
|
||||||
|
@ -98,18 +97,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// UART on the Arduino MKR WiFi 1010.
|
// UART on the Arduino MKR WiFi 1010.
|
||||||
var (
|
var UART1 = &sercomUSART5
|
||||||
UART1 = &_UART1
|
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM5_USART,
|
|
||||||
SERCOM: 5,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM5, _UART1.handleInterrupt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// I2C on the Arduino MKR WiFi 1010.
|
// I2C on the Arduino MKR WiFi 1010.
|
||||||
var (
|
var (
|
||||||
|
|
|
@ -58,6 +58,12 @@ const (
|
||||||
UART_RX_PIN Pin = PA23
|
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
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN Pin = A4 // SDA: SERCOM4/PAD[1]
|
SDA_PIN Pin = A4 // SDA: SERCOM4/PAD[1]
|
||||||
|
|
|
@ -4,34 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the Arduino Nano 33.
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
|
|
@ -4,7 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Definition for compatibility, but not used
|
// Definition for compatibility, but not used
|
||||||
|
@ -240,45 +239,18 @@ var (
|
||||||
// UART on the SAM E54 Xplained Pro
|
// UART on the SAM E54 Xplained Pro
|
||||||
var (
|
var (
|
||||||
// Extension Header EXT1
|
// Extension Header EXT1
|
||||||
UART1 = &_UART1
|
UART1 = &sercomUSART0
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM0_USART_INT,
|
|
||||||
SERCOM: 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extension Header EXT2
|
// Extension Header EXT2
|
||||||
UART2 = &_UART2
|
UART2 = &sercomUSART5
|
||||||
_UART2 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM5_USART_INT,
|
|
||||||
SERCOM: 5,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extension Header EXT3
|
// Extension Header EXT3
|
||||||
UART3 = &_UART3
|
UART3 = &sercomUSART1
|
||||||
_UART3 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM1_USART_INT,
|
|
||||||
SERCOM: 1,
|
|
||||||
}
|
|
||||||
|
|
||||||
// EDBG Virtual COM Port
|
// EDBG Virtual COM Port
|
||||||
UART4 = &_UART4
|
UART4 = &sercomUSART2
|
||||||
_UART4 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM2_USART_INT,
|
|
||||||
SERCOM: 2,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
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
|
// I2C on the SAM E54 Xplained Pro
|
||||||
var (
|
var (
|
||||||
// Extension Header EXT1
|
// Extension Header EXT1
|
||||||
|
|
|
@ -67,6 +67,13 @@ const (
|
||||||
UART_RX_PIN = PB09 // PORTB
|
UART_RX_PIN = PB09 // PORTB
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// UART1 on the Circuit Playground Express.
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART4
|
||||||
|
|
||||||
|
DefaultUART = UART1
|
||||||
|
)
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN = PB02 // I2C0 external
|
SDA_PIN = PB02 // I2C0 external
|
||||||
|
|
|
@ -4,23 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the Circuit Playground Express.
|
||||||
var (
|
var (
|
||||||
// external device
|
// external device
|
||||||
|
@ -47,7 +32,3 @@ var (
|
||||||
var (
|
var (
|
||||||
I2S0 = I2S{Bus: sam.I2S}
|
I2S0 = I2S{Bus: sam.I2S}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// used to reset into bootloader
|
// used to reset into bootloader
|
||||||
|
@ -55,18 +54,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// UART1 on the Feather M0.
|
// UART1 on the Feather M0.
|
||||||
var (
|
var UART1 = &sercomUSART1
|
||||||
UART1 = &_UART1
|
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM1_USART,
|
|
||||||
SERCOM: 1,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, _UART1.handleInterrupt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -4,7 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// used to reset into bootloader
|
// used to reset into bootloader
|
||||||
|
@ -104,25 +103,12 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
UART1 = &_UART1
|
UART1 = &sercomUSART5
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM5_USART_INT,
|
|
||||||
SERCOM: 5,
|
|
||||||
}
|
|
||||||
|
|
||||||
UART2 = &_UART2
|
UART2 = &sercomUSART0
|
||||||
_UART2 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM0_USART_INT,
|
|
||||||
SERCOM: 0,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
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
|
// turn on neopixel
|
||||||
D7.Configure(PinConfig{Mode: PinOutput})
|
D7.Configure(PinConfig{Mode: PinOutput})
|
||||||
D7.High()
|
D7.High()
|
||||||
|
|
|
@ -56,6 +56,13 @@ const (
|
||||||
UART2_RX_PIN = A5
|
UART2_RX_PIN = A5
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART5
|
||||||
|
UART2 = &sercomUSART0
|
||||||
|
|
||||||
|
DefaultUART = UART1
|
||||||
|
)
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN = D22 // SDA: SERCOM2/PAD[0]
|
SDA_PIN = D22 // SDA: SERCOM2/PAD[0]
|
||||||
|
|
|
@ -4,30 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the Feather M4.
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
@ -43,7 +21,3 @@ var (
|
||||||
SERCOM: 1,
|
SERCOM: 1,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -160,6 +160,16 @@ const (
|
||||||
UART_TX_PIN = UART1_TX_PIN //
|
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
|
// SPI pins
|
||||||
const (
|
const (
|
||||||
SPI0_SCK_PIN = D66 // (PD09), also on D52
|
SPI0_SCK_PIN = D66 // (PD09), also on D52
|
||||||
|
|
|
@ -4,42 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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
|
// I2C on the Grand Central M4
|
||||||
|
@ -65,7 +29,3 @@ var (
|
||||||
SERCOM: 2,
|
SERCOM: 2,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// used to reset into bootloader
|
// used to reset into bootloader
|
||||||
|
@ -56,18 +55,9 @@ const (
|
||||||
|
|
||||||
// UART1 on the ItsyBitsy M0.
|
// UART1 on the ItsyBitsy M0.
|
||||||
var (
|
var (
|
||||||
UART1 = &_UART1
|
UART1 = &sercomUSART1
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM1_USART,
|
|
||||||
SERCOM: 1,
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
|
||||||
UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM1, _UART1.handleInterrupt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN = PA22 // SDA: SERCOM3/PAD[0]
|
SDA_PIN = PA22 // SDA: SERCOM3/PAD[0]
|
||||||
|
|
|
@ -54,6 +54,13 @@ const (
|
||||||
UART2_RX_PIN = D2
|
UART2_RX_PIN = D2
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART3
|
||||||
|
UART2 = &sercomUSART0
|
||||||
|
|
||||||
|
DefaultUART = UART1
|
||||||
|
)
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN = PA12 // SDA: SERCOM2/PAD[0]
|
SDA_PIN = PA12 // SDA: SERCOM2/PAD[0]
|
||||||
|
|
|
@ -4,30 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the ItsyBitsy M4.
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
@ -43,7 +21,3 @@ var (
|
||||||
SERCOM: 1,
|
SERCOM: 1,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -96,6 +96,14 @@ const (
|
||||||
UART_TX_PIN = UART1_TX_PIN
|
UART_TX_PIN = UART1_TX_PIN
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// UART on the MatrixPortal M4
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART1
|
||||||
|
UART2 = &sercomUSART4
|
||||||
|
|
||||||
|
DefaultUART = UART1
|
||||||
|
)
|
||||||
|
|
||||||
// SPI pins
|
// SPI pins
|
||||||
const (
|
const (
|
||||||
SPI0_SCK_PIN = D34 // SERCOM3[1] (ESP32 SCK)
|
SPI0_SCK_PIN = D34 // SERCOM3[1] (ESP32 SCK)
|
||||||
|
|
|
@ -4,31 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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
|
// I2C on the MatrixPortal M4
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
@ -50,7 +27,3 @@ var (
|
||||||
SERCOM: 0,
|
SERCOM: 0,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -57,6 +57,13 @@ const (
|
||||||
UART2_RX_PIN = PA07
|
UART2_RX_PIN = PA07
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART3
|
||||||
|
UART2 = &sercomUSART0
|
||||||
|
|
||||||
|
DefaultUART = UART1
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
NINA_CS = PA15
|
NINA_CS = PA15
|
||||||
NINA_ACK = PB04
|
NINA_ACK = PB04
|
||||||
|
|
|
@ -4,30 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the Metro M4.
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
@ -52,7 +30,3 @@ var (
|
||||||
SERCOM: 1,
|
SERCOM: 1,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -79,6 +79,9 @@ const (
|
||||||
UART_TX_PIN Pin = PB22 // TX: SERCOM5/PAD[2]
|
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
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN Pin = PA08 // SDA: SERCOM0/PAD[0]
|
SDA_PIN Pin = PA08 // SDA: SERCOM0/PAD[0]
|
||||||
|
|
|
@ -4,23 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the P1AM-100.
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
|
|
@ -84,6 +84,13 @@ const (
|
||||||
UART2_RX_PIN = A5
|
UART2_RX_PIN = A5
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART5
|
||||||
|
UART2 = &sercomUSART0
|
||||||
|
|
||||||
|
DefaultUART = UART1
|
||||||
|
)
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN = PA12 // SDA: SERCOM2/PAD[0]
|
SDA_PIN = PA12 // SDA: SERCOM2/PAD[0]
|
||||||
|
|
|
@ -4,30 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the ItsyBitsy M4.
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
@ -51,7 +29,3 @@ var (
|
||||||
SERCOM: 4,
|
SERCOM: 4,
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -107,6 +107,12 @@ const (
|
||||||
UART_RX_PIN = D0
|
UART_RX_PIN = D0
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART4
|
||||||
|
|
||||||
|
DefaultUART = UART1
|
||||||
|
)
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA_PIN = PB02 // SDA: SERCOM2/PAD[0]
|
SDA_PIN = PB02 // SDA: SERCOM2/PAD[0]
|
||||||
|
|
|
@ -4,22 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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.
|
// I2C on the PyPortal.
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
@ -36,7 +22,3 @@ var (
|
||||||
}
|
}
|
||||||
NINA_SPI = SPI0
|
NINA_SPI = SPI0
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
|
||||||
DefaultUART = UART1
|
|
||||||
)
|
|
||||||
|
|
|
@ -4,7 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// used to reset into bootloader
|
// used to reset into bootloader
|
||||||
|
@ -60,18 +59,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// UART1 on the QT Py M0.
|
// UART1 on the QT Py M0.
|
||||||
var (
|
var UART1 = &sercomUSART0
|
||||||
UART1 = &_UART1
|
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM0_USART,
|
|
||||||
SERCOM: 0,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM0, _UART1.handleInterrupt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SPI pins
|
// SPI pins
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -4,7 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// used to reset into bootloader
|
// used to reset into bootloader
|
||||||
|
@ -46,18 +45,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// UART1 on the Trinket M0.
|
// UART1 on the Trinket M0.
|
||||||
var (
|
var UART1 = &sercomUSART0
|
||||||
UART1 = &_UART1
|
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM0_USART,
|
|
||||||
SERCOM: 0,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM0, _UART1.handleInterrupt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// SPI pins
|
// SPI pins
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -343,6 +343,13 @@ const (
|
||||||
UART2_RX_PIN = PIN_SERIAL2_RX
|
UART2_RX_PIN = PIN_SERIAL2_RX
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
UART1 = &sercomUSART2
|
||||||
|
|
||||||
|
// RTL8720D
|
||||||
|
UART2 = &sercomUSART1
|
||||||
|
)
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
SDA0_PIN = PIN_WIRE_SDA // SDA: SERCOM3/PAD[0]
|
SDA0_PIN = PIN_WIRE_SDA // SDA: SERCOM3/PAD[0]
|
||||||
|
|
|
@ -4,31 +4,8 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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
|
// I2C on the Wio Terminal
|
||||||
var (
|
var (
|
||||||
I2C0 = &I2C{
|
I2C0 = &I2C{
|
||||||
|
|
|
@ -4,7 +4,6 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"device/sam"
|
||||||
"runtime/interrupt"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// used to reset into bootloader
|
// used to reset into bootloader
|
||||||
|
@ -61,18 +60,7 @@ const (
|
||||||
)
|
)
|
||||||
|
|
||||||
// UART1 on the Xiao
|
// UART1 on the Xiao
|
||||||
var (
|
var UART1 = &sercomUSART4
|
||||||
UART1 = &_UART1
|
|
||||||
_UART1 = UART{
|
|
||||||
Buffer: NewRingBuffer(),
|
|
||||||
Bus: sam.SERCOM4_USART,
|
|
||||||
SERCOM: 4,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
UART1.Interrupt = interrupt.New(sam.IRQ_SERCOM4, _UART1.handleInterrupt)
|
|
||||||
}
|
|
||||||
|
|
||||||
// I2C pins
|
// I2C pins
|
||||||
const (
|
const (
|
||||||
|
|
|
@ -504,10 +504,6 @@ type UART struct {
|
||||||
Interrupt interrupt.Interrupt
|
Interrupt interrupt.Interrupt
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
|
||||||
USB = &USBCDC{Buffer: NewRingBuffer()}
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
sampleRate16X = 16
|
sampleRate16X = 16
|
||||||
lsbFirst = 1
|
lsbFirst = 1
|
||||||
|
@ -1743,6 +1739,10 @@ type USBCDC struct {
|
||||||
sent bool
|
sent bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
USB = &USBCDC{Buffer: NewRingBuffer()}
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
usbcdcTxSizeMask uint8 = 0x3F
|
usbcdcTxSizeMask uint8 = 0x3F
|
||||||
usbcdcTxBankMask uint8 = ^usbcdcTxSizeMask
|
usbcdcTxBankMask uint8 = ^usbcdcTxSizeMask
|
||||||
|
|
|
@ -9,8 +9,23 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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
|
// Return the register and mask to enable a given GPIO pin. This can be used to
|
||||||
// implement bit-banged drivers.
|
// implement bit-banged drivers.
|
||||||
func (p Pin) PortMaskSet() (*uint32, uint32) {
|
func (p Pin) PortMaskSet() (*uint32, uint32) {
|
||||||
|
|
|
@ -9,8 +9,27 @@ package machine
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"device/sam"
|
"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
|
// Return the register and mask to enable a given GPIO pin. This can be used to
|
||||||
// implement bit-banged drivers.
|
// implement bit-banged drivers.
|
||||||
func (p Pin) PortMaskSet() (*uint32, uint32) {
|
func (p Pin) PortMaskSet() (*uint32, uint32) {
|
||||||
|
|
|
@ -951,10 +951,23 @@ type UART struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// USB is a USB CDC interface.
|
sercomUSART0 = UART{Buffer: NewRingBuffer(), Bus: sam.SERCOM0_USART_INT, SERCOM: 0}
|
||||||
USB = &USBCDC{Buffer: NewRingBuffer()}
|
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 (
|
const (
|
||||||
sampleRate16X = 16
|
sampleRate16X = 16
|
||||||
lsbFirst = 1
|
lsbFirst = 1
|
||||||
|
@ -1950,6 +1963,11 @@ type USBCDC struct {
|
||||||
sent bool
|
sent bool
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
// USB is a USB CDC interface.
|
||||||
|
USB = &USBCDC{Buffer: NewRingBuffer()}
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
usbcdcTxSizeMask uint8 = 0x3F
|
usbcdcTxSizeMask uint8 = 0x3F
|
||||||
usbcdcTxBankMask uint8 = ^usbcdcTxSizeMask
|
usbcdcTxBankMask uint8 = ^usbcdcTxSizeMask
|
||||||
|
|
|
@ -165,3 +165,14 @@ func uartRead(bus uint8, buf *byte, bufLen int) int
|
||||||
|
|
||||||
//export __tinygo_uart_write
|
//export __tinygo_uart_write
|
||||||
func uartWrite(bus uint8, buf *byte, bufLen int) int
|
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}
|
||||||
|
)
|
||||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче