Replacement for regular GPIO (DigitalIn, DigitalOut, DigitalInOut) classes which has superior speed. (modified for use opendrain in stm32)

Dependents:   hctl2032_encoder

Fork of FastIO by Erik -

Committer:
Sissors
Date:
Tue Jul 01 17:04:08 2014 +0000
Revision:
0:d394ebd01052
Child:
2:1a6ed4b84590
v1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sissors 0:d394ebd01052 1 #ifdef TARGET_LPC11UXX
Sissors 0:d394ebd01052 2
Sissors 0:d394ebd01052 3 #include "mbed.h"
Sissors 0:d394ebd01052 4 #include "pinmap.h"
Sissors 0:d394ebd01052 5
Sissors 0:d394ebd01052 6 typedef struct {
Sissors 0:d394ebd01052 7 uint32_t mask;
Sissors 0:d394ebd01052 8 } fastio_vars;
Sissors 0:d394ebd01052 9
Sissors 0:d394ebd01052 10 #define PORT ((unsigned int)pin >> PORT_SHIFT)
Sissors 0:d394ebd01052 11 #define PINMASK (1 << ((int)pin & 0x1F))
Sissors 0:d394ebd01052 12 static inline void initpin(PinName pin);
Sissors 0:d394ebd01052 13
Sissors 0:d394ebd01052 14 #define INIT_PIN container.mask = PINMASK; initpin(pin)
Sissors 0:d394ebd01052 15
Sissors 0:d394ebd01052 16 #define SET_DIR_INPUT (LPC_GPIO->DIR[PORT] &= ~PINMASK)
Sissors 0:d394ebd01052 17 #define SET_DIR_OUTPUT (LPC_GPIO->DIR[PORT] |= PINMASK)
Sissors 0:d394ebd01052 18 #define SET_MODE(pull) (pin_mode(pin, pull))
Sissors 0:d394ebd01052 19
Sissors 0:d394ebd01052 20 #define WRITE_PIN_SET (LPC_GPIO->SET[PORT] = PINMASK)
Sissors 0:d394ebd01052 21 #define WRITE_PIN_CLR (LPC_GPIO->CLR[PORT] = PINMASK)
Sissors 0:d394ebd01052 22
Sissors 0:d394ebd01052 23 #define READ_PIN ((LPC_GPIO->PIN[PORT] & container.mask) ? 1 : 0)
Sissors 0:d394ebd01052 24
Sissors 0:d394ebd01052 25 static inline void initpin(PinName pin) {
Sissors 0:d394ebd01052 26 int f = ((pin == P0_0) ||
Sissors 0:d394ebd01052 27 (pin == P0_10) ||
Sissors 0:d394ebd01052 28 (pin == P0_11) ||
Sissors 0:d394ebd01052 29 (pin == P0_12) ||
Sissors 0:d394ebd01052 30 (pin == P0_13) ||
Sissors 0:d394ebd01052 31 (pin == P0_14) ||
Sissors 0:d394ebd01052 32 (pin == P0_15)) ? (1) : (0);
Sissors 0:d394ebd01052 33
Sissors 0:d394ebd01052 34 pin_function(pin, f);
Sissors 0:d394ebd01052 35 }
Sissors 0:d394ebd01052 36
Sissors 0:d394ebd01052 37 #endif