52 #ifndef __GR55XX_LL_GPIO_H__
53 #define __GR55XX_LL_GPIO_H__
62 #if defined (GPIO0) || defined (GPIO1) || defined(MCU_RET)
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_14 ((uint32_t)0x4000U)
162 #define LL_GPIO_PIN_15 ((uint32_t)0x8000U)
163 #define LL_GPIO_PIN_ALL ((uint32_t)0xFFFFU)
169 #define LL_GPIO_MODE_NONE ((uint32_t)0x0U)
170 #define LL_GPIO_MODE_INPUT ((uint32_t)0x1U)
171 #define LL_GPIO_MODE_OUTPUT ((uint32_t)0x2U)
172 #define LL_GPIO_MODE_INOUT ((uint32_t)0x3U)
178 #define LL_GPIO_PULL_NO ((uint32_t)0x0U)
179 #define LL_GPIO_PULL_UP ((uint32_t)0x1U)
180 #define LL_GPIO_PULL_DOWN ((uint32_t)0x2U)
186 #define LL_GPIO_MUX_0 ((uint32_t)0x0U)
187 #define LL_GPIO_MUX_1 ((uint32_t)0x1U)
188 #define LL_GPIO_MUX_2 ((uint32_t)0x2U)
189 #define LL_GPIO_MUX_3 ((uint32_t)0x3U)
190 #define LL_GPIO_MUX_4 ((uint32_t)0x4U)
191 #define LL_GPIO_MUX_5 ((uint32_t)0x5U)
192 #define LL_GPIO_MUX_6 ((uint32_t)0x6U)
193 #define LL_GPIO_MUX_7 ((uint32_t)0x7U)
194 #define LL_GPIO_MUX_8 ((uint32_t)0x8U)
200 #define LL_GPIO_SPEED_MEDIUM ((uint32_t)0x0U)
201 #define LL_GPIO_SPEED_HIGH ((uint32_t)0x1U)
207 #define LL_GPIO_STRENGTH_LOW ((uint32_t)0x00U)
208 #define LL_GPIO_STRENGTH_MEDIUM ((uint32_t)0x01U)
209 #define LL_GPIO_STRENGTH_HIGH ((uint32_t)0x10U)
210 #define LL_GPIO_STRENGTH_ULTRA ((uint32_t)0x11U)
216 #define LL_GPIO_INPUT_TYPE_CMOS ((uint32_t)0x00U)
217 #define LL_GPIO_INPUT_TYPE_SCHMITT ((uint32_t)0x01U)
223 #define LL_GPIO_TRIGGER_NONE ((uint32_t)0x00U)
224 #define LL_GPIO_TRIGGER_RISING ((uint32_t)0x01U)
225 #define LL_GPIO_TRIGGER_FALLING ((uint32_t)0x02U)
226 #define LL_GPIO_TRIGGER_HIGH ((uint32_t)0x03U)
227 #define LL_GPIO_TRIGGER_LOW ((uint32_t)0x04U)
228 #define LL_GPIO_TRIGGER_BOTH_EDGE ((uint32_t)0x05U)
236 #define GPIO_DATA_ADDR(x) (GPIO##x##_BASE+0x00)
237 #define GPIO_DATAOUT_ADDR(x) (GPIO##x##_BASE+0x04)
238 #define GPIO_OUTENSET_ADDR(x) (GPIO##x##_BASE+0x10)
239 #define GPIO_OUTENCLR_ADDR(x) (GPIO##x##_BASE+0x14)
240 #define GPIO_ALTFUNCSET_ADDR(x) (GPIO##x##_BASE+0x18)
241 #define GPIO_ALTFUNCCLR_ADDR(x) (GPIO##x##_BASE+0x1c)
242 #define GPIO_INTENSET_ADDR(x) (GPIO##x##_BASE+0x20)
243 #define GPIO_INTENCLR_ADDR(x) (GPIO##x##_BASE+0x24)
244 #define GPIO_INTTYPESET_ADDR(x) (GPIO##x##_BASE+0x28)
245 #define GPIO_INTTYPECLR_ADDR(x) (GPIO##x##_BASE+0x2c)
246 #define GPIO_INTPOLSET_ADDR(x) (GPIO##x##_BASE+0x30)
247 #define GPIO_INTPOLCLR_ADDR(x) (GPIO##x##_BASE+0x34)
248 #define GPIO_INTSTAT_ADDR(x) (GPIO##x##_BASE+0x38)
249 #define GPIO_INTDBESET_ADDR(x) (GPIO##x##_BASE+0x40)
250 #define GPIO_INTDBECLR_ADDR(x) (GPIO##x##_BASE+0x44)
257 #define SET_GPIO_DATA(x,n) BIT_ADDR(GPIO_DATA_ADDR(x),n)
258 #define SET_GPIO_DATAOUT(x,n) BIT_ADDR(GPIO_DATAOUT_ADDR(x),n)
259 #define SET_GPIO_OUTENSET(x,n) BIT_ADDR(GPIO_OUTENSET_ADDR(x),n)
260 #define SET_GPIO_OUTENCLR(x,n) BIT_ADDR(GPIO_OUTENCLR_ADDR(x),n)
261 #define SET_GPIO_ALTFUNCSET(x,n) BIT_ADDR(GPIO_ALTFUNCSET_ADDR(x),n)
262 #define SET_GPIO_ALTFUNCCLR(x,n) BIT_ADDR(GPIO_ALTFUNCCLR_ADDR(x),n)
263 #define SET_GPIO_INTENSET(x,n) BIT_ADDR(GPIO_INTENSET_ADDR(x),n)
264 #define SET_GPIO_INTENCLR(x,n) BIT_ADDR(GPIO_INTENCLR_ADDR(x),n)
265 #define SET_GPIO_INTTYPESET(x,n) BIT_ADDR(GPIO_INTTYPESET_ADDR(x),n)
266 #define SET_GPIO_INTTYPECLR(x,n) BIT_ADDR(GPIO_INTTYPECLR_ADDR(x),n)
267 #define SET_GPIO_INTPOLSET(x,n) BIT_ADDR(GPIO_INTPOLSET_ADDR(x),n)
268 #define SET_GPIO_INTPOLCLR(x,n) BIT_ADDR(GPIO_INTPOLCLR_ADDR(x),n)
269 #define SET_GPIO_INTSTAT(x,n) BIT_ADDR(GPIO_INTSTAT_ADDR(x),n)
270 #define SET_GPIO_INTDBESET(x,n) BIT_ADDR(GPIO_INTDBESET_ADDR(x),n)
271 #define SET_GPIO_INTDBECLR(x,n) BIT_ADDR(GPIO_INTDBECLR_ADDR(x),n)
281 #define LL_GPIO_DEFAULT_CONFIG \
283 .pin = LL_GPIO_PIN_ALL, \
284 .mode = LL_GPIO_MODE_INPUT, \
285 .pull = LL_GPIO_PULL_DOWN, \
286 .mux = LL_GPIO_MUX_8, \
287 .speed = LL_GPIO_SPEED_MEDIUM, \
288 .strength = LL_GPIO_STRENGTH_MEDIUM, \
289 .input_type = LL_GPIO_INPUT_TYPE_CMOS, \
290 .trigger = LL_GPIO_TRIGGER_NONE, \
312 #define LL_GPIO_WriteReg(__instance__, __REG__, __VALUE__) WRITE_REG(__instance__->__REG__, (__VALUE__))
320 #define LL_GPIO_ReadReg(__instance__, __REG__) READ_REG(__instance__->__REG__)
383 uint32_t oe_mask = (pin_mask << GPIO_OUTENSET_Pos) & GPIO_OUTENSET;
384 pin_mask <<= ((GPIOx == GPIO1) ? 16 : 0);
385 uint32_t ie_mask = (pin_mask << MCU_PAD_DPAD_IE_POS) & MCU_PAD_DPAD_IE;
388 WRITE_REG(GPIOx->OUTENCLR, oe_mask);
389 WRITE_REG(GPIOx->OUTENSET, oe);
392 MODIFY_REG(MCU_RET->DPAD_IE_BUS_1, ie_mask, ie);
396 MODIFY_REG(MCU_RET->DPAD_IE_BUS_0, ie_mask, ie);
441 #define IE_SET ((uint32_t)0x1U)
442 #define OE_SET ((uint32_t)0x2U)
444 uint32_t pin_raw = pin;
445 pin <<= ((GPIOx == GPIO1) ? 16 : 0);
446 uint32_t ie_mask = (pin << MCU_PAD_DPAD_IE_POS) & MCU_PAD_DPAD_IE;
447 uint32_t oe_mask = (pin_raw << GPIO_OUTENSET_Pos) & GPIO_OUTENSET;
451 ie = READ_BITS(MCU_RET->DPAD_IE_BUS_1, ie_mask) >> (POSITION_VAL(pin));
452 oe = READ_BITS(GPIOx->OUTENSET, oe_mask) >> (POSITION_VAL(pin_raw));
456 ie = READ_BITS(MCU_RET->DPAD_IE_BUS_0, ie_mask) >> (POSITION_VAL(pin));
457 oe = READ_BITS(GPIOx->OUTENSET, oe_mask) >> (POSITION_VAL(pin_raw));
460 switch (ie | (oe << 1))
507 pin_mask <<= ((GPIOx == GPIO1) ? 16 : 0);
551 pin <<= ((GPIOx == GPIO1) ? 16 : 0);
555 return ((uint32_t)(READ_BITS(MCU_RET->DPAD_IS_BUS_1, pin) == pin) ?
560 return ((uint32_t)(READ_BITS(MCU_RET->DPAD_IS_BUS_0, pin) == pin) ?
602 MODIFY_REG(MCU_RET->DPAD_PS_BUS_1, pin_mask, (pull ==
LL_GPIO_PULL_UP) ? pin_mask : 0x0000U);
603 MODIFY_REG(MCU_RET->DPAD_PE_BUS_1, pin_mask, (pull ==
LL_GPIO_PULL_NO) ? 0x0000U : pin_mask);
607 pin_mask <<= ((GPIOx == GPIO1) ? 16 : 0);
608 MODIFY_REG(MCU_RET->DPAD_PS_BUS_0, pin_mask, ((pull ==
LL_GPIO_PULL_UP) ? pin_mask : 0x0000U));
609 MODIFY_REG(MCU_RET->DPAD_PE_BUS_0, pin_mask, ((pull ==
LL_GPIO_PULL_NO) ? 0x0000U : pin_mask));
650 return ((READ_BITS(MCU_RET->DPAD_PE_BUS_1, pin) == RESET) ?
LL_GPIO_PULL_NO :
655 pin <<= ((GPIOx == GPIO1) ? 16 : 0);
656 return ((READ_BITS(MCU_RET->DPAD_PE_BUS_0, pin) == RESET) ?
LL_GPIO_PULL_NO :
703 volatile uint32_t* GPIO_MUX_REG_BASE = &(MCU_RET->DPAD_MUX_CTL_00_07);
707 pin = POSITION_VAL(pin);
708 pos = (pin & 7) << 2;
714 else if(GPIO1 == GPIOx)
716 offset = (pin >> 3) + 2;
723 MODIFY_REG(*(GPIO_MUX_REG_BASE + offset), 0xF << pos, mux << pos);
766 uint32_t pos = POSITION_VAL(pin) << 2;
771 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_00_07, 0xF << pos) >> pos);
775 pos = POSITION_VAL(pin >> 8) << 2;
776 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_08_15, 0xF << pos) >> pos);
779 else if(GPIO1 == GPIOx)
783 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_16_23, 0xF << pos) >> pos);
787 pos = POSITION_VAL(pin >> 8) << 2;
788 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_24_31, 0xF << pos) >> pos);
795 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_32_39, 0xF << pos) >> pos);
835 pin_mask <<= ((GPIOx == GPIO1) ? 16 : 0);
836 pos = POSITION_VAL(pin_mask);
839 MODIFY_REG(MCU_RET->DPAD_SR_BUS_1, pin_mask << MCU_PAD_DPAD_SR_POS, speed << pos << MCU_PAD_DPAD_SR_POS);
843 MODIFY_REG(MCU_RET->DPAD_SR_BUS_0, pin_mask << MCU_PAD_DPAD_SR_POS, speed << pos << MCU_PAD_DPAD_SR_POS);
881 pin_mask <<= ((GPIOx == GPIO1) ? 16 : 0);
882 pos = POSITION_VAL(pin_mask);
885 return (READ_BITS(MCU_RET->DPAD_SR_BUS_1, pin_mask << MCU_PAD_DPAD_SR_POS ) >> pos >> MCU_PAD_DPAD_SR_POS);
889 return (READ_BITS(MCU_RET->DPAD_SR_BUS_0, pin_mask << MCU_PAD_DPAD_SR_POS ) >> pos >> MCU_PAD_DPAD_SR_POS);
929 pin_mask <<= ((GPIOx == GPIO1) ? 16 : 0);
930 pos = POSITION_VAL(pin_mask);
936 MODIFY_REG(MCU_RET->DPAD_DS0_BUS_1, pin_mask << MCU_PAD_DPAD_DS0_POS , ds0 << pos << MCU_PAD_DPAD_DS0_POS);
937 MODIFY_REG(MCU_RET->DPAD_DS1_BUS_1, pin_mask << MCU_PAD_DPAD_DS1_POS , ds1 << pos << MCU_PAD_DPAD_DS1_POS);
941 MODIFY_REG(MCU_RET->DPAD_DS0_BUS_0, pin_mask << MCU_PAD_DPAD_DS0_POS , ds0 << pos << MCU_PAD_DPAD_DS0_POS);
942 MODIFY_REG(MCU_RET->DPAD_DS1_BUS_0, pin_mask << MCU_PAD_DPAD_DS1_POS , ds1 << pos << MCU_PAD_DPAD_DS1_POS);
982 pin_mask <<= ((GPIOx == GPIO1) ? 16 : 0);
983 pos = POSITION_VAL(pin_mask);
987 ds0 = READ_BITS(MCU_RET->DPAD_DS0_BUS_1, pin_mask << MCU_PAD_DPAD_DS0_POS ) >> MCU_PAD_DPAD_DS0_POS >> pos;
988 ds1 = READ_BITS(MCU_RET->DPAD_DS1_BUS_1, pin_mask << MCU_PAD_DPAD_DS1_POS ) >> MCU_PAD_DPAD_DS1_POS>> pos;
992 ds0 = READ_BITS(MCU_RET->DPAD_DS0_BUS_0, pin_mask << MCU_PAD_DPAD_DS0_POS ) >> MCU_PAD_DPAD_DS0_POS >> pos;
993 ds1 = READ_BITS(MCU_RET->DPAD_DS1_BUS_0, pin_mask << MCU_PAD_DPAD_DS1_POS ) >> MCU_PAD_DPAD_DS1_POS>> pos;
1015 return (uint32_t)(READ_REG(GPIOx->DATA));
1048 return (READ_BITS(GPIOx->DATA, pin_mask) == (pin_mask));
1064 WRITE_REG(GPIOx->DATAOUT, port_value);
1079 return (uint32_t)(READ_REG(GPIOx->DATAOUT));
1112 return (READ_BITS(GPIOx->DATAOUT, pin_mask) == (pin_mask));
1145 #ifdef USE_GPIO_MASK_REGISTER
1146 WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], pin_mask & GPIO_MASKLOWBYTE_DATA);
1147 WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> GPIO_MASKHIGHBYTE_DATA_Pos)],
1148 pin_mask & GPIO_MASKHIGHBYTE_DATA);
1150 SET_BITS(GPIOx->DATAOUT, pin_mask);
1184 #ifdef USE_GPIO_MASK_REGISTER
1185 WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], 0x0000U);
1186 WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> 8)], 0x0000U);
1188 CLEAR_BITS(GPIOx->DATAOUT, pin_mask);
1222 WRITE_REG(GPIOx->DATAOUT, READ_REG(GPIOx->DATAOUT) ^ pin_mask);
1263 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1264 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1265 WRITE_REG(GPIOx->INTDBECLR, pin_mask);
1300 WRITE_REG(GPIOx->INTPOLSET, pin_mask);
1301 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1302 WRITE_REG(GPIOx->INTDBECLR, pin_mask);
1337 WRITE_REG(GPIOx->INTPOLSET, pin_mask);
1338 WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1373 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1374 WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1410 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1411 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1412 WRITE_REG(GPIOx->INTDBESET, pin_mask);
1459 #define TYPE_SET ((uint32_t)0x4U)
1460 #define POL_SET ((uint32_t)0x2U)
1461 #define DBE_SET ((uint32_t)0x1U)
1463 uint32_t pos = POSITION_VAL(pin_mask);
1464 uint32_t type = (READ_BITS(GPIOx->INTTYPESET, pin_mask) >> pos ) << 2;
1465 uint32_t pol = (READ_BITS(GPIOx->INTPOLSET, pin_mask) >> pos) << 1;
1466 uint32_t both_edge = (READ_BITS(GPIOx->INTDBESET, pin_mask) >> pos);
1468 switch (type | pol | both_edge)
1516 WRITE_REG(GPIOx->INTENSET, pin_mask);
1550 WRITE_REG(GPIOx->INTENCLR, pin_mask);
1583 return (READ_BITS(GPIOx->INTENSET, pin_mask) == (pin_mask));
1624 return (uint32_t)(READ_BITS(GPIOx->INTSTAT, pin_mask));
1659 return (READ_BITS(GPIOx->INTSTAT, pin_mask) == pin_mask);
1694 WRITE_REG(GPIOx->INTSTAT, pin_mask);