Explorar el Código

Merge pull request #114 from Xenoamor/master

Add OUTPUT_OPENDRAIN, INPUT_PULLDOWN for pinMode()
main
Paul Stoffregen hace 9 años
padre
commit
fbd1b36d11
Se han modificado 3 ficheros con 21 adiciones y 2 borrados
  1. +5
    -0
      keywords.txt
  2. +2
    -0
      teensy3/core_pins.h
  3. +14
    -2
      teensy3/pins_teensy.c

+ 5
- 0
keywords.txt Ver fichero

NOT_AN_INTERRUPT LITERAL1 NOT_AN_INTERRUPT LITERAL1
digitalPinToInterrupt KEYWORD2 digitalPinToInterrupt KEYWORD2


# Teensy 3.x advanced pin states
OUTPUT_OPENDRAIN LITERAL1
INPUT_PULLUP LITERAL1
INPUT_PULLDOWN LITERAL1

# String functions # String functions
copy KEYWORD2 copy KEYWORD2
append KEYWORD2 append KEYWORD2

+ 2
- 0
teensy3/core_pins.h Ver fichero

#define INPUT 0 #define INPUT 0
#define OUTPUT 1 #define OUTPUT 1
#define INPUT_PULLUP 2 #define INPUT_PULLUP 2
#define INPUT_PULLDOWN 3
#define OUTPUT_OPENDRAIN 4
#define LSBFIRST 0 #define LSBFIRST 0
#define MSBFIRST 1 #define MSBFIRST 1
#define _BV(n) (1<<(n)) #define _BV(n) (1<<(n))

+ 14
- 2
teensy3/pins_teensy.c Ver fichero

if (pin >= CORE_NUM_DIGITAL) return; if (pin >= CORE_NUM_DIGITAL) return;
config = portConfigRegister(pin); config = portConfigRegister(pin);


if (mode == OUTPUT) {
if (mode == OUTPUT || mode == OUTPUT_OPENDRAIN) {
#ifdef KINETISK #ifdef KINETISK
*portModeRegister(pin) = 1; *portModeRegister(pin) = 1;
#else #else
*portModeRegister(pin) |= digitalPinToBitMask(pin); // TODO: atomic *portModeRegister(pin) |= digitalPinToBitMask(pin); // TODO: atomic
#endif #endif
*config = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1); *config = PORT_PCR_SRE | PORT_PCR_DSE | PORT_PCR_MUX(1);
if (mode == OUTPUT_OPENDRAIN) {
*config |= PORT_PCR_ODE;
} else {
*config &= ~PORT_PCR_ODE;
}
} else { } else {
#ifdef KINETISK #ifdef KINETISK
*portModeRegister(pin) = 0; *portModeRegister(pin) = 0;
#else #else
*portModeRegister(pin) &= ~digitalPinToBitMask(pin); *portModeRegister(pin) &= ~digitalPinToBitMask(pin);
#endif #endif
if (mode == INPUT) {
if (mode == INPUT || mode == INPUT_PULLUP || mode == INPUT_PULLDOWN) {
*config = PORT_PCR_MUX(1); *config = PORT_PCR_MUX(1);
if (mode == INPUT_PULLUP) {
*config |= (PORT_PCR_PE | PORT_PCR_PS); // pullup
} else if (mode == INPUT_PULLDOWN) {
*config |= (PORT_PCR_PE); // pulldown
*config &= ~(PORT_PCR_PS);
}
} else { } else {
*config = PORT_PCR_MUX(1) | PORT_PCR_PE | PORT_PCR_PS; // pullup *config = PORT_PCR_MUX(1) | PORT_PCR_PE | PORT_PCR_PS; // pullup
} }
} }

} }





Cargando…
Cancelar
Guardar