OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.25/] [sim/] [serial.c] - Diff between revs 8 and 25

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 8 Rev 25
Line 57... Line 57...
  int c;
  int c;
 
 
  if (debug) {
  if (debug) {
    cPrintf("\n**** TERM RCVR CALLBACK ****\n");
    cPrintf("\n**** TERM RCVR CALLBACK ****\n");
  }
  }
  timerStart(TERM_RCVR_MSEC, rcvrCallback, dev);
  timerStart(TERM_RCVR_USEC, rcvrCallback, dev);
  c = fgetc(terminals[dev].in);
  c = fgetc(terminals[dev].in);
  if (c == EOF) {
  if (c == EOF) {
    /* no character typed */
    /* no character typed */
    return;
    return;
  }
  }
Line 96... Line 96...
  Word data;
  Word data;
 
 
  if (debug) {
  if (debug) {
    cPrintf("\n**** TERM READ from 0x%08X", addr);
    cPrintf("\n**** TERM READ from 0x%08X", addr);
  }
  }
  dev = addr >> 4;
  dev = addr >> 12;
  if (dev >= numTerminals) {
  if (dev >= numTerminals) {
    /* illegal device */
    /* illegal device */
    throwException(EXC_BUS_TIMEOUT);
    throwException(EXC_BUS_TIMEOUT);
  }
  }
  reg = addr & 0x0F;
  reg = addr & 0x0FFF;
  if (reg == TERM_RCVR_CTRL) {
  if (reg == TERM_RCVR_CTRL) {
    data = terminals[dev].rcvrCtrl;
    data = terminals[dev].rcvrCtrl;
  } else
  } else
  if (reg == TERM_RCVR_DATA) {
  if (reg == TERM_RCVR_DATA) {
    terminals[dev].rcvrCtrl &= ~TERM_RCVR_RDY;
    terminals[dev].rcvrCtrl &= ~TERM_RCVR_RDY;
Line 137... Line 137...
 
 
  if (debug) {
  if (debug) {
    cPrintf("\n**** TERM WRITE to 0x%08X, data = 0x%08X ****\n",
    cPrintf("\n**** TERM WRITE to 0x%08X, data = 0x%08X ****\n",
            addr, data);
            addr, data);
  }
  }
  dev = addr >> 4;
  dev = addr >> 12;
  if (dev >= numTerminals) {
  if (dev >= numTerminals) {
    /* illegal device */
    /* illegal device */
    throwException(EXC_BUS_TIMEOUT);
    throwException(EXC_BUS_TIMEOUT);
  }
  }
  reg = addr & 0x0F;
  reg = addr & 0x0FFF;
  if (reg == TERM_RCVR_CTRL) {
  if (reg == TERM_RCVR_CTRL) {
    if (data & TERM_RCVR_IEN) {
    if (data & TERM_RCVR_IEN) {
      terminals[dev].rcvrCtrl |= TERM_RCVR_IEN;
      terminals[dev].rcvrCtrl |= TERM_RCVR_IEN;
    } else {
    } else {
      terminals[dev].rcvrCtrl &= ~TERM_RCVR_IEN;
      terminals[dev].rcvrCtrl &= ~TERM_RCVR_IEN;
Line 194... Line 194...
    terminals[dev].xmtrCtrl &= ~TERM_XMTR_RDY;
    terminals[dev].xmtrCtrl &= ~TERM_XMTR_RDY;
    if (terminals[dev].xmtrCtrl & TERM_XMTR_IEN) {
    if (terminals[dev].xmtrCtrl & TERM_XMTR_IEN) {
      /* lower terminal xmtr interrupt */
      /* lower terminal xmtr interrupt */
      cpuResetInterrupt(terminals[dev].xmtrIRQ);
      cpuResetInterrupt(terminals[dev].xmtrIRQ);
    }
    }
    timerStart(TERM_XMTR_MSEC, xmtrCallback, dev);
    timerStart(TERM_XMTR_USEC, xmtrCallback, dev);
  } else {
  } else {
    /* illegal register */
    /* illegal register */
    throwException(EXC_BUS_TIMEOUT);
    throwException(EXC_BUS_TIMEOUT);
  }
  }
}
}
Line 213... Line 213...
  cPrintf("Resetting Terminals...\n");
  cPrintf("Resetting Terminals...\n");
  for (i = 0; i < numTerminals; i++) {
  for (i = 0; i < numTerminals; i++) {
    terminals[i].rcvrCtrl = 0;
    terminals[i].rcvrCtrl = 0;
    terminals[i].rcvrData = 0;
    terminals[i].rcvrData = 0;
    terminals[i].rcvrIRQ = IRQ_TERM_0_RCVR + 2 * i;
    terminals[i].rcvrIRQ = IRQ_TERM_0_RCVR + 2 * i;
    timerStart(TERM_RCVR_MSEC, rcvrCallback, i);
    timerStart(TERM_RCVR_USEC, rcvrCallback, i);
    terminals[i].xmtrCtrl = TERM_XMTR_RDY;
    terminals[i].xmtrCtrl = TERM_XMTR_RDY;
    terminals[i].xmtrData = 0;
    terminals[i].xmtrData = 0;
    terminals[i].xmtrIRQ = IRQ_TERM_0_XMTR + 2 * i;
    terminals[i].xmtrIRQ = IRQ_TERM_0_XMTR + 2 * i;
  }
  }
}
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.