.
Ejemplos que cosas que me encuentro definidas en el core del Teeny, que se utilizan en el programa. No entiendo, como están definiendo el multiplexado de funciones por pin. Veo que en el fichero core_pins.h definen con otra definición que apunta finalmente al fichero kinetis.h, donde asignan a direcciones de memoria concretas.
Otra cosa que no entiendo es cuando definen con un numero, por ejemplo en estas lineas, ese número no se o que es, intuyo que es el pin del chip, pero no veo que lo relacionen con un puerto concreto.
#define CORE_PIN0_BIT 16
#define CORE_PIN1_BIT 17
#define CORE_PIN2_BIT 0
#define CORE_PIN3_BIT 12
#define CORE_PIN4_BIT 13
En el programa
// Input pins
const static uint8_t DMD_ROW_DATA = 17;
#define DMD_ROW_DATA_BITMASK CORE_PIN17_BITMASK
const static uint8_t DMD_ROW_CLK = 16;
#define DMD_ROW_CLK_BITMASK CORE_PIN16_BITMASK
const static uint8_t DMD_DOT_LATCH = 18;
#define DMD_DOT_LATCH_BITMASK CORE_PIN18_BITMASK
const static uint8_t DMD_OE = 19;
#define DMD_OE_BITMASK CORE_PIN19_BITMASK
// CORE_PIN11_CONFIG = PORT_PCR_DSE | PORT_PCR_MUX(2);
CORE_PIN12_CONFIG = PORT_PCR_MUX(2) | PORT_PCR_PE;
CORE_PIN13_CONFIG = PORT_PCR_MUX(2);
En el fichero core_pins.h
#define CORE_PIN18_BIT 3
#define CORE_PIN12_CONFIG PORTC_PCR7
#define CORE_PIN13_CONFIG PORTC_PCR5
#define CORE_PIN16_BITMASK (1<<(CORE_PIN16_BIT))
#define CORE_PIN17_BITMASK (1<<(CORE_PIN17_BIT))
#define CORE_PIN18_BITMASK (1<<(CORE_PIN18_BIT))
#define CORE_PIN19_BITMASK (1<<(CORE_PIN19_BIT))
En el fichero kinetis.h
#define PORTC_PCR5 (*(volatile uint32_t *)0x4004B014) // Pin Control Register n
#define PORTC_PCR6 (*(volatile uint32_t *)0x4004B018) // Pin Control Register n
#define PORTC_PCR7 (*(volatile uint32_t *)0x4004B01C) // Pin Control Register n
#define PORT_PCR_MUX(n) ((uint32_t)(((n) & 7) << 8 )) // Pin Mux Control