version 4.2.0
[fx2fw-sdcc] / fx2 / isr.c
index f92a064..cb1e0b8 100644 (file)
--- a/fx2/isr.c
+++ b/fx2/isr.c
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Interrupt handling for FX2\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  * Code taken from USRP2 firmware (GNU Radio Project), version 3.0.2,\r
-\r
  * Copyright 2003 Free Software Foundation, Inc.\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  * This code is part of usbjtag. usbjtag is free software; you can redistribute\r
-\r
  * it and/or modify it under the terms of the GNU General Public License as\r
-\r
  * published by the Free Software Foundation; either version 2 of the License,\r
-\r
  * or (at your option) any later version. usbjtag is distributed in the hope\r
-\r
  * that it will be useful, but WITHOUT ANY WARRANTY; without even the implied\r
-\r
  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
-\r
  * GNU General Public License for more details.  You should have received a\r
-\r
  * copy of the GNU General Public License along with this program in the file\r
-\r
  * COPYING; if not, write to the Free Software Foundation, Inc., 51 Franklin\r
-\r
  * St, Fifth Floor, Boston, MA  02110-1301  USA\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  */\r
 \r
-\r
-\r
 #include "isr.h"\r
-\r
 #include "fx2regs.h"\r
-\r
 #include "syncdelay.h"\r
 \r
-\r
-\r
 extern xdata unsigned char _standard_interrupt_vector[];\r
-\r
 extern xdata unsigned char _usb_autovector[];\r
-\r
 extern xdata unsigned char _fifo_gpif_autovector[];\r
 \r
-\r
-\r
 #define LJMP_OPCODE    0x02\r
 \r
-\r
-\r
 /*\r
-\r
  * Hook standard interrupt vector.\r
-\r
  *\r
-\r
  * vector_number is from the SV_<foo> list.\r
-\r
  * addr is the address of the interrupt service routine.\r
-\r
  */\r
-\r
 void \r
-\r
 hook_sv (unsigned char vector_number, unsigned short addr)\r
-\r
 {\r
-\r
   bit  t;\r
-\r
   \r
-\r
   // sanity checks\r
 \r
-\r
-\r
   if (vector_number < SV_MIN || vector_number > SV_MAX)\r
-\r
     return;\r
 \r
-\r
-\r
   if ((vector_number & 0x0f) != 0x03 && (vector_number & 0x0f) != 0x0b)\r
-\r
     return;\r
 \r
-\r
-\r
   t = EA;\r
-\r
   EA = 0;\r
-\r
   _standard_interrupt_vector[vector_number] = LJMP_OPCODE;\r
-\r
   _standard_interrupt_vector[vector_number + 1] = addr >> 8;\r
-\r
   _standard_interrupt_vector[vector_number + 2] = addr & 0xff;\r
-\r
   EA = t;\r
-\r
 }\r
 \r
-\r
-\r
 /*\r
-\r
  * Hook usb interrupt vector.\r
-\r
  *\r
-\r
  * vector_number is from the UV_<foo> list.\r
-\r
  * addr is the address of the interrupt service routine.\r
-\r
  */\r
-\r
 void \r
-\r
 hook_uv (unsigned char vector_number, unsigned short addr)\r
-\r
 {\r
-\r
   bit  t;\r
-\r
   \r
-\r
   // sanity checks\r
 \r
-\r
-\r
 #if UV_MIN>0\r
-\r
   if (vector_number < UV_MIN) return;\r
-\r
 #endif\r
-\r
   if (vector_number > UV_MAX)\r
-\r
     return;\r
 \r
-\r
-\r
   if ((vector_number & 0x3) != 0)\r
-\r
     return;\r
 \r
-\r
-\r
   t = EA;\r
-\r
   EA = 0;\r
-\r
   _usb_autovector[vector_number] = LJMP_OPCODE;\r
-\r
   _usb_autovector[vector_number + 1] = addr >> 8;\r
-\r
   _usb_autovector[vector_number + 2] = addr & 0xff;\r
-\r
   EA = t;\r
-\r
 }\r
 \r
