
This makes it possible to assign I2C objects (machine.I2C0, machine.I2C1, etc.) without needing to take a pointer. This is important especially in the future when I2C may be driven using DMA and the machine.I2C type needs to store some state.
69 строки
1,1 КиБ
Go
69 строки
1,1 КиБ
Go
// +build nrf52
|
|
|
|
package machine
|
|
|
|
import (
|
|
"device/nrf"
|
|
)
|
|
|
|
// Hardware pins
|
|
const (
|
|
P0_00 Pin = 0
|
|
P0_01 Pin = 1
|
|
P0_02 Pin = 2
|
|
P0_03 Pin = 3
|
|
P0_04 Pin = 4
|
|
P0_05 Pin = 5
|
|
P0_06 Pin = 6
|
|
P0_07 Pin = 7
|
|
P0_08 Pin = 8
|
|
P0_09 Pin = 9
|
|
P0_10 Pin = 10
|
|
P0_11 Pin = 11
|
|
P0_12 Pin = 12
|
|
P0_13 Pin = 13
|
|
P0_14 Pin = 14
|
|
P0_15 Pin = 15
|
|
P0_16 Pin = 16
|
|
P0_17 Pin = 17
|
|
P0_18 Pin = 18
|
|
P0_19 Pin = 19
|
|
P0_20 Pin = 20
|
|
P0_21 Pin = 21
|
|
P0_22 Pin = 22
|
|
P0_23 Pin = 23
|
|
P0_24 Pin = 24
|
|
P0_25 Pin = 25
|
|
P0_26 Pin = 26
|
|
P0_27 Pin = 27
|
|
P0_28 Pin = 28
|
|
P0_29 Pin = 29
|
|
P0_30 Pin = 30
|
|
P0_31 Pin = 31
|
|
)
|
|
|
|
var (
|
|
UART0 = NRF_UART0
|
|
)
|
|
|
|
// Get peripheral and pin number for this GPIO pin.
|
|
func (p Pin) getPortPin() (*nrf.GPIO_Type, uint32) {
|
|
return nrf.P0, uint32(p)
|
|
}
|
|
|
|
func (uart UART) setPins(tx, rx Pin) {
|
|
nrf.UART0.PSELTXD.Set(uint32(tx))
|
|
nrf.UART0.PSELRXD.Set(uint32(rx))
|
|
}
|
|
|
|
func (i2c *I2C) setPins(scl, sda Pin) {
|
|
i2c.Bus.PSELSCL.Set(uint32(scl))
|
|
i2c.Bus.PSELSDA.Set(uint32(sda))
|
|
}
|
|
|
|
// PWM
|
|
var (
|
|
pwmChannelPins = [3]uint32{0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF}
|
|
pwms = [3]*nrf.PWM_Type{nrf.PWM0, nrf.PWM1, nrf.PWM2}
|
|
pwmChannelSequence [3]uint16
|
|
)
|