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:
Wed Jul 16 19:31:35 2014 +0000
Revision:
4:6ebbf25b9167
Parent:
FastIO_LPC11UXX.h@2:1a6ed4b84590
First Nucleo, first version added: F401RE

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 2:1a6ed4b84590 15 #define DESTROY_PIN
Sissors 0:d394ebd01052 16
Sissors 0:d394ebd01052 17 #define SET_DIR_INPUT (LPC_GPIO->DIR[PORT] &= ~PINMASK)
Sissors 0:d394ebd01052 18 #define SET_DIR_OUTPUT (LPC_GPIO->DIR[PORT] |= PINMASK)
Sissors 0:d394ebd01052 19 #define SET_MODE(pull) (pin_mode(pin, pull))
Sissors 0:d394ebd01052 20
Sissors 0:d394ebd01052 21 #define WRITE_PIN_SET (LPC_GPIO->SET[PORT] = PINMASK)
Sissors 0:d394ebd01052 22 #define WRITE_PIN_CLR (LPC_GPIO->CLR[PORT] = PINMASK)
Sissors 0:d394ebd01052 23
Sissors 0:d394ebd01052 24 #define READ_PIN ((LPC_GPIO->PIN[PORT] & container.mask) ? 1 : 0)
Sissors 0:d394ebd01052 25
Sissors 0:d394ebd01052 26 static inline void initpin(PinName pin) {
Sissors 0:d394ebd01052 27 int f = ((pin == P0_0) ||
Sissors 0:d394ebd01052 28 (pin == P0_10) ||
Sissors 0:d394ebd01052 29 (pin == P0_11) ||
Sissors 0:d394ebd01052 30 (pin == P0_12) ||
Sissors 0:d394ebd01052 31 (pin == P0_13) ||
Sissors 0:d394ebd01052 32 (pin == P0_14) ||
Sissors 0:d394ebd01052 33 (pin == P0_15)) ? (1) : (0);
Sissors 0:d394ebd01052 34
Sissors 0:d394ebd01052 35 pin_function(pin, f);
Sissors 0:d394ebd01052 36 }
Sissors 0:d394ebd01052 37
Sissors 0:d394ebd01052 38 #endif