next up previous contents
Next: D8 cycles Up: VME Interface Previous: D32 cycles

D16 cycles

In the address ranges $C000 0000 - $FFFF FFFF and $8000 0000 - $BFFF FFFF 'normal' 32-bits transputer read/write cycles are mapped onto two D16 VME-cycles (first a cycle to write the high order word of the transputer longword, then a cycle to write the low order word of the transputer longword). 'Normal' is when the lock flag in Statusregister 2 is NOT set (see section 4 on the Statusregisters). When the lock flag is set a D8 cycle is performed (see section 3.6 on D8 cycles).

In the address ranges $4000 0000 - $7FFF FFFF and $0000 0000 - $3FFF FFFF 32-bits transputer read/write cycles are mapped onto a single VME D16 cycle if address bit A28 is set, where the word within the longword read or written is selected by address bit A29 :

  table234
Table 2: Longword/word selection by address bits A29 and A28.

Example: if a word value is to be read from VME-address $A000 1000 by
an A32 D16 VME-cycle in OCCAM it can be done as follows :

  [4]INT   statusregister :
  PLACE statusregister AT ((#82000000 >< MOSTNEG INT) >> 2) :
  [2]INT16 words :
  -- To access word 0 in VME access word 1 on the transputer
  -- so place 'longword' at word 1 (transputer high word) memory 
  -- segment in A32 area
  PLACE    words AT ((#70001000 >< MOSTNEG INT) >> 2) :
  word.address.1000 IS words[1] :
  INT16    value :
  SEQ
    statusregister[2] := #0F               -- Reset A31 to A28
    statusregister[3] := #0A               -- Set A31 to A28 to hex 'A'
    value             := word.address.1000 -- Read the word

or as follows if a longword value is to be read by an A32 D16 VME-cycle:

  [4]INT statusregister :
  PLACE statusregister AT ((#82000000 >< MOSTNEG INT) >> 2) :
  INT    longword :
  -- To access word 0 in VME access word 1 on the transputer
  -- so place 'longword' at word 1 (transputer high word) memory 
  -- segment in A32 area
  PLACE  longword AT ((#70001000 >< MOSTNEG INT) >> 2) :
  INT    value :
  SEQ
    statusregister[2] := #0F               -- Reset A31 to A28
    statusregister[3] := #0A               -- Set A31 to A28 to hex 'A'
    -- Read the word and shift it to the low word
    value             := (longword /\ #FFFF0000) >> 16



Henk Boterenbrood
Thu Jun 20 12:48:07 MET DST 1996