| 111 | } |
| 112 | |
| 113 | int modGPIOSetMode(modGPIOConfiguration config, uint32_t mode) |
| 114 | { |
| 115 | mode &= ~(kModGPIOWakeRisingEdge | kModGPIOWakeFallingEdge); |
| 116 | |
| 117 | switch (mode) { |
| 118 | case kModGPIOInput: |
| 119 | case kModGPIOInputPullUp: |
| 120 | case kModGPIOInputPullDown: |
| 121 | if (config->pin < 16) { |
| 122 | GPIO_INIT_INPUT(config->pin); |
| 123 | |
| 124 | if (mode == kModGPIOInputPullUp) |
| 125 | *(volatile uint32_t *)gPixMuxAddr[config->pin] |= 1 << 7; |
| 126 | else if (mode == kModGPIOInputPullDown) |
| 127 | *(volatile uint32_t *)gPixMuxAddr[config->pin] |= 1 << 6; |
| 128 | } |
| 129 | else if (16 == config->pin) { |
| 130 | if (kModGPIOInput != mode) |
| 131 | return -1; |
| 132 | |
| 133 | WRITE_PERI_REG(PAD_XPD_DCDC_CONF, |
| 134 | (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | (uint32)0x1); // mux configuration for XPD_DCDC and rtc_gpio0 connection |
| 135 | |
| 136 | WRITE_PERI_REG(RTC_GPIO_CONF, |
| 137 | (READ_PERI_REG(RTC_GPIO_CONF) & (uint32)0xfffffffe) | (uint32)0x0); //mux configuration for out enable |
| 138 | |
| 139 | WRITE_PERI_REG(RTC_GPIO_ENABLE, |
| 140 | READ_PERI_REG(RTC_GPIO_ENABLE) & (uint32)0xfffffffe); //out disable |
| 141 | } |
| 142 | else if (17 == config->pin) { |
| 143 | if (kModGPIOInput != mode) |
| 144 | return -1; |
| 145 | } |
| 146 | break; |
| 147 | |
| 148 | case kModGPIOOutput: |
| 149 | case kModGPIOOutputOpenDrain: |
| 150 | if (config->pin < 16) { |
| 151 | GPIO_INIT_OUTPUT(config->pin, kModGPIOOutputOpenDrain == mode); |
| 152 | GPIO_CLEAR(config->pin); |
| 153 | } |
| 154 | else if (16 == config->pin) { |
| 155 | if (kModGPIOOutputOpenDrain == mode) |
| 156 | return -1; |
| 157 | |
| 158 | WRITE_PERI_REG(PAD_XPD_DCDC_CONF, |
| 159 | (READ_PERI_REG(PAD_XPD_DCDC_CONF) & 0xffffffbc) | (uint32)0x1); // mux configuration for XPD_DCDC to output rtc_gpio0 |
| 160 | |
| 161 | WRITE_PERI_REG(RTC_GPIO_CONF, |
| 162 | (READ_PERI_REG(RTC_GPIO_CONF) & (uint32)0xfffffffe) | (uint32)0x0); //mux configuration for out enable |
| 163 | |
| 164 | WRITE_PERI_REG(RTC_GPIO_ENABLE, |
| 165 | (READ_PERI_REG(RTC_GPIO_ENABLE) & (uint32)0xfffffffe) | (uint32)0x1); //out enable |
| 166 | } |
| 167 | else if (17 == config->pin) |
| 168 | return -1; |
| 169 | break; |
| 170 |
no outgoing calls
no test coverage detected