github.com/tinygo-org/tinygo@v0.31.3-0.20240404173401-90b0bf646c27/src/machine/machine_atmega328p.go (about) 1 //go:build avr && atmega328p 2 3 package machine 4 5 import ( 6 "device/avr" 7 "runtime/volatile" 8 ) 9 10 const irq_USART0_RX = avr.IRQ_USART_RX 11 12 // I2C0 is the only I2C interface on most AVRs. 13 var I2C0 = &I2C{ 14 srReg: avr.TWSR, 15 brReg: avr.TWBR, 16 crReg: avr.TWCR, 17 drReg: avr.TWDR, 18 srPS0: avr.TWSR_TWPS0, 19 srPS1: avr.TWSR_TWPS1, 20 crEN: avr.TWCR_TWEN, 21 crINT: avr.TWCR_TWINT, 22 crSTO: avr.TWCR_TWSTO, 23 crEA: avr.TWCR_TWEA, 24 crSTA: avr.TWCR_TWSTA, 25 } 26 27 // SPI configuration 28 var SPI0 = SPI{ 29 spcr: avr.SPCR, 30 spdr: avr.SPDR, 31 spsr: avr.SPSR, 32 33 spcrR0: avr.SPCR_SPR0, 34 spcrR1: avr.SPCR_SPR1, 35 spcrCPHA: avr.SPCR_CPHA, 36 spcrCPOL: avr.SPCR_CPOL, 37 spcrDORD: avr.SPCR_DORD, 38 spcrSPE: avr.SPCR_SPE, 39 spcrMSTR: avr.SPCR_MSTR, 40 41 spsrI2X: avr.SPSR_SPI2X, 42 spsrSPIF: avr.SPSR_SPIF, 43 44 sck: PB5, 45 sdo: PB3, 46 sdi: PB4, 47 cs: PB2, 48 } 49 50 // getPortMask returns the PORTx register and mask for the pin. 51 func (p Pin) getPortMask() (*volatile.Register8, uint8) { 52 switch { 53 case p >= PB0 && p <= PB7: // port B 54 return avr.PORTB, 1 << uint8(p-portB) 55 case p >= PC0 && p <= PC7: // port C 56 return avr.PORTC, 1 << uint8(p-portC) 57 default: // port D 58 return avr.PORTD, 1 << uint8(p-portD) 59 } 60 }