| *(p->mux) = 5 | 0x10; | *(p->mux) = 5 | 0x10; | ||||
| } | } | ||||
| void pinMode(uint8_t pin, uint8_t mode) | |||||
| { | |||||
| const struct digital_pin_bitband_and_config_table_struct *p; | |||||
| if (pin >= CORE_NUM_DIGITAL) return; | |||||
| p = digital_pin_to_info_PGM + pin; | |||||
| if (mode == OUTPUT || mode == OUTPUT_OPENDRAIN) { | |||||
| *(p->reg + 1) |= p->mask; // TODO: atomic | |||||
| if (mode == OUTPUT) { | |||||
| *(p->pad) = IOMUXC_PAD_DSE(7); | |||||
| } else { // OUTPUT_OPENDRAIN | |||||
| *(p->pad) = IOMUXC_PAD_DSE(7) | IOMUXC_PAD_ODE; | |||||
| } | |||||
| } else { | |||||
| *(p->reg + 1) &= ~(p->mask); // TODO: atomic | |||||
| if (mode == INPUT) { | |||||
| *(p->pad) = 0; | |||||
| } else if (mode == INPUT_PULLUP) { | |||||
| *(p->pad) = IOMUXC_PAD_PKE | IOMUXC_PAD_PUE | IOMUXC_PAD_PUS(3) | IOMUXC_PAD_HYS; | |||||
| } else if (mode == INPUT_PULLDOWN) { | |||||
| *(p->pad) = IOMUXC_PAD_PKE | IOMUXC_PAD_PUE | IOMUXC_PAD_PUS(0) | IOMUXC_PAD_HYS; | |||||
| } else { // INPUT_DISABLE | |||||
| *(p->pad) = IOMUXC_PAD_HYS; | |||||
| } | |||||
| } | |||||
| *(p->mux) = 5 | 0x10; | |||||
| } | |||||
| void _shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t value) | void _shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t value) | ||||
| { | { | ||||
| if (bitOrder == LSBFIRST) { | if (bitOrder == LSBFIRST) { |