|
The LED display has the PA of: ^x201F'FFFC with the following
layout:
31 23 16 0
+---------+---------+---------+--------+
| | | | | |
+---------+---------+---------+--------+
|| H L not used not used
|| I O
<25> blank -+| G W
<24> Blank --+ H
These two
are used to
blank the resp.
LED display.
Remember that all data you're going to write, will be inverted.
Hope this helps,
-Jan
|
| Thank you Jan,
the folowing is an EPASCAL example to play
with the displays.
MODULE rt300Display;
{*************************************************************}
{ Use of the Hex Display on an RTVAX 300 }
{ on a KAV30:
This register is write only.
The blanking bits are not implemented.
}
TYPE
DgvalT = PACKED RECORD
Low : 0..15;
High : 0..15;
END;
DgintensityT = (blanked,lit);
DgintenT = PACKED RECORD
Low : DgintensityT;
High : DgintensityT;
END;
DsRegT = [WORD] PACKED RECORD
Dgval : DgvalT;
Dginten : DgintenT;
END;
DsRegPT = ^DsRegT;
VAR
DsRegCop : DsRegT;
DsRegP : DsRegPT;
DsPhysical : INTEGER := %x201ffffe;
DsVirtual : INTEGER;
DsRegPA : ^ANYTYPE;
OffsetIntoPage : INTEGER;
SomeTime : LARGE_INTEGER;
PROGRAM DsNumbers (INPUT, OUTPUT);
VAR
i,j : INTEGER;
BEGIN
ALLOCATE_MEMORY (DsRegPA, 512, physical := DsPhysical );
OffsetIntoPage := DsPhysical MOD 512;
DsVirtual := DsRegPA :: INTEGER + OffsetIntoPage;
DsRegP := DsVirtual :: DsRegPT;
SomeTime := TIME_VALUE ('0000 00:00:00.50');
REPEAT
FOR j := 0 TO 15 DO
BEGIN
DsRegCop.Dgval.High := j;
WRITE_REGISTER (DsRegP^, DsRegCop);
WAIT_ANY (TIME := SomeTime);
FOR i := 0 TO 15 DO
BEGIN
DsRegCop.Dgval.Low := i;
WRITE_REGISTER (DsRegP^, DsRegCop);
WAIT_ANY (TIME := SomeTime);
END;
END;
UNTIL FALSE;
END. {DsNumbers}
END; {rt300Ds}
|