19 CONSTRUCTOR GpioUdt(
BYVAL T
AS Pruio_
PTR)
24 i += 1 : .DRam[i] = &h44E07000uL
25 i += 1 : .DRam[i] =
IIF(.DevAct
AND PRUIO_ACT_GPIO0, &h44E00408uL, 0)
27 i += 1 : .DRam[i] = &h4804C000uL
28 i += 1 : .DRam[i] =
IIF(.DevAct
AND PRUIO_ACT_GPIO1, &h44E000ACuL, 0)
30 i += 1 : .DRam[i] = &h481AC000uL
31 i += 1 : .DRam[i] =
IIF(.DevAct
AND PRUIO_ACT_GPIO2, &h44E000B0uL, 0)
33 i += 1 : .DRam[i] = &h481AE000uL
34 i += 1 : .DRam[i] =
IIF(.DevAct
AND PRUIO_ACT_GPIO3, &h44E000B4uL, 0)
52 VAR p_mem = .MOffs + .DRam[InitParA] _
53 , p_val =
CAST(
ANY PTR, .DRam) + PRUIO_DAT_GPIO
55 FOR i
AS LONG = 0
TO PRUIO_AZ_GPIO
57 p_val +=
SIZEOF(GpioArr)
60 Conf(i) = p_mem + .DSize
65 .DeAd = 0 : .ClVa = 0 : p_mem += 16 :
CONTINUE FOR
76 p_mem +=
SIZEOF(GpioSet)
111 BYVAL Ball
AS UInt8 _
114 BallCheck(
" GPIO", .Errr)
115 IF 7 <> (Mo
AND &b111)
THEN .Errr = @
"no GPIO mode" :
RETURN .Errr
116 VAR r = .BallGpio(Ball) _
120 IF 2 <> Conf(i)->ClVa
THEN .Errr = E0 :
RETURN .Errr
122 VAR x = Mo
AND &b1111111
123 IF x <> .BallConf[Ball]
THEN IF .setPin(Ball, x)
THEN RETURN .Errr
124 IF (x
AND PRUIO_RX_ACTIV) = PRUIO_RX_ACTIV
THEN RETURN 0
129 .CLEARDATAOUT
AND=
NOT m
130 .SETDATAOUT
AND=
NOT m
135 .CLEARDATAOUT
AND=
NOT m
139 .SETDATAOUT
AND=
NOT m
143 IF .DRam[0] > PRUIO_MSG_IO_OK
THEN RETURN 0
145 WHILE .DRam[1] :
WEND
146 .DRam[5] = Conf(i)->OE
147 .DRam[4] = Conf(i)->SETDATAOUT
148 .DRam[3] = Conf(i)->CLEARDATAOUT
149 .DRam[2] = Conf(i)->DeAd + &h100
150 .DRam[1] = PRUIO_COM_GPIO_CONF
SHL 24
168 BYVAL Ball
AS UInt8 _
169 ,
BYVAL Mo
AS UInt8 = 0)
AS ZSTRING PTR
172 BallCheck(
" GPIO output", .Errr)
173 VAR r = .BallGpio(Ball) _
175 , m = 1
SHL (r
AND 31) _
176 , x =
IIF(Mo > 1, Mo
AND &b1111111, PRUIO_GPIO_OUT0)
178 IF 2 <> Conf(i)->ClVa
THEN .Errr = E0 :
RETURN .Errr
179 IF x
AND &b111 <> 7
THEN .Errr = E1 :
RETURN .Errr
180 IF .BallConf[Ball] <> x
THEN _
181 IF .setPin(Ball, x)
THEN RETURN .Errr
183 IF Mo = 1
ORELSE BIT(Mo, 7)
THEN
184 Conf(i)->CLEARDATAOUT
AND=
NOT m
185 Conf(i)->SETDATAOUT
OR= m
187 Conf(i)->CLEARDATAOUT
OR= m
188 Conf(i)->SETDATAOUT
AND=
NOT m
191 IF .DRam[0] > PRUIO_MSG_IO_OK
THEN RETURN 0
193 WHILE .DRam[1] :
WEND
194 .DRam[4] = Conf(i)->SETDATAOUT
195 .DRam[3] = Conf(i)->CLEARDATAOUT
196 .DRam[2] = Conf(i)->DeAd + &h100
197 .DRam[1] = PRUIO_COM_GPIO_OUT
SHL 24
227 BallCheck(
" GPIO input", -1)
228 VAR r = .BallGpio(Ball) _
231 IF 2 <> Conf(i)->ClVa
THEN .Errr = E0 :
RETURN -1
232 IF .BallConf[Ball]
AND &b111 <> 7
THEN .Errr = E1 :
RETURN -1
233 RETURN IIF(
BIT(Raw(i)->Mix, n), 1, 0)