52 #ifndef __GR55XX_LL_GPIO_H__
53 #define __GR55XX_LL_GPIO_H__
62 #if defined (GPIO0) || defined (GPIO1) || defined(MCU_RET)
119 #define LL_GPIO_PIN_0 ((uint32_t)0x0001U)
120 #define LL_GPIO_PIN_1 ((uint32_t)0x0002U)
121 #define LL_GPIO_PIN_2 ((uint32_t)0x0004U)
122 #define LL_GPIO_PIN_3 ((uint32_t)0x0008U)
123 #define LL_GPIO_PIN_4 ((uint32_t)0x0010U)
124 #define LL_GPIO_PIN_5 ((uint32_t)0x0020U)
125 #define LL_GPIO_PIN_6 ((uint32_t)0x0040U)
126 #define LL_GPIO_PIN_7 ((uint32_t)0x0080U)
127 #define LL_GPIO_PIN_8 ((uint32_t)0x0100U)
128 #define LL_GPIO_PIN_9 ((uint32_t)0x0200U)
129 #define LL_GPIO_PIN_10 ((uint32_t)0x0400U)
130 #define LL_GPIO_PIN_11 ((uint32_t)0x0800U)
131 #define LL_GPIO_PIN_12 ((uint32_t)0x1000U)
132 #define LL_GPIO_PIN_13 ((uint32_t)0x2000U)
133 #define LL_GPIO_PIN_14 ((uint32_t)0x4000U)
134 #define LL_GPIO_PIN_15 ((uint32_t)0x8000U)
135 #define LL_GPIO_PIN_ALL ((uint32_t)0xFFFFU)
141 #define LL_GPIO_MODE_INPUT ((uint32_t)0x0U)
142 #define LL_GPIO_MODE_OUTPUT ((uint32_t)0x1U)
143 #define LL_GPIO_MODE_MUX ((uint32_t)0x2U)
149 #define LL_GPIO_PULL_NO LL_GPIO_RE_N
150 #define LL_GPIO_PULL_UP LL_GPIO_RTYP
151 #define LL_GPIO_PULL_DOWN ((uint32_t)0x0U)
157 #define LL_GPIO_MUX_0 ((uint32_t)0x0U)
158 #define LL_GPIO_MUX_1 ((uint32_t)0x1U)
159 #define LL_GPIO_MUX_2 ((uint32_t)0x2U)
160 #define LL_GPIO_MUX_3 ((uint32_t)0x3U)
161 #define LL_GPIO_MUX_4 ((uint32_t)0x4U)
162 #define LL_GPIO_MUX_5 ((uint32_t)0x5U)
163 #define LL_GPIO_MUX_6 ((uint32_t)0x6U)
164 #define LL_GPIO_MUX_7 ((uint32_t)0x7U)
165 #define LL_GPIO_MUX_8 ((uint32_t)0x8U)
171 #define LL_GPIO_TRIGGER_NONE ((uint32_t)0x00U)
172 #define LL_GPIO_TRIGGER_RISING ((uint32_t)0x01U)
173 #define LL_GPIO_TRIGGER_FALLING ((uint32_t)0x02U)
174 #define LL_GPIO_TRIGGER_HIGH ((uint32_t)0x03U)
175 #define LL_GPIO_TRIGGER_LOW ((uint32_t)0x04U)
176 #define LL_GPIO_TRIGGER_BOTH_EDGE ((uint32_t)0x05U)
184 #define GPIO_DATA_ADDR(x) (GPIO##x##_BASE+0x00)
185 #define GPIO_DATAOUT_ADDR(x) (GPIO##x##_BASE+0x04)
186 #define GPIO_OUTENSET_ADDR(x) (GPIO##x##_BASE+0x10)
187 #define GPIO_OUTENCLR_ADDR(x) (GPIO##x##_BASE+0x14)
188 #define GPIO_ALTFUNCSET_ADDR(x) (GPIO##x##_BASE+0x18)
189 #define GPIO_ALTFUNCCLR_ADDR(x) (GPIO##x##_BASE+0x1c)
190 #define GPIO_INTENSET_ADDR(x) (GPIO##x##_BASE+0x20)
191 #define GPIO_INTENCLR_ADDR(x) (GPIO##x##_BASE+0x24)
192 #define GPIO_INTTYPESET_ADDR(x) (GPIO##x##_BASE+0x28)
193 #define GPIO_INTTYPECLR_ADDR(x) (GPIO##x##_BASE+0x2c)
194 #define GPIO_INTPOLSET_ADDR(x) (GPIO##x##_BASE+0x30)
195 #define GPIO_INTPOLCLR_ADDR(x) (GPIO##x##_BASE+0x34)
196 #define GPIO_INTSTAT_ADDR(x) (GPIO##x##_BASE+0x38)
197 #define GPIO_INTDBESET_ADDR(x) (GPIO##x##_BASE+0x40)
198 #define GPIO_INTDBECLR_ADDR(x) (GPIO##x##_BASE+0x44)
205 #define SET_GPIO_DATA(x,n) BIT_ADDR(GPIO_DATA_ADDR(x),n)
206 #define SET_GPIO_DATAOUT(x,n) BIT_ADDR(GPIO_DATAOUT_ADDR(x),n)
207 #define SET_GPIO_OUTENSET(x,n) BIT_ADDR(GPIO_OUTENSET_ADDR(x),n)
208 #define SET_GPIO_OUTENCLR(x,n) BIT_ADDR(GPIO_OUTENCLR_ADDR(x),n)
209 #define SET_GPIO_ALTFUNCSET(x,n) BIT_ADDR(GPIO_ALTFUNCSET_ADDR(x),n)
210 #define SET_GPIO_ALTFUNCCLR(x,n) BIT_ADDR(GPIO_ALTFUNCCLR_ADDR(x),n)
211 #define SET_GPIO_INTENSET(x,n) BIT_ADDR(GPIO_INTENSET_ADDR(x),n)
212 #define SET_GPIO_INTENCLR(x,n) BIT_ADDR(GPIO_INTENCLR_ADDR(x),n)
213 #define SET_GPIO_INTTYPESET(x,n) BIT_ADDR(GPIO_INTTYPESET_ADDR(x),n)
214 #define SET_GPIO_INTTYPECLR(x,n) BIT_ADDR(GPIO_INTTYPECLR_ADDR(x),n)
215 #define SET_GPIO_INTPOLSET(x,n) BIT_ADDR(GPIO_INTPOLSET_ADDR(x),n)
216 #define SET_GPIO_INTPOLCLR(x,n) BIT_ADDR(GPIO_INTPOLCLR_ADDR(x),n)
217 #define SET_GPIO_INTSTAT(x,n) BIT_ADDR(GPIO_INTSTAT_ADDR(x),n)
218 #define SET_GPIO_INTDBESET(x,n) BIT_ADDR(GPIO_INTDBESET_ADDR(x),n)
219 #define SET_GPIO_INTDBECLR(x,n) BIT_ADDR(GPIO_INTDBECLR_ADDR(x),n)
229 #define LL_GPIO_DEFAULT_CONFIG \
231 .pin = LL_GPIO_PIN_ALL, \
232 .mode = LL_GPIO_MODE_INPUT, \
233 .pull = LL_GPIO_PULL_DOWN, \
234 .mux = LL_GPIO_MUX_7, \
235 .trigger = LL_GPIO_TRIGGER_NONE, \
257 #define LL_GPIO_WriteReg(__instance__, __REG__, __VALUE__) WRITE_REG(__instance__->__REG__, (__VALUE__))
265 #define LL_GPIO_ReadReg(__instance__, __REG__) READ_REG(__instance__->__REG__)
282 #define LL_GPIO_RE_N_Pos 0
283 #define LL_GPIO_RE_N_Msk (0x1U << LL_GPIO_RE_N_Pos)
284 #define LL_GPIO_RE_N LL_GPIO_RE_N_Msk
290 #define LL_GPIO_RTYP_Pos 1
291 #define LL_GPIO_RTYP_Msk (0x1U << LL_GPIO_RTYP_Pos)
292 #define LL_GPIO_RTYP LL_GPIO_RTYP_Msk
345 WRITE_REG(GPIOx->OUTENSET, pin_mask);
348 SET_BITS(MCU_RET->DPAD_IE_N_BUS_1, pin_mask);
352 pin_mask <<= ((GPIOx == GPIO0) ? 0 : 16);
353 SET_BITS(MCU_RET->DPAD_IE_N_BUS_0, pin_mask);
358 WRITE_REG(GPIOx->OUTENCLR, pin_mask);
361 CLEAR_BITS(MCU_RET->DPAD_IE_N_BUS_1, pin_mask);
365 pin_mask <<= ((GPIOx == GPIO0) ? 0 : 16);
366 CLEAR_BITS(MCU_RET->DPAD_IE_N_BUS_0, pin_mask);
404 return (uint32_t)(READ_BITS(GPIOx->OUTENSET, pin) != RESET);
444 MODIFY_REG(MCU_RET->DPAD_RTYP_BUS_1, pin_mask, (pull ==
LL_GPIO_PULL_UP) ? pin_mask : 0x0000U);
445 MODIFY_REG(MCU_RET->DPAD_RE_N_BUS_1, pin_mask, (pull ==
LL_GPIO_PULL_NO) ? pin_mask : 0x0000U);
449 pin_mask <<= ((GPIOx == GPIO0) ? 0 : 16);
450 MODIFY_REG(MCU_RET->DPAD_RTYP_BUS_0, pin_mask, (pull ==
LL_GPIO_PULL_UP) ? pin_mask : 0x0000U);
451 MODIFY_REG(MCU_RET->DPAD_RE_N_BUS_0, pin_mask, (pull ==
LL_GPIO_PULL_NO) ? pin_mask : 0x0000U);
492 return ((READ_BITS(MCU_RET->DPAD_RE_N_BUS_1, pin) != RESET) ?
LL_GPIO_PULL_NO :
497 pin <<= ((GPIOx == GPIO0) ? 0 : 16);
498 return ((READ_BITS(MCU_RET->DPAD_RE_N_BUS_0, pin) != RESET) ?
LL_GPIO_PULL_NO :
545 volatile uint32_t* GPIO_MUX_REG_BASE = &(MCU_RET->DPAD_MUX_CTL_00_07);
549 pin = POSITION_VAL(pin);
550 pos = (pin & 7) << 2;
556 else if(GPIO1 == GPIOx)
558 offset = (pin >> 3) + 2;
565 MODIFY_REG(*(GPIO_MUX_REG_BASE + offset), 0xF << pos, mux << pos);
608 uint32_t pos = POSITION_VAL(pin) << 2;
613 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_00_07, 0xF << pos) >> pos);
617 pos = POSITION_VAL(pin >> 8) << 2;
618 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_08_15, 0xF << pos) >> pos);
621 else if(GPIO1 == GPIOx)
625 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_16_23, 0xF << pos) >> pos);
629 pos = POSITION_VAL(pin >> 8) << 2;
630 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_24_31, 0xF << pos) >> pos);
637 return (READ_BITS(MCU_RET->DPAD_MUX_CTL_32_39, 0xF << pos) >> pos);
660 return (uint32_t)(READ_REG(GPIOx->DATA));
693 return (READ_BITS(GPIOx->DATA, pin_mask) == (pin_mask));
709 WRITE_REG(GPIOx->DATAOUT, port_value);
724 return (uint32_t)(READ_REG(GPIOx->DATAOUT));
757 return (READ_BITS(GPIOx->DATAOUT, pin_mask) == (pin_mask));
790 #ifdef USE_GPIO_MASK_REGISTER
791 WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], pin_mask & GPIO_MASKLOWBYTE_DATA);
792 WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> GPIO_MASKHIGHBYTE_DATA_Pos)],
793 pin_mask & GPIO_MASKHIGHBYTE_DATA);
795 SET_BITS(GPIOx->DATAOUT, pin_mask);
829 #ifdef USE_GPIO_MASK_REGISTER
830 WRITE_REG(GPIOx->MASKLOWBYTE[(uint8_t)pin_mask], 0x0000U);
831 WRITE_REG(GPIOx->MASKHIGHBYTE[(uint8_t)(pin_mask >> 8)], 0x0000U);
833 CLEAR_BITS(GPIOx->DATAOUT, pin_mask);
867 WRITE_REG(GPIOx->DATAOUT, READ_REG(GPIOx->DATAOUT) ^ pin_mask);
908 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
909 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
910 WRITE_REG(GPIOx->INTDBECLR, pin_mask);
945 WRITE_REG(GPIOx->INTPOLSET, pin_mask);
946 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
947 WRITE_REG(GPIOx->INTDBECLR, pin_mask);
982 WRITE_REG(GPIOx->INTPOLSET, pin_mask);
983 WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1018 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1019 WRITE_REG(GPIOx->INTTYPECLR, pin_mask);
1055 WRITE_REG(GPIOx->INTPOLCLR, pin_mask);
1056 WRITE_REG(GPIOx->INTTYPESET, pin_mask);
1057 WRITE_REG(GPIOx->INTDBESET, pin_mask);
1104 #define TYPE_SET ((uint32_t)0x4U)
1105 #define POL_SET ((uint32_t)0x2U)
1106 #define DBE_SET ((uint32_t)0x1U)
1108 uint32_t pos = POSITION_VAL(pin_mask);
1109 uint32_t type = (READ_BITS(GPIOx->INTTYPESET, pin_mask) >> pos ) << 2;
1110 uint32_t pol = (READ_BITS(GPIOx->INTPOLSET, pin_mask) >> pos) << 1;
1111 uint32_t both_egde = (READ_BITS(GPIOx->INTDBESET, pin_mask) >> pos);
1113 switch (type | pol | both_egde)
1161 WRITE_REG(GPIOx->INTENSET, pin_mask);
1195 WRITE_REG(GPIOx->INTENCLR, pin_mask);
1228 return (READ_BITS(GPIOx->INTENSET, pin_mask) == (pin_mask));
1269 return (uint32_t)(READ_BITS(GPIOx->INTSTAT, pin_mask));
1304 return (READ_BITS(GPIOx->INTSTAT, pin_mask) == pin_mask);
1339 WRITE_REG(GPIOx->INTSTAT, pin_mask);