home *** CD-ROM | disk | FTP | other *** search
/ Fresh Fish 10 / Fresh_Fish_10_2352.bin / new / dev / obero / oberon / projectoberonsrc / c2.v24.mod (.txt) < prev    next >
Oberon Text  |  1994-10-17  |  2KB  |  59 lines

  1. Syntax10.Scn.Fnt
  2. MODULE V24;  (*NW 18.3.89 / 19.1.91*)
  3.     (*interrupt-driven UART channel B*)
  4.     IMPORT SYSTEM, Kernel;
  5.     CONST BufLen = 512;
  6.         UART = 0FFFFC000H; ICU = 0FFFF9000H;
  7.     VAR in, out: INTEGER;
  8.         buf: ARRAY BufLen OF SYSTEM.BYTE;
  9.     PROCEDURE+ Int;
  10.     BEGIN SYSTEM.GET(UART+44, buf[in]); in := (in+1) MOD BufLen
  11.     END Int;
  12.     PROCEDURE Start*(CSR, MR1, MR2: CHAR);
  13.     BEGIN in := 0; out := 0;  Kernel.InstallIP(Int, 2);
  14.         SYSTEM.PUT(UART+40, 30X); (*CRB reset transmitter*)
  15.         SYSTEM.PUT(UART+40, 20X); (*CRB reset receiver*)
  16.         SYSTEM.PUT(UART+36, CSR); (*CSRB clock rate*)
  17.         SYSTEM.PUT(UART+40, 15X); (*CRB enable Tx and Rx, pointer to MR1*)
  18.         SYSTEM.PUT(UART+32, MR1); (*MR1B, parity, nof bits*)
  19.         SYSTEM.PUT(UART+32, MR2); (*MR2B stop bits*)
  20.         SYSTEM.PUT(UART+20, 20X); (*IMR  RxRdy Int enable*)
  21.         SYSTEM.PUT(ICU + 4, 1AX); (*ICU  IMR and IRR bit 2*)
  22.     END Start;
  23.     PROCEDURE SetOP*(s: SET);
  24.     BEGIN SYSTEM.PUT(UART+56, s)
  25.     END SetOP;
  26.     PROCEDURE ClearOP*(s: SET);
  27.     BEGIN SYSTEM.PUT(UART+60, s)
  28.     END ClearOP;
  29.     PROCEDURE IP*(n: INTEGER): BOOLEAN;
  30.     BEGIN RETURN SYSTEM.BIT(UART+52, n)
  31.     END IP;
  32.     PROCEDURE SR*(n: INTEGER): BOOLEAN;
  33.     BEGIN RETURN SYSTEM.BIT(UART+36, n)
  34.     END SR;
  35.     PROCEDURE Available*(): INTEGER;
  36.     BEGIN RETURN (in - out) MOD BufLen
  37.     END Available;
  38.     PROCEDURE Receive*(VAR x: SYSTEM.BYTE);
  39.     BEGIN
  40.         REPEAT UNTIL in # out;
  41.         x := buf[out]; out := (out+1) MOD BufLen
  42.     END Receive;
  43.     PROCEDURE Send*(x: SYSTEM.BYTE);
  44.     BEGIN
  45.         REPEAT UNTIL SYSTEM.BIT(UART+36, 2);
  46.         SYSTEM.PUT(UART+44, x)
  47.     END Send;
  48.     PROCEDURE Break*;
  49.         VAR i: LONGINT;
  50.     BEGIN SYSTEM.PUT(UART+40, 60X); i := 500000;
  51.         REPEAT DEC(i) UNTIL i = 0;
  52.         SYSTEM.PUT(UART+40, 70X)
  53.     END Break;
  54.     PROCEDURE Stop*;
  55.     BEGIN SYSTEM.PUT(UART+20, 0); (*IMR disable Rx-Int*)
  56.         SYSTEM.PUT(ICU + 4, 3AX)  (*ICU chan 2*)
  57.     END Stop;
  58. END V24.
  59.