@@ -122,8 +122,8 @@ extern const PinDescription g_APinDescription[]=
122122 // 0 .. 53 - Digital pins
123123 // ----------------------
124124 // 0/1 - UART (Serial)
125- { PIOA, PIO_PA8A_URXD, ID_PIOA, PIO_PERIPH_A , PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // URXD
126- { PIOA, PIO_PA9A_UTXD, ID_PIOA, PIO_PERIPH_A , PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // UTXD
125+ { PIOA, PIO_PA8A_URXD, ID_PIOA, PIO_PERIPH_B , PIO_DEFAULT, ( PIN_ATTR_DIGITAL|PIN_ATTR_PWM) , NO_ADC, NO_ADC, PWM_CH0, NOT_ON_TIMER }, // URXD
126+ { PIOA, PIO_PA9A_UTXD, ID_PIOA, PIO_PERIPH_B , PIO_DEFAULT, ( PIN_ATTR_DIGITAL|PIN_ATTR_PWM) , NO_ADC, NO_ADC, PWM_CH3, NOT_ON_TIMER }, // UTXD
127127
128128 // 2
129129 { PIOB, PIO_PB25B_TIOA0, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), NO_ADC, NO_ADC, NOT_ON_PWM, TC0_CHA0 }, // TIOA0
@@ -132,11 +132,11 @@ extern const PinDescription g_APinDescription[]=
132132 { PIOA, PIO_PA5A_TIOA2, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), NO_ADC, NO_ADC, NOT_ON_PWM, TC0_CHA2 }, // TIOA2
133133
134134 // 6
135- { PIOA, PIO_PA21B_PWML0, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), NO_ADC, NO_ADC, PWM_CH0, NOT_ON_TIMER }, // PWML0
136- { PIOA, PIO_PA20B_PWML2, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_TIMER), NO_ADC, NO_ADC, PWM_CH2, NOT_ON_TIMER }, // PWML2
135+ { PIOA, PIO_PA21B_PWML0, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), NO_ADC, NO_ADC, PWM_CH0, NOT_ON_TIMER }, // PWML0
136+ { PIOA, PIO_PA20B_PWML2, ID_PIOA, PIO_PERIPH_B, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_PWM), NO_ADC, NO_ADC, PWM_CH2, NOT_ON_TIMER }, // PWML2
137137
138138 // 8
139- { PIOB, PIO_PB17, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 8 = S_INLEVEL
139+ { PIOB, PIO_PB17, ID_PIOB, PIO_INPUT, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 8 = S_INLEVEL
140140 { PIOB, PIO_PB16, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 9 = CAN_RS
141141 { PIOB, PIO_PB18, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 10 = C_OUT_1
142142 { PIOB, PIO_PB19, ID_PIOB, PIO_OUTPUT_0, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 11 = C_OUT_2
@@ -176,8 +176,8 @@ extern const PinDescription g_APinDescription[]=
176176 { PIOA, PIO_PA23X1_AD5, ID_PIOA, PIO_INPUT, PIO_DEFAULT, PIN_ATTR_ANALOG, ADC2, ADC5, NOT_ON_PWM, NOT_ON_TIMER }, // AD2 = EXT_PA23
177177
178178 // 32/33 - CANRX0/CANTX0
179- { PIOA, PIO_PA1A_CANRX0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT, PIN_ATTR_DIGITAL, ADC14, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // CANRX
180- { PIOA, PIO_PA0A_CANTX0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT, PIN_ATTR_DIGITAL, ADC15, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // CANTX
179+ { PIOA, PIO_PA1A_CANRX0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // CANRX
180+ { PIOA, PIO_PA0A_CANTX0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // CANTX
181181
182182 // 34/35/36 - SPI
183183 { PIOA, PIO_PA25A_SPI0_MISO,ID_PIOA,PIO_PERIPH_A, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // MISO
@@ -188,8 +188,8 @@ extern const PinDescription g_APinDescription[]=
188188 { PIOA, PIO_PA28A_SPI0_NPCS0,ID_PIOA,PIO_PERIPH_A,PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // NPCS0
189189
190190 // 38
191- { PIOA, PIO_PA18A_TWCK0, ID_PIOA, PIO_OUTPUT_0 , PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 49 = C_IN1_PD
192- { PIOA, PIO_PA19, ID_PIOA, PIO_OUTPUT_0 , PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 50 = C_IN2_PD
191+ { PIOA, PIO_PA18A_TWCK0, ID_PIOA, PIO_OUTPUT_1 , PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 49 = C_IN1_PD
192+ { PIOA, PIO_PA19, ID_PIOA, PIO_OUTPUT_1 , PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // PIN 50 = C_IN2_PD
193193
194194 // 40 - End of standard pins -----
195195
@@ -203,8 +203,8 @@ extern const PinDescription g_APinDescription[]=
203203 { PIOA, PIO_PA11A_TXD0|PIO_PA10A_RXD0, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_COMBO), NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER },
204204 // 43 - USART1 (Serial2) all pins
205205 { PIOA, PIO_PA13A_TXD1|PIO_PA12A_RXD1, ID_PIOA, PIO_PERIPH_A, PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_COMBO), NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER },
206- // 44 - USART3 (Serial3) all pins
207- { PIOB, PIO_PB20A_TXD2|PIO_PB21A_RXD2, ID_PIOB, PIO_PERIPH_B , PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_COMBO), NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER },
206+ // 44 - USART2 (Serial3) all pins
207+ { PIOB, PIO_PB20A_TXD2|PIO_PB21A_RXD2, ID_PIOB, PIO_PERIPH_A , PIO_DEFAULT, (PIN_ATTR_DIGITAL|PIN_ATTR_COMBO), NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER },
208208
209209 // 45 - USB
210210 { PIOB, PIO_PB11A_UOTGID|PIO_PB10A_UOTGVBOF, ID_PIOB, PIO_PERIPH_A, PIO_DEFAULT, PIN_ATTR_DIGITAL,NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // ID - VBOF
@@ -216,7 +216,7 @@ extern const PinDescription g_APinDescription[]=
216216 { PIOB, PIO_PB20B_SPI0_NPCS1, ID_PIOB, PIO_PERIPH_B, PIO_DEFAULT, PIN_ATTR_DIGITAL, NO_ADC, NO_ADC, NOT_ON_PWM, NOT_ON_TIMER }, // NPCS1
217217
218218 // 48 - DAC1 (alias)
219- { PIOB, PIO_PB16X1_DAC1, ID_PIOB, PIO_INPUT, PIO_DEFAULT, PIN_ATTR_ANALOG, ADC13, DA1, NOT_ON_PWM, NOT_ON_TIMER }, // DAC1
219+ { PIOB, PIO_PB16X1_DAC1, ID_PIOB, PIO_INPUT, PIO_DEFAULT, PIN_ATTR_ANALOG, NO_ADC, DA1, NOT_ON_PWM, NOT_ON_TIMER }, // DAC1
220220
221221 // 49 - Analog (alias)
222222 { PIOB, PIO_PB17X1_AD10, ID_PIOB, PIO_INPUT, PIO_DEFAULT, PIN_ATTR_ANALOG, ADC8, ADC10, NOT_ON_PWM, NOT_ON_TIMER }, // AD8 = S_INLEVEL
@@ -321,23 +321,14 @@ void init( void )
321321 // Initialize C library
322322 __libc_init_array ();
323323
324- // Disable pull-up on every pin
324+ // Initialize every pin
325325 for (unsigned i = 0 ; i < PINS_COUNT; i++)
326326 {
327- switch (i)
328- {
329- case -1 : // fake
330- #ifdef PIN_C_IN1_PD
331- case PIN_C_IN1_PD: // 36V input range, for compatibility
332- #endif
333- #ifdef PIN_C_IN2_PD
334- case PIN_C_IN2_PD: // 36V input range, for compatibility
335- #endif
336- digitalWrite (i, HIGH);
337- break ;
338- default :
339- digitalWrite (i, LOW);
340- }
327+ PIO_Configure (
328+ g_APinDescription[i].pPort ,
329+ g_APinDescription[i].ulPinType ,
330+ g_APinDescription[i].ulPin ,
331+ g_APinDescription[i].ulPinConfiguration );
341332 }
342333
343334 // Enable parallel access on PIO output data registers
@@ -350,7 +341,6 @@ void init( void )
350341 g_APinDescription[PINS_UART].ulPinType ,
351342 g_APinDescription[PINS_UART].ulPin ,
352343 g_APinDescription[PINS_UART].ulPinConfiguration );
353- digitalWrite (0 , HIGH); // Enable pullup for RX0
354344 PIO_Configure (
355345 g_APinDescription[PINS_USART0].pPort ,
356346 g_APinDescription[PINS_USART0].ulPinType ,
0 commit comments