From facd1ee606fca492aed9d161b7af975059cabe90 Mon Sep 17 00:00:00 2001 From: Markus Hitter Date: Fri, 24 Jul 2015 13:36:19 +0200 Subject: [PATCH] pinio.h: implement PULLUP_ON() and PULLUP_OFF(). On ARM enabling the pullup on an input pin isn't done by writing a 1 to the pin, but by setting the corresponding register. Accordingly we need a distinct function for this. --- pinio.h | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pinio.h b/pinio.h index ac5a683..234e56b 100644 --- a/pinio.h +++ b/pinio.h @@ -49,6 +49,11 @@ /// Set pin as output. #define _SET_OUTPUT(IO) do { IO ## _DDR |= MASK(IO ## _PIN); } while (0) + /// Enable pullup resistor. + #define _PULLUP_ON(IO) _WRITE(IO, 1) + /// Disable pullup resistor. + #define _PULLUP_OFF(IO) _WRITE(IO, 0) + #elif defined __ARMEL__ /** @@ -84,6 +89,17 @@ IO ## _PORT->DIR |= MASK(IO ## _PIN); \ } while (0) + /// Enable pullup resistor. + #define _PULLUP_ON(IO) \ + do { \ + LPC_IOCON->IO ## _CMSIS = (IO ## _OUTPUT | IO_MODEMASK_PULLUP); \ + } while (0) + /// Disable pullup resistor. + #define _PULLUP_OFF(IO) \ + do { \ + LPC_IOCON->IO ## _CMSIS = (IO ## _OUTPUT | IO_MODEMASK_INACTIVE); \ + } while (0) + #elif defined SIMULATOR #include "simulator.h" @@ -92,6 +108,8 @@ void _WRITE(pin_t pin, bool on); void _SET_OUTPUT(pin_t pin); void _SET_INPUT(pin_t pin); + #define _PULLUP_ON(IO) _WRITE(IO, 1) + #define _PULLUP_OFF(IO) _WRITE(IO, 0) #endif /* __AVR__, __ARMEL__, SIMULATOR */ @@ -109,6 +127,11 @@ /// Set pin as output wrapper. #define SET_OUTPUT(IO) _SET_OUTPUT(IO) +/// Enable pullup resistor. +#define PULLUP_ON(IO) _PULLUP_ON(IO) +/// Disable pullup resistor. +#define PULLUP_OFF(IO) _PULLUP_OFF(IO) + /* Power */