
This allows all possible UART pin configurations to be used and avoids some tricky configuration.
144 строки
2,6 КиБ
Go
144 строки
2,6 КиБ
Go
// +build sam,atsamd21,arduino_nano33
|
|
|
|
// This contains the pin mappings for the Arduino Nano33 IoT board.
|
|
//
|
|
// For more information, see: https://store.arduino.cc/nano-33-iot
|
|
//
|
|
package machine
|
|
|
|
import "device/sam"
|
|
|
|
// used to reset into bootloader
|
|
const RESET_MAGIC_VALUE = 0x07738135
|
|
|
|
// GPIO Pins
|
|
const (
|
|
RX0 Pin = PB23 // UART2 RX
|
|
TX1 Pin = PB22 // UART2 TX
|
|
|
|
D2 Pin = PB10 // PWM available
|
|
D3 Pin = PB11 // PWM available
|
|
D4 Pin = PA07
|
|
D5 Pin = PA05 // PWM available
|
|
D6 Pin = PA04 // PWM available
|
|
D7 Pin = PA06
|
|
|
|
D8 Pin = PA18
|
|
D9 Pin = PA20 // PWM available
|
|
D10 Pin = PA21 // PWM available
|
|
D11 Pin = PA16 // PWM available
|
|
D12 Pin = PA19 // PWM available
|
|
|
|
D13 Pin = PA17
|
|
)
|
|
|
|
// Analog pins
|
|
const (
|
|
A0 Pin = PA02 // ADC/AIN[0]
|
|
A1 Pin = PB02 // ADC/AIN[10]
|
|
A2 Pin = PA11 // ADC/AIN[19]
|
|
A3 Pin = PA10 // ADC/AIN[18],
|
|
A4 Pin = PB08 // ADC/AIN[2], SCL: SERCOM2/PAD[1]
|
|
A5 Pin = PB09 // ADC/AIN[3], SDA: SERCOM2/PAD[1]
|
|
A6 Pin = PA09 // ADC/AIN[17]
|
|
A7 Pin = PB03 // ADC/AIN[11]
|
|
)
|
|
|
|
const (
|
|
LED = D13
|
|
)
|
|
|
|
// NINA-W102 Pins
|
|
|
|
const (
|
|
NINA_MOSI Pin = PA12
|
|
NINA_MISO Pin = PA13
|
|
NINA_CS Pin = PA14
|
|
NINA_SCK Pin = PA15
|
|
NINA_GPIO0 Pin = PA27
|
|
NINA_RESETN Pin = PA08
|
|
NINA_ACK Pin = PA28
|
|
)
|
|
|
|
// UART0 aka USBCDC pins
|
|
const (
|
|
USBCDC_DM_PIN Pin = PA24
|
|
USBCDC_DP_PIN Pin = PA25
|
|
)
|
|
|
|
// UART1 on the Arduino Nano 33 connects to the onboard NINA-W102 WiFi chip.
|
|
var (
|
|
UART1 = UART{
|
|
Buffer: NewRingBuffer(),
|
|
Bus: sam.SERCOM5_USART,
|
|
SERCOM: 5,
|
|
}
|
|
)
|
|
|
|
// UART1 pins
|
|
const (
|
|
UART_TX_PIN Pin = PA22
|
|
UART_RX_PIN Pin = PA23
|
|
)
|
|
|
|
//go:export SERCOM5_IRQHandler
|
|
func handleUART1() {
|
|
defaultUART1Handler()
|
|
}
|
|
|
|
// UART2 on the Arduino Nano 33 connects to the normal TX/RX pins.
|
|
var (
|
|
UART2 = UART{
|
|
Buffer: NewRingBuffer(),
|
|
Bus: sam.SERCOM3_USART,
|
|
SERCOM: 3,
|
|
}
|
|
)
|
|
|
|
//go:export SERCOM3_IRQHandler
|
|
func handleUART2() {
|
|
// should reset IRQ
|
|
UART2.Receive(byte((UART2.Bus.DATA.Get() & 0xFF)))
|
|
UART2.Bus.INTFLAG.SetBits(sam.SERCOM_USART_INTFLAG_RXC)
|
|
}
|
|
|
|
// I2C pins
|
|
const (
|
|
SDA_PIN Pin = A4 // SDA: SERCOM4/PAD[1]
|
|
SCL_PIN Pin = A5 // SCL: SERCOM4/PAD[1]
|
|
)
|
|
|
|
// I2C on the Arduino Nano 33.
|
|
var (
|
|
I2C0 = I2C{
|
|
Bus: sam.SERCOM4_I2CM,
|
|
SERCOM: 4,
|
|
}
|
|
)
|
|
|
|
// SPI pins
|
|
const (
|
|
SPI0_SCK_PIN Pin = A2 // SCK: SERCOM0/PAD[3]
|
|
SPI0_MOSI_PIN Pin = A3 // MOSI: SERCOM0/PAD[2]
|
|
SPI0_MISO_PIN Pin = A6 // MISO: SERCOM0/PAD[1]
|
|
)
|
|
|
|
// SPI on the Arduino Nano 33.
|
|
var (
|
|
SPI0 = SPI{
|
|
Bus: sam.SERCOM0_SPI,
|
|
SERCOM: 0,
|
|
}
|
|
)
|
|
|
|
// I2S pins
|
|
const (
|
|
I2S_SCK_PIN Pin = PA10
|
|
I2S_SD_PIN Pin = PA08
|
|
I2S_WS_PIN = NoPin // TODO: figure out what this is on Arduino Nano 33.
|
|
)
|
|
|
|
// I2S on the Arduino Nano 33.
|
|
var (
|
|
I2S0 = I2S{Bus: sam.I2S}
|
|
)
|