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.
Этот коммит содержится в:
Ayke van Laethem 2021-10-15 21:20:45 +02:00 коммит произвёл Ron Evans
родитель 478dd3a28d
коммит e50885a6f2
35 изменённых файлов: 156 добавлений и 402 удалений

Просмотреть файл

@ -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 (

Просмотреть файл

@ -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]

Просмотреть файл

@ -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{

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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
)

Просмотреть файл

@ -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 (

Просмотреть файл

@ -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()

Просмотреть файл

@ -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]

Просмотреть файл

@ -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
)

Просмотреть файл

@ -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

Просмотреть файл

@ -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
)

Просмотреть файл

@ -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]

Просмотреть файл

@ -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]

Просмотреть файл

@ -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
)

Просмотреть файл

@ -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)

Просмотреть файл

@ -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
)

Просмотреть файл

@ -57,6 +57,13 @@ const (
UART2_RX_PIN = PA07
)
var (
UART1 = &sercomUSART3
UART2 = &sercomUSART0
DefaultUART = UART1
)
const (
NINA_CS = PA15
NINA_ACK = PB04

Просмотреть файл

@ -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
)

Просмотреть файл

@ -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]

Просмотреть файл

@ -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{

Просмотреть файл

@ -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]

Просмотреть файл

@ -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
)

Просмотреть файл

@ -107,6 +107,12 @@ const (
UART_RX_PIN = D0
)
var (
UART1 = &sercomUSART4
DefaultUART = UART1
)
// I2C pins
const (
SDA_PIN = PB02 // SDA: SERCOM2/PAD[0]

Просмотреть файл

@ -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
)

Просмотреть файл

@ -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 (

Просмотреть файл

@ -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 (

Просмотреть файл

@ -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]

Просмотреть файл

@ -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{

Просмотреть файл

@ -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 (

Просмотреть файл

@ -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

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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) {

Просмотреть файл

@ -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

Просмотреть файл

@ -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}
)