diff --git a/src/machine/machine_atsamd21.go b/src/machine/machine_atsamd21.go index c94576b2..ddedd002 100644 --- a/src/machine/machine_atsamd21.go +++ b/src/machine/machine_atsamd21.go @@ -123,7 +123,7 @@ func (p GPIO) Configure(config GPIOConfig) { sam.PORT.DIRCLR0 = (1 << p.Pin) p.setPinCfg(sam.PORT_PINCFG0_INEN) } else { - sam.PORT.DIRCLR0 = (1 << p.Pin) + sam.PORT.DIRCLR1 = (1<>p.Pin)&1 > 0 } else { - return (sam.PORT.IN1>>p.Pin)&1 > 0 + return (sam.PORT.IN1>>(p.Pin-32))&1 > 0 } } @@ -787,6 +787,38 @@ func getPMux(p uint8) sam.RegValue8 { return sam.PORT.PMUX0_14 case 15: return sam.PORT.PMUX0_15 + case 16: + return sam.RegValue8(sam.PORT.PMUX1_0>>24) & 0xff + case 17: + return sam.RegValue8(sam.PORT.PMUX1_0>>16) & 0xff + case 18: + return sam.RegValue8(sam.PORT.PMUX1_0>>8) & 0xff + case 19: + return sam.RegValue8(sam.PORT.PMUX1_0 & 0xff) + case 20: + return sam.RegValue8(sam.PORT.PMUX1_4>>24) & 0xff + case 21: + return sam.RegValue8(sam.PORT.PMUX1_4>>16) & 0xff + case 22: + return sam.RegValue8(sam.PORT.PMUX1_4>>8) & 0xff + case 23: + return sam.RegValue8(sam.PORT.PMUX1_4 & 0xff) + case 24: + return sam.RegValue8(sam.PORT.PMUX1_8>>24) & 0xff + case 25: + return sam.RegValue8(sam.PORT.PMUX1_8>>16) & 0xff + case 26: + return sam.RegValue8(sam.PORT.PMUX1_8>>8) & 0xff + case 27: + return sam.RegValue8(sam.PORT.PMUX1_8 & 0xff) + case 28: + return sam.RegValue8(sam.PORT.PMUX1_12>>24) & 0xff + case 29: + return sam.RegValue8(sam.PORT.PMUX1_12>>16) & 0xff + case 30: + return sam.RegValue8(sam.PORT.PMUX1_12>>8) & 0xff + case 31: + return sam.RegValue8(sam.PORT.PMUX1_12 & 0xff) default: return 0 } @@ -828,6 +860,38 @@ func setPMux(p uint8, val sam.RegValue8) { sam.PORT.PMUX0_14 = val case 15: sam.PORT.PMUX0_15 = val + case 16: + sam.PORT.PMUX1_0 = (sam.PORT.PMUX1_0 &^ (0xff << 24)) | (sam.RegValue(val) << 24) + case 17: + sam.PORT.PMUX1_0 = (sam.PORT.PMUX1_0 &^ (0xff << 16)) | (sam.RegValue(val) << 16) + case 18: + sam.PORT.PMUX1_0 = (sam.PORT.PMUX1_0 &^ (0xff << 8)) | (sam.RegValue(val) << 8) + case 19: + sam.PORT.PMUX1_0 = (sam.PORT.PMUX1_0 &^ 0xff) | (sam.RegValue(val)) + case 20: + sam.PORT.PMUX1_4 = (sam.PORT.PMUX1_4 &^ (0xff << 24)) | (sam.RegValue(val) << 24) + case 21: + sam.PORT.PMUX1_4 = (sam.PORT.PMUX1_4 &^ (0xff << 16)) | (sam.RegValue(val) << 16) + case 22: + sam.PORT.PMUX1_4 = (sam.PORT.PMUX1_4 &^ (0xff << 8)) | (sam.RegValue(val) << 8) + case 23: + sam.PORT.PMUX1_4 = (sam.PORT.PMUX1_4 &^ 0xff) | (sam.RegValue(val)) + case 24: + sam.PORT.PMUX1_8 = (sam.PORT.PMUX1_8 &^ (0xff << 24)) | (sam.RegValue(val) << 24) + case 25: + sam.PORT.PMUX1_8 = (sam.PORT.PMUX1_8 &^ (0xff << 16)) | (sam.RegValue(val) << 16) + case 26: + sam.PORT.PMUX1_8 = (sam.PORT.PMUX1_8 &^ (0xff << 8)) | (sam.RegValue(val) << 8) + case 27: + sam.PORT.PMUX1_8 = (sam.PORT.PMUX1_8 &^ 0xff) | (sam.RegValue(val)) + case 28: + sam.PORT.PMUX1_12 = (sam.PORT.PMUX1_12 &^ (0xff << 24)) | (sam.RegValue(val) << 24) + case 29: + sam.PORT.PMUX1_12 = (sam.PORT.PMUX1_12 &^ (0xff << 16)) | (sam.RegValue(val) << 16) + case 30: + sam.PORT.PMUX1_12 = (sam.PORT.PMUX1_12 &^ (0xff << 8)) | (sam.RegValue(val) << 8) + case 31: + sam.PORT.PMUX1_12 = (sam.PORT.PMUX1_12 &^ 0xff) | (sam.RegValue(val)) } } @@ -898,6 +962,70 @@ func getPinCfg(p uint8) sam.RegValue8 { return sam.PORT.PINCFG0_30 case 31: return sam.PORT.PINCFG0_31 + case 32: // PB00 + return sam.RegValue8(sam.PORT.PINCFG1_0>>24) & 0xff + case 33: // PB01 + return sam.RegValue8(sam.PORT.PINCFG1_0>>16) & 0xff + case 34: // PB02 + return sam.RegValue8(sam.PORT.PINCFG1_0>>8) & 0xff + case 35: // PB03 + return sam.RegValue8(sam.PORT.PINCFG1_0 & 0xff) + case 37: // PB04 + return sam.RegValue8(sam.PORT.PINCFG1_4>>24) & 0xff + case 38: // PB05 + return sam.RegValue8(sam.PORT.PINCFG1_4>>16) & 0xff + case 39: // PB06 + return sam.RegValue8(sam.PORT.PINCFG1_4>>8) & 0xff + case 40: // PB07 + return sam.RegValue8(sam.PORT.PINCFG1_4 & 0xff) + case 41: // PB08 + return sam.RegValue8(sam.PORT.PINCFG1_8>>24) & 0xff + case 42: // PB09 + return sam.RegValue8(sam.PORT.PINCFG1_8>>16) & 0xff + case 43: // PB10 + return sam.RegValue8(sam.PORT.PINCFG1_8>>8) & 0xff + case 44: // PB11 + return sam.RegValue8(sam.PORT.PINCFG1_8 & 0xff) + case 45: // PB12 + return sam.RegValue8(sam.PORT.PINCFG1_12>>24) & 0xff + case 46: // PB13 + return sam.RegValue8(sam.PORT.PINCFG1_12>>16) & 0xff + case 47: // PB14 + return sam.RegValue8(sam.PORT.PINCFG1_12>>8) & 0xff + case 48: // PB15 + return sam.RegValue8(sam.PORT.PINCFG1_12 & 0xff) + case 49: // PB16 + return sam.RegValue8(sam.PORT.PINCFG1_16>>24) & 0xff + case 50: // PB17 + return sam.RegValue8(sam.PORT.PINCFG1_16>>16) & 0xff + case 51: // PB18 + return sam.RegValue8(sam.PORT.PINCFG1_16>>8) & 0xff + case 52: // PB19 + return sam.RegValue8(sam.PORT.PINCFG1_16 & 0xff) + case 53: // PB20 + return sam.RegValue8(sam.PORT.PINCFG1_20>>24) & 0xff + case 54: // PB21 + return sam.RegValue8(sam.PORT.PINCFG1_20>>16) & 0xff + case 55: // PB22 + return sam.RegValue8(sam.PORT.PINCFG1_20>>8) & 0xff + case 56: // PB23 + return sam.RegValue8(sam.PORT.PINCFG1_20 & 0xff) + case 57: // PB24 + return sam.RegValue8(sam.PORT.PINCFG1_24>>24) & 0xff + case 58: // PB25 + return sam.RegValue8(sam.PORT.PINCFG1_24>>16) & 0xff + case 59: // PB26 + return sam.RegValue8(sam.PORT.PINCFG1_24>>8) & 0xff + case 60: // PB27 + return sam.RegValue8(sam.PORT.PINCFG1_24 & 0xff) + case 61: // PB28 + return sam.RegValue8(sam.PORT.PINCFG1_28>>24) & 0xff + case 62: // PB29 + return sam.RegValue8(sam.PORT.PINCFG1_28>>16) & 0xff + case 63: // PB30 + return sam.RegValue8(sam.PORT.PINCFG1_28>>8) & 0xff + case 64: // PB31 + return sam.RegValue8(sam.PORT.PINCFG1_28 & 0xff) default: return 0 } @@ -971,69 +1099,69 @@ func setPinCfg(p uint8, val sam.RegValue8) { case 31: sam.PORT.PINCFG0_31 = val case 32: // PB00 - sam.PORT.PINCFG1_0 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_0 = (sam.PORT.PINCFG1_0 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 33: // PB01 - sam.PORT.PINCFG1_0 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_0 = (sam.PORT.PINCFG1_0 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 34: // PB02 - sam.PORT.PINCFG1_0 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_0 = (sam.PORT.PINCFG1_0 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 35: // PB03 - sam.PORT.PINCFG1_0 = sam.RegValue(val) + sam.PORT.PINCFG1_0 = (sam.PORT.PINCFG1_0 &^ 0xff) | (sam.RegValue(val)) case 36: // PB04 - sam.PORT.PINCFG1_4 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_4 = (sam.PORT.PINCFG1_4 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 37: // PB05 - sam.PORT.PINCFG1_4 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_4 = (sam.PORT.PINCFG1_4 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 38: // PB06 - sam.PORT.PINCFG1_4 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_4 = (sam.PORT.PINCFG1_4 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 39: // PB07 - sam.PORT.PINCFG1_4 = sam.RegValue(val) + sam.PORT.PINCFG1_4 = (sam.PORT.PINCFG1_4 &^ 0xff) | (sam.RegValue(val)) case 40: // PB08 - sam.PORT.PINCFG1_8 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_8 = (sam.PORT.PINCFG1_8 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 41: // PB09 - sam.PORT.PINCFG1_8 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_8 = (sam.PORT.PINCFG1_8 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 42: // PB10 - sam.PORT.PINCFG1_8 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_8 = (sam.PORT.PINCFG1_8 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 43: // PB11 - sam.PORT.PINCFG1_8 = sam.RegValue(val) + sam.PORT.PINCFG1_8 = (sam.PORT.PINCFG1_8 &^ 0xff) | (sam.RegValue(val)) case 44: // PB12 - sam.PORT.PINCFG1_12 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_12 = (sam.PORT.PINCFG1_12 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 45: // PB13 - sam.PORT.PINCFG1_12 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_12 = (sam.PORT.PINCFG1_12 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 46: // PB14 - sam.PORT.PINCFG1_12 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_12 = (sam.PORT.PINCFG1_12 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 47: // PB15 - sam.PORT.PINCFG1_12 = sam.RegValue(val) + sam.PORT.PINCFG1_12 = (sam.PORT.PINCFG1_12 &^ 0xff) | (sam.RegValue(val)) case 48: // PB16 - sam.PORT.PINCFG1_16 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_16 = (sam.PORT.PINCFG1_16 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 49: // PB17 - sam.PORT.PINCFG1_16 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_16 = (sam.PORT.PINCFG1_16 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 50: // PB18 - sam.PORT.PINCFG1_16 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_16 = (sam.PORT.PINCFG1_16 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 51: // PB19 - sam.PORT.PINCFG1_16 = sam.RegValue(val) + sam.PORT.PINCFG1_16 = (sam.PORT.PINCFG1_16 &^ 0xff) | (sam.RegValue(val)) case 52: // PB20 - sam.PORT.PINCFG1_20 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_20 = (sam.PORT.PINCFG1_20 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 53: // PB21 - sam.PORT.PINCFG1_20 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_20 = (sam.PORT.PINCFG1_20 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 54: // PB22 - sam.PORT.PINCFG1_20 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_20 = (sam.PORT.PINCFG1_20 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 55: // PB23 - sam.PORT.PINCFG1_20 = sam.RegValue(val) + sam.PORT.PINCFG1_20 = (sam.PORT.PINCFG1_20 &^ 0xff) | (sam.RegValue(val)) case 56: // PB24 - sam.PORT.PINCFG1_24 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_24 = (sam.PORT.PINCFG1_24 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 57: // PB25 - sam.PORT.PINCFG1_24 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_24 = (sam.PORT.PINCFG1_24 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 58: // PB26 - sam.PORT.PINCFG1_24 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_24 = (sam.PORT.PINCFG1_24 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 59: // PB27 - sam.PORT.PINCFG1_24 = sam.RegValue(val) + sam.PORT.PINCFG1_24 = (sam.PORT.PINCFG1_24 &^ 0xff) | (sam.RegValue(val)) case 60: // PB28 - sam.PORT.PINCFG1_28 = sam.RegValue(val) << 24 + sam.PORT.PINCFG1_28 = (sam.PORT.PINCFG1_28 &^ (0xff << 24)) | (sam.RegValue(val) << 24) case 61: // PB29 - sam.PORT.PINCFG1_28 = sam.RegValue(val) << 16 + sam.PORT.PINCFG1_28 = (sam.PORT.PINCFG1_28 &^ (0xff << 16)) | (sam.RegValue(val) << 16) case 62: // PB30 - sam.PORT.PINCFG1_28 = sam.RegValue(val) << 8 + sam.PORT.PINCFG1_28 = (sam.PORT.PINCFG1_28 &^ (0xff << 8)) | (sam.RegValue(val) << 8) case 63: // PB31 - sam.PORT.PINCFG1_28 = sam.RegValue(val) + sam.PORT.PINCFG1_28 = (sam.PORT.PINCFG1_28 &^ 0xff) | (sam.RegValue(val)) } }