-\r
-\r
 /*\r
-\r
  * Hook fifo/gpif interrupt vector.\r
-\r
  *\r
-\r
  * vector_number is from the FGV_<foo> list.\r
-\r
  * addr is the address of the interrupt service routine.\r
-\r
  */\r
-\r
 void \r
-\r
 hook_fgv (unsigned char vector_number, unsigned short addr)\r
-\r
 {\r
-\r
   bit  t;\r
-\r
   \r
-\r
   // sanity checks\r
 \r
-\r
-\r
   if (vector_number < FGV_MIN || vector_number > FGV_MAX)\r
-\r
     return;\r
 \r
-\r
-\r
   if ((vector_number & 0x3) != 0)\r
-\r
     return;\r
 \r
-\r
-\r
   t = EA;\r
-\r
   EA = 0;\r
-\r
   _fifo_gpif_autovector[vector_number] = LJMP_OPCODE;\r
-\r
   _fifo_gpif_autovector[vector_number + 1] = addr >> 8;\r
-\r
   _fifo_gpif_autovector[vector_number + 2] = addr & 0xff;\r
-\r
   EA = t;\r
-\r
 }\r
 \r
-\r
-\r
 /*\r
-\r
  * One time call to enable autovectoring for both USB and FIFO/GPIF.\r
-\r
  *\r
-\r
  * This disables all USB and FIFO/GPIF interrupts and clears\r
-\r
  * any pending interrupts too.  It leaves the master USB and FIFO/GPIF\r
-\r
  * interrupts enabled.\r
-\r
  */\r
-\r
 void\r
-\r
 setup_autovectors (void)\r
-\r
 {\r
-\r
   // disable master usb and fifo/gpif interrupt enables\r
-\r
   EIUSB = 0;\r
-\r
   EIEX4 = 0;\r
 \r
-\r
-\r
   hook_sv (SV_INT_2, (unsigned short) _usb_autovector);\r
-\r
   hook_sv (SV_INT_4, (unsigned short) _fifo_gpif_autovector);\r
 \r
-\r
-\r
   // disable all fifo interrupt enables\r
-\r
   SYNCDELAY;\r
-\r
   EP2FIFOIE = 0;       SYNCDELAY;\r
-\r
   EP4FIFOIE = 0;       SYNCDELAY;\r
-\r
   EP6FIFOIE = 0;       SYNCDELAY;\r
-\r
   EP8FIFOIE = 0;       SYNCDELAY;\r
 \r
-\r
-\r
   // clear all pending fifo irqs       \r
-\r
   EP2FIFOIRQ = 0xff;   SYNCDELAY;\r
-\r
   EP4FIFOIRQ = 0xff;   SYNCDELAY;\r
-\r
   EP6FIFOIRQ = 0xff;   SYNCDELAY;\r
-\r
   EP8FIFOIRQ = 0xff;   SYNCDELAY;\r
 \r
-\r
-\r
   IBNIE  = 0;\r
-\r
   IBNIRQ = 0xff;\r
-\r
   NAKIE  = 0;\r
-\r
   NAKIRQ = 0xff;\r
-\r
   USBIE  = 0;\r
-\r
   USBIRQ = 0xff;\r
-\r
   EPIE   = 0;\r
-\r
   EPIRQ  = 0xff;\r
-\r
   SYNCDELAY;   GPIFIE = 0;             \r
-\r
   SYNCDELAY;   GPIFIRQ = 0xff;\r
-\r
   USBERRIE = 0;\r
-\r
   USBERRIRQ = 0xff;\r
-\r
   CLRERRCNT = 0;\r
-\r
   \r
-\r
   INTSETUP = bmAV2EN | bmAV4EN | bmINT4IN;\r
 \r
-\r
-\r
   // clear master irq's for usb and fifo/gpif\r
-\r
   EXIF &= ~bmEXIF_USBINT;\r
-\r
   EXIF &= ~bmEXIF_IE4;\r
-\r
   \r
-\r
   // enable master usb and fifo/gpif interrrupts\r
-\r
   EIUSB = 1;\r
-\r
   EIEX4 = 1;\r
-\r
 }\r
-\r