machine/atmega: add PORT C GPIO support

Этот коммит содержится в:
Jun Takeda 2019-10-20 00:46:13 +09:00 коммит произвёл Ayke
родитель e139a9dd71
коммит 2f059ac91e

Просмотреть файл

@ -12,14 +12,18 @@ func (p Pin) Configure(config PinConfig) {
if config.Mode == PinOutput { // set output bit if config.Mode == PinOutput { // set output bit
if p < 8 { if p < 8 {
avr.DDRD.SetBits(1 << uint8(p)) avr.DDRD.SetBits(1 << uint8(p))
} else { } else if p < 14 {
avr.DDRB.SetBits(1 << uint8(p-8)) avr.DDRB.SetBits(1 << uint8(p-8))
} else {
avr.DDRC.SetBits(1 << uint8(p-14))
} }
} else { // configure input: clear output bit } else { // configure input: clear output bit
if p < 8 { if p < 8 {
avr.DDRD.ClearBits(1 << uint8(p)) avr.DDRD.ClearBits(1 << uint8(p))
} else { } else if p < 14 {
avr.DDRB.ClearBits(1 << uint8(p-8)) 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 { if p < 8 {
val := avr.PIND.Get() & (1 << uint8(p)) val := avr.PIND.Get() & (1 << uint8(p))
return (val > 0) return (val > 0)
} else { } else if p < 14 {
val := avr.PINB.Get() & (1 << uint8(p-8)) val := avr.PINB.Get() & (1 << uint8(p-8))
return (val > 0) return (val > 0)
} else {
val := avr.PINC.Get() & (1 << uint8(p-14))
return (val > 0)
} }
} }
func (p Pin) getPortMask() (*volatile.Register8, uint8) { func (p Pin) getPortMask() (*volatile.Register8, uint8) {
if p < 8 { if p < 8 {
return avr.PORTD, 1 << uint8(p) return avr.PORTD, 1 << uint8(p)
} else { } else if p < 14 {
return avr.PORTB, 1 << uint8(p-8) return avr.PORTB, 1 << uint8(p-8)
} else {
return avr.PORTC, 1 << uint8(p-14)
} }
} }