sam: simplify I2C peripheral declarations

This commit changes the I2C declarations so that the objects are
instantiated in each chip file (e.g. machine_atsamd21e18.go) and used to
define I2C0 (and similar) in the board file (e.g. board_qtpy.go). This
should make it easier to define new board files, and reduces the need
for separate *_baremetal.go files.

I have tested this the following way:

  - With the LIS3DH driver example on the Circuit Playground Express and
    the PyBadge.
  - With the LSM6DS3 driver example on the Arduino Nano 33 IoT.

They both still work fine.
Этот коммит содержится в:
Ayke van Laethem 2021-10-15 22:52:34 +02:00 коммит произвёл Ron Evans
родитель e50885a6f2
коммит ae864bdf0c
42 изменённых файлов: 169 добавлений и 153 удалений

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

@ -101,10 +101,7 @@ var UART1 = &sercomUSART5
// I2C on the Arduino MKR WiFi 1010.
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
I2C0 = sercomI2CM2
)
// SPI on the Arduino MKR WiFi 1010.

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

@ -70,6 +70,11 @@ const (
SCL_PIN Pin = A5 // SCL: SERCOM4/PAD[1]
)
// I2C on the Arduino Nano 33.
var (
I2C0 = sercomI2CM4
)
// SPI pins
const (
SPI0_SCK_PIN Pin = D13 // SCK: SERCOM1/PAD[1]

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the Arduino Nano 33.
var (
I2C0 = &I2C{
Bus: sam.SERCOM4_I2CM,
SERCOM: 4,
}
)
// SPI on the Arduino Nano 33.
var (
SPI0 = SPI{

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

@ -254,28 +254,16 @@ var (
// I2C on the SAM E54 Xplained Pro
var (
// Extension Header EXT1
I2C0 = I2C{
Bus: sam.SERCOM3_I2CM,
SERCOM: 3,
}
I2C0 = sercomI2CM3
// Extension Header EXT2
I2C1 = I2C{
Bus: sam.SERCOM7_I2CM,
SERCOM: 7,
}
I2C1 = sercomI2CM7
// Extension Header EXT3
I2C2 = I2C{
Bus: sam.SERCOM7_I2CM,
SERCOM: 7,
}
I2C2 = sercomI2CM7
// Data Gateway Interface
I2C3 = I2C{
Bus: sam.SERCOM7_I2CM,
SERCOM: 7,
}
I2C3 = sercomI2CM7
)
// SPI on the SAM E54 Xplained Pro

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

@ -83,6 +83,12 @@ const (
SCL1_PIN = PA01 // I2C1 internal
)
// I2C on the Circuit Playground Express.
var (
I2C0 = sercomI2CM5 // external device
I2C1 = sercomI2CM1 // internal device
)
// SPI pins (internal flash)
const (
SPI0_SCK_PIN = PA21 // SCK: SERCOM3/PAD[3]

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

@ -6,20 +6,6 @@ import (
"device/sam"
)
// I2C on the Circuit Playground Express.
var (
// external device
I2C0 = &I2C{
Bus: sam.SERCOM5_I2CM,
SERCOM: 5,
}
// internal device
I2C1 = &I2C{
Bus: sam.SERCOM1_I2CM,
SERCOM: 1,
}
)
// SPI on the Circuit Playground Express.
var (
SPI0 = SPI{

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

@ -64,10 +64,7 @@ const (
// I2C on the Feather M0.
var (
I2C0 = &I2C{
Bus: sam.SERCOM3_I2CM,
SERCOM: 3,
}
I2C0 = sercomI2CM3
)
// SPI pins

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

@ -116,10 +116,7 @@ func init() {
// I2C on the Feather M4 CAN.
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
I2C0 = sercomI2CM2
)
// SPI on the Feather M4 CAN.

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

@ -69,6 +69,11 @@ const (
SCL_PIN = D21 // SCL: SERCOM2/PAD[1]
)
// I2C on the Feather M4.
var (
I2C0 = sercomI2CM2
)
// SPI pins
const (
SPI0_SCK_PIN = D25 // SCK: SERCOM1/PAD[1]

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the Feather M4.
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
)
// SPI on the Feather M4.
var (
SPI0 = SPI{

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

@ -202,6 +202,12 @@ const (
SCL_PIN = I2C_SCL_PIN // (required by machine_atsamd51.go)
)
// I2C on the Grand Central M4
var (
I2C0 = sercomI2CM3
I2C1 = sercomI2CM6
)
// I2S pins
const (
I2S0_SCK_PIN = D14 // (PB16)

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

@ -6,18 +6,6 @@ import (
"device/sam"
)
// I2C on the Grand Central M4
var (
I2C0 = &I2C{
Bus: sam.SERCOM3_I2CM,
SERCOM: 3,
}
I2C1 = &I2C{
Bus: sam.SERCOM6_I2CM,
SERCOM: 6,
}
)
// SPI on the Grand Central M4
var (
SPI0 = SPI{

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

@ -66,10 +66,7 @@ const (
// I2C on the ItsyBitsy M0.
var (
I2C0 = &I2C{
Bus: sam.SERCOM3_I2CM,
SERCOM: 3,
}
I2C0 = sercomI2CM3
)
// SPI pins

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

@ -67,6 +67,11 @@ const (
SCL_PIN = PA13 // SCL: SERCOM2/PAD[1]
)
// I2C on the ItsyBitsy M4.
var (
I2C0 = sercomI2CM2
)
// SPI pins
const (
SPI0_SCK_PIN = PA01 // SCK: SERCOM1/PAD[1]

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the ItsyBitsy M4.
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
)
// SPI on the ItsyBitsy M4.
var (
SPI0 = SPI{

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

@ -131,6 +131,11 @@ const (
SCL_PIN = I2C_SCL_PIN //
)
// I2C on the MatrixPortal M4
var (
I2C0 = sercomI2CM5
)
// ESP32 pins
const (
NINA_ACK = D31

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the MatrixPortal M4
var (
I2C0 = &I2C{
Bus: sam.SERCOM5_I2CM,
SERCOM: 5,
}
)
// SPI on the MatrixPortal M4
var (
SPI0 = SPI{

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

@ -81,6 +81,11 @@ const (
SCL_PIN = PB03 // SCL: SERCOM5/PAD[1]
)
// I2C on the Metro M4.
var (
I2C0 = sercomI2CM5
)
// SPI pins
const (
SPI0_SCK_PIN = PA13 // SCK: SERCOM2/PAD[1]

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the Metro M4.
var (
I2C0 = &I2C{
Bus: sam.SERCOM5_I2CM,
SERCOM: 5,
}
)
// SPI on the Metro M4.
var (
SPI0 = SPI{

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

@ -88,6 +88,11 @@ const (
SCL_PIN Pin = PA09 // SCL: SERCOM0/PAD[1]
)
// I2C on the P1AM-100.
var (
I2C0 = sercomI2CM0
)
// SPI pins
const (
SPI0_SCK_PIN Pin = D9 // SCK: SERCOM1/PAD[1]

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the P1AM-100.
var (
I2C0 = &I2C{
Bus: sam.SERCOM0_I2CM,
SERCOM: 0,
}
)
// SPI on the P1AM-100 is used for Base Controller.
var (
SPI0 = SPI{

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

@ -97,6 +97,9 @@ const (
SCL_PIN = PA13 // SCL: SERCOM2/PAD[1]
)
// I2C on the ItsyBitsy M4.
var I2C0 = sercomI2CM2
// SPI pins
const (
SPI0_SCK_PIN = PA17 // SCK: SERCOM1/PAD[1]

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the ItsyBitsy M4.
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
)
// SPI on the PyBadge.
var (
SPI0 = SPI{

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

@ -100,10 +100,7 @@ const (
// I2C on the PyGamer.
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
I2C0 = sercomI2CM2
)
// SPI pins

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

@ -119,6 +119,11 @@ const (
SCL_PIN = PB03 // SCL: SERCOM2/PAD[1]
)
// I2C on the PyPortal.
var (
I2C0 = sercomI2CM5
)
// SPI pins
const (
SPI0_SCK_PIN = PA13 // SCK: SERCOM1/PAD[1]

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

@ -6,14 +6,6 @@ import (
"device/sam"
)
// I2C on the PyPortal.
var (
I2C0 = &I2C{
Bus: sam.SERCOM5_I2CM,
SERCOM: 5,
}
)
// SPI on the PyPortal.
var (
SPI0 = SPI{

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

@ -84,10 +84,7 @@ const (
// I2C on the QT Py M0.
var (
I2C0 = &I2C{
Bus: sam.SERCOM1_I2CM,
SERCOM: 1,
}
I2C0 = sercomI2CM1
)
// I2S pins

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

@ -70,10 +70,7 @@ const (
// I2C on the Trinket M0.
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
I2C0 = sercomI2CM2
)
// I2S pins

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

@ -362,6 +362,12 @@ const (
SCL_PIN = SCL0_PIN
)
// I2C on the Wio Terminal
var (
I2C0 = sercomI2CM4
I2C1 = sercomI2CM4
)
// SPI pins
const (
SPI0_SCK_PIN = SCK // SCK: SERCOM5/PAD[1]

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

@ -6,19 +6,6 @@ import (
"device/sam"
)
// I2C on the Wio Terminal
var (
I2C0 = &I2C{
Bus: sam.SERCOM4_I2CM,
SERCOM: 4,
}
I2C1 = &I2C{
Bus: sam.SERCOM4_I2CM,
SERCOM: 4,
}
)
// SPI on the Wio Terminal
var (
SPI0 = SPI{

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

@ -70,10 +70,7 @@ const (
// I2C on the Xiao
var (
I2C0 = &I2C{
Bus: sam.SERCOM2_I2CM,
SERCOM: 2,
}
I2C0 = sercomI2CM2
)
// SPI pins

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

@ -17,6 +17,11 @@ var (
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}
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
)
func init() {

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

@ -19,6 +19,13 @@ var (
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}
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
)
func init() {

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

@ -11,6 +11,15 @@ import "device/sam"
const HSRAM_SIZE = 0x00030000
var (
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
)
// This chip has three TCC peripherals, which have PWM as one feature.
var (
TCC0 = (*TCC)(sam.TCC0)

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

@ -11,6 +11,15 @@ import "device/sam"
const HSRAM_SIZE = 0x00030000
var (
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
)
// This chip has five TCC peripherals, which have PWM as one feature.
var (
TCC0 = (*TCC)(sam.TCC0)

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

@ -11,6 +11,15 @@ import "device/sam"
const HSRAM_SIZE = 0x00040000
var (
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
)
// This chip has five TCC peripherals, which have PWM as one feature.
var (
TCC0 = (*TCC)(sam.TCC0)

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

@ -11,6 +11,17 @@ import "device/sam"
const HSRAM_SIZE = 0x00030000
var (
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
sercomI2CM6 = &I2C{Bus: sam.SERCOM6_I2CM, SERCOM: 6}
sercomI2CM7 = &I2C{Bus: sam.SERCOM7_I2CM, SERCOM: 7}
)
// This chip has five TCC peripherals, which have PWM as one feature.
var (
TCC0 = (*TCC)(sam.TCC0)

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

@ -11,6 +11,17 @@ import "device/sam"
const HSRAM_SIZE = 0x00040000
var (
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
sercomI2CM6 = &I2C{Bus: sam.SERCOM6_I2CM, SERCOM: 6}
sercomI2CM7 = &I2C{Bus: sam.SERCOM7_I2CM, SERCOM: 7}
)
// This chip has five TCC peripherals, which have PWM as one feature.
var (
TCC0 = (*TCC)(sam.TCC0)

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

@ -11,6 +11,15 @@ import "device/sam"
const HSRAM_SIZE = 0x00030000
var (
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
)
// This chip has five TCC peripherals, which have PWM as one feature.
var (
TCC0 = (*TCC)(sam.TCC0)

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

@ -11,6 +11,17 @@ import "device/sam"
const HSRAM_SIZE = 0x00040000
var (
sercomI2CM0 = &I2C{Bus: sam.SERCOM0_I2CM, SERCOM: 0}
sercomI2CM1 = &I2C{Bus: sam.SERCOM1_I2CM, SERCOM: 1}
sercomI2CM2 = &I2C{Bus: sam.SERCOM2_I2CM, SERCOM: 2}
sercomI2CM3 = &I2C{Bus: sam.SERCOM3_I2CM, SERCOM: 3}
sercomI2CM4 = &I2C{Bus: sam.SERCOM4_I2CM, SERCOM: 4}
sercomI2CM5 = &I2C{Bus: sam.SERCOM5_I2CM, SERCOM: 5}
sercomI2CM6 = &I2C{Bus: sam.SERCOM6_I2CM, SERCOM: 6}
sercomI2CM7 = &I2C{Bus: sam.SERCOM7_I2CM, SERCOM: 7}
)
// This chip has five TCC peripherals, which have PWM as one feature.
var (
TCC0 = (*TCC)(sam.TCC0)

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

@ -5,8 +5,6 @@ package machine
// Dummy machine package that calls out to external functions.
var (
SPI0 = SPI{0}
I2C0 = &I2C{0}
UART0 = &UART{0}
USB = &UART{100}
)
@ -175,4 +173,13 @@ var (
sercomUSART3 = UART{3}
sercomUSART4 = UART{4}
sercomUSART5 = UART{5}
sercomI2CM0 = &I2C{0}
sercomI2CM1 = &I2C{1}
sercomI2CM2 = &I2C{2}
sercomI2CM3 = &I2C{3}
sercomI2CM4 = &I2C{4}
sercomI2CM5 = &I2C{5}
sercomI2CM6 = &I2C{6}
sercomI2CM7 = &I2C{7}
)

11
src/machine/machine_generic_peripherals.go Обычный файл
Просмотреть файл

@ -0,0 +1,11 @@
// +build !baremetal,!arduino_mkr1000,!arduino_mkrwifi1010,!arduino_nano33,!arduino_zero,!circuitplay_express,!feather_m0,!feather_m4,!grandcentral_m4,!itsybitsy_m0,!itsybitsy_m4,!matrixportal_m4,!metro_m4_airlift,!p1am_100,!pybadge,!pygamer,!pyportal,!qtpy,!trinket_m0,!wioterminal,!xiao
package machine
// These peripherals are defined separately so that they can be excluded on
// boards that define their peripherals in the board file (e.g. board_qtpy.go).
var (
SPI0 = SPI{0}
I2C0 = &I2C{0}
)