diff --git a/src/machine/machine_atmega.go b/src/machine/machine_atmega.go index 323ec9ab..650f60a9 100644 --- a/src/machine/machine_atmega.go +++ b/src/machine/machine_atmega.go @@ -12,14 +12,18 @@ func (p Pin) Configure(config PinConfig) { if config.Mode == PinOutput { // set output bit if p < 8 { avr.DDRD.SetBits(1 << uint8(p)) - } else { + } else if p < 14 { avr.DDRB.SetBits(1 << uint8(p-8)) + } else { + avr.DDRC.SetBits(1 << uint8(p-14)) } } else { // configure input: clear output bit if p < 8 { avr.DDRD.ClearBits(1 << uint8(p)) - } else { + } else if p < 14 { avr.DDRB.ClearBits(1 << uint8(p-8)) + } else { + avr.DDRC.ClearBits(1 << uint8(p-14)) } } } @@ -29,17 +33,22 @@ func (p Pin) Get() bool { if p < 8 { val := avr.PIND.Get() & (1 << uint8(p)) return (val > 0) - } else { + } else if p < 14 { val := avr.PINB.Get() & (1 << uint8(p-8)) return (val > 0) + } else { + val := avr.PINC.Get() & (1 << uint8(p-14)) + return (val > 0) } } func (p Pin) getPortMask() (*volatile.Register8, uint8) { if p < 8 { return avr.PORTD, 1 << uint8(p) - } else { + } else if p < 14 { return avr.PORTB, 1 << uint8(p-8) + } else { + return avr.PORTC, 1 << uint8(p-14) } }