@@ -123,7 +123,7 @@ func (p GPIO) Configure(config GPIOConfig) {
123123 sam .PORT .DIRCLR0 = (1 << p .Pin )
124124 p .setPinCfg (sam .PORT_PINCFG0_INEN )
125125 } else {
126- sam .PORT .DIRCLR0 = (1 << p .Pin )
126+ sam .PORT .DIRCLR1 = (1 << p .Pin - 32 )
127127 p .setPinCfg (sam .PORT_PINCFG0_INEN )
128128 }
129129
@@ -160,7 +160,7 @@ func (p GPIO) Get() bool {
160160 if p .Pin < 32 {
161161 return (sam .PORT .IN0 >> p .Pin )& 1 > 0
162162 } else {
163- return (sam .PORT .IN1 >> p .Pin )& 1 > 0
163+ return (sam .PORT .IN1 >> ( p .Pin - 32 ) )& 1 > 0
164164 }
165165}
166166
@@ -787,6 +787,38 @@ func getPMux(p uint8) sam.RegValue8 {
787787 return sam .PORT .PMUX0_14
788788 case 15 :
789789 return sam .PORT .PMUX0_15
790+ case 16 :
791+ return sam .RegValue8 (sam .PORT .PMUX1_0 >> 24 ) & 0xff
792+ case 17 :
793+ return sam .RegValue8 (sam .PORT .PMUX1_0 >> 16 ) & 0xff
794+ case 18 :
795+ return sam .RegValue8 (sam .PORT .PMUX1_0 >> 8 ) & 0xff
796+ case 19 :
797+ return sam .RegValue8 (sam .PORT .PMUX1_0 & 0xff )
798+ case 20 :
799+ return sam .RegValue8 (sam .PORT .PMUX1_4 >> 24 ) & 0xff
800+ case 21 :
801+ return sam .RegValue8 (sam .PORT .PMUX1_4 >> 16 ) & 0xff
802+ case 22 :
803+ return sam .RegValue8 (sam .PORT .PMUX1_4 >> 8 ) & 0xff
804+ case 23 :
805+ return sam .RegValue8 (sam .PORT .PMUX1_4 & 0xff )
806+ case 24 :
807+ return sam .RegValue8 (sam .PORT .PMUX1_8 >> 24 ) & 0xff
808+ case 25 :
809+ return sam .RegValue8 (sam .PORT .PMUX1_8 >> 16 ) & 0xff
810+ case 26 :
811+ return sam .RegValue8 (sam .PORT .PMUX1_8 >> 8 ) & 0xff
812+ case 27 :
813+ return sam .RegValue8 (sam .PORT .PMUX1_8 & 0xff )
814+ case 28 :
815+ return sam .RegValue8 (sam .PORT .PMUX1_12 >> 24 ) & 0xff
816+ case 29 :
817+ return sam .RegValue8 (sam .PORT .PMUX1_12 >> 16 ) & 0xff
818+ case 30 :
819+ return sam .RegValue8 (sam .PORT .PMUX1_12 >> 8 ) & 0xff
820+ case 31 :
821+ return sam .RegValue8 (sam .PORT .PMUX1_12 & 0xff )
790822 default :
791823 return 0
792824 }
@@ -828,6 +860,38 @@ func setPMux(p uint8, val sam.RegValue8) {
828860 sam .PORT .PMUX0_14 = val
829861 case 15 :
830862 sam .PORT .PMUX0_15 = val
863+ case 16 :
864+ sam .PORT .PMUX1_0 = (sam .PORT .PMUX1_0 &^ (0xff << 24 )) | (sam .RegValue (val ) << 24 )
865+ case 17 :
866+ sam .PORT .PMUX1_0 = (sam .PORT .PMUX1_0 &^ (0xff << 16 )) | (sam .RegValue (val ) << 16 )
867+ case 18 :
868+ sam .PORT .PMUX1_0 = (sam .PORT .PMUX1_0 &^ (0xff << 8 )) | (sam .RegValue (val ) << 8 )
869+ case 19 :
870+ sam .PORT .PMUX1_0 = (sam .PORT .PMUX1_0 &^ 0xff ) | (sam .RegValue (val ))
871+ case 20 :
872+ sam .PORT .PMUX1_4 = (sam .PORT .PMUX1_4 &^ (0xff << 24 )) | (sam .RegValue (val ) << 24 )
873+ case 21 :
874+ sam .PORT .PMUX1_4 = (sam .PORT .PMUX1_4 &^ (0xff << 16 )) | (sam .RegValue (val ) << 16 )
875+ case 22 :
876+ sam .PORT .PMUX1_4 = (sam .PORT .PMUX1_4 &^ (0xff << 8 )) | (sam .RegValue (val ) << 8 )
877+ case 23 :
878+ sam .PORT .PMUX1_4 = (sam .PORT .PMUX1_4 &^ 0xff ) | (sam .RegValue (val ))
879+ case 24 :
880+ sam .PORT .PMUX1_8 = (sam .PORT .PMUX1_8 &^ (0xff << 24 )) | (sam .RegValue (val ) << 24 )
881+ case 25 :
882+ sam .PORT .PMUX1_8 = (sam .PORT .PMUX1_8 &^ (0xff << 16 )) | (sam .RegValue (val ) << 16 )
883+ case 26 :
884+ sam .PORT .PMUX1_8 = (sam .PORT .PMUX1_8 &^ (0xff << 8 )) | (sam .RegValue (val ) << 8 )
885+ case 27 :
886+ sam .PORT .PMUX1_8 = (sam .PORT .PMUX1_8 &^ 0xff ) | (sam .RegValue (val ))
887+ case 28 :
888+ sam .PORT .PMUX1_12 = (sam .PORT .PMUX1_12 &^ (0xff << 24 )) | (sam .RegValue (val ) << 24 )
889+ case 29 :
890+ sam .PORT .PMUX1_12 = (sam .PORT .PMUX1_12 &^ (0xff << 16 )) | (sam .RegValue (val ) << 16 )
891+ case 30 :
892+ sam .PORT .PMUX1_12 = (sam .PORT .PMUX1_12 &^ (0xff << 8 )) | (sam .RegValue (val ) << 8 )
893+ case 31 :
894+ sam .PORT .PMUX1_12 = (sam .PORT .PMUX1_12 &^ 0xff ) | (sam .RegValue (val ))
831895 }
832896}
833897
@@ -898,6 +962,70 @@ func getPinCfg(p uint8) sam.RegValue8 {
898962 return sam .PORT .PINCFG0_30
899963 case 31 :
900964 return sam .PORT .PINCFG0_31
965+ case 32 : // PB00
966+ return sam .RegValue8 (sam .PORT .PINCFG1_0 >> 24 ) & 0xff
967+ case 33 : // PB01
968+ return sam .RegValue8 (sam .PORT .PINCFG1_0 >> 16 ) & 0xff
969+ case 34 : // PB02
970+ return sam .RegValue8 (sam .PORT .PINCFG1_0 >> 8 ) & 0xff
971+ case 35 : // PB03
972+ return sam .RegValue8 (sam .PORT .PINCFG1_0 & 0xff )
973+ case 37 : // PB04
974+ return sam .RegValue8 (sam .PORT .PINCFG1_4 >> 24 ) & 0xff
975+ case 38 : // PB05
976+ return sam .RegValue8 (sam .PORT .PINCFG1_4 >> 16 ) & 0xff
977+ case 39 : // PB06
978+ return sam .RegValue8 (sam .PORT .PINCFG1_4 >> 8 ) & 0xff
979+ case 40 : // PB07
980+ return sam .RegValue8 (sam .PORT .PINCFG1_4 & 0xff )
981+ case 41 : // PB08
982+ return sam .RegValue8 (sam .PORT .PINCFG1_8 >> 24 ) & 0xff
983+ case 42 : // PB09
984+ return sam .RegValue8 (sam .PORT .PINCFG1_8 >> 16 ) & 0xff
985+ case 43 : // PB10
986+ return sam .RegValue8 (sam .PORT .PINCFG1_8 >> 8 ) & 0xff
987+ case 44 : // PB11
988+ return sam .RegValue8 (sam .PORT .PINCFG1_8 & 0xff )
989+ case 45 : // PB12
990+ return sam .RegValue8 (sam .PORT .PINCFG1_12 >> 24 ) & 0xff
991+ case 46 : // PB13
992+ return sam .RegValue8 (sam .PORT .PINCFG1_12 >> 16 ) & 0xff
993+ case 47 : // PB14
994+ return sam .RegValue8 (sam .PORT .PINCFG1_12 >> 8 ) & 0xff
995+ case 48 : // PB15
996+ return sam .RegValue8 (sam .PORT .PINCFG1_12 & 0xff )
997+ case 49 : // PB16
998+ return sam .RegValue8 (sam .PORT .PINCFG1_16 >> 24 ) & 0xff
999+ case 50 : // PB17
1000+ return sam .RegValue8 (sam .PORT .PINCFG1_16 >> 16 ) & 0xff
1001+ case 51 : // PB18
1002+ return sam .RegValue8 (sam .PORT .PINCFG1_16 >> 8 ) & 0xff
1003+ case 52 : // PB19
1004+ return sam .RegValue8 (sam .PORT .PINCFG1_16 & 0xff )
1005+ case 53 : // PB20
1006+ return sam .RegValue8 (sam .PORT .PINCFG1_20 >> 24 ) & 0xff
1007+ case 54 : // PB21
1008+ return sam .RegValue8 (sam .PORT .PINCFG1_20 >> 16 ) & 0xff
1009+ case 55 : // PB22
1010+ return sam .RegValue8 (sam .PORT .PINCFG1_20 >> 8 ) & 0xff
1011+ case 56 : // PB23
1012+ return sam .RegValue8 (sam .PORT .PINCFG1_20 & 0xff )
1013+ case 57 : // PB24
1014+ return sam .RegValue8 (sam .PORT .PINCFG1_24 >> 24 ) & 0xff
1015+ case 58 : // PB25
1016+ return sam .RegValue8 (sam .PORT .PINCFG1_24 >> 16 ) & 0xff
1017+ case 59 : // PB26
1018+ return sam .RegValue8 (sam .PORT .PINCFG1_24 >> 8 ) & 0xff
1019+ case 60 : // PB27
1020+ return sam .RegValue8 (sam .PORT .PINCFG1_24 & 0xff )
1021+ case 61 : // PB28
1022+ return sam .RegValue8 (sam .PORT .PINCFG1_28 >> 24 ) & 0xff
1023+ case 62 : // PB29
1024+ return sam .RegValue8 (sam .PORT .PINCFG1_28 >> 16 ) & 0xff
1025+ case 63 : // PB30
1026+ return sam .RegValue8 (sam .PORT .PINCFG1_28 >> 8 ) & 0xff
1027+ case 64 : // PB31
1028+ return sam .RegValue8 (sam .PORT .PINCFG1_28 & 0xff )
9011029 default :
9021030 return 0
9031031 }
@@ -971,69 +1099,69 @@ func setPinCfg(p uint8, val sam.RegValue8) {
9711099 case 31 :
9721100 sam .PORT .PINCFG0_31 = val
9731101 case 32 : // PB00
974- sam .PORT .PINCFG1_0 = sam .RegValue (val ) << 24
1102+ sam .PORT .PINCFG1_0 = ( sam .PORT . PINCFG1_0 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
9751103 case 33 : // PB01
976- sam .PORT .PINCFG1_0 = sam .RegValue (val ) << 16
1104+ sam .PORT .PINCFG1_0 = ( sam .PORT . PINCFG1_0 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
9771105 case 34 : // PB02
978- sam .PORT .PINCFG1_0 = sam .RegValue (val ) << 8
1106+ sam .PORT .PINCFG1_0 = ( sam .PORT . PINCFG1_0 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
9791107 case 35 : // PB03
980- sam .PORT .PINCFG1_0 = sam .RegValue (val )
1108+ sam .PORT .PINCFG1_0 = ( sam .PORT . PINCFG1_0 &^ 0xff ) | ( sam . RegValue (val ) )
9811109 case 36 : // PB04
982- sam .PORT .PINCFG1_4 = sam .RegValue (val ) << 24
1110+ sam .PORT .PINCFG1_4 = ( sam .PORT . PINCFG1_4 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
9831111 case 37 : // PB05
984- sam .PORT .PINCFG1_4 = sam .RegValue (val ) << 16
1112+ sam .PORT .PINCFG1_4 = ( sam .PORT . PINCFG1_4 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
9851113 case 38 : // PB06
986- sam .PORT .PINCFG1_4 = sam .RegValue (val ) << 8
1114+ sam .PORT .PINCFG1_4 = ( sam .PORT . PINCFG1_4 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
9871115 case 39 : // PB07
988- sam .PORT .PINCFG1_4 = sam .RegValue (val )
1116+ sam .PORT .PINCFG1_4 = ( sam .PORT . PINCFG1_4 &^ 0xff ) | ( sam . RegValue (val ) )
9891117 case 40 : // PB08
990- sam .PORT .PINCFG1_8 = sam .RegValue (val ) << 24
1118+ sam .PORT .PINCFG1_8 = ( sam .PORT . PINCFG1_8 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
9911119 case 41 : // PB09
992- sam .PORT .PINCFG1_8 = sam .RegValue (val ) << 16
1120+ sam .PORT .PINCFG1_8 = ( sam .PORT . PINCFG1_8 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
9931121 case 42 : // PB10
994- sam .PORT .PINCFG1_8 = sam .RegValue (val ) << 8
1122+ sam .PORT .PINCFG1_8 = ( sam .PORT . PINCFG1_8 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
9951123 case 43 : // PB11
996- sam .PORT .PINCFG1_8 = sam .RegValue (val )
1124+ sam .PORT .PINCFG1_8 = ( sam .PORT . PINCFG1_8 &^ 0xff ) | ( sam . RegValue (val ) )
9971125 case 44 : // PB12
998- sam .PORT .PINCFG1_12 = sam .RegValue (val ) << 24
1126+ sam .PORT .PINCFG1_12 = ( sam .PORT . PINCFG1_12 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
9991127 case 45 : // PB13
1000- sam .PORT .PINCFG1_12 = sam .RegValue (val ) << 16
1128+ sam .PORT .PINCFG1_12 = ( sam .PORT . PINCFG1_12 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
10011129 case 46 : // PB14
1002- sam .PORT .PINCFG1_12 = sam .RegValue (val ) << 8
1130+ sam .PORT .PINCFG1_12 = ( sam .PORT . PINCFG1_12 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
10031131 case 47 : // PB15
1004- sam .PORT .PINCFG1_12 = sam .RegValue (val )
1132+ sam .PORT .PINCFG1_12 = ( sam .PORT . PINCFG1_12 &^ 0xff ) | ( sam . RegValue (val ) )
10051133 case 48 : // PB16
1006- sam .PORT .PINCFG1_16 = sam .RegValue (val ) << 24
1134+ sam .PORT .PINCFG1_16 = ( sam .PORT . PINCFG1_16 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
10071135 case 49 : // PB17
1008- sam .PORT .PINCFG1_16 = sam .RegValue (val ) << 16
1136+ sam .PORT .PINCFG1_16 = ( sam .PORT . PINCFG1_16 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
10091137 case 50 : // PB18
1010- sam .PORT .PINCFG1_16 = sam .RegValue (val ) << 8
1138+ sam .PORT .PINCFG1_16 = ( sam .PORT . PINCFG1_16 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
10111139 case 51 : // PB19
1012- sam .PORT .PINCFG1_16 = sam .RegValue (val )
1140+ sam .PORT .PINCFG1_16 = ( sam .PORT . PINCFG1_16 &^ 0xff ) | ( sam . RegValue (val ) )
10131141 case 52 : // PB20
1014- sam .PORT .PINCFG1_20 = sam .RegValue (val ) << 24
1142+ sam .PORT .PINCFG1_20 = ( sam .PORT . PINCFG1_20 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
10151143 case 53 : // PB21
1016- sam .PORT .PINCFG1_20 = sam .RegValue (val ) << 16
1144+ sam .PORT .PINCFG1_20 = ( sam .PORT . PINCFG1_20 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
10171145 case 54 : // PB22
1018- sam .PORT .PINCFG1_20 = sam .RegValue (val ) << 8
1146+ sam .PORT .PINCFG1_20 = ( sam .PORT . PINCFG1_20 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
10191147 case 55 : // PB23
1020- sam .PORT .PINCFG1_20 = sam .RegValue (val )
1148+ sam .PORT .PINCFG1_20 = ( sam .PORT . PINCFG1_20 &^ 0xff ) | ( sam . RegValue (val ) )
10211149 case 56 : // PB24
1022- sam .PORT .PINCFG1_24 = sam .RegValue (val ) << 24
1150+ sam .PORT .PINCFG1_24 = ( sam .PORT . PINCFG1_24 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
10231151 case 57 : // PB25
1024- sam .PORT .PINCFG1_24 = sam .RegValue (val ) << 16
1152+ sam .PORT .PINCFG1_24 = ( sam .PORT . PINCFG1_24 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
10251153 case 58 : // PB26
1026- sam .PORT .PINCFG1_24 = sam .RegValue (val ) << 8
1154+ sam .PORT .PINCFG1_24 = ( sam .PORT . PINCFG1_24 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
10271155 case 59 : // PB27
1028- sam .PORT .PINCFG1_24 = sam .RegValue (val )
1156+ sam .PORT .PINCFG1_24 = ( sam .PORT . PINCFG1_24 &^ 0xff ) | ( sam . RegValue (val ) )
10291157 case 60 : // PB28
1030- sam .PORT .PINCFG1_28 = sam .RegValue (val ) << 24
1158+ sam .PORT .PINCFG1_28 = ( sam .PORT . PINCFG1_28 &^ ( 0xff << 24 )) | ( sam . RegValue (val ) << 24 )
10311159 case 61 : // PB29
1032- sam .PORT .PINCFG1_28 = sam .RegValue (val ) << 16
1160+ sam .PORT .PINCFG1_28 = ( sam .PORT . PINCFG1_28 &^ ( 0xff << 16 )) | ( sam . RegValue (val ) << 16 )
10331161 case 62 : // PB30
1034- sam .PORT .PINCFG1_28 = sam .RegValue (val ) << 8
1162+ sam .PORT .PINCFG1_28 = ( sam .PORT . PINCFG1_28 &^ ( 0xff << 8 )) | ( sam . RegValue (val ) << 8 )
10351163 case 63 : // PB31
1036- sam .PORT .PINCFG1_28 = sam .RegValue (val )
1164+ sam .PORT .PINCFG1_28 = ( sam .PORT . PINCFG1_28 &^ 0xff ) | ( sam . RegValue (val ) )
10371165 }
10381166}
10391167
0 commit comments