MCPcopy Create free account
hub / github.com/Moddable-OpenSource/moddable / modGPIOSetMode

Function modGPIOSetMode

modules/pins/digital/esp/modGPIO.c:113–176  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

111}
112
113int 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

Callers 7

modGPIOInitFunction · 0.70
xs_digital_modeFunction · 0.50
xs_digital_monitorFunction · 0.50
xs_digital_monitorFunction · 0.50
_resetFunction · 0.50
_write_bitFunction · 0.50
_read_bitFunction · 0.50

Calls

no outgoing calls

Tested by

no test coverage detected