Skip to content
Snippets Groups Projects
Commit 9affb8f6 authored by Thibaut VIARD's avatar Thibaut VIARD
Browse files

fixing pullup mode and adding pulldown

parent cebfc3c6
No related branches found
No related tags found
No related merge requests found
......@@ -25,6 +25,7 @@
int pinPeripheral( uint32_t ulPin, EPioType ulPeripheral )
{
// Handle the case the pin isn't usable as PIO
if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
{
return -1 ;
......@@ -121,11 +122,13 @@ int pinPeripheral( uint32_t ulPin, EPioType ulPeripheral )
void pinMode( uint32_t ulPin, uint32_t ulMode )
{
// Handle the case the pin isn't usable as PIO
if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
{
return ;
}
// Set pin mode according to chapter '22.6.3 I/O Pin Configuration'
switch ( ulMode )
{
case INPUT:
......@@ -138,6 +141,18 @@ void pinMode( uint32_t ulPin, uint32_t ulMode )
// Set pin to input mode with pull-up resistor enabled
PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_INEN|PORT_PINCFG_PULLEN) ;
PORT->Group[g_APinDescription[ulPin].ulPort].DIRCLR.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
// Enable pull level (cf '22.6.3.2 Input Configuration' and '22.8.7 Data Output Value Set')
PORT->Group[g_APinDescription[ulPin].ulPort].OUTSET.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
break ;
case INPUT_PULLDOWN:
// Set pin to input mode with pull-down resistor enabled
PORT->Group[g_APinDescription[ulPin].ulPort].PINCFG[g_APinDescription[ulPin].ulPin].reg=(uint8_t)(PORT_PINCFG_INEN|PORT_PINCFG_PULLEN) ;
PORT->Group[g_APinDescription[ulPin].ulPort].DIRCLR.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
// Enable pull level (cf '22.6.3.2 Input Configuration' and '22.8.6 Data Output Value Clear')
PORT->Group[g_APinDescription[ulPin].ulPort].OUTCLR.reg = (uint32_t)(1<<g_APinDescription[ulPin].ulPin) ;
break ;
case OUTPUT:
......@@ -154,7 +169,7 @@ void pinMode( uint32_t ulPin, uint32_t ulMode )
void digitalWrite( uint32_t ulPin, uint32_t ulVal )
{
/* Handle the case the pin isn't usable as PIO */
// Handle the case the pin isn't usable as PIO
if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
{
return ;
......@@ -182,7 +197,7 @@ void digitalWrite( uint32_t ulPin, uint32_t ulVal )
int digitalRead( uint32_t ulPin )
{
/* Handle the case the pin isn't usable as PIO */
// Handle the case the pin isn't usable as PIO
if ( g_APinDescription[ulPin].ulPinType == PIO_NOT_A_PIN )
{
return LOW ;
......
......@@ -26,6 +26,7 @@
#define INPUT (0x0ul)
#define OUTPUT (0x1ul)
#define INPUT_PULLUP (0x2ul)
#define INPUT_PULLDOWN (0x4ul)
#define LOW (0x0ul)
#define HIGH (0x1ul)
......@@ -44,7 +45,7 @@ extern int pinPeripheral( uint32_t ulPin, EPioType ulPeripheral ) ;
* \brief Configures the specified pin to behave either as an input or an output. See the description of digital pins for details.
*
* \param ulPin The number of the pin whose mode you wish to set
* \param ulMode Either INPUT or OUTPUT
* \param ulMode Can be INPUT, OUTPUT, INPUT_PULLUP or INPUT_PULLDOWN
*/
extern void pinMode( uint32_t dwPin, uint32_t dwMode ) ;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment