mirror of
https://github.com/tinygo-org/tinygo.git
synced 2026-08-05 11:37:46 +00:00
2bee29959b
Fixes #4663 "in reverse" by making SPI a pointer everywhere, as discussed in the comments. Signed-off-by: deadprogram <ron@hybridgroup.com>
61 lines
1.1 KiB
Go
61 lines
1.1 KiB
Go
//go:build avr && atmega328p
|
|
|
|
package machine
|
|
|
|
import (
|
|
"device/avr"
|
|
"runtime/volatile"
|
|
)
|
|
|
|
const irq_USART0_RX = avr.IRQ_USART_RX
|
|
|
|
// I2C0 is the only I2C interface on most AVRs.
|
|
var I2C0 = &I2C{
|
|
srReg: avr.TWSR,
|
|
brReg: avr.TWBR,
|
|
crReg: avr.TWCR,
|
|
drReg: avr.TWDR,
|
|
srPS0: avr.TWSR_TWPS0,
|
|
srPS1: avr.TWSR_TWPS1,
|
|
crEN: avr.TWCR_TWEN,
|
|
crINT: avr.TWCR_TWINT,
|
|
crSTO: avr.TWCR_TWSTO,
|
|
crEA: avr.TWCR_TWEA,
|
|
crSTA: avr.TWCR_TWSTA,
|
|
}
|
|
|
|
// SPI configuration
|
|
var SPI0 = &SPI{
|
|
spcr: avr.SPCR,
|
|
spdr: avr.SPDR,
|
|
spsr: avr.SPSR,
|
|
|
|
spcrR0: avr.SPCR_SPR0,
|
|
spcrR1: avr.SPCR_SPR1,
|
|
spcrCPHA: avr.SPCR_CPHA,
|
|
spcrCPOL: avr.SPCR_CPOL,
|
|
spcrDORD: avr.SPCR_DORD,
|
|
spcrSPE: avr.SPCR_SPE,
|
|
spcrMSTR: avr.SPCR_MSTR,
|
|
|
|
spsrI2X: avr.SPSR_SPI2X,
|
|
spsrSPIF: avr.SPSR_SPIF,
|
|
|
|
sck: PB5,
|
|
sdo: PB3,
|
|
sdi: PB4,
|
|
cs: PB2,
|
|
}
|
|
|
|
// getPortMask returns the PORTx register and mask for the pin.
|
|
func (p Pin) getPortMask() (*volatile.Register8, uint8) {
|
|
switch {
|
|
case p >= PB0 && p <= PB7: // port B
|
|
return avr.PORTB, 1 << uint8(p-portB)
|
|
case p >= PC0 && p <= PC7: // port C
|
|
return avr.PORTC, 1 << uint8(p-portC)
|
|
default: // port D
|
|
return avr.PORTD, 1 << uint8(p-portD)
|
|
}
|
|
}
|