136 #define LL_GPIO_MODE_INPUT_POS ((uint32_t)0x0U)
137 #define LL_GPIO_MODE_OUTPUT_POS ((uint32_t)0x1U)
138 #define LL_GPIO_STRENGTH_DS0_MASK ((uint32_t)0x10U)
139 #define LL_GPIO_STRENGTH_DS1_MASK ((uint32_t)0x01U)
140 #define LL_GPIO_STRENGTH_DS0_POS ((uint32_t)0x04U)
141 #define LL_GPIO_STRENGTH_DS1_POS ((uint32_t)0x00U)
147 #define LL_GPIO_PIN_0 ((uint32_t)0x0001U)
148 #define LL_GPIO_PIN_1 ((uint32_t)0x0002U)
149 #define LL_GPIO_PIN_2 ((uint32_t)0x0004U)
150 #define LL_GPIO_PIN_3 ((uint32_t)0x0008U)
151 #define LL_GPIO_PIN_4 ((uint32_t)0x0010U)
152 #define LL_GPIO_PIN_5 ((uint32_t)0x0020U)
153 #define LL_GPIO_PIN_6 ((uint32_t)0x0040U)
154 #define LL_GPIO_PIN_7 ((uint32_t)0x0080U)
155 #define LL_GPIO_PIN_8 ((uint32_t)0x0100U)
156 #define LL_GPIO_PIN_9 ((uint32_t)0x0200U)
157 #define LL_GPIO_PIN_10 ((uint32_t)0x0400U)
158 #define LL_GPIO_PIN_11 ((uint32_t)0x0800U)
159 #define LL_GPIO_PIN_12 ((uint32_t)0x1000U)
160 #define LL_GPIO_PIN_13 ((uint32_t)0x2000U)
161 #define LL_GPIO_PIN_ALL ((uint32_t)0x3FFFU)
167 #define LL_GPIO_MODE_NONE ((uint32_t)0x0U)
168 #define LL_GPIO_MODE_INPUT ((uint32_t)0x1U)
169 #define LL_GPIO_MODE_OUTPUT ((uint32_t)0x2U)
170 #define LL_GPIO_MODE_INOUT ((uint32_t)0x3U)
176 #define LL_GPIO_PULL_NO ((uint32_t)0x0U)
177 #define LL_GPIO_PULL_UP ((uint32_t)0x1U)
178 #define LL_GPIO_PULL_DOWN ((uint32_t)0x2U)
184 #define LL_GPIO_SPEED_MEDIUM ((uint32_t)0x1U)
185 #define LL_GPIO_SPEED_HIGH ((uint32_t)0x0U)
191 #define LL_GPIO_STRENGTH_LOW ((uint32_t)0x00U)
192 #define LL_GPIO_STRENGTH_MEDIUM ((uint32_t)0x01U)
193 #define LL_GPIO_STRENGTH_HIGH ((uint32_t)0x10U)
194 #define LL_GPIO_STRENGTH_ULTRA ((uint32_t)0x11U)
200 #define LL_GPIO_INPUT_TYPE_CMOS ((uint32_t)0x00U)
201 #define LL_GPIO_INPUT_TYPE_SCHMITT ((uint32_t)0x01U)
207 #define LL_GPIO_TRIGGER_NONE ((uint32_t)0x00U)
208 #define LL_GPIO_TRIGGER_RISING ((uint32_t)0x01U)
209 #define LL_GPIO_TRIGGER_FALLING ((uint32_t)0x02U)
210 #define LL_GPIO_TRIGGER_HIGH ((uint32_t)0x03U)
211 #define LL_GPIO_TRIGGER_LOW ((uint32_t)0x04U)
212 #define LL_GPIO_TRIGGER_BOTH_EDGE ((uint32_t)0x05U)
219 #define GPIO_DATA_ADDR(x) (GPIO##x##_BASE+0x00)
220 #define GPIO_DATAOUT_ADDR(x) (GPIO##x##_BASE+0x04)
221 #define GPIO_OUTENSET_ADDR(x) (GPIO##x##_BASE+0x10)
222 #define GPIO_OUTENCLR_ADDR(x) (GPIO##x##_BASE+0x14)
223 #define GPIO_ALTFUNCSET_ADDR(x) (GPIO##x##_BASE+0x18)
224 #define GPIO_ALTFUNCCLR_ADDR(x) (GPIO##x##_BASE+0x1c)
225 #define GPIO_INTENSET_ADDR(x) (GPIO##x##_BASE+0x20)
226 #define GPIO_INTENCLR_ADDR(x) (GPIO##x##_BASE+0x24)
227 #define GPIO_INTTYPESET_ADDR(x) (GPIO##x##_BASE+0x28)
228 #define GPIO_INTTYPECLR_ADDR(x) (GPIO##x##_BASE+0x2c)
229 #define GPIO_INTPOLSET_ADDR(x) (GPIO##x##_BASE+0x30)
230 #define GPIO_INTPOLCLR_ADDR(x) (GPIO##x##_BASE+0x34)
231 #define GPIO_INTSTAT_ADDR(x) (GPIO##x##_BASE+0x38)
232 #define GPIO_INTDBESET_ADDR(x) (GPIO##x##_BASE+0x40)
233 #define GPIO_INTDBECLR_ADDR(x) (GPIO##x##_BASE+0x44)
240 #define SET_GPIO_DATA(x,n) BIT_ADDR(GPIO_DATA_ADDR(x),n)
241 #define SET_GPIO_DATAOUT(x,n) BIT_ADDR(GPIO_DATAOUT_ADDR(x),n)
242 #define SET_GPIO_OUTENSET(x,n) BIT_ADDR(GPIO_OUTENSET_ADDR(x),n)
243 #define SET_GPIO_OUTENCLR(x,n) BIT_ADDR(GPIO_OUTENCLR_ADDR(x),n)
244 #define SET_GPIO_ALTFUNCSET(x,n) BIT_ADDR(GPIO_ALTFUNCSET_ADDR(x),n)
245 #define SET_GPIO_ALTFUNCCLR(x,n) BIT_ADDR(GPIO_ALTFUNCCLR_ADDR(x),n)
246 #define SET_GPIO_INTENSET(x,n) BIT_ADDR(GPIO_INTENSET_ADDR(x),n)
247 #define SET_GPIO_INTENCLR(x,n) BIT_ADDR(GPIO_INTENCLR_ADDR(x),n)
248 #define SET_GPIO_INTTYPESET(x,n) BIT_ADDR(GPIO_INTTYPESET_ADDR(x),n)
249 #define SET_GPIO_INTTYPECLR(x,n) BIT_ADDR(GPIO_INTTYPECLR_ADDR(x),n)
250 #define SET_GPIO_INTPOLSET(x,n) BIT_ADDR(GPIO_INTPOLSET_ADDR(x),n)
251 #define SET_GPIO_INTPOLCLR(x,n) BIT_ADDR(GPIO_INTPOLCLR_ADDR(x),n)
252 #define SET_GPIO_INTSTAT(x,n) BIT_ADDR(GPIO_INTSTAT_ADDR(x),n)
253 #define SET_GPIO_INTDBESET(x,n) BIT_ADDR(GPIO_INTDBESET_ADDR(x),n)
254 #define SET_GPIO_INTDBECLR(x,n) BIT_ADDR(GPIO_INTDBECLR_ADDR(x),n)
264 #define LL_GPIO_DEFAULT_CONFIG \
266 .pin = LL_GPIO_PIN_ALL, \
267 .mode = LL_GPIO_MODE_INPUT, \
268 .pull = LL_GPIO_PULL_DOWN, \
269 .mux = IO_MUX_GPIO, \
270 .speed = LL_GPIO_SPEED_MEDIUM, \
271 .strength = LL_GPIO_STRENGTH_MEDIUM, \
272 .input_type = LL_GPIO_INPUT_TYPE_CMOS, \
273 .trigger = LL_GPIO_TRIGGER_NONE, \
295 #define LL_GPIO_WriteReg(__instance__, __REG__, __VALUE__) WRITE_REG(__instance__->__REG__, (__VALUE__))
303 #define LL_GPIO_ReadReg(__instance__, __REG__) READ_REG(__instance__->__REG__)
323 #define LL_GPIO_GET_RESISTOR_POS(__GPIOx__) (((__GPIOx__) == GPIO0) ? 0 : 16)
331 #define LL_GPIO_GET_DPAD_POS(__GPIOx__) (((__GPIOx__) == GPIO0) ? 0 : 16)
339 #define LL_GPIO_GET_REG_MUX_CTRL_0_7( __GPIOx__) \
340 (((__GPIOx__) == GPIO0) ? &(MCU_SUB->DPAD_MUX_CTL_00_07) : &(MCU_SUB->DPAD_MUX_CTL_16_23))
348 #define LL_GPIO_GET_REG_MUX_CTRL_8_15( __GPIOx__) \
349 (((__GPIOx__) == GPIO0) ? &(MCU_SUB->DPAD_MUX_CTL_08_15) : &(MCU_SUB->DPAD_MUX_CTL_24_31))
398 uint32_t ie_mask = (pin_mask << MCU_PAD_DPAD_IE_POS) & MCU_PAD_DPAD_IE;
399 uint32_t oe_mask = (pin_mask << GPIO_OUTENSET_Pos) & GPIO_OUTENSET;
402 MODIFY_REG(MCU_PAD->DPAD_IE_BUS, ie_mask, ie);
403 WRITE_REG(GPIOx->OUTENCLR, oe_mask);
404 WRITE_REG(GPIOx->OUTENSET, oe);
440 uint32_t ie_mask = (pin << MCU_PAD_DPAD_IE_POS) & MCU_PAD_DPAD_IE;
441 uint32_t oe_mask = (pin << GPIO_OUTENSET_Pos) & GPIO_OUTENSET;
442 uint32_t ie = READ_BITS(MCU_PAD->DPAD_IE_BUS, ie_mask) >> (POSITION_VAL(pin));
443 uint32_t oe = READ_BITS(GPIOx->OUTENSET, oe_mask) >> (POSITION_VAL(pin));
480 pin_mask = (pin_mask << MCU_PAD_DPAD_IS_POS) & MCU_PAD_DPAD_IS;
515 pin = (pin << MCU_PAD_DPAD_IS_POS) & MCU_PAD_DPAD_IS;
516 return ((uint32_t)(READ_BITS(MCU_PAD->DPAD_IS_BUS, pin) == pin) ?
552 MODIFY_REG(MCU_PAD->DPAD_PS_BUS, pin_mask, ((pull ==
LL_GPIO_PULL_UP) ? pin_mask : 0x0000U));
553 MODIFY_REG(MCU_PAD->DPAD_PE_BUS, pin_mask, ((pull ==
LL_GPIO_PULL_NO) ? 0x0000U : pin_mask));
588 return ((READ_BITS(MCU_PAD->DPAD_PE_BUS, pin) == RESET) ?
LL_GPIO_PULL_NO :
626 pin = POSITION_VAL(pin);
630 pos = (pin & 3) << 3;
638 MODIFY_REG(MCU_PAD->DPAD_MUX[
id], IO_MUX_BIT_MASK << pos, mux << pos);
673 pin = POSITION_VAL(pin);
677 pos = (pin & 3) << 3;
685 return (READ_BITS(MCU_PAD->DPAD_MUX[
id], IO_MUX_BIT_MASK << pos) >> pos);
721 MODIFY_REG(MCU_PAD->DPAD_SR_BUS, pin_mask << MCU_PAD_DPAD_SR_POS, pin_mask << MCU_PAD_DPAD_SR_POS);
725 MODIFY_REG(MCU_PAD->DPAD_SR_BUS, pin_mask << MCU_PAD_DPAD_SR_POS, 0);
761 pos = POSITION_VAL(pin_mask);
762 return (READ_BITS(MCU_PAD->DPAD_SR_BUS, pin_mask << MCU_PAD_DPAD_SR_POS ) >> pos >> MCU_PAD_DPAD_SR_POS);
802 MODIFY_REG(MCU_PAD->DPAD_DS0_BUS, pin_mask << MCU_PAD_DPAD_DS0_POS , pin_mask << MCU_PAD_DPAD_DS0_POS);
806 MODIFY_REG(MCU_PAD->DPAD_DS0_BUS, pin_mask << MCU_PAD_DPAD_DS0_POS , 0);
810 MODIFY_REG(MCU_PAD->DPAD_DS1_BUS, pin_mask << MCU_PAD_DPAD_DS1_POS , pin_mask << MCU_PAD_DPAD_DS1_POS);
814 MODIFY_REG(MCU_PAD->DPAD_DS1_BUS, pin_mask << MCU_PAD_DPAD_DS1_POS , 0);
852 pos = POSITION_VAL(pin_mask);
853 uint8_t ds0 = READ_BITS(MCU_PAD->DPAD_DS0_BUS, pin_mask << MCU_PAD_DPAD_DS0_POS ) >> MCU_PAD_DPAD_DS0_POS >> pos;
854 uint8_t ds1 = READ_BITS(MCU_PAD->DPAD_DS1_BUS, pin_mask << MCU_PAD_DPAD_DS1_POS ) >> MCU_PAD_DPAD_DS1_POS >> pos;
875 return (uint32_t)(READ_REG(GPIOx->DATA));
906 return (READ_BITS(GPIOx->DATA, pin_mask) == (pin_mask));
922 WRITE_REG(GPIOx->DATAOUT, port_value);
937 return (uint32_t)(READ_REG(GPIOx->DATAOUT));
968 return (READ_BITS(GPIOx->DATAOUT, pin_mask) == (pin_mask));
999 return (READ_BITS(GPIOx->OUTENSET, pin_mask) == (pin_mask));
1030 #ifdef USE_GPIO_MASK_REGISTER
1031 WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], pin_mask & GPIO_MASKLOWBYTE_DATA);
1032 WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> GPIO_MASKHIGHBYTE_DATA_Pos)],
1033 pin_mask & GPIO_MASKHIGHBYTE_DATA);
1035 SET_BITS(GPIOx->DATAOUT, pin_mask);
1067 #ifdef USE_GPIO_MASK_REGISTER
1068 WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], 0x0000U);
1069 WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> 8)], 0x0000U);
1071 CLEAR_BITS(GPIOx->DATAOUT, pin_mask);
1103 WRITE_REG(GPIOx->DATAOUT, READ_REG(GPIOx->DATAOUT) ^ pin_mask);
1142 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1143 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1144 WRITE_REG(GPIOx->INTDBECLR, pin_mask);
1177 WRITE_REG(GPIOx->INTPOLSET, pin_mask);
1178 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1179 WRITE_REG(GPIOx->INTDBECLR, pin_mask);
1212 WRITE_REG(GPIOx->INTPOLSET, pin_mask);
1213 WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1246 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1247 WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1281 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1282 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1283 WRITE_REG(GPIOx->INTDBESET, pin_mask);
1326 #define TYPE_SET ((uint32_t)0x4U) // GPIO INTTYPESET is set
1327 #define POL_SET ((uint32_t)0x2U) // GPIO INTPOLSET is set
1328 #define DBE_SET ((uint32_t)0x1U) // GPIO INTDBESET is set
1330 uint32_t pos = POSITION_VAL(pin_mask);
1331 uint32_t type = (READ_BITS(GPIOx->INTTYPESET, pin_mask) >> pos ) << 2;
1332 uint32_t pol = (READ_BITS(GPIOx->INTPOLSET, pin_mask) >> pos) << 1;
1333 uint32_t both_egde = (READ_BITS(GPIOx->INTDBESET, pin_mask) >> pos);
1335 switch (type | pol | both_egde)
1385 WRITE_REG(GPIOx->INTENSET, pin_mask);
1417 WRITE_REG(GPIOx->INTENCLR, pin_mask);
1448 return (READ_BITS(GPIOx->INTENSET, pin_mask) == (pin_mask));
1487 return (uint16_t)(READ_BITS(GPIOx->INTSTAT, pin_mask));
1520 return (READ_BITS(GPIOx->INTSTAT, pin_mask) == pin_mask);
1553 WRITE_REG(GPIOx->INTSTAT, pin_mask);