25
25
26
26
int pinPeripheral ( uint32_t ulPin , EPioType ulPeripheral )
27
27
{
28
+ // Handle the case the pin isn't usable as PIO
28
29
if ( g_APinDescription [ulPin ].ulPinType == PIO_NOT_A_PIN )
29
30
{
30
31
return -1 ;
@@ -121,11 +122,13 @@ int pinPeripheral( uint32_t ulPin, EPioType ulPeripheral )
121
122
122
123
void pinMode ( uint32_t ulPin , uint32_t ulMode )
123
124
{
125
+ // Handle the case the pin isn't usable as PIO
124
126
if ( g_APinDescription [ulPin ].ulPinType == PIO_NOT_A_PIN )
125
127
{
126
128
return ;
127
129
}
128
130
131
+ // Set pin mode according to chapter '22.6.3 I/O Pin Configuration'
129
132
switch ( ulMode )
130
133
{
131
134
case INPUT :
@@ -138,6 +141,18 @@ void pinMode( uint32_t ulPin, uint32_t ulMode )
138
141
// Set pin to input mode with pull-up resistor enabled
139
142
PORT -> Group [g_APinDescription [ulPin ].ulPort ].PINCFG [g_APinDescription [ulPin ].ulPin ].reg = (uint8_t )(PORT_PINCFG_INEN |PORT_PINCFG_PULLEN ) ;
140
143
PORT -> Group [g_APinDescription [ulPin ].ulPort ].DIRCLR .reg = (uint32_t )(1 <<g_APinDescription [ulPin ].ulPin ) ;
144
+
145
+ // Enable pull level (cf '22.6.3.2 Input Configuration' and '22.8.7 Data Output Value Set')
146
+ PORT -> Group [g_APinDescription [ulPin ].ulPort ].OUTSET .reg = (uint32_t )(1 <<g_APinDescription [ulPin ].ulPin ) ;
147
+ break ;
148
+
149
+ case INPUT_PULLDOWN :
150
+ // Set pin to input mode with pull-down resistor enabled
151
+ PORT -> Group [g_APinDescription [ulPin ].ulPort ].PINCFG [g_APinDescription [ulPin ].ulPin ].reg = (uint8_t )(PORT_PINCFG_INEN |PORT_PINCFG_PULLEN ) ;
152
+ PORT -> Group [g_APinDescription [ulPin ].ulPort ].DIRCLR .reg = (uint32_t )(1 <<g_APinDescription [ulPin ].ulPin ) ;
153
+
154
+ // Enable pull level (cf '22.6.3.2 Input Configuration' and '22.8.6 Data Output Value Clear')
155
+ PORT -> Group [g_APinDescription [ulPin ].ulPort ].OUTCLR .reg = (uint32_t )(1 <<g_APinDescription [ulPin ].ulPin ) ;
141
156
break ;
142
157
143
158
case OUTPUT :
@@ -154,7 +169,7 @@ void pinMode( uint32_t ulPin, uint32_t ulMode )
154
169
155
170
void digitalWrite ( uint32_t ulPin , uint32_t ulVal )
156
171
{
157
- /* Handle the case the pin isn't usable as PIO */
172
+ // Handle the case the pin isn't usable as PIO
158
173
if ( g_APinDescription [ulPin ].ulPinType == PIO_NOT_A_PIN )
159
174
{
160
175
return ;
@@ -182,7 +197,7 @@ void digitalWrite( uint32_t ulPin, uint32_t ulVal )
182
197
183
198
int digitalRead ( uint32_t ulPin )
184
199
{
185
- /* Handle the case the pin isn't usable as PIO */
200
+ // Handle the case the pin isn't usable as PIO
186
201
if ( g_APinDescription [ulPin ].ulPinType == PIO_NOT_A_PIN )
187
202
{
188
203
return LOW ;
0 commit comments