@@ -103,10 +103,11 @@ extern "C"
103
103
104
104
static inline void rp23xx_gpio_put (uint32_t gpio , int set )
105
105
{
106
- uint32_t value = 1 << gpio ;
107
-
108
106
DEBUGASSERT (gpio < RP23XX_GPIO_NUM );
109
107
108
+ #if (RP23XX_GPIO_NUM <= 32 )
109
+ uint32_t value = 1 << gpio ;
110
+
110
111
if (set )
111
112
{
112
113
putreg32 (value , RP23XX_SIO_GPIO_OUT_SET );
@@ -115,23 +116,61 @@ static inline void rp23xx_gpio_put(uint32_t gpio, int set)
115
116
{
116
117
putreg32 (value , RP23XX_SIO_GPIO_OUT_CLR );
117
118
}
119
+ #else
120
+ uint32_t mask = 1ul << (gpio & 0x1fu );
121
+ if (gpio < 32 )
122
+ {
123
+ if (set )
124
+ {
125
+ putreg32 (mask , RP23XX_SIO_GPIO_OUT_SET );
126
+ }
127
+ else
128
+ {
129
+ putreg32 (mask , RP23XX_SIO_GPIO_OUT_CLR );
130
+ }
131
+ }
132
+ else
133
+ {
134
+ if (set )
135
+ {
136
+ putreg32 (mask , RP23XX_SIO_GPIO_HI_OUT_SET );
137
+ }
138
+ else
139
+ {
140
+ putreg32 (mask , RP23XX_SIO_GPIO_HI_OUT_CLR );
141
+ }
142
+ }
143
+ #endif
118
144
}
119
145
120
146
static inline bool rp23xx_gpio_get (uint32_t gpio )
121
147
{
122
- uint32_t value = 1 << gpio ;
123
-
124
148
DEBUGASSERT (gpio < RP23XX_GPIO_NUM );
125
149
150
+ #if (RP23XX_GPIO_NUM <= 32 )
151
+ uint32_t value = 1 << gpio ;
126
152
return (getreg32 (RP23XX_SIO_GPIO_IN ) & value ) != 0 ;
153
+ #else
154
+ if (gpio < 32 )
155
+ {
156
+ uint32_t value = 1 << gpio ;
157
+ return (getreg32 (RP23XX_SIO_GPIO_IN ) & value ) != 0 ;
158
+ }
159
+ else
160
+ {
161
+ uint32_t value = 1 << (gpio - 32 );
162
+ return (getreg32 (RP23XX_SIO_GPIO_HI_IN ) & value ) != 0 ;
163
+ }
164
+ #endif
127
165
}
128
166
129
167
static inline void rp23xx_gpio_setdir (uint32_t gpio , int out )
130
168
{
131
- uint32_t value = 1 << gpio ;
132
-
133
169
DEBUGASSERT (gpio < RP23XX_GPIO_NUM );
134
170
171
+ #if (RP23XX_GPIO_NUM <= 32 )
172
+ uint32_t value = 1 << gpio ;
173
+
135
174
if (out )
136
175
{
137
176
putreg32 (value , RP23XX_SIO_GPIO_OE_SET );
@@ -140,6 +179,31 @@ static inline void rp23xx_gpio_setdir(uint32_t gpio, int out)
140
179
{
141
180
putreg32 (value , RP23XX_SIO_GPIO_OE_CLR );
142
181
}
182
+ #else
183
+ uint32_t mask = 1ul << (gpio & 0x1fu );
184
+ if (gpio < 32 )
185
+ {
186
+ if (out )
187
+ {
188
+ putreg32 (mask , RP23XX_SIO_GPIO_OE_SET );
189
+ }
190
+ else
191
+ {
192
+ putreg32 (mask , RP23XX_SIO_GPIO_OE_CLR );
193
+ }
194
+ }
195
+ else
196
+ {
197
+ if (out )
198
+ {
199
+ putreg32 (mask , RP23XX_SIO_GPIO_HI_OE_SET );
200
+ }
201
+ else
202
+ {
203
+ putreg32 (mask , RP23XX_SIO_GPIO_HI_OE_CLR );
204
+ }
205
+ }
206
+ #endif
143
207
}
144
208
145
209
/****************************************************************************
0 commit comments