19 CONSTRUCTOR AdcUdt(
BYVAL T
AS Pruio_
PTR)
24 i += 1 : .DRam[i] = &h44E0D000uL
25 i += 1 : .DRam[i] =
IIF(.DevAct
AND PRUIO_ACT_ADC, &h44E004BCuL, 0)
49 var p = .MOffs + .DRam[InitParA]
57 .DeAd = 0 : .ClVa = 0 :
RETURN 0
62 VAR a =
ABS((Av > 1) + (Av > 2) + (Av > 4) + (Av > 8))
SHL 2 _
64 FOR i
AS LONG = 1
TO 8
66 .Confg = a + ((i - 1)
SHL 19)
67 .Delay = d + SaD
SHL 24
93 Value =
CAST(
ANY PTR, .DRam) + PRUIO_DAT_ADC + 4
95 IF 2 <> Conf->ClVa
THEN
97 Mask = 0
THEN .DRam[2] = Samp _
98 ELSE .DRam[2] = 0 : .Errr = E5
101 .DRam[5] = 0 :
RETURN .Errr
105 VAR c =
UBOUND(Conf->St_p) _
108 FOR i
AS LONG = c - 1
TO 0 STEP -1
109 IF 0 =
BIT(Mask, i)
THEN CONTINUE FOR
113 VAR opd = .Delay
AND &h3FFFF _
114 , smd = .Delay
SHR 24 _
115 , avr = (.Confg
SHR 2)
AND &b111
116 d += opd + 1 + (14 + smd) *
IIF(avr, 1
SHL avr, 1)
124 IF r < 1
THEN .Errr = @
"no step active" :
RETURN .Errr
125 Samples = Samp * ChAz
126 IF (Samples
SHL 1) > .ESize
THEN _
127 .Errr = @
"out of memory" :
RETURN .Errr
128 d *= (Conf->ADC_CLKDIV + 1) * 417
130 IF Tmr <= d
THEN .Errr = @
"sample rate too big" :
RETURN .Errr
135 IF BIT(Mask, 31)
THEN _
136 .IDLECONFIG = .St_p(r).Confg
AND &b1111111111111111111100000
138 Mask
AND= (1
SHL c) - 1
141 LslMode =
IIF(Mds < 4, Mds,
CAST(UInt16, 4))
185 ,
BYVAL ChN
AS UInt8 _
191 IF 2 <> Conf->ClVa
THEN .Errr = E5 :
RETURN .Errr
192 IF Stp >
UBOUND(Conf->St_p)
THEN .Errr = E0 :
RETURN .Errr
193 IF ChN > 7
THEN .Errr = E1 :
RETURN .Errr
197 VAR a =
ABS((Av > 1) + (Av > 2) + (Av > 4) + (Av > 8))
198 .Confg = (a
SHL 2) + (ChN
SHL 19)
199 .Delay = (OpD
AND &h3FFFF) + (SaD
SHL 24)
230 BYVAL Ball
AS UInt8 _
231 ,
BYVAL GpioV
AS UInt8 = 0 _
232 ,
BYVAL Skip
AS UInt16 = 0)
AS UInt32
235 IF 2 <> Conf->ClVa
THEN .Errr = E5 :
RETURN 0
236 IF Skip > 1023
THEN .Errr = E2 :
RETURN 0
237 BallCheck(
" trigger", 0)
238 VAR g = .BallGpio(Ball) _
241 IF 2 <> .Gpio->Conf(i)->ClVa
THEN _
242 .Errr = @
"GPIO subsystem not enabled" :
RETURN 0
243 IF 7 <> (.BallConf[Ball]
AND &b111)
THEN _
244 .Errr = @
"pin must be in GPIO mode (mode 7)" :
RETURN 0
247 DIM AS UInt32 r = (Skip
SHL 22) _
250 +
IIF(GpioV = 0, 1
SHL 7, 0)
316 ,
BYVAL AdcV
AS Int32 _
317 ,
BYVAL Rela
AS UInt8 = 0 _
318 ,
BYVAL Skip
AS UInt16 = 0)
AS UInt32
321 IF 2 <> Conf->ClVa
THEN .Errr = E5 :
RETURN 0
322 IF Stp > 16
THEN .Errr = E4 :
RETURN 0
323 IF Stp
ANDALSO 0 = Conf->St_p(Stp).Confg
THEN .Errr = E3 :
RETURN 0
324 IF Skip > 1023
THEN .Errr = E2 :
RETURN 0
327 VAR v =
ABS(AdcV)
SHR LslMode
328 IF v < &hF
THEN v = &hF
ELSE IF v > &hFF0
THEN v = &hFF0
330 DIM AS UInt32 r = (Skip
SHL 22) _
332 +
IIF(AdcV < 0, 1
SHL 7, 0)
333 IF 0 = Stp
THEN r += (1
SHL 5) _
335 +
IIF(Rela, 1
SHL 6, 0)
400 ,
BYVAL AdcV
AS Int32 _
401 ,
BYVAL Samp
AS UInt16 = 0 _
402 ,
BYVAL Rela
AS UInt8 = 0)
AS UInt32
405 IF 2 <> Conf->ClVa
THEN .Errr = E5 :
RETURN 0
406 IF Stp > 16
THEN .Errr = E4 :
RETURN 0
407 IF Stp
ANDALSO 0 = Conf->St_p(Stp).Confg
THEN .Errr = E3 :
RETURN 0
408 IF Stp
ANDALSO 0 = (Conf->STEPENABLE
AND (1
SHL Stp))
THEN _
409 .Errr = @
"trigger step not activated" :
RETURN 0
410 VAR t = (Samp + 1) * ChAz
411 IF t > ((16384 - PRUIO_DAT_ADC - 32)
SHR 1)
THEN _
412 .Errr = @
"too much pre-samples" :
RETURN 0
413 IF t > Samples
THEN _
414 .Errr = @
"more pre-samples than samples" :
RETURN 0
417 VAR v =
ABS(AdcV)
SHR LslMode
418 IF v < &hF
THEN v = &hF
ELSE IF v > &hFF0
THEN v = &hFF0
420 DIM AS UInt32 r = (Samp
SHL 22) _
422 +
IIF(AdcV < 0, 1
SHL 7, 0) _
424 IF 0 = Stp
THEN r += (1
SHL 5) _
426 +
IIF(Rela, 1
SHL 6, 0)