version 4.2.0 v4.2.0
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 17 Aug 2014 17:44:28 +0000 (19:44 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 17 Aug 2014 17:44:28 +0000 (19:44 +0200)
28 files changed:
Makefile
eeprom.c
eeprom.h
fx2/Makefile
fx2/delay.c
fx2/delay.h
fx2/fx2regs.h
fx2/fx2utils.c
fx2/fx2utils.h
fx2/i2c.c
fx2/i2c.h
fx2/isr.c
fx2/syncdelay.h
fx2/timer.c
fx2/timer.h
fx2/usb_common.c
fx2/usb_common.h
fx2/usb_descriptors.h
fx2/usb_requests.h
hardware.h
hw_basic.c
hw_xpcu_i.c
hw_xpcu_x.c
startup.a51
usbjtag.c
usbjtag.hex
usbjtag.iic
vectors.a51

index 8af9262..a0ba08a 100644 (file)
--- a/Makefile
+++ b/Makefile
 #-----------------------------------------------------------------------------\r
-\r
 # Makefile for usb_jtag FX2 firmware\r
-\r
 #-----------------------------------------------------------------------------\r
-\r
 # Copyright 2007 Kolja Waschk, ixo.de\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
 LIBDIR=fx2\r
-\r
 LIB=libfx2.lib\r
 \r
-\r
-\r
 ifeq (${HARDWARE},)\r
-\r
   HARDWARE=hw_basic\r
-\r
+  #HARDWARE=hw_saxo_l\r
   #HARDWARE=hw_xpcu_i\r
-\r
   #HARDWARE=hw_xpcu_x\r
-\r
 endif\r
 \r
-\r
-\r
 CC=sdcc\r
-\r
 CFLAGS+=-mmcs51 --no-xinit-opt -I${LIBDIR} -D${HARDWARE}\r
 \r
 CFLAGS+=--opt-code-size\r
 \r
-\r
-\r
 AS=asx8051\r
-\r
 ASFLAGS+=-plosgff\r
 \r
-\r
-\r
 LDFLAGS=--code-loc 0x0000 --code-size 0x1800\r
-\r
 LDFLAGS+=--xram-loc 0x1800 --xram-size 0x0800\r
-\r
 LDFLAGS+=-Wl '-b USBDESCSEG = 0xE100'\r
-\r
 LDFLAGS+=-L ${LIBDIR}\r
 \r
-\r
-\r
 %.rel : %.a51\r
-\r
        $(AS) $(ASFLAGS) $<\r
 \r
-\r
-\r
 %.rel : %.c\r
-\r
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@\r
 \r
-\r
+default: usbjtag.iic\r
 \r
 %.iic : %.hex\r
-\r
        ./hex2bix -ir -f 0xC2 -m 0xF000 -c 0x1 -o $@ $<\r
 \r
-\r
-\r
-default: usbjtag.iic\r
-\r
-\r
-\r
 usbjtag.hex: vectors.rel usbjtag.rel dscr.rel eeprom.rel ${HARDWARE}.rel startup.rel ${LIBDIR}/${LIB}\r
-\r
        $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $+\r
-\r
        packihx $@ > .tmp.hex\r
-\r
        rm $@\r
-\r
        mv .tmp.hex $@\r
 \r
-\r
-\r
 ${LIBDIR}/${LIB}:\r
-\r
        make -C ${LIBDIR}\r
 \r
-\r
-\r
 .PHONY: boot\r
-\r
 boot: usbjtag.hex\r
-\r
        -test -e /dev/usb_jtag    && /sbin/fxload -D /dev/usb_jtag    -I usbjtag.hex -t fx2\r
-\r
        -test -e /dev/tracii_xl2  && /sbin/fxload -D /dev/tracii_xl2  -I usbjtag.hex -t fx2\r
-\r
        -test -e /dev/xilinx_xpcu && /sbin/fxload -D /dev/xilinx_xpcu -I usbjtag.hex -t fx2\r
 \r
-\r
-\r
 REF=/home/kawk/work/xilinx/xtern/xusbdfwu/xusbdfwu-1025.hex\r
 \r
-\r
-\r
 .PHONY: ref\r
-\r
 ref: \r
-\r
        -test -e /dev/usb_jtag    && /sbin/fxload -D /dev/usb_jtag    -I ${REF} -t fx2\r
-\r
        -test -e /dev/tracii_xl2  && /sbin/fxload -D /dev/tracii_xl2  -I ${REF} -t fx2\r
-\r
        -test -e /dev/xilinx_xpcu && /sbin/fxload -D /dev/xilinx_xpcu -I ${REF} -t fx2\r
 \r
-\r
-\r
 dscr.rel: dscr.a51\r
-\r
 eeprom.rel: eeprom.c eeprom.h\r
-\r
 usbjtag.rel: usbjtag.c hardware.h eeprom.h\r
-\r
 ${HARDWARE}.rel: ${HARDWARE}.c hardware.h\r
 \r
-\r
-\r
 .PHONY: clean distclean\r
 \r
-\r
-\r
 clean:\r
-\r
        make -C ${LIBDIR} clean\r
-\r
        rm -f *.lst *.asm *.lib *.sym *.rel *.mem *.map *.rst *.lnk *.hex *.ihx *.iic\r
 \r
-\r
-\r
 distclean: clean\r
 \r
 \r
 \r
-\r
-\r
-\r
-\r
index fc1f319..4bb377d 100644 (file)
--- a/eeprom.c
+++ b/eeprom.c
 /*-----------------------------------------------------------------------------\r
-\r
  * FTDI EEPROM emulation\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  * Copyright (C) 2007 Kolja Waschk, ixo.de\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 "eeprom.h"\r
-\r
 #include "usb_descriptors.h"\r
 \r
-\r
-\r
 xdata unsigned char eeprom[128];\r
 \r
-\r
-\r
 extern xdata char dscr_vidpidver[6];\r
-\r
 extern xdata char dscr_attrpow[2];\r
-\r
 extern xdata char dscr_usbver[2];\r
-\r
 extern xdata char dscr_strorder[4];\r
-\r
 extern xdata char str1[];\r
-\r
 extern xdata char str2[];\r
-\r
 extern xdata char str3[];\r
 \r
-\r
-\r
 static unsigned char ee_ptr;\r
-\r
 static unsigned short ee_cksum;\r
 \r
-\r
-\r
 void eeprom_append(unsigned char nb)\r
-\r
 {\r
-\r
   unsigned char pree_ptr = ee_ptr & ~1;\r
-\r
   if(pree_ptr != ee_ptr)\r
-\r
   {\r
-\r
     ee_cksum = ee_cksum ^((unsigned short)nb << 8);\r
-\r
     ee_cksum = ee_cksum ^ eeprom[pree_ptr];\r
-\r
     ee_cksum = (ee_cksum << 1) | (ee_cksum >> 15);\r
-\r
   };\r
-\r
   eeprom[ee_ptr++] = nb;\r
-\r
 }\r
 \r
-\r
-\r
 void eeprom_init(void)\r
-\r
 {\r
-\r
   char j,sofs;\r
-\r
   ee_ptr = 0;\r
-\r
   ee_cksum = 0xAAAA;\r
 \r
-\r
-\r
   eeprom_append(0x00);\r
-\r
   eeprom_append(0x00);\r
-\r
   for(j=0;j<6;j++) eeprom_append(dscr_vidpidver[j]);\r
-\r
   for(j=0;j<2;j++) eeprom_append(dscr_attrpow[j]);\r
-\r
   eeprom_append(0x1C);\r
-\r
   eeprom_append(0x00);\r
-\r
   for(j=0;j<2;j++) eeprom_append(dscr_usbver[j]);\r
-\r
   sofs = 0x80 + ee_ptr + 6;\r
-\r
   eeprom_append(sofs);\r
-\r
   eeprom_append(str1[0]);\r
-\r
   sofs += str1[0];\r
-\r
   eeprom_append(sofs);\r
-\r
   eeprom_append(str2[0]);\r
-\r
   sofs += str2[0];\r
-\r
   eeprom_append(sofs);\r
-\r
   eeprom_append(str3[0]);\r
-\r
   for(j=0;j<str1[0];j++) eeprom_append(str1[j]);\r
-\r
   for(j=0;j<str2[0];j++) eeprom_append(str2[j]);\r
-\r
   for(j=0;j<str3[0];j++) eeprom_append(str3[j]);\r
-\r
   for(j=0;j<4;j++) eeprom_append(dscr_strorder[j]);\r
-\r
   while(ee_ptr < 126) eeprom_append(0);\r
-\r
   eeprom[126] = ee_cksum&0xFF;\r
-\r
   eeprom[127] = (ee_cksum>>8)&0xFF;\r
-\r
 }\r
 \r
-\r
-\r
index 09efb08..3358e13 100644 (file)
--- a/eeprom.h
+++ b/eeprom.h
@@ -1,52 +1,26 @@
 /*-----------------------------------------------------------------------------\r
-\r
  * FTDI EEPROM emulation\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  * Copyright (C) 2007 Kolja Waschk, ixo.de\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
 #ifndef _EEPROM_H\r
-\r
 #define _EEPROM_H 1\r
 \r
-\r
-\r
 extern xdata unsigned char eeprom[128];\r
-\r
 extern void eeprom_init(void);\r
 \r
-\r
-\r
 #endif /* _EEPROM_H */\r
 \r
-\r
-\r
index 29f2ff0..8c06db5 100644 (file)
@@ -1,70 +1,35 @@
 #-----------------------------------------------------------------------------\r
-\r
 # Makefile for FX2 library code\r
-\r
 #-----------------------------------------------------------------------------\r
-\r
 # Copyright (C) 2007 Kolja Waschk, ixo.de\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
 CC=sdcc\r
-\r
 CFLAGS+=-mmcs51 --no-xinit-opt -I.\r
-\r
 CPPFLAGS+=\r
 \r
-\r
-\r
 %.rel : %.c\r
-\r
        $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@\r
 \r
-\r
-\r
 libfx2.lib: delay.rel fx2utils.rel i2c.rel isr.rel timer.rel usb_common.rel\r
-\r
        rm -f $@\r
-\r
        touch $@\r
-\r
        for obj in $^ ; do basename $$obj .rel >> $@ ; done\r
 \r
-\r
-\r
 clean:\r
-\r
        rm -f *.lst *.asm *.lib *.sym *.rel *.lib\r
 \r
 \r
 \r
 \r
-\r
-\r
-\r
-\r
-\r
index 621363a..161fb66 100644 (file)
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Delay routines\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
 /*\r
-\r
  * Delay approximately 1 microsecond (including overhead in udelay).\r
-\r
  */\r
-\r
 static void\r
-\r
 udelay1 (void) _naked\r
-\r
 {\r
-\r
   _asm                         ; lcall that got us here took 4 bus cycles\r
-\r
        ret                     ; 4 bus cycles\r
-\r
   _endasm;\r
-\r
 }\r
 \r
-\r
-\r
 /*\r
-\r
  * delay for approximately usecs microseconds\r
-\r
  */\r
-\r
 void\r
-\r
 udelay (unsigned char usecs)\r
-\r
 {\r
-\r
   do {\r
-\r
     udelay1 ();\r
-\r
   } while (--usecs != 0);\r
-\r
 }\r
 \r
 \r
-\r
-\r
-\r
 /*\r
-\r
  * Delay approximately 1 millisecond.\r
-\r
  * We're running at 48 MHz, so we need 48,000 clock cycles.\r
-\r
  *\r
-\r
  * Note however, that each bus cycle takes 4 clock cycles (not obvious,\r
-\r
  * but explains the factor of 4 problem below).\r
-\r
  */\r
-\r
 static void\r
-\r
 mdelay1 (void) _naked\r
-\r
 {\r
-\r
   _asm\r
-\r
        mov     dptr,#(-1200 & 0xffff)\r
-\r
 002$:  \r
-\r
        inc     dptr            ; 3 bus cycles\r
-\r
        mov     a, dpl          ; 2 bus cycles\r
-\r
        orl     a, dph          ; 2 bus cycles\r
-\r
        jnz     002$            ; 3 bus cycles\r
 \r
-\r
-\r
        ret\r
-\r
   _endasm;\r
-\r
 }\r
 \r
-\r
-\r
 void\r
-\r
 mdelay (unsigned int msecs)\r
-\r
 {\r
-\r
   do {\r
-\r
     mdelay1 ();\r
-\r
   } while (--msecs != 0);\r
-\r
 }\r
 \r
-\r
-\r
        \r
-\r
index a159ac8..701c8f1 100644 (file)
@@ -1,72 +1,36 @@
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Delay routines\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
 #ifndef _DELAY_H_\r
-\r
 #define _DELAY_H_\r
 \r
-\r
-\r
 /*\r
-\r
  * delay for approximately usecs microseconds\r
-\r
  * Note limit of 255 usecs.\r
-\r
  */\r
-\r
 void udelay (unsigned char usecs);\r
 \r
-\r
-\r
 /*\r
-\r
  * delay for approximately msecs milliseconds\r
-\r
  */\r
-\r
 void mdelay (unsigned short msecs);\r
 \r
 \r
-\r
-\r
-\r
 #endif /* _DELAY_H_ */\r
-\r
index 597777a..d93e706 100644 (file)
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * FX2 register definitions\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
 /*\r
-\r
 //-----------------------------------------------------------------------------\r
-\r
 //   File:      FX2regs.h\r
-\r
 //   Contents:   EZ-USB FX2 register declarations and bit mask definitions.\r
-\r
 //\r
-\r
 // $Archive: /USB/Target/Inc/fx2regs.h $\r
-\r
-// $Date: 2009/09/30 14:08:56 $\r
-\r
-// $Revision: 1.5 $\r
-\r
+// $Date: 2009/11/09 14:48:44 $\r
+// $Revision: 1.6 $\r
 //\r
-\r
 //\r
-\r
 //   Copyright (c) 2000 Cypress Semiconductor, All rights reserved\r
-\r
 //-----------------------------------------------------------------------------\r
-\r
 */\r
 \r
 \r
-\r
-\r
-\r
 #ifndef FX2REGS_H   /* Header Sentry */\r
-\r
 #define FX2REGS_H\r
 \r
-\r
-\r
 #define ALLOCATE_EXTERN                // required for "right thing to happen" with fx2regs.h\r
 \r
-\r
-\r
 /*\r
-\r
 //-----------------------------------------------------------------------------\r
-\r
 // FX2 Related Register Assignments\r
-\r
 //-----------------------------------------------------------------------------\r
 \r
-\r
-\r
 // The Ez-USB FX2 registers are defined here. We use FX2regs.h for register \r
-\r
 // address allocation by using "#define ALLOCATE_EXTERN". \r
-\r
 // When using "#define ALLOCATE_EXTERN", you get (for instance): \r
-\r
 // xdata volatile BYTE OUT7BUF[64]   _at_   0x7B40;\r
-\r
 // Such lines are created from FX2.h by using the preprocessor. \r
-\r
 // Incidently, these lines will not generate any space in the resulting hex \r
-\r
 // file; they just bind the symbols to the addresses for compilation. \r
-\r
 // You just need to put "#define ALLOCATE_EXTERN" in your main program file; \r
-\r
 // i.e. fw.c or a stand-alone C source file. \r
-\r
 // Without "#define ALLOCATE_EXTERN", you just get the external reference: \r
-\r
 // extern xdata volatile BYTE OUT7BUF[64]   ;//   0x7B40;\r
-\r
 // This uses the concatenation operator "##" to insert a comment "//" \r
-\r
 // to cut off the end of the line, "_at_   0x7B40;", which is not wanted.\r
-\r
 */\r
 \r
 \r
-\r
-\r
-\r
 #ifdef ALLOCATE_EXTERN\r
-\r
 #define EXTERN\r
-\r
 #define _AT_(a) at a\r
-\r
 #else\r
-\r
 #define EXTERN extern\r
-\r
 #define _AT_ ;/ ## /\r
-\r
 #endif\r
 \r
-\r
-\r
 typedef unsigned char BYTE;\r
-\r
 typedef unsigned short WORD;\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE400) volatile BYTE GPIF_WAVE_DATA[128];\r
-\r
 EXTERN xdata _AT_(0xE480) volatile BYTE RES_WAVEDATA_END  ;\r
 \r
-\r
-\r
 // General Configuration\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE600) volatile BYTE CPUCS             ;  // Control & Status\r
-\r
 EXTERN xdata _AT_(0xE601) volatile BYTE IFCONFIG          ;  // Interface Configuration\r
-\r
 EXTERN xdata _AT_(0xE602) volatile BYTE PINFLAGSAB        ;  // FIFO FLAGA and FLAGB Assignments\r
-\r
 EXTERN xdata _AT_(0xE603) volatile BYTE PINFLAGSCD        ;  // FIFO FLAGC and FLAGD Assignments\r
-\r
 EXTERN xdata _AT_(0xE604) volatile BYTE FIFORESET         ;  // Restore FIFOS to default state\r
-\r
 EXTERN xdata _AT_(0xE605) volatile BYTE BREAKPT           ;  // Breakpoint\r
-\r
 EXTERN xdata _AT_(0xE606) volatile BYTE BPADDRH           ;  // Breakpoint Address H\r
-\r
 EXTERN xdata _AT_(0xE607) volatile BYTE BPADDRL           ;  // Breakpoint Address L\r
-\r
 EXTERN xdata _AT_(0xE608) volatile BYTE UART230           ;  // 230 Kbaud clock for T0,T1,T2\r
-\r
 EXTERN xdata _AT_(0xE609) volatile BYTE FIFOPINPOLAR      ;  // FIFO polarities\r
-\r
 EXTERN xdata _AT_(0xE60A) volatile BYTE REVID             ;  // Chip Revision\r
-\r
 EXTERN xdata _AT_(0xE60B) volatile BYTE REVCTL            ;  // Chip Revision Control\r
 \r
-\r
-\r
 // Endpoint Configuration\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE610) volatile BYTE EP1OUTCFG         ;  // Endpoint 1-OUT Configuration\r
-\r
 EXTERN xdata _AT_(0xE611) volatile BYTE EP1INCFG          ;  // Endpoint 1-IN Configuration\r
-\r
 EXTERN xdata _AT_(0xE612) volatile BYTE EP2CFG            ;  // Endpoint 2 Configuration\r
-\r
 EXTERN xdata _AT_(0xE613) volatile BYTE EP4CFG            ;  // Endpoint 4 Configuration\r
-\r
 EXTERN xdata _AT_(0xE614) volatile BYTE EP6CFG            ;  // Endpoint 6 Configuration\r
-\r
 EXTERN xdata _AT_(0xE615) volatile BYTE EP8CFG            ;  // Endpoint 8 Configuration\r
-\r
 EXTERN xdata _AT_(0xE618) volatile BYTE EP2FIFOCFG        ;  // Endpoint 2 FIFO configuration\r
-\r
 EXTERN xdata _AT_(0xE619) volatile BYTE EP4FIFOCFG        ;  // Endpoint 4 FIFO configuration\r
-\r
 EXTERN xdata _AT_(0xE61A) volatile BYTE EP6FIFOCFG        ;  // Endpoint 6 FIFO configuration\r
-\r
 EXTERN xdata _AT_(0xE61B) volatile BYTE EP8FIFOCFG        ;  // Endpoint 8 FIFO configuration\r
-\r
 EXTERN xdata _AT_(0xE620) volatile BYTE EP2AUTOINLENH     ;  // Endpoint 2 Packet Length H (IN only)\r
-\r
 EXTERN xdata _AT_(0xE621) volatile BYTE EP2AUTOINLENL     ;  // Endpoint 2 Packet Length L (IN only)\r
-\r
 EXTERN xdata _AT_(0xE622) volatile BYTE EP4AUTOINLENH     ;  // Endpoint 4 Packet Length H (IN only)\r
-\r
 EXTERN xdata _AT_(0xE623) volatile BYTE EP4AUTOINLENL     ;  // Endpoint 4 Packet Length L (IN only)\r
-\r
 EXTERN xdata _AT_(0xE624) volatile BYTE EP6AUTOINLENH     ;  // Endpoint 6 Packet Length H (IN only)\r
-\r
 EXTERN xdata _AT_(0xE625) volatile BYTE EP6AUTOINLENL     ;  // Endpoint 6 Packet Length L (IN only)\r
-\r
 EXTERN xdata _AT_(0xE626) volatile BYTE EP8AUTOINLENH     ;  // Endpoint 8 Packet Length H (IN only)\r
-\r
 EXTERN xdata _AT_(0xE627) volatile BYTE EP8AUTOINLENL     ;  // Endpoint 8 Packet Length L (IN only)\r
-\r
 EXTERN xdata _AT_(0xE630) volatile BYTE EP2FIFOPFH        ;  // EP2 Programmable Flag trigger H\r
-\r
 EXTERN xdata _AT_(0xE631) volatile BYTE EP2FIFOPFL        ;  // EP2 Programmable Flag trigger L\r
-\r
 EXTERN xdata _AT_(0xE632) volatile BYTE EP4FIFOPFH        ;  // EP4 Programmable Flag trigger H\r
-\r
 EXTERN xdata _AT_(0xE633) volatile BYTE EP4FIFOPFL        ;  // EP4 Programmable Flag trigger L\r
-\r
 EXTERN xdata _AT_(0xE634) volatile BYTE EP6FIFOPFH        ;  // EP6 Programmable Flag trigger H\r
-\r
 EXTERN xdata _AT_(0xE635) volatile BYTE EP6FIFOPFL        ;  // EP6 Programmable Flag trigger L\r
-\r
 EXTERN xdata _AT_(0xE636) volatile BYTE EP8FIFOPFH        ;  // EP8 Programmable Flag trigger H\r
-\r
 EXTERN xdata _AT_(0xE637) volatile BYTE EP8FIFOPFL        ;  // EP8 Programmable Flag trigger L\r
-\r
 EXTERN xdata _AT_(0xE640) volatile BYTE EP2ISOINPKTS      ;  // EP2 (if ISO) IN Packets per frame (1-3)\r
-\r
 EXTERN xdata _AT_(0xE641) volatile BYTE EP4ISOINPKTS      ;  // EP4 (if ISO) IN Packets per frame (1-3)\r
-\r
 EXTERN xdata _AT_(0xE642) volatile BYTE EP6ISOINPKTS      ;  // EP6 (if ISO) IN Packets per frame (1-3)\r
-\r
 EXTERN xdata _AT_(0xE643) volatile BYTE EP8ISOINPKTS      ;  // EP8 (if ISO) IN Packets per frame (1-3)\r
-\r
 EXTERN xdata _AT_(0xE648) volatile BYTE INPKTEND          ;  // Force IN Packet End\r
-\r
 EXTERN xdata _AT_(0xE649) volatile BYTE OUTPKTEND         ;  // Force OUT Packet End\r
 \r
-\r
-\r
 // Interrupts\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE650) volatile BYTE EP2FIFOIE         ;  // Endpoint 2 Flag Interrupt Enable\r
-\r
 EXTERN xdata _AT_(0xE651) volatile BYTE EP2FIFOIRQ        ;  // Endpoint 2 Flag Interrupt Request\r
-\r
 EXTERN xdata _AT_(0xE652) volatile BYTE EP4FIFOIE         ;  // Endpoint 4 Flag Interrupt Enable\r
-\r
 EXTERN xdata _AT_(0xE653) volatile BYTE EP4FIFOIRQ        ;  // Endpoint 4 Flag Interrupt Request\r
-\r
 EXTERN xdata _AT_(0xE654) volatile BYTE EP6FIFOIE         ;  // Endpoint 6 Flag Interrupt Enable\r
-\r
 EXTERN xdata _AT_(0xE655) volatile BYTE EP6FIFOIRQ        ;  // Endpoint 6 Flag Interrupt Request\r
-\r
 EXTERN xdata _AT_(0xE656) volatile BYTE EP8FIFOIE         ;  // Endpoint 8 Flag Interrupt Enable\r
-\r
 EXTERN xdata _AT_(0xE657) volatile BYTE EP8FIFOIRQ        ;  // Endpoint 8 Flag Interrupt Request\r
-\r
 EXTERN xdata _AT_(0xE658) volatile BYTE IBNIE             ;  // IN-BULK-NAK Interrupt Enable\r
-\r
 EXTERN xdata _AT_(0xE659) volatile BYTE IBNIRQ            ;  // IN-BULK-NAK interrupt Request\r
-\r
 EXTERN xdata _AT_(0xE65A) volatile BYTE NAKIE             ;  // Endpoint Ping NAK interrupt Enable\r
-\r
 EXTERN xdata _AT_(0xE65B) volatile BYTE NAKIRQ            ;  // Endpoint Ping NAK interrupt Request\r
-\r
 EXTERN xdata _AT_(0xE65C) volatile BYTE USBIE             ;  // USB Int Enables\r
-\r
 EXTERN xdata _AT_(0xE65D) volatile BYTE USBIRQ            ;  // USB Interrupt Requests\r
-\r
 EXTERN xdata _AT_(0xE65E) volatile BYTE EPIE              ;  // Endpoint Interrupt Enables\r
-\r
 EXTERN xdata _AT_(0xE65F) volatile BYTE EPIRQ             ;  // Endpoint Interrupt Requests\r
-\r
 EXTERN xdata _AT_(0xE660) volatile BYTE GPIFIE            ;  // GPIF Interrupt Enable\r
-\r
 EXTERN xdata _AT_(0xE661) volatile BYTE GPIFIRQ           ;  // GPIF Interrupt Request\r
-\r
 EXTERN xdata _AT_(0xE662) volatile BYTE USBERRIE          ;  // USB Error Interrupt Enables\r
-\r
 EXTERN xdata _AT_(0xE663) volatile BYTE USBERRIRQ         ;  // USB Error Interrupt Requests\r
-\r
 EXTERN xdata _AT_(0xE664) volatile BYTE ERRCNTLIM         ;  // USB Error counter and limit\r
-\r
 EXTERN xdata _AT_(0xE665) volatile BYTE CLRERRCNT         ;  // Clear Error Counter EC[3..0]\r
-\r
 EXTERN xdata _AT_(0xE666) volatile BYTE INT2IVEC          ;  // Interupt 2 (USB) Autovector\r
-\r
 EXTERN xdata _AT_(0xE667) volatile BYTE INT4IVEC          ;  // Interupt 4 (FIFOS & GPIF) Autovector\r
-\r
 EXTERN xdata _AT_(0xE668) volatile BYTE INTSETUP          ;  // Interrupt 2&4 Setup\r
 \r
-\r
-\r
 // Input/Output\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE670) volatile BYTE PORTACFG          ;  // I/O PORTA Alternate Configuration\r
-\r
 EXTERN xdata _AT_(0xE671) volatile BYTE PORTCCFG          ;  // I/O PORTC Alternate Configuration\r
-\r
 EXTERN xdata _AT_(0xE672) volatile BYTE PORTECFG          ;  // I/O PORTE Alternate Configuration\r
-\r
 EXTERN xdata _AT_(0xE678) volatile BYTE I2CS              ;  // Control & Status\r
-\r
 EXTERN xdata _AT_(0xE679) volatile BYTE I2DAT             ;  // Data\r
-\r
 EXTERN xdata _AT_(0xE67A) volatile BYTE I2CTL             ;  // I2C Control\r
-\r
 EXTERN xdata _AT_(0xE67B) volatile BYTE XAUTODAT1         ;  // Autoptr1 MOVX access\r
-\r
 EXTERN xdata _AT_(0xE67C) volatile BYTE XAUTODAT2         ;  // Autoptr2 MOVX access\r
 \r
-\r
-\r
 #define EXTAUTODAT1 XAUTODAT1\r
-\r
 #define EXTAUTODAT2 XAUTODAT2\r
 \r
-\r
-\r
 // USB Control\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE680) volatile BYTE USBCS             ;  // USB Control & Status\r
-\r
 EXTERN xdata _AT_(0xE681) volatile BYTE SUSPEND           ;  // Put chip into suspend\r
-\r
 EXTERN xdata _AT_(0xE682) volatile BYTE WAKEUPCS          ;  // Wakeup source and polarity\r
-\r
 EXTERN xdata _AT_(0xE683) volatile BYTE TOGCTL            ;  // Toggle Control\r
-\r
 EXTERN xdata _AT_(0xE684) volatile BYTE USBFRAMEH         ;  // USB Frame count H\r
-\r
 EXTERN xdata _AT_(0xE685) volatile BYTE USBFRAMEL         ;  // USB Frame count L\r
-\r
 EXTERN xdata _AT_(0xE686) volatile BYTE MICROFRAME        ;  // Microframe count, 0-7\r
-\r
 EXTERN xdata _AT_(0xE687) volatile BYTE FNADDR            ;  // USB Function address\r
 \r
-\r
-\r
 // Endpoints\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE68A) volatile BYTE EP0BCH            ;  // Endpoint 0 Byte Count H\r
-\r
 EXTERN xdata _AT_(0xE68B) volatile BYTE EP0BCL            ;  // Endpoint 0 Byte Count L\r
-\r
 EXTERN xdata _AT_(0xE68D) volatile BYTE EP1OUTBC          ;  // Endpoint 1 OUT Byte Count\r
-\r
 EXTERN xdata _AT_(0xE68F) volatile BYTE EP1INBC           ;  // Endpoint 1 IN Byte Count\r
-\r
 EXTERN xdata _AT_(0xE690) volatile BYTE EP2BCH            ;  // Endpoint 2 Byte Count H\r
-\r
 EXTERN xdata _AT_(0xE691) volatile BYTE EP2BCL            ;  // Endpoint 2 Byte Count L\r
-\r
 EXTERN xdata _AT_(0xE694) volatile BYTE EP4BCH            ;  // Endpoint 4 Byte Count H\r
-\r
 EXTERN xdata _AT_(0xE695) volatile BYTE EP4BCL            ;  // Endpoint 4 Byte Count L\r
-\r
 EXTERN xdata _AT_(0xE698) volatile BYTE EP6BCH            ;  // Endpoint 6 Byte Count H\r
-\r
 EXTERN xdata _AT_(0xE699) volatile BYTE EP6BCL            ;  // Endpoint 6 Byte Count L\r
-\r
 EXTERN xdata _AT_(0xE69C) volatile BYTE EP8BCH            ;  // Endpoint 8 Byte Count H\r
-\r
 EXTERN xdata _AT_(0xE69D) volatile BYTE EP8BCL            ;  // Endpoint 8 Byte Count L\r
-\r
 EXTERN xdata _AT_(0xE6A0) volatile BYTE EP0CS             ;  // Endpoint  Control and Status\r
-\r
 EXTERN xdata _AT_(0xE6A1) volatile BYTE EP1OUTCS          ;  // Endpoint 1 OUT Control and Status\r
-\r
 EXTERN xdata _AT_(0xE6A2) volatile BYTE EP1INCS           ;  // Endpoint 1 IN Control and Status\r
-\r
 EXTERN xdata _AT_(0xE6A3) volatile BYTE EP2CS             ;  // Endpoint 2 Control and Status\r
-\r
 EXTERN xdata _AT_(0xE6A4) volatile BYTE EP4CS             ;  // Endpoint 4 Control and Status\r
-\r
 EXTERN xdata _AT_(0xE6A5) volatile BYTE EP6CS             ;  // Endpoint 6 Control and Status\r
-\r
 EXTERN xdata _AT_(0xE6A6) volatile BYTE EP8CS             ;  // Endpoint 8 Control and Status\r
-\r
 EXTERN xdata _AT_(0xE6A7) volatile BYTE EP2FIFOFLGS       ;  // Endpoint 2 Flags\r
-\r
 EXTERN xdata _AT_(0xE6A8) volatile BYTE EP4FIFOFLGS       ;  // Endpoint 4 Flags\r
-\r
 EXTERN xdata _AT_(0xE6A9) volatile BYTE EP6FIFOFLGS       ;  // Endpoint 6 Flags\r
-\r
 EXTERN xdata _AT_(0xE6AA) volatile BYTE EP8FIFOFLGS       ;  // Endpoint 8 Flags\r
-\r
 EXTERN xdata _AT_(0xE6AB) volatile BYTE EP2FIFOBCH        ;  // EP2 FIFO total byte count H\r
-\r
 EXTERN xdata _AT_(0xE6AC) volatile BYTE EP2FIFOBCL        ;  // EP2 FIFO total byte count L\r
-\r
 EXTERN xdata _AT_(0xE6AD) volatile BYTE EP4FIFOBCH        ;  // EP4 FIFO total byte count H\r
-\r
 EXTERN xdata _AT_(0xE6AE) volatile BYTE EP4FIFOBCL        ;  // EP4 FIFO total byte count L\r
-\r
 EXTERN xdata _AT_(0xE6AF) volatile BYTE EP6FIFOBCH        ;  // EP6 FIFO total byte count H\r
-\r
 EXTERN xdata _AT_(0xE6B0) volatile BYTE EP6FIFOBCL        ;  // EP6 FIFO total byte count L\r
-\r
 EXTERN xdata _AT_(0xE6B1) volatile BYTE EP8FIFOBCH        ;  // EP8 FIFO total byte count H\r
-\r
 EXTERN xdata _AT_(0xE6B2) volatile BYTE EP8FIFOBCL        ;  // EP8 FIFO total byte count L\r
-\r
 EXTERN xdata _AT_(0xE6B3) volatile BYTE SUDPTRH           ;  // Setup Data Pointer high address byte\r
-\r
 EXTERN xdata _AT_(0xE6B4) volatile BYTE SUDPTRL           ;  // Setup Data Pointer low address byte\r
-\r
 EXTERN xdata _AT_(0xE6B5) volatile BYTE SUDPTRCTL         ;  // Setup Data Pointer Auto Mode\r
-\r
 EXTERN xdata _AT_(0xE6B8) volatile BYTE SETUPDAT[8]       ;  // 8 bytes of SETUP data\r
 \r
-\r
-\r
 // GPIF\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE6C0) volatile BYTE GPIFWFSELECT      ;  // Waveform Selector\r
-\r
 EXTERN xdata _AT_(0xE6C1) volatile BYTE GPIFIDLECS        ;  // GPIF Done, GPIF IDLE drive mode\r
-\r
 EXTERN xdata _AT_(0xE6C2) volatile BYTE GPIFIDLECTL       ;  // Inactive Bus, CTL states\r
-\r
 EXTERN xdata _AT_(0xE6C3) volatile BYTE GPIFCTLCFG        ;  // CTL OUT pin drive\r
-\r
 EXTERN xdata _AT_(0xE6C4) volatile BYTE GPIFADRH          ;  // GPIF Address H\r
-\r
 EXTERN xdata _AT_(0xE6C5) volatile BYTE GPIFADRL          ;  // GPIF Address L\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE6CE) volatile BYTE GPIFTCB3          ;  // GPIF Transaction Count Byte 3\r
-\r
 EXTERN xdata _AT_(0xE6CF) volatile BYTE GPIFTCB2          ;  // GPIF Transaction Count Byte 2\r
-\r
 EXTERN xdata _AT_(0xE6D0) volatile BYTE GPIFTCB1          ;  // GPIF Transaction Count Byte 1\r
-\r
 EXTERN xdata _AT_(0xE6D1) volatile BYTE GPIFTCB0          ;  // GPIF Transaction Count Byte 0\r
 \r
-\r
-\r
 #define EP2GPIFTCH GPIFTCB1   // these are here for backwards compatibility\r
-\r
 #define EP2GPIFTCL GPIFTCB0   // before REVE silicon (ie. REVB and REVD)\r
-\r
 #define EP4GPIFTCH GPIFTCB1   // these are here for backwards compatibility\r
-\r
 #define EP4GPIFTCL GPIFTCB0   // before REVE silicon (ie. REVB and REVD)\r
-\r
 #define EP6GPIFTCH GPIFTCB1   // these are here for backwards compatibility\r
-\r
 #define EP6GPIFTCL GPIFTCB0   // before REVE silicon (ie. REVB and REVD)\r
-\r
 #define EP8GPIFTCH GPIFTCB1   // these are here for backwards compatibility\r
-\r
 #define EP8GPIFTCL GPIFTCB0   // before REVE silicon (ie. REVB and REVD)\r
 \r
-\r
-\r
 // EXTERN xdata volatile BYTE EP2GPIFTCH     _AT_ 0xE6D0;  // EP2 GPIF Transaction Count High\r
-\r
 // EXTERN xdata volatile BYTE EP2GPIFTCL     _AT_ 0xE6D1;  // EP2 GPIF Transaction Count Low\r
-\r
 EXTERN xdata _AT_(0xE6D2) volatile BYTE EP2GPIFFLGSEL     ;  // EP2 GPIF Flag select\r
-\r
 EXTERN xdata _AT_(0xE6D3) volatile BYTE EP2GPIFPFSTOP     ;  // Stop GPIF EP2 transaction on prog. flag\r
-\r
 EXTERN xdata _AT_(0xE6D4) volatile BYTE EP2GPIFTRIG       ;  // EP2 FIFO Trigger\r
-\r
 // EXTERN xdata volatile BYTE EP4GPIFTCH     _AT_ 0xE6D8;  // EP4 GPIF Transaction Count High\r
-\r
 // EXTERN xdata volatile BYTE EP4GPIFTCL     _AT_ 0xE6D9;  // EP4 GPIF Transactionr Count Low\r
-\r
 EXTERN xdata _AT_(0xE6DA) volatile BYTE EP4GPIFFLGSEL     ;  // EP4 GPIF Flag select\r
-\r
 EXTERN xdata _AT_(0xE6DB) volatile BYTE EP4GPIFPFSTOP     ;  // Stop GPIF EP4 transaction on prog. flag\r
-\r
 EXTERN xdata _AT_(0xE6DC) volatile BYTE EP4GPIFTRIG       ;  // EP4 FIFO Trigger\r
-\r
 // EXTERN xdata volatile BYTE EP6GPIFTCH     _AT_ 0xE6E0;  // EP6 GPIF Transaction Count High\r
-\r
 // EXTERN xdata volatile BYTE EP6GPIFTCL     _AT_ 0xE6E1;  // EP6 GPIF Transaction Count Low\r
-\r
 EXTERN xdata _AT_(0xE6E2) volatile BYTE EP6GPIFFLGSEL     ;  // EP6 GPIF Flag select\r
-\r
 EXTERN xdata _AT_(0xE6E3) volatile BYTE EP6GPIFPFSTOP     ;  // Stop GPIF EP6 transaction on prog. flag\r
-\r
 EXTERN xdata _AT_(0xE6E4) volatile BYTE EP6GPIFTRIG       ;  // EP6 FIFO Trigger\r
-\r
 // EXTERN xdata volatile BYTE EP8GPIFTCH     _AT_ 0xE6E8;  // EP8 GPIF Transaction Count High\r
-\r
 // EXTERN xdata volatile BYTE EP8GPIFTCL     _AT_ 0xE6E9;  // EP8GPIF Transaction Count Low\r
-\r
 EXTERN xdata _AT_(0xE6EA) volatile BYTE EP8GPIFFLGSEL     ;  // EP8 GPIF Flag select\r
-\r
 EXTERN xdata _AT_(0xE6EB) volatile BYTE EP8GPIFPFSTOP     ;  // Stop GPIF EP8 transaction on prog. flag\r
-\r
 EXTERN xdata _AT_(0xE6EC) volatile BYTE EP8GPIFTRIG       ;  // EP8 FIFO Trigger\r
-\r
 EXTERN xdata _AT_(0xE6F0) volatile BYTE XGPIFSGLDATH      ;  // GPIF Data H (16-bit mode only)\r
-\r
 EXTERN xdata _AT_(0xE6F1) volatile BYTE XGPIFSGLDATLX     ;  // Read/Write GPIF Data L & trigger transac\r
-\r
 EXTERN xdata _AT_(0xE6F2) volatile BYTE XGPIFSGLDATLNOX   ;  // Read GPIF Data L, no transac trigger\r
-\r
 EXTERN xdata _AT_(0xE6F3) volatile BYTE GPIFREADYCFG      ;  // Internal RDY,Sync/Async, RDY5CFG\r
-\r
 EXTERN xdata _AT_(0xE6F4) volatile BYTE GPIFREADYSTAT     ;  // RDY pin states\r
-\r
 EXTERN xdata _AT_(0xE6F5) volatile BYTE GPIFABORT         ;  // Abort GPIF cycles\r
 \r
-\r
-\r
 // UDMA\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE6C6) volatile BYTE FLOWSTATE         ; //Defines GPIF flow state\r
-\r
 EXTERN xdata _AT_(0xE6C7) volatile BYTE FLOWLOGIC         ; //Defines flow/hold decision criteria\r
-\r
 EXTERN xdata _AT_(0xE6C8) volatile BYTE FLOWEQ0CTL        ; //CTL states during active flow state\r
-\r
 EXTERN xdata _AT_(0xE6C9) volatile BYTE FLOWEQ1CTL        ; //CTL states during hold flow state\r
-\r
 EXTERN xdata _AT_(0xE6CA) volatile BYTE FLOWHOLDOFF       ;\r
-\r
 EXTERN xdata _AT_(0xE6CB) volatile BYTE FLOWSTB           ; //CTL/RDY Signal to use as master data strobe \r
-\r
 EXTERN xdata _AT_(0xE6CC) volatile BYTE FLOWSTBEDGE       ; //Defines active master strobe edge\r
-\r
 EXTERN xdata _AT_(0xE6CD) volatile BYTE FLOWSTBHPERIOD    ; //Half Period of output master strobe\r
-\r
 EXTERN xdata _AT_(0xE60C) volatile BYTE GPIFHOLDAMOUNT    ; //Data delay shift \r
-\r
 EXTERN xdata _AT_(0xE67D) volatile BYTE UDMACRCH          ; //CRC Upper byte\r
-\r
 EXTERN xdata _AT_(0xE67E) volatile BYTE UDMACRCL          ; //CRC Lower byte\r
-\r
 EXTERN xdata _AT_(0xE67F) volatile BYTE UDMACRCQUAL       ; //UDMA In only, host terminated use only\r
 \r
 \r
-\r
-\r
-\r
 // Debug/Test\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE6F8) volatile BYTE DBUG              ;  // Debug\r
-\r
 EXTERN xdata _AT_(0xE6F9) volatile BYTE TESTCFG           ;  // Test configuration\r
-\r
 EXTERN xdata _AT_(0xE6FA) volatile BYTE USBTEST           ;  // USB Test Modes\r
-\r
 EXTERN xdata _AT_(0xE6FB) volatile BYTE CT1               ;  // Chirp Test--Override\r
-\r
 EXTERN xdata _AT_(0xE6FC) volatile BYTE CT2               ;  // Chirp Test--FSM\r
-\r
 EXTERN xdata _AT_(0xE6FD) volatile BYTE CT3               ;  // Chirp Test--Control Signals\r
-\r
 EXTERN xdata _AT_(0xE6FE) volatile BYTE CT4               ;  // Chirp Test--Inputs\r
 \r
-\r
-\r
 // Endpoint Buffers\r
 \r
-\r
-\r
 EXTERN xdata _AT_(0xE740) volatile BYTE EP0BUF[64]        ;  // EP0 IN-OUT buffer\r
-\r
 EXTERN xdata _AT_(0xE780) volatile BYTE EP1OUTBUF[64]     ;  // EP1-OUT buffer\r
-\r
 EXTERN xdata _AT_(0xE7C0) volatile BYTE EP1INBUF[64]      ;  // EP1-IN buffer\r
-\r
 EXTERN xdata _AT_(0xF000) volatile BYTE EP2FIFOBUF[1024]  ;  // 512/1024-byte EP2 buffer (IN or OUT)\r
-\r
 EXTERN xdata _AT_(0xF400) volatile BYTE EP4FIFOBUF[1024]  ;  // 512 byte EP4 buffer (IN or OUT)\r
-\r
 EXTERN xdata _AT_(0xF800) volatile BYTE EP6FIFOBUF[1024]  ;  // 512/1024-byte EP6 buffer (IN or OUT)\r
-\r
 EXTERN xdata _AT_(0xFC00) volatile BYTE EP8FIFOBUF[1024]  ;  // 512 byte EP8 buffer (IN or OUT)\r
 \r
-\r
-\r
 #undef EXTERN\r
-\r
 #undef _AT_\r
 \r
-\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
    Special Function Registers (SFRs)\r
-\r
    The byte registers and bits defined in the following list are based\r
-\r
    on the Synopsis definition of the 8051 Special Function Registers for EZ-USB. \r
-\r
     If you modify the register definitions below, please regenerate the file \r
-\r
     "ezregs.inc" which includes the same basic information for assembly inclusion.\r
-\r
 -----------------------------------------------------------------------------*/\r
 \r
-\r
-\r
 sfr at 0x80 IOA;\r
-\r
 sfr at 0x81 SP;\r
-\r
 sfr at 0x82 DPL;\r
-\r
 sfr at 0x83 DPH;\r
-\r
 sfr at 0x84 DPL1;\r
-\r
 sfr at 0x85 DPH1;\r
-\r
 sfr at 0x86 DPS;\r
-\r
          /*  DPS  */\r
-\r
          sbit at 0x86+0 SEL;\r
-\r
 sfr at 0x87 PCON;   /*  PCON  */\r
-\r
          //sbit IDLE   = 0x87+0;\r
-\r
          //sbit STOP   = 0x87+1;\r
-\r
          //sbit GF0    = 0x87+2;\r
-\r
          //sbit GF1    = 0x87+3;\r
-\r
          //sbit SMOD0  = 0x87+7;\r
-\r
 sfr at 0x88 TCON;\r
-\r
          /*  TCON  */\r
-\r
          sbit at 0x88+0 IT0;\r
-\r
          sbit at 0x88+1 IE0;\r
-\r
          sbit at 0x88+2 IT1;\r
-\r
          sbit at 0x88+3 IE1;\r
-\r
          sbit at 0x88+4 TR0;\r
-\r
          sbit at 0x88+5 TF0;\r
-\r
          sbit at 0x88+6 TR1;\r
-\r
          sbit at 0x88+7 TF1;\r
-\r
 sfr at 0x89 TMOD;\r
-\r
          /*  TMOD  */\r
-\r
          //sbit M00    = 0x89+0;\r
-\r
          //sbit M10    = 0x89+1;\r
-\r
          //sbit CT0    = 0x89+2;\r
-\r
          //sbit GATE0  = 0x89+3;\r
-\r
          //sbit M01    = 0x89+4;\r
-\r
          //sbit M11    = 0x89+5;\r
-\r
          //sbit CT1    = 0x89+6;\r
-\r
          //sbit GATE1  = 0x89+7;\r
-\r
 sfr at 0x8A TL0;\r
-\r
 sfr at 0x8B TL1;\r
-\r
 sfr at 0x8C TH0;\r
-\r
 sfr at 0x8D TH1;\r
-\r
 sfr at 0x8E CKCON;\r
-\r
          /*  CKCON  */\r
-\r
          //sbit MD0    = 0x89+0;\r
-\r
          //sbit MD1    = 0x89+1;\r
-\r
          //sbit MD2    = 0x89+2;\r
-\r
          //sbit T0M    = 0x89+3;\r
-\r
          //sbit T1M    = 0x89+4;\r
-\r
          //sbit T2M    = 0x89+5;\r
-\r
 // sfr at 0x8F SPC_FNC; // Was WRS in Reg320\r
-\r
          /*  CKCON  */\r
-\r
          //sbit WRS    = 0x8F+0;\r
-\r
 sfr at 0x90 IOB;\r
-\r
 sfr at 0x91 EXIF; // EXIF Bit Values differ from Reg320\r
-\r
          /*  EXIF  */\r
-\r
          //sbit USBINT = 0x91+4;\r
-\r
          //sbit I2CINT = 0x91+5;\r
-\r
          //sbit IE4    = 0x91+6;\r
-\r
          //sbit IE5    = 0x91+7;\r
-\r
 sfr at 0x92 MPAGE;\r
-\r
 sfr at 0x98 SCON0;\r
-\r
          /*  SCON0  */\r
-\r
          sbit at 0x98+0 RI;\r
-\r
          sbit at 0x98+1 TI;\r
-\r
          sbit at 0x98+2 RB8;\r
-\r
          sbit at 0x98+3 TB8;\r
-\r
          sbit at 0x98+4 REN;\r
-\r
          sbit at 0x98+5 SM2;\r
-\r
          sbit at 0x98+6 SM1;\r
-\r
          sbit at 0x98+7 SM0;\r
-\r
 sfr at 0x99 SBUF0;\r
 \r
-\r
-\r
 sfr at 0x9A APTR1H;\r
-\r
 sfr at 0x9B APTR1L;\r
-\r
 sfr at 0x9C AUTODAT1; \r
-\r
 sfr at 0x9D AUTOPTRH2;\r
-\r
 sfr at 0x9E AUTOPTRL2; \r
-\r
 sfr at 0x9F AUTODAT2;\r
-\r
 sfr at 0xA0 IOC;\r
-\r
 sfr at 0xA1 INT2CLR;\r
-\r
 sfr at 0xA2 INT4CLR;\r
 \r
-\r
-\r
 #define        AUTOPTRH1       APTR1H\r
-\r
 #define        AUTOPTRL1       APTR1L\r
 \r
-\r
-\r
 sfr at 0xA8 IE;\r
-\r
          /*  IE  */\r
-\r
          sbit at 0xA8+0 EX0;\r
-\r
          sbit at 0xA8+1 ET0;\r
-\r
          sbit at 0xA8+2 EX1;\r
-\r
          sbit at 0xA8+3 ET1;\r
-\r
          sbit at 0xA8+4 ES0;\r
-\r
          sbit at 0xA8+5 ET2;\r
-\r
          sbit at 0xA8+6 ES1;\r
-\r
          sbit at 0xA8+7 EA;\r
 \r
-\r
-\r
 sfr at 0xAA EP2468STAT;\r
-\r
          /* EP2468STAT */\r
-\r
          //sbit EP2E   = 0xAA+0;\r
-\r
          //sbit EP2F   = 0xAA+1;\r
-\r
          //sbit EP4E   = 0xAA+2;\r
-\r
          //sbit EP4F   = 0xAA+3;\r
-\r
          //sbit EP6E   = 0xAA+4;\r
-\r
          //sbit EP6F   = 0xAA+5;\r
-\r
          //sbit EP8E   = 0xAA+6;\r
-\r
          //sbit EP8F   = 0xAA+7;\r
 \r
-\r
-\r
 sfr at 0xAB EP24FIFOFLGS;\r
-\r
 sfr at 0xAC EP68FIFOFLGS;\r
-\r
 sfr at 0xAF AUTOPTRSETUP;\r
-\r
             /* AUTOPTRSETUP */\r
-\r
             sbit at 0xAF+0 EXTACC;\r
-\r
             sbit at 0xAF+1 APTR1FZ;\r
-\r
             sbit at 0xAF+2 APTR2FZ;\r
 \r
-\r
-\r
 sfr at 0xB0 IOD;\r
-\r
 sfr at 0xB1 IOE;\r
-\r
 sfr at 0xB2 OEA;\r
-\r
 sfr at 0xB3 OEB;\r
-\r
 sfr at 0xB4 OEC;\r
-\r
 sfr at 0xB5 OED;\r
-\r
 sfr at 0xB6 OEE;\r
 \r
-\r
-\r
 sfr at 0xB8 IP;\r
-\r
          /*  IP  */\r
-\r
          sbit at 0xB8+0 PX0;\r
-\r
          sbit at 0xB8+1 PT0;\r
-\r
          sbit at 0xB8+2 PX1;\r
-\r
          sbit at 0xB8+3 PT1;\r
-\r
          sbit at 0xB8+4 PS0;\r
-\r
          sbit at 0xB8+5 PT2;\r
-\r
          sbit at 0xB8+6 PS1;\r
 \r
-\r
-\r
 sfr at 0xBA EP01STAT;\r
-\r
 sfr at 0xBB GPIFTRIG;\r
-\r
                 \r
-\r
 sfr at 0xBD GPIFSGLDATH;\r
-\r
 sfr at 0xBE GPIFSGLDATLX;\r
-\r
 sfr at 0xBF GPIFSGLDATLNOX;\r
 \r
-\r
-\r
 sfr at 0xC0 SCON1;\r
-\r
          /*  SCON1  */\r
-\r
          sbit at 0xC0+0 RI1;\r
-\r
          sbit at 0xC0+1 TI1;\r
-\r
          sbit at 0xC0+2 RB81;\r
-\r
          sbit at 0xC0+3 TB81;\r
-\r
          sbit at 0xC0+4 REN1;\r
-\r
          sbit at 0xC0+5 SM21;\r
-\r
          sbit at 0xC0+6 SM11;\r
-\r
          sbit at 0xC0+7 SM01;\r
-\r
 sfr at 0xC1 SBUF1;\r
-\r
 sfr at 0xC8 T2CON;\r
-\r
          /*  T2CON  */\r
-\r
         sbit at 0xC8+0 CP_RL2;\r
-\r
         sbit at 0xC8+1 C_T2;\r
-\r
          sbit at 0xC8+2 TR2;\r
-\r
          sbit at 0xC8+3 EXEN2;\r
-\r
          sbit at 0xC8+4 TCLK;\r
-\r
          sbit at 0xC8+5 RCLK;\r
-\r
          sbit at 0xC8+6 EXF2;\r
-\r
          sbit at 0xC8+7 TF2;\r
-\r
 sfr at 0xCA RCAP2L;\r
-\r
 sfr at 0xCB RCAP2H;\r
-\r
 sfr at 0xCC TL2;\r
-\r
 sfr at 0xCD TH2;\r
-\r
 sfr at 0xD0 PSW;\r
-\r
          /*  PSW  */\r
-\r
          sbit at 0xD0+0 P;\r
-\r
          sbit at 0xD0+1 FL;\r
-\r
          sbit at 0xD0+2 OV;\r
-\r
          sbit at 0xD0+3 RS0;\r
-\r
          sbit at 0xD0+4 RS1;\r
-\r
          sbit at 0xD0+5 F0;\r
-\r
          sbit at 0xD0+6 AC;\r
-\r
          sbit at 0xD0+7 CY;\r
-\r
 sfr at 0xD8 EICON; // Was WDCON in DS80C320 EICON; Bit Values differ from Reg320\r
-\r
          /*  EICON  */\r
-\r
          sbit at 0xD8+3 INT6;\r
-\r
          sbit at 0xD8+4 RESI;\r
-\r
          sbit at 0xD8+5 ERESI;\r
-\r
          sbit at 0xD8+7 SMOD1;\r
-\r
 sfr at 0xE0 ACC;\r
-\r
 sfr at 0xE8 EIE; // EIE Bit Values differ from Reg320\r
-\r
                         /*  EIE  */\r
-\r
          sbit at 0xE8+0 EIUSB;\r
-\r
          sbit at 0xE8+1 EI2C;\r
-\r
          sbit at 0xE8+2 EIEX4;\r
-\r
          sbit at 0xE8+3 EIEX5;\r
-\r
          sbit at 0xE8+4 EIEX6;\r
-\r
 sfr at 0xF0 B;\r
-\r
 sfr at 0xF8 EIP; // EIP Bit Values differ from Reg320\r
-\r
                         /*  EIP  */\r
-\r
          sbit at 0xF8+0 PUSB;\r
-\r
          sbit at 0xF8+1 PI2C;\r
-\r
          sbit at 0xF8+2 EIPX4;\r
-\r
          sbit at 0xF8+3 EIPX5;\r
-\r
          sbit at 0xF8+4 EIPX6;\r
 \r
-\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
    Bit Masks\r
-\r
 -----------------------------------------------------------------------------*/\r
 \r
-\r
-\r
 #define bmBIT0 1\r
-\r
 #define bmBIT1 2\r
-\r
 #define bmBIT2 4\r
-\r
 #define bmBIT3 8\r
-\r
 #define bmBIT4 16\r
-\r
 #define bmBIT5 32\r
-\r
 #define bmBIT6 64\r
-\r
 #define bmBIT7 128\r
 \r
-\r
-\r
 /* CPU Control & Status Register (CPUCS) */\r
-\r
 #define bmPRTCSTB    bmBIT5\r
-\r
 #define bmCLKSPD     (bmBIT4 | bmBIT3)\r
-\r
 #define bmCLKSPD1    bmBIT4\r
-\r
 #define bmCLKSPD0    bmBIT3\r
-\r
 #define bmCLKINV     bmBIT2\r
-\r
 #define bmCLKOE      bmBIT1\r
-\r
 #define bm8051RES    bmBIT0\r
-\r
 /* Port Alternate Configuration Registers */\r
-\r
 /* Port A (PORTACFG) */\r
-\r
 #define bmFLAGD      bmBIT7\r
-\r
 #define bmINT1       bmBIT1\r
-\r
 #define bmINT0       bmBIT0\r
-\r
 /* Port C (PORTCCFG) */\r
-\r
 #define bmGPIFA7     bmBIT7\r
-\r
 #define bmGPIFA6     bmBIT6\r
-\r
 #define bmGPIFA5     bmBIT5\r
-\r
 #define bmGPIFA4     bmBIT4\r
-\r
 #define bmGPIFA3     bmBIT3\r
-\r
 #define bmGPIFA2     bmBIT2\r
-\r
 #define bmGPIFA1     bmBIT1\r
-\r
 #define bmGPIFA0     bmBIT0\r
-\r
 /* Port E (PORTECFG) */\r
-\r
 #define bmGPIFA8     bmBIT7\r
-\r
 #define bmT2EX       bmBIT6\r
-\r
 #define bmINT6       bmBIT5\r
-\r
 #define bmRXD1OUT    bmBIT4\r
-\r
 #define bmRXD0OUT    bmBIT3\r
-\r
 #define bmT2OUT      bmBIT2\r
-\r
 #define bmT1OUT      bmBIT1\r
-\r
 #define bmT0OUT      bmBIT0\r
 \r
-\r
-\r
 /* I2C Control & Status Register (I2CS) */\r
-\r
 #define bmSTART      bmBIT7\r
-\r
 #define bmSTOP       bmBIT6\r
-\r
 #define bmLASTRD     bmBIT5\r
-\r
 #define bmID         (bmBIT4 | bmBIT3)\r
-\r
 #define bmBERR       bmBIT2\r
-\r
 #define bmACK        bmBIT1\r
-\r
 #define bmDONE       bmBIT0\r
-\r
 /* I2C Control Register (I2CTL) */\r
-\r
 #define bmSTOPIE     bmBIT1\r
-\r
 #define bm400KHZ     bmBIT0\r
-\r
 /* Interrupt 2 (USB) Autovector Register (INT2IVEC) */\r
-\r
 #define bmIV4        bmBIT6\r
-\r
 #define bmIV3        bmBIT5\r
-\r
 #define bmIV2        bmBIT4\r
-\r
 #define bmIV1        bmBIT3\r
-\r
 #define bmIV0        bmBIT2\r
-\r
 /* USB Interrupt Request & Enable Registers (USBIE/USBIRQ) */\r
-\r
 #define bmEP0ACK     bmBIT6\r
-\r
 #define bmHSGRANT    bmBIT5\r
-\r
 #define bmURES       bmBIT4\r
-\r
 #define bmSUSP       bmBIT3\r
-\r
 #define bmSUTOK      bmBIT2\r
-\r
 #define bmSOF        bmBIT1\r
-\r
 #define bmSUDAV      bmBIT0\r
-\r
 /* Breakpoint register (BREAKPT) */\r
-\r
 #define bmBREAK      bmBIT3\r
-\r
 #define bmBPPULSE    bmBIT2\r
-\r
 #define bmBPEN       bmBIT1\r
-\r
 /* Interrupt 2 & 4 Setup (INTSETUP) */\r
-\r
 #define bmAV2EN      bmBIT3\r
-\r
 #define bmINT4IN     bmBIT1\r
-\r
 #define bmAV4EN      bmBIT0\r
-\r
 /* USB Control & Status Register (USBCS) */\r
-\r
 #define bmHSM        bmBIT7\r
-\r
 #define bmDISCON     bmBIT3\r
-\r
 #define bmNOSYNSOF   bmBIT2\r
-\r
 #define bmRENUM      bmBIT1\r
-\r
 #define bmSIGRESUME  bmBIT0\r
-\r
 /* Wakeup Control and Status Register (WAKEUPCS) */\r
-\r
 #define bmWU2        bmBIT7\r
-\r
 #define bmWU         bmBIT6\r
-\r
 #define bmWU2POL     bmBIT5\r
-\r
 #define bmWUPOL      bmBIT4\r
-\r
 #define bmDPEN       bmBIT2\r
-\r
 #define bmWU2EN      bmBIT1\r
-\r
 #define bmWUEN       bmBIT0\r
-\r
 /* End Point 0 Control & Status Register (EP0CS) */\r
-\r
 #define bmHSNAK      bmBIT7\r
-\r
 /* End Point 0-1 Control & Status Registers (EP0CS/EP1OUTCS/EP1INCS) */\r
-\r
 #define bmEPBUSY     bmBIT1\r
-\r
 #define bmEPSTALL    bmBIT0\r
-\r
 /* End Point 2-8 Control & Status Registers (EP2CS/EP4CS/EP6CS/EP8CS) */\r
-\r
 #define bmNPAK       (bmBIT6 | bmBIT5 | bmBIT4)\r
-\r
 #define bmEPFULL     bmBIT3\r
-\r
 #define bmEPEMPTY    bmBIT2\r
-\r
 /* Endpoint Status (EP2468STAT) SFR bits */\r
-\r
 #define bmEP8FULL    bmBIT7\r
-\r
 #define bmEP8EMPTY   bmBIT6\r
-\r
 #define bmEP6FULL    bmBIT5\r
-\r
 #define bmEP6EMPTY   bmBIT4\r
-\r
 #define bmEP4FULL    bmBIT3\r
-\r
 #define bmEP4EMPTY   bmBIT2\r
-\r
 #define bmEP2FULL    bmBIT1\r
-\r
 #define bmEP2EMPTY   bmBIT0\r
-\r
 /* SETUP Data Pointer Auto Mode (SUDPTRCTL) */\r
-\r
 #define bmSDPAUTO    bmBIT0\r
-\r
 /* Endpoint Data Toggle Control (TOGCTL) */\r
-\r
 #define bmQUERYTOGGLE  bmBIT7\r
-\r
 #define bmSETTOGGLE    bmBIT6\r
-\r
 #define bmRESETTOGGLE  bmBIT5\r
-\r
 #define bmTOGCTLEPMASK bmBIT3 | bmBIT2 | bmBIT1 | bmBIT0\r
-\r
 /* IBN (In Bulk Nak) enable and request bits (IBNIE/IBNIRQ) */\r
-\r
 #define bmEP8IBN     bmBIT5\r
-\r
 #define bmEP6IBN     bmBIT4\r
-\r
 #define bmEP4IBN     bmBIT3\r
-\r
 #define bmEP2IBN     bmBIT2\r
-\r
 #define bmEP1IBN     bmBIT1\r
-\r
 #define bmEP0IBN     bmBIT0\r
 \r
-\r
-\r
 /* PING-NAK enable and request bits (NAKIE/NAKIRQ) */\r
-\r
 #define bmEP8PING     bmBIT7\r
-\r
 #define bmEP6PING     bmBIT6\r
-\r
 #define bmEP4PING     bmBIT5\r
-\r
 #define bmEP2PING     bmBIT4\r
-\r
 #define bmEP1PING     bmBIT3\r
-\r
 #define bmEP0PING     bmBIT2\r
-\r
 #define bmIBN         bmBIT0\r
 \r
-\r
-\r
 /* Interface Configuration bits (IFCONFIG) */\r
-\r
 #define bmIFCLKSRC    bmBIT7           // set == INTERNAL\r
-\r
 #define bm3048MHZ     bmBIT6           // set == 48 MHz\r
-\r
 #define bmIFCLKOE     bmBIT5\r
-\r
 #define bmIFCLKPOL    bmBIT4\r
-\r
 #define bmASYNC       bmBIT3\r
-\r
 #define bmGSTATE      bmBIT2\r
-\r
 #define bmIFCFG1      bmBIT1\r
-\r
 #define bmIFCFG0      bmBIT0\r
-\r
 #define bmIFCFGMASK   (bmIFCFG0 | bmIFCFG1)\r
-\r
 #define bmIFGPIF      bmIFCFG1\r
 \r
-\r
-\r
 /* EP 2468 FIFO Configuration bits (EP2FIFOCFG,EP4FIFOCFG,EP6FIFOCFG,EP8FIFOCFG) */\r
-\r
 #define bmINFM       bmBIT6\r
-\r
 #define bmOEP        bmBIT5\r
-\r
 #define bmAUTOOUT    bmBIT4\r
-\r
 #define bmAUTOIN     bmBIT3\r
-\r
 #define bmZEROLENIN  bmBIT2\r
-\r
 //   must be zero    bmBIT1\r
-\r
 #define bmWORDWIDE   bmBIT0\r
 \r
-\r
-\r
 /*\r
-\r
  * Chip Revision Control Bits (REVCTL) - used to ebable/disable revision specific features\r
-\r
  */ \r
-\r
 #define bmNOAUTOARM    bmBIT1  // these don't match the docs\r
-\r
 #define bmSKIPCOMMIT   bmBIT0  // these don't match the docs\r
 \r
-\r
-\r
 #define        bmDYN_OUT      bmBIT1   // these do...\r
-\r
 #define        bmENH_PKT      bmBIT0\r
 \r
 \r
-\r
-\r
-\r
 /* Fifo Reset bits (FIFORESET) */\r
-\r
 #define bmNAKALL       bmBIT7\r
 \r
-\r
-\r
 /* Endpoint Configuration (EPxCFG) */\r
-\r
 #define        bmVALID         bmBIT7\r
-\r
 #define        bmIN            bmBIT6\r
-\r
 #define        bmTYPE1         bmBIT5\r
-\r
 #define        bmTYPE0         bmBIT4\r
-\r
 #define          bmISOCHRONOUS         bmTYPE0\r
-\r
 #define          bmBULK                bmTYPE1\r
-\r
 #define          bmINTERRUPT          (bmTYPE1 | bmTYPE0)\r
-\r
 #define        bm1KBUF         bmBIT3\r
-\r
 #define        bmBUF1          bmBIT1\r
-\r
 #define        bmBUF0          bmBIT0\r
-\r
 #define          bmQUADBUF             0\r
-\r
 #define          bmINVALIDBUF          bmBUF0\r
-\r
 #define          bmDOUBLEBUF           bmBUF1\r
-\r
 #define          bmTRIPLEBUF           (bmBUF1 | bmBUF0)\r
 \r
-\r
-\r
 /* OUTPKTEND */\r
-\r
 #define        bmSKIP          bmBIT7  // low 4 bits specify which end point\r
 \r
-\r
-\r
 /* GPIFTRIG defs */\r
-\r
 #define        bmGPIF_IDLE             bmBIT7          // status bit\r
 \r
-\r
-\r
 #define        bmGPIF_EP2_START             0\r
-\r
 #define        bmGPIF_EP4_START             1\r
-\r
 #define        bmGPIF_EP6_START             2\r
-\r
 #define        bmGPIF_EP8_START             3\r
-\r
 #define        bmGPIF_READ             bmBIT2\r
-\r
 #define        bmGPIF_WRITE                 0\r
 \r
-\r
-\r
 /* EXIF bits */\r
-\r
 #define        bmEXIF_USBINT           bmBIT4\r
-\r
 #define        bmEXIF_I2CINT           bmBIT5\r
-\r
 #define        bmEXIF_IE4              bmBIT6\r
-\r
 #define        bmEXIF_IE5              bmBIT7\r
 \r
 \r
-\r
-\r
-\r
 #endif   /* FX2REGS_H */\r
-\r
index b6797cc..d5d88fb 100644 (file)
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * FX2 specific subroutines\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 "fx2utils.h"\r
-\r
 #include "fx2regs.h"\r
-\r
 #include "delay.h"\r
 \r
-\r
-\r
 void\r
-\r
 fx2_stall_ep0 (void)\r
-\r
 {\r
-\r
   EP0CS |= bmEPSTALL;\r
-\r
 }\r
 \r
-\r
-\r
 void\r
-\r
 fx2_reset_data_toggle (unsigned char ep)\r
-\r
 {\r
-\r
   TOGCTL = ((ep & 0x80) >> 3 | (ep & 0x0f));\r
-\r
   TOGCTL |= bmRESETTOGGLE;\r
-\r
 }\r
 \r
-\r
-\r
 void\r
-\r
 fx2_renumerate (void)\r
-\r
 {\r
-\r
   USBCS |= bmDISCON | bmRENUM;\r
 \r
-\r
-\r
   // mdelay (1500);            // FIXME why 1.5 seconds?\r
-\r
   mdelay (250);                        // FIXME why 1.5 seconds?\r
-\r
   \r
-\r
   USBIRQ = 0xff;               // clear any pending USB irqs...\r
-\r
   EPIRQ =  0xff;               //   they're from before the renumeration\r
 \r
-\r
-\r
   EXIF &= ~bmEXIF_USBINT;\r
 \r
-\r
-\r
   USBCS &= ~bmDISCON;          // reconnect USB\r
-\r
 }\r
-\r
index 54c61df..d937a16 100644 (file)
@@ -1,60 +1,30 @@
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * FX2 specific subroutines\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
 #ifndef _FX2UTILS_H_\r
-\r
 #define _FX2UTILS_H_\r
 \r
-\r
-\r
 void fx2_stall_ep0 (void);\r
-\r
 void fx2_reset_data_toggle (unsigned char ep);\r
-\r
 void fx2_renumerate (void);\r
 \r
 \r
 \r
-\r
-\r
-\r
-\r
 #endif /* _FX2UTILS_H_ */\r
-\r
index 99ed1f7..2fefdf5 100644 (file)
--- a/fx2/i2c.c
+++ b/fx2/i2c.c
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * I2C read/write functions 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 "i2c.h"\r
-\r
 #include "fx2regs.h"\r
-\r
 #include <string.h>\r
 \r
 \r
-\r
-\r
-\r
 // issue a stop bus cycle and wait for completion\r
 \r
 \r
-\r
-\r
-\r
 // returns non-zero if successful, else 0\r
-\r
 unsigned char\r
-\r
 i2c_read (unsigned char addr, xdata unsigned char *buf, unsigned char len)\r
-\r
 {\r
-\r
   volatile unsigned char       junk;\r
-\r
   \r
-\r
   if (len == 0)                        // reading zero bytes always works\r
-\r
     return 1;\r
-\r
   \r
-\r
   while (I2CS & bmSTOP)                // wait for stop to clear\r
-\r
     ;\r
 \r
-\r
-\r
   I2CS = bmSTART;\r
-\r
   I2DAT = (addr << 1) | 1;     // write address and direction (1's the read bit)\r
 \r
-\r
-\r
   while ((I2CS & bmDONE) == 0)\r
-\r
     ;\r
 \r
-\r
-\r
   if ((I2CS & bmBERR) || (I2CS & bmACK) == 0)  // no device answered...\r
-\r
     goto fail;\r
 \r
-\r
-\r
   if (len == 1)\r
-\r
     I2CS |= bmLASTRD;          \r
 \r
-\r
-\r
   junk = I2DAT;                        // trigger the first read cycle\r
 \r
-\r
-\r
   while (--len != 0){\r
-\r
     while ((I2CS & bmDONE) == 0)\r
-\r
       ;\r
 \r
-\r
-\r
     if (I2CS & bmBERR)\r
-\r
       goto fail;\r
 \r
-\r
-\r
     if (len == 1)\r
-\r
       I2CS |= bmLASTRD;\r
-\r
     \r
-\r
     *buf++ = I2DAT;            // get data, trigger another read\r
-\r
   }\r
 \r
-\r
-\r
   // wait for final byte\r
-\r
   \r
-\r
   while ((I2CS & bmDONE) == 0)\r
-\r
     ;\r
-\r
   \r
-\r
   if (I2CS & bmBERR)\r
-\r
     goto fail;\r
 \r
-\r
-\r
   I2CS |= bmSTOP;\r
-\r
   *buf = I2DAT;\r
 \r
-\r
-\r
   return 1;\r
 \r
-\r
-\r
  fail:\r
-\r
   I2CS |= bmSTOP;\r
-\r
   return 0;\r
-\r
 }\r
 \r
 \r
 \r
-\r
-\r
-\r
-\r
 // returns non-zero if successful, else 0\r
-\r
 unsigned char\r
-\r
 i2c_write (unsigned char addr, xdata const unsigned char *buf, unsigned char len)\r
-\r
 {\r
-\r
   while (I2CS & bmSTOP)                // wait for stop to clear\r
-\r
     ;\r
 \r
-\r
-\r
   I2CS = bmSTART;\r
-\r
   I2DAT = (addr << 1) | 0;     // write address and direction (0's the write bit)\r
 \r
-\r
-\r
   while ((I2CS & bmDONE) == 0)\r
-\r
     ;\r
 \r
-\r
-\r
   if ((I2CS & bmBERR) || (I2CS & bmACK) == 0)  // no device answered...\r
-\r
     goto fail;\r
 \r
-\r
-\r
   while (len > 0){\r
-\r
     I2DAT = *buf++;\r
-\r
     len--;\r
 \r
-\r
-\r
     while ((I2CS & bmDONE) == 0)\r
-\r
       ;\r
 \r
-\r
-\r
     if ((I2CS & bmBERR) || (I2CS & bmACK) == 0)        // no device answered...\r
-\r
       goto fail;\r
-\r
   }\r
 \r
-\r
-\r
   I2CS |= bmSTOP;\r
-\r
   return 1;\r
 \r
-\r
-\r
  fail:\r
-\r
   I2CS |= bmSTOP;\r
-\r
   return 0;\r
-\r
 }\r
-\r
index 2be98ad..d681e8c 100644 (file)
--- a/fx2/i2c.h
+++ b/fx2/i2c.h
@@ -1,60 +1,30 @@
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * I2C read/write functions 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
 #ifndef _I2C_H_\r
-\r
 #define _I2C_H_\r
 \r
-\r
-\r
 // returns non-zero if successful, else 0\r
-\r
 unsigned char i2c_read (unsigned char addr, xdata unsigned char *buf, unsigned char len);\r
 \r
-\r
-\r
 // returns non-zero if successful, else 0\r
-\r
 unsigned char i2c_write (unsigned char addr, xdata const unsigned char *buf, unsigned char len);\r
 \r
-\r
-\r
 #endif /* _I2C_H_ */\r
-\r
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
index 178f316..3293fd9 100644 (file)
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Synchronization delay for FX2 access to specific registers\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
 #ifndef _SYNCDELAY_H_\r
-\r
 #define _SYNCDELAY_H_\r
 \r
-\r
-\r
 /*\r
-\r
  * Magic delay required between access to certain xdata registers (TRM page 15-106).\r
-\r
  * For our configuration, 48 MHz FX2 / 48 MHz IFCLK, we need three cycles.  Each\r
-\r
  * NOP is a single cycle....\r
-\r
  *\r
-\r
  * From TRM page 15-105:\r
-\r
  *\r
-\r
  * Under certain conditions, some read and write access to the FX2 registers must\r
-\r
  * be separated by a "synchronization delay".  The delay is necessary only under the\r
-\r
  * following conditions:\r
-\r
  *\r
-\r
  *   - between a write to any register in the 0xE600 - 0xE6FF range and a write to one\r
-\r
  *     of the registers listed below.\r
-\r
  *\r
-\r
  *   - between a write to one of the registers listed below and a read from any register\r
-\r
  *     in the 0xE600 - 0xE6FF range.\r
-\r
  *\r
-\r
  *   Registers which require a synchronization delay:\r
-\r
  *\r
-\r
  *     FIFORESET                       FIFOPINPOLAR\r
-\r
  *     INPKTEND                        EPxBCH:L\r
-\r
  *     EPxFIFOPFH:L                    EPxAUTOINLENH:L\r
-\r
  *     EPxFIFOCFG                      EPxGPIFFLGSEL\r
-\r
  *     PINFLAGSAB                      PINFLAGSCD\r
-\r
  *     EPxFIFOIE                       EPxFIFOIRQ\r
-\r
  *     GPIFIE                          GPIFIRQ\r
-\r
  *     UDMACRCH:L                      GPIFADRH:L\r
-\r
  *     GPIFTRIG                        EPxGPIFTRIG\r
-\r
  *     OUTPKTEND                       REVCTL\r
-\r
  *     GPIFTCB3                        GPIFTCB2\r
-\r
  *     GPIFTCB1                        GPIFTCB0\r
-\r
  */\r
 \r
-\r
-\r
 /*\r
-\r
  * FIXME ensure that the peep hole optimizer isn't screwing us\r
-\r
  */\r
-\r
 #define        SYNCDELAY       _asm nop; nop; nop; _endasm\r
-\r
 #define        NOP             _asm nop; _endasm\r
 \r
 \r
-\r
-\r
-\r
 #endif /* _SYNCDELAY_H_ */\r
-\r
index 44e46e8..3b268ac 100644 (file)
@@ -1,94 +1,47 @@
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Timer 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 "timer.h"\r
-\r
 #include "fx2regs.h"\r
-\r
 #include "isr.h"\r
 \r
-\r
-\r
 /*\r
-\r
  * Arrange to have isr_tick_handler called at 100 Hz.\r
-\r
  *\r
-\r
  * The cpu clock is running at 48e6.  The input to the timer\r
-\r
  * is 48e6 / 12 = 4e6.\r
-\r
  *\r
-\r
  * We arrange to have the timer overflow every 40000 clocks == 100 Hz\r
-\r
  */\r
 \r
-\r
-\r
 #define        RELOAD_VALUE    ((unsigned short) -40000)\r
 \r
-\r
-\r
 void \r
-\r
 hook_timer_tick (unsigned short isr_tick_handler)\r
-\r
 {\r
-\r
   ET2 = 0;                     // disable timer 2 interrupts\r
-\r
   hook_sv (SV_TIMER_2, isr_tick_handler);\r
-\r
   \r
-\r
   RCAP2H = RELOAD_VALUE >> 8;  // setup the auto reload value\r
-\r
   RCAP2L = RELOAD_VALUE & 0xFF;\r
 \r
-\r
-\r
   T2CON = 0x04;                        // interrupt on overflow; reload; run\r
-\r
   ET2 = 1;                     // enable timer 2 interrupts\r
-\r
 }\r
-\r
index 69f3927..79cc436 100644 (file)
@@ -1,65 +1,33 @@
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Timer 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
 #ifndef _TIMER_H_\r
-\r
 #define _TIMER_H_\r
 \r
-\r
-\r
 /*\r
-\r
  * Arrange to have isr_tick_handler called at 100 Hz\r
-\r
  */\r
-\r
 void hook_timer_tick (unsigned short isr_tick_handler);\r
 \r
-\r
-\r
 #define clear_timer_irq()                              \\r
        TF2 = 0         /* clear overflow flag */\r
 \r
 \r
-\r
-\r
-\r
 #endif /* _TIMER_H_ */\r
-\r
index 8805e45..4fc3492 100644 (file)
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Common USB code 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 "usb_common.h"\r
-\r
 #include "fx2regs.h"\r
-\r
 #include "syncdelay.h"\r
-\r
 #include "fx2utils.h"\r
-\r
 #include "isr.h"\r
-\r
 #include "usb_descriptors.h"\r
-\r
 #include "usb_requests.h"\r
 \r
-\r
-\r
 extern xdata char str0[];\r
-\r
 extern xdata char str1[];\r
-\r
 extern xdata char str2[];\r
-\r
 extern xdata char str3[];\r
-\r
 extern xdata char str4[];\r
-\r
 extern xdata char str5[];\r
 \r
-\r
-\r
 volatile bit _usb_got_SUDAV;\r
 \r
-\r
-\r
 unsigned char  _usb_config = 0;\r
-\r
 unsigned char  _usb_alt_setting = 0;   // FIXME really 1/interface\r
 \r
-\r
-\r
 xdata unsigned char *current_device_descr;\r
-\r
 xdata unsigned char *current_devqual_descr;\r
-\r
 xdata unsigned char *current_config_descr;\r
-\r
 xdata unsigned char *other_config_descr;\r
 \r
-\r
-\r
 static void\r
-\r
 setup_descriptors (void)\r
-\r
 {\r
-\r
   if (USBCS & bmHSM){          // high speed mode\r
-\r
     current_device_descr  = high_speed_device_descr;\r
-\r
     current_devqual_descr = high_speed_devqual_descr;\r
-\r
     current_config_descr  = high_speed_config_descr;\r
-\r
     other_config_descr    = full_speed_config_descr;\r
-\r
        EP8AUTOINLENH = 0x02; SYNCDELAY;                                // Size in bytes of the IN data automatically commited (512 bytes here)\r
-\r
        EP8AUTOINLENL = 0x00; SYNCDELAY;                                // Can use signal PKTEND if you want to commit a shorter packet\r
-\r
   }\r
-\r
   else {\r
-\r
     current_device_descr  = full_speed_device_descr;\r
-\r
     current_devqual_descr = full_speed_devqual_descr;\r
-\r
     current_config_descr  = full_speed_config_descr;\r
-\r
     other_config_descr    = high_speed_config_descr;\r
-\r
        EP8AUTOINLENH = 0x00; SYNCDELAY;                                // Size in bytes of the IN data automatically commited (64 bytes here)\r
-\r
        EP8AUTOINLENL = 0x40; SYNCDELAY;                                // Can use signal PKTEND if you want to commit a shorter packet\r
-\r
   }\r
 \r
-\r
-\r
   // whack the type fields\r
-\r
   // FIXME, may not be required.\r
-\r
   // current_config_descr[1] = DT_CONFIG;\r
-\r
   // other_config_descr[1]   = DT_OTHER_SPEED;\r
-\r
 }\r
 \r
-\r
-\r
 static void\r
-\r
 isr_SUDAV (void) interrupt\r
-\r
 {\r
-\r
   clear_usb_irq ();\r
-\r
   _usb_got_SUDAV = 1;\r
-\r
 }\r
 \r
-\r
-\r
 static void\r
-\r
 isr_USBRESET (void) interrupt\r
-\r
 {\r
-\r
   clear_usb_irq ();\r
-\r
   setup_descriptors ();\r
-\r
 }\r
 \r
-\r
-\r
 static void\r
-\r
 isr_HIGHSPEED (void) interrupt\r
-\r
 {\r
-\r
   clear_usb_irq ();\r
-\r
   setup_descriptors ();\r
-\r
 }\r
 \r
-\r
-\r
 void\r
-\r
 usb_install_handlers (void)\r
-\r
 {\r
-\r
   setup_descriptors ();            // ensure that they're set before use\r
 \r
-\r
-\r
   hook_uv (UV_SUDAV,     (unsigned short) isr_SUDAV);\r
-\r
   hook_uv (UV_USBRESET,  (unsigned short) isr_USBRESET);\r
-\r
   hook_uv (UV_HIGHSPEED, (unsigned short) isr_HIGHSPEED);\r
 \r
-\r
-\r
   USBIE = bmSUDAV | bmURES | bmHSGRANT;\r
-\r
 }\r
 \r
-\r
-\r
 // On the FX2 the only plausible endpoints are 0, 1, 2, 4, 6, 8\r
-\r
 // This doesn't check to see that they're enabled\r
 \r
-\r
-\r
 unsigned char\r
-\r
 plausible_endpoint (unsigned char ep)\r
-\r
 {\r
-\r
   ep &= ~0x80; // ignore direction bit\r
 \r
-\r
-\r
   if (ep > 8)\r
-\r
     return 0;\r
 \r
-\r
-\r
   if (ep == 1)\r
-\r
     return 1;\r
 \r
-\r
-\r
   return (ep & 0x1) == 0;      // must be even\r
-\r
 }\r
 \r
-\r
-\r
 // return pointer to control and status register for endpoint.\r
-\r
 // only called with plausible_endpoints\r
 \r
-\r
-\r
 xdata volatile unsigned char *\r
-\r
 epcs (unsigned char ep)\r
-\r
 {\r
-\r
   if (ep == 0x01)              // ep1 has different in and out CS regs\r
-\r
     return EP1OUTCS;\r
 \r
-\r
-\r
   if (ep == 0x81)\r
-\r
     return EP1INCS;\r
 \r
-\r
-\r
   ep &= ~0x80;                 // ignore direction bit\r
 \r
-\r
-\r
   if (ep == 0x00)              // ep0\r
-\r
     return EP0CS;\r
 \r
-\r
-\r
   return EP2CS + (ep >> 1);    // 2, 4, 6, 8 are consecutive\r
-\r
 }\r
 \r
-\r
-\r
 void\r
-\r
 usb_handle_setup_packet (void)\r
-\r
 {\r
-\r
   _usb_got_SUDAV = 0;\r
 \r
-\r
-\r
   // handle the standard requests...\r
 \r
-\r
-\r
   switch (bRequestType & bmRT_TYPE_MASK){\r
 \r
-\r
-\r
   case bmRT_TYPE_CLASS:\r
-\r
   case bmRT_TYPE_RESERVED:\r
-\r
     fx2_stall_ep0 ();          // we don't handle these.  indicate error\r
-\r
     break;\r
-\r
     \r
-\r
   case bmRT_TYPE_VENDOR:\r
-\r
     // call the application code.\r
-\r
     // If it handles the command it returns non-zero\r
 \r
-\r
-\r
     if (!app_vendor_cmd ())    \r
-\r
       fx2_stall_ep0 ();\r
-\r
     break;\r
 \r
-\r
-\r
   case bmRT_TYPE_STD:\r
-\r
     // these are the standard requests...\r
 \r
-\r
-\r
     if ((bRequestType & bmRT_DIR_MASK) == bmRT_DIR_IN){\r
 \r
-\r
-\r
       ////////////////////////////////////\r
-\r
       //    handle the IN requests\r
-\r
       ////////////////////////////////////\r
 \r
-\r
-\r
       switch (bRequest){\r
 \r
-\r
-\r
       case RQ_GET_CONFIG:\r
-\r
        EP0BUF[0] = _usb_config;        // FIXME app should handle\r
-\r
        EP0BCH = 0;\r
-\r
        EP0BCL = 1;\r
-\r
        break;\r
-\r
        \r
-\r
       // --------------------------------\r
 \r
-\r
-\r
       case RQ_GET_INTERFACE:\r
-\r
        EP0BUF[0] = _usb_alt_setting;   // FIXME app should handle\r
-\r
        EP0BCH = 0;\r
-\r
        EP0BCL = 1;\r
-\r
        break;\r
 \r
-\r
-\r
       // --------------------------------\r
 \r
-\r
-\r
       case RQ_GET_DESCR:\r
-\r
        switch (wValueH){\r
 \r
-\r
-\r
        case DT_DEVICE:\r
-\r
          SUDPTRH = MSB (current_device_descr);\r
-\r
          SUDPTRL = LSB (current_device_descr);\r
-\r
          break;\r
-\r
          \r
-\r
        case DT_DEVQUAL:\r
-\r
          SUDPTRH = MSB (current_devqual_descr);\r
-\r
          SUDPTRL = LSB (current_devqual_descr);\r
-\r
          break;\r
 \r
-\r
-\r
        case DT_CONFIG:\r
-\r
          if (0 && wValueL != 1)        // FIXME only a single configuration\r
-\r
            fx2_stall_ep0 ();\r
-\r
          else {\r
-\r
            SUDPTRH = MSB (current_config_descr);\r
-\r
            SUDPTRL = LSB (current_config_descr);\r
-\r
          }\r
-\r
          break;\r
 \r
-\r
-\r
        case DT_OTHER_SPEED:\r
-\r
          if (0 && wValueL != 1)        // FIXME only a single configuration\r
-\r
            fx2_stall_ep0 ();\r
-\r
          else {\r
-\r
            SUDPTRH = MSB (other_config_descr);\r
-\r
            SUDPTRL = LSB (other_config_descr);\r
-\r
          }\r
-\r
          break;\r
 \r
-\r
-\r
        case DT_STRING:\r
-\r
          if (wValueL >= nstring_descriptors)\r
-\r
            fx2_stall_ep0 ();\r
-\r
          else {\r
-\r
            xdata char *p = string_descriptors[wValueL];\r
-\r
            SUDPTRH = MSB (p);\r
-\r
            SUDPTRL = LSB (p);\r
-\r
          }\r
-\r
          break;\r
 \r
-\r
-\r
        default:\r
-\r
          fx2_stall_ep0 ();     // invalid request\r
-\r
          break;\r
-\r
        }\r
-\r
        break;\r
-\r
        \r
-\r
       // --------------------------------\r
 \r
-\r
-\r
       case RQ_GET_STATUS:\r
-\r
        switch (bRequestType & bmRT_RECIP_MASK){\r
-\r
        case bmRT_RECIP_DEVICE:\r
-\r
          EP0BUF[0] = 0;\r
-\r
          EP0BUF[1] = 0;\r
-\r
          EP0BCH = 0;\r
-\r
          EP0BCL = 2;\r
-\r
          break;\r
 \r
-\r
-\r
        case bmRT_RECIP_INTERFACE:\r
-\r
          EP0BUF[0] = 0;\r
-\r
          EP0BUF[1] = 0;\r
-\r
          EP0BCH = 0;\r
-\r
          EP0BCL = 2;\r
-\r
          break;\r
 \r
-\r
-\r
        case bmRT_RECIP_ENDPOINT:\r
-\r
          if (plausible_endpoint (wIndexL)){\r
-\r
            EP0BUF[0] = *epcs (wIndexL) & bmEPSTALL;\r
-\r
            EP0BUF[1] = 0;\r
-\r
            EP0BCH = 0;\r
-\r
            EP0BCL = 2;\r
-\r
          }\r
-\r
          else\r
-\r
            fx2_stall_ep0 ();\r
-\r
          break;\r
 \r
-\r
-\r
        default:\r
-\r
          fx2_stall_ep0 ();\r
-\r
          break;\r
-\r
        }\r
-\r
         break;\r
 \r
-\r
-\r
       // --------------------------------\r
 \r
-\r
-\r
       case RQ_SYNCH_FRAME:     // not implemented\r
-\r
       default:\r
-\r
        fx2_stall_ep0 ();\r
-\r
        break;\r
-\r
       }\r
-\r
     }\r
 \r
-\r
-\r
     else {\r
 \r
-\r
-\r
       ////////////////////////////////////\r
-\r
       //    handle the OUT requests\r
-\r
       ////////////////////////////////////\r
 \r
-\r
-\r
       switch (bRequest){\r
 \r
-\r
-\r
       case RQ_SET_CONFIG:\r
-\r
        IOE &= ~(1 << 6);\r
-\r
        _usb_config = wValueL;          // FIXME app should handle\r
-\r
        break;\r
 \r
-\r
-\r
       case RQ_SET_INTERFACE:\r
-\r
        _usb_alt_setting = wValueL;     // FIXME app should handle\r
-\r
        break;\r
 \r
-\r
-\r
       // --------------------------------\r
 \r
-\r
-\r
       case RQ_CLEAR_FEATURE:\r
-\r
        switch (bRequestType & bmRT_RECIP_MASK){\r
 \r
-\r
-\r
        case bmRT_RECIP_DEVICE:\r
-\r
          switch (wValueL){\r
-\r
          case FS_DEV_REMOTE_WAKEUP:\r
-\r
          default:\r
-\r
            fx2_stall_ep0 ();\r
-\r
          }\r
-\r
          break;\r
 \r
-\r
-\r
        case bmRT_RECIP_ENDPOINT:\r
-\r
          if (wValueL == FS_ENDPOINT_HALT && plausible_endpoint (wIndexL)){\r
-\r
            *epcs (wIndexL) &= ~bmEPSTALL;\r
-\r
            fx2_reset_data_toggle (wIndexL);\r
-\r
          }\r
-\r
          else\r
-\r
            fx2_stall_ep0 ();\r
-\r
          break;\r
 \r
-\r
-\r
        default:\r
-\r
          fx2_stall_ep0 ();\r
-\r
          break;\r
-\r
        }\r
-\r
        break;\r
 \r
-\r
-\r
       // --------------------------------\r
 \r
-\r
-\r
       case RQ_SET_FEATURE:\r
-\r
        switch (bRequestType & bmRT_RECIP_MASK){\r
 \r
-\r
-\r
        case bmRT_RECIP_DEVICE:\r
-\r
          switch (wValueL){\r
-\r
          case FS_TEST_MODE:\r
-\r
            // hardware handles this after we complete SETUP phase handshake\r
-\r
            break;\r
 \r
-\r
-\r
          case FS_DEV_REMOTE_WAKEUP:\r
-\r
          default:\r
-\r
            fx2_stall_ep0 ();\r
-\r
            break;\r
-\r
          }\r
-\r
        }\r
-\r
        break;\r
 \r
-\r
-\r
       case bmRT_RECIP_ENDPOINT:\r
-\r
        switch (wValueL){\r
-\r
        case FS_ENDPOINT_HALT:\r
-\r
          if (plausible_endpoint (wIndexL))\r
-\r
            *epcs (wIndexL) |= bmEPSTALL;\r
-\r
          else\r
-\r
            fx2_stall_ep0 ();\r
-\r
          break;\r
 \r
-\r
-\r
        default:\r
-\r
          fx2_stall_ep0 ();\r
-\r
          break;\r
-\r
        }\r
-\r
        break;\r
 \r
-\r
-\r
       // --------------------------------\r
 \r
-\r
-\r
       case RQ_SET_ADDRESS:     // handled by fx2 hardware\r
-\r
       case RQ_SET_DESCR:       // not implemented\r
-\r
       default:\r
-\r
        fx2_stall_ep0 ();\r
-\r
       }\r
 \r
-\r
-\r
     }\r
-\r
     break;\r
 \r
-\r
-\r
   }    // bmRT_TYPE_MASK\r
 \r
-\r
-\r
   // ack handshake phase of device request\r
-\r
   EP0CS |= bmHSNAK;\r
-\r
 }\r
-\r
index b34e4b8..4e86af6 100644 (file)
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * Common USB code 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
 #ifndef _USB_COMMON_H_\r
-\r
 #define _USB_COMMON_H_\r
 \r
-\r
-\r
 #define        bRequestType    SETUPDAT[0]\r
-\r
 #define        bRequest        SETUPDAT[1]\r
-\r
 #define        wValueL         SETUPDAT[2]\r
-\r
 #define        wValueH         SETUPDAT[3]\r
-\r
 #define        wIndexL         SETUPDAT[4]\r
-\r
 #define        wIndexH         SETUPDAT[5]\r
-\r
 #define        wLengthL        SETUPDAT[6]\r
-\r
 #define        wLengthH        SETUPDAT[7]\r
 \r
-\r
-\r
 #define MSB(x) (((unsigned short) x) >> 8)\r
-\r
 #define LSB(x) (((unsigned short) x) & 0xff)\r
 \r
-\r
-\r
 extern volatile bit _usb_got_SUDAV;\r
 \r
-\r
-\r
 // Provided by user application to report device status.\r
-\r
 // returns non-zero if it handled the command.\r
-\r
 unsigned char app_get_status (void);\r
-\r
 // Provided by user application to handle VENDOR commands.\r
-\r
 // returns non-zero if it handled the command.\r
-\r
 unsigned char app_vendor_cmd (void);\r
 \r
-\r
-\r
 void usb_install_handlers (void);\r
-\r
 void usb_handle_setup_packet (void);\r
 \r
-\r
-\r
 #define usb_setup_packet_avail()       _usb_got_SUDAV\r
 \r
-\r
-\r
 #endif /* _USB_COMMON_H_ */\r
-\r
index f4a2faf..cbf9610 100644 (file)
@@ -1,76 +1,38 @@
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * USB descriptor references\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
 extern xdata const char high_speed_device_descr[];\r
-\r
 extern xdata const char high_speed_devqual_descr[];\r
-\r
 extern xdata const char high_speed_config_descr[];\r
 \r
-\r
-\r
 extern xdata const char full_speed_device_descr[];\r
-\r
 extern xdata const char full_speed_devqual_descr[];\r
-\r
 extern xdata const char full_speed_config_descr[];\r
 \r
-\r
-\r
 extern xdata unsigned char nstring_descriptors;\r
-\r
 extern xdata char * xdata string_descriptors[];\r
 \r
-\r
-\r
 /*\r
-\r
  * We patch these locations with info read from the usrp config eeprom\r
-\r
  */\r
-\r
 extern xdata char usb_desc_hw_rev_binary_patch_location_0[];\r
-\r
 extern xdata char usb_desc_hw_rev_binary_patch_location_1[];\r
-\r
 extern xdata char usb_desc_hw_rev_ascii_patch_location_0[];\r
-\r
 extern xdata char usb_desc_serial_number_ascii[];\r
-\r
index 5af607f..0cad7a4 100644 (file)
 /* -*- c++ -*- */\r
-\r
 /*-----------------------------------------------------------------------------\r
-\r
  * USB request definitions\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
 // Standard USB requests.\r
-\r
 // These are contained in end point 0 setup packets\r
 \r
 \r
-\r
-\r
-\r
 #ifndef _USB_REQUESTS_H_\r
-\r
 #define _USB_REQUESTS_H_\r
 \r
-\r
-\r
 // format of bmRequestType byte\r
 \r
-\r
-\r
 #define        bmRT_DIR_MASK           (0x1 << 7)\r
-\r
 #define        bmRT_DIR_IN             (1 << 7)\r
-\r
 #define        bmRT_DIR_OUT            (0 << 7)\r
 \r
-\r
-\r
 #define        bmRT_TYPE_MASK          (0x3 << 5)\r
-\r
 #define        bmRT_TYPE_STD           (0 << 5)\r
-\r
 #define        bmRT_TYPE_CLASS         (1 << 5)\r
-\r
 #define        bmRT_TYPE_VENDOR        (2 << 5)\r
-\r
 #define        bmRT_TYPE_RESERVED      (3 << 5)\r
 \r
-\r
-\r
 #define        bmRT_RECIP_MASK         (0x1f << 0)\r
-\r
 #define        bmRT_RECIP_DEVICE       (0 << 0)\r
-\r
 #define        bmRT_RECIP_INTERFACE    (1 << 0)\r
-\r
 #define        bmRT_RECIP_ENDPOINT     (2 << 0)\r
-\r
 #define        bmRT_RECIP_OTHER        (3 << 0)\r
 \r
 \r
-\r
-\r
-\r
 // standard request codes (bRequest)\r
 \r
-\r
-\r
 #define        RQ_GET_STATUS           0\r
-\r
 #define        RQ_CLEAR_FEATURE        1\r
-\r
 #define        RQ_RESERVED_2           2\r
-\r
 #define        RQ_SET_FEATURE          3\r
-\r
 #define        RQ_RESERVED_4           4\r
-\r
 #define        RQ_SET_ADDRESS          5\r
-\r
 #define        RQ_GET_DESCR            6\r
-\r
 #define        RQ_SET_DESCR            7\r
-\r
 #define        RQ_GET_CONFIG           8\r
-\r
 #define        RQ_SET_CONFIG           9\r
-\r
 #define        RQ_GET_INTERFACE       10\r
-\r
 #define        RQ_SET_INTERFACE       11\r
-\r
 #define        RQ_SYNCH_FRAME         12\r
 \r
-\r
-\r
 // standard descriptor types\r
 \r
-\r
-\r
 #define        DT_DEVICE               1\r
-\r
 #define        DT_CONFIG               2\r
-\r
 #define        DT_STRING               3\r
-\r
 #define        DT_INTERFACE            4\r
-\r
 #define        DT_ENDPOINT             5\r
-\r
 #define        DT_DEVQUAL              6\r
-\r
 #define        DT_OTHER_SPEED          7\r
-\r
 #define        DT_INTERFACE_POWER      8\r
 \r
-\r
-\r
 // standard feature selectors\r
 \r
-\r
-\r
 #define        FS_ENDPOINT_HALT        0       // recip: endpoint\r
-\r
 #define        FS_DEV_REMOTE_WAKEUP    1       // recip: device\r
-\r
 #define        FS_TEST_MODE            2       // recip: device\r
 \r
-\r
-\r
 // Get Status device attributes\r
 \r
-\r
-\r
 #define        bmGSDA_SELF_POWERED     0x01\r
-\r
 #define        bmGSDA_REM_WAKEUP       0x02\r
 \r
 \r
-\r
-\r
-\r
 #endif /* _USB_REQUESTS_H_ */\r
-\r
index 59f29e6..4cb5d02 100644 (file)
@@ -1,68 +1,34 @@
 /*-----------------------------------------------------------------------------\r
-\r
  * Hardware-dependent code for usb_jtag\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  * Copyright (C) 2007 Kolja Waschk, ixo.de\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
 #ifndef _HARDWARE_H\r
-\r
 #define _HARDWARE_H 1\r
 \r
-\r
-\r
 extern void ProgIO_Init(void);\r
-\r
 extern void ProgIO_Poll(void);\r
-\r
 extern void ProgIO_Enable(void);\r
-\r
 extern void ProgIO_Disable(void);\r
-\r
 extern void ProgIO_Deinit(void);\r
 \r
-\r
-\r
 extern void ProgIO_Set_State(unsigned char d);\r
-\r
 extern unsigned char ProgIO_Set_Get_State(unsigned char d);\r
-\r
 extern void ProgIO_ShiftOut(unsigned char x);\r
-\r
 extern unsigned char ProgIO_ShiftInOut(unsigned char x);\r
 \r
-\r
-\r
 #endif /* _HARDWARE_H */\r
 \r
-\r
-\r
index 2014fbe..69867dc 100644 (file)
 #include "delay.h"\r
 \r
 //-----------------------------------------------------------------------------\r
+// comment out (undefine!) if you don't want PS, AS or OE signals\r
 \r
 #define HAVE_PS_MODE 1\r
 #define HAVE_AS_MODE 1\r
 #define HAVE_OE_LED  1\r
 \r
+// comment in (define!) if you want outputs disabled when possible\r
+//#define HAVE_OENABLE 1\r
+\r
 //-----------------------------------------------------------------------------\r
 \r
 /* JTAG TCK, AS/PS DCLK */\r
 \r
-sbit at 0xA2          TCK; /* Port C.0 */\r
+sbit at 0xA2          TCK; /* Port C.2 */\r
 #define bmTCKOE       bmBIT2\r
 #define SetTCK(x)     do{TCK=(x);}while(0)\r
 \r
 /* JTAG TDI, AS ASDI, PS DATA0 */\r
 \r
-sbit at 0xA0          TDI; /* Port C.2 */\r
+sbit at 0xA0          TDI; /* Port C.0 */\r
 #define bmTDIOE       bmBIT0\r
 #define SetTDI(x)     do{TDI=(x);}while(0)\r
 \r
@@ -53,7 +57,7 @@ sbit at 0xA1          TDO; /* Port C.1 */
 #define GetTDO(x)     TDO\r
 \r
 /* JTAG ENABLE */\r
-sbit JTAG_EN = 0xA0+7;\r
+sbit JTAG_EN = 0xA7; /* Port C.7 */\r
 #define bmJTAG_EN bmBIT7\r
 \r
 //-----------------------------------------------------------------------------\r
@@ -69,7 +73,7 @@ sbit JTAG_EN = 0xA0+7;
 #else\r
 \r
   #define bmASDOOE    0\r
-  #define GetASDO(x)  0\r
+  #define GetASDO(x)  1\r
 \r
 #endif\r
 \r
@@ -138,6 +142,15 @@ void ProgIO_Init(void)
   /* The following code depends on your actual circuit design.\r
      Make required changes _before_ you try the code! */\r
   \r
+  // set the CPU clock to 48MHz, enable clock output to FPGA\r
+  CPUCS = bmCLKOE | bmCLKSPD1;\r
+\r
+   // put the system in FIFO mode by default\r
+   // internal clock source at 48Mhz, drive output pin, synchronous mode\r
+   // NOTE: Altera USB-Blaster does not work in another mode\r
+   IFCONFIG =  bmIFCLKSRC | bm3048MHZ | bmIFCLKOE;\r
+   IFCONFIG |= bmASYNC | bmIFCFG1 | bmIFCFG0;\r
+\r
    // set port C output enable (so we can handle the JTAG enable signal)\r
    OEC = (1 << 7);\r
 \r
@@ -148,17 +161,8 @@ void ProgIO_Init(void)
    // more than 100ma)\r
    IOE = (1 << 6);\r
 \r
-   // set the CPU clock to 48MHz\r
-   CPUCS = bmCLKSPD1;\r
-\r
    // activate JTAG outputs on Port C\r
    OEC = bmTDIOE | bmTCKOE | bmTMSOE | bmJTAG_EN;\r
-\r
-   // put the system in FIFO mode by default\r
-   // internal clock source at 48Mhz, drive output pin, synchronous mode\r
-   // NOTE: Altera USB-Blaster does not work in another mode\r
-   IFCONFIG =  bmIFCLKSRC | bm3048MHZ | bmIFCLKOE;\r
-   IFCONFIG |= bmASYNC | bmIFCFG1 | bmIFCFG0;\r
 }\r
 \r
 void ProgIO_Set_State(unsigned char d)\r
@@ -170,7 +174,7 @@ void ProgIO_Set_State(unsigned char d)
    * d.2 => nCE (only #ifdef HAVE_AS_MODE)\r
    * d.3 => nCS (only #ifdef HAVE_AS_MODE)\r
    * d.4 => TDI\r
-   * d.6 => LED / Output Enable\r
+   * d.5 => LED / Output Enable\r
    */\r
 \r
   SetTCK((d & bmBIT0) ? 1 : 0);\r
@@ -187,14 +191,14 @@ void ProgIO_Set_State(unsigned char d)
 \r
 unsigned char ProgIO_Set_Get_State(unsigned char d)\r
 {\r
-  ProgIO_Set_State(d);\r
-\r
-  /* Read state of input pins:\r
+  /* Set state of output pins (s.a.)\r
+   * then read state of input pins:\r
    *\r
    * TDO => d.0\r
    * DATAOUT => d.1 (only #ifdef HAVE_AS_MODE)\r
    */\r
 \r
+  ProgIO_Set_State(d);\r
    return (GetASDO()<<1)|GetTDO();\r
 }\r
 \r
index 0e80063..c4bb681 100644 (file)
 /*-----------------------------------------------------------------------------\r
-\r
  *\r
-\r
  * Hardware-dependent code for usb_jtag\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  * Copyright (C) 2007 Kolja Waschk, ixo.de\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 "hardware.h"\r
-\r
 #include "fx2regs.h"\r
-\r
 #include "syncdelay.h"\r
 \r
-\r
-\r
 //---------------------------------------------------------------------------\r
 \r
-\r
-\r
 #define SetTCK(x)     do{if(x) IOE|=0x08; else IOE&=~0x08; }while(0)\r
-\r
 #define SetTMS(x)     do{if(x) IOE|=0x10; else IOE&=~0x10; }while(0)\r
-\r
 #define SetTDI(x)     do{if(x) IOE|=0x40; else IOE&=~0x40; }while(0)\r
-\r
 #define GetTDO()      ((IOE>>5)&1)\r
 \r
-\r
-\r
 /* XPCU has neither AS nor PS mode pins */\r
 \r
-\r
-\r
 #define HAVE_OE_LED 1\r
-\r
 /* +0=green led, +1=red led */\r
-\r
 sbit at 0x80+1        OELED;\r
-\r
 #define SetOELED(x)   do{OELED=(x);}while(0)\r
 \r
-\r
-\r
 //-----------------------------------------------------------------------------\r
 \r
-\r
-\r
 void ProgIO_Poll(void)    {}\r
-\r
 void ProgIO_Enable(void)  {}\r
-\r
 void ProgIO_Disable(void) {}\r
-\r
 void ProgIO_Deinit(void)  {}\r
 \r
-\r
-\r
 void ProgIO_Init(void)\r
-\r
 {\r
-\r
   /* The following code depends on your actual circuit design.\r
-\r
      Make required changes _before_ you try the code! */\r
 \r
-\r
-\r
   // set the CPU clock to 48MHz, enable clock output to FPGA\r
-\r
   CPUCS = bmCLKOE | bmCLKSPD1;\r
 \r
-\r
-\r
   // Use internal 48 MHz, enable output, use "Port" mode for all pins\r
-\r
   IFCONFIG = bmIFCLKSRC | bm3048MHZ | bmIFCLKOE;\r
 \r
-\r
-\r
   GPIFABORT = 0xFF;\r
 \r
-\r
-\r
   PORTACFG = 0x00; OEA = 0x03; IOA=0x01;\r
-\r
   PORTCCFG = 0x00; OEC = 0x00; IOC=0x00;\r
-\r
   PORTECFG = 0x00; OEE = 0x58; IOE=0x00;\r
-\r
 }\r
 \r
-\r
-\r
 void ProgIO_Set_State(unsigned char d)\r
-\r
 {\r
-\r
-  /* Set state of output pins:\r
-\r
+  /* Set state of output pins\r
+   * (d is the byte from the host):\r
    *\r
-\r
    * d.0 => TCK\r
-\r
    * d.1 => TMS\r
-\r
    * d.2 => nCE (only #ifdef HAVE_AS_MODE)\r
-\r
    * d.3 => nCS (only #ifdef HAVE_AS_MODE)\r
-\r
    * d.4 => TDI\r
-\r
    * d.6 => LED / Output Enable\r
-\r
    */\r
 \r
-\r
-\r
   SetTCK((d & bmBIT0) ? 1 : 0);\r
-\r
   SetTMS((d & bmBIT1) ? 1 : 0);\r
-\r
   SetTDI((d & bmBIT4) ? 1 : 0);\r
-\r
 #ifdef HAVE_OE_LED\r
-\r
   SetOELED((d & bmBIT5) ? 1 : 0);\r
-\r
 #endif\r
-\r
 }\r
 \r
-\r
-\r
 unsigned char ProgIO_Set_Get_State(unsigned char d)\r
-\r
 {\r
-\r
-  /* Read state of input pins:\r
-\r
+  /* Set state of output pins (s.a.)\r
+   * then read state of input pins:\r
    *\r
-\r
    * TDO => d.0\r
-\r
    * DATAOUT => d.1 (only #ifdef HAVE_AS_MODE)\r
-\r
    */\r
 \r
-\r
-\r
   ProgIO_Set_State(d);\r
-\r
-  return 2|GetTDO();\r
-\r
+  return 2|GetTDO(); /* DATAOUT assumed high, no AS mode */\r
 }\r
 \r
-\r
-\r
 void ProgIO_ShiftOut(unsigned char c)\r
-\r
 {\r
-\r
   /* Shift out byte C:\r
-\r
    *\r
-\r
    * 8x {\r
-\r
    *   Output least significant bit on TDI\r
-\r
    *   Raise TCK\r
-\r
    *   Shift c right\r
-\r
    *   Lower TCK\r
-\r
    * }\r
-\r
    */\r
 \r
-\r
-\r
   unsigned char lc=c;\r
 \r
-\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
 \r
-\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
-\r
   if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc>>=1; IOE&=~0x08;\r
-\r
 }\r
 \r
-\r
-\r
 unsigned char ProgIO_ShiftInOut(unsigned char c)\r
-\r
 {\r
-\r
   /* Shift out byte C, shift in from TDO:\r
-\r
    *\r
-\r
    * 8x {\r
-\r
    *   Read carry from TDO\r
-\r
    *   Output least significant bit on TDI\r
-\r
    *   Raise TCK\r
-\r
-   *   Shift c right, append carry (TDO) at left\r
-\r
+   *   Shift c right, append carry (TDO) at left (into MSB)\r
    *   Lower TCK\r
-\r
    * }\r
-\r
    * Return c.\r
-\r
    */\r
 \r
-\r
-\r
   unsigned char carry;\r
-\r
   unsigned char lc=c;\r
 \r
-\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
 \r
-\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
-\r
   carry = (IOE&0x20)<<2; if(lc&1) IOE|=0x40; else IOE&=~0x40; IOE|=0x08; lc=carry|(lc>>1); IOE&=~0x08;\r
 \r
-\r
-\r
   return lc;\r
-\r
 }\r
 \r
 \r
-\r
-\r
-\r
index 957de1f..d24c38f 100644 (file)
@@ -1,65 +1,34 @@
 /*-----------------------------------------------------------------------------\r
-\r
  * Hardware-dependent code for usb_jtag\r
-\r
  *-----------------------------------------------------------------------------\r
-\r
  * Copyright (C) 2007 Kolja Waschk, ixo.de\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 "delay.h"\r
-\r
 #include "syncdelay.h"\r
-\r
 #include "hardware.h"\r
 \r
-\r
-\r
 #include "isr.h"\r
-\r
 #include "timer.h"\r
-\r
 #include "delay.h"\r
-\r
 #include "fx2regs.h"\r
-\r
 #include "fx2utils.h"\r
-\r
 #include "usb_common.h"\r
-\r
 #include "usb_descriptors.h"\r
-\r
 #include "usb_requests.h"\r
-\r
 #include "syncdelay.h"\r
-\r
 #include "eeprom.h"\r
 \r
 \r
@@ -73,368 +42,190 @@ sbit at 0x80+1        OELED; // red LED on S3E Starter Kit (0x80+0 is green one)
 \r
 \r
 void ProgIO_Poll(void)    {}\r
-\r
 void ProgIO_Enable(void)  {}\r
-\r
 void ProgiO_Disable(void) {}\r
-\r
 void ProgiO_Deinit(void)  {}\r
 \r
-\r
-\r
 static unsigned char curios;\r
 \r
-\r
-\r
 const unsigned char wavedata[64] =\r
-\r
 {\r
-\r
   /* Single Write:\r
-\r
      s0: BITS=D0     NEXT/SGLCRC DATA WAIT 4\r
-\r
      s1: BITS=       DATA WAIT 4\r
-\r
      s2: BITS=D1|D0  DATA WAIT 4\r
-\r
      s3: BITS=D1     DATA WAIT 3\r
-\r
      s4: BITS=D1     DATA DP IF(RDY0) THEN 5 ELSE 2\r
-\r
      s5: BITS=D1|D0  DATA WAIT 4\r
-\r
      s6: BITS=D1     DATA WAIT 3\r
-\r
      s7: BITS=D1     DATA FIN */\r
 \r
-\r
-\r
   4, 4, 4, 3, 0x2A, 4, 3, 7,\r
-\r
   6, 2, 2, 2, 3,    2, 2, 2,\r
-\r
   1, 0, 3, 2, 2,    3, 2, 2,\r
-\r
   0, 0, 0, 0, 0,    0, 0, 0x3F,\r
 \r
-\r
-\r
   /* Single Read:\r
-\r
      s0: BITS=D0     WAIT 4\r
-\r
      s1: BITS=       WAIT 4\r
-\r
      s2: BITS=D1|D0  WAIT 4\r
-\r
      s3: BITS=D1     WAIT 4\r
-\r
      s4: BITS=D1|D0  WAIT 3\r
-\r
      s5: BITS=D1|D0  DP IF(RDY0) THEN 6 ELSE 3\r
-\r
      s6: BITS=D1     DATA WAIT 4\r
-\r
      s7: BITS=D1     FIN */\r
 \r
-\r
-\r
   4, 4, 4, 4, 3, 0x33, 4, 7,\r
-\r
   0, 0, 0, 0, 0, 1,    2, 0,\r
-\r
   1, 0, 3, 2, 3, 3,    2, 2,\r
-\r
   0, 0, 0, 0, 0, 0,    0, 0x3F\r
-\r
 };\r
 \r
-\r
-\r
 void ProgIO_Init(void)\r
-\r
 {\r
-\r
   unsigned char i;\r
 \r
-\r
-\r
   /* The following code depends on your actual circuit design.\r
-\r
      Make required changes _before_ you try the code! */\r
 \r
-\r
-\r
   // set the CPU clock to 48MHz, enable clock output to FPGA\r
-\r
   CPUCS = bmCLKOE | bmCLKSPD1;\r
 \r
-\r
-\r
   // Use internal 48 MHz, enable output, GPIF Master mode\r
-\r
   IFCONFIG = bmIFCLKSRC | bm3048MHZ | bmIFCLKOE | bmIFGPIF;\r
 \r
-\r
-\r
   PORTACFG = 0x00; OEA = 0xFB; IOA = 0x20;\r
-\r
   PORTCCFG = 0x00; OEC = 0xFF; IOC = 0x10;\r
-\r
   PORTECFG = 0x00; OEE = 0xFC; IOE = 0xC0;\r
-\r
  \r
-\r
   GPIFABORT    = 0xFF;\r
 \r
-\r
-\r
   GPIFREADYCFG = 0xA0;\r
-\r
   GPIFCTLCFG   = 0x00;\r
-\r
   GPIFIDLECS   = 0x00;\r
-\r
   GPIFIDLECTL  = 0x00;\r
-\r
   GPIFWFSELECT = 0x01;\r
 \r
-\r
-\r
   // Copy waveform data\r
-\r
   AUTOPTRSETUP = 0x07;\r
-\r
   APTR1H = MSB( &wavedata );\r
-\r
   APTR1L = LSB( &wavedata );\r
-\r
   AUTOPTRH2 = 0xE4;\r
-\r
   AUTOPTRL2 = 0x00;\r
-\r
   for ( i = 0; i < 64; i++ ) EXTAUTODAT2 = EXTAUTODAT1;\r
 \r
-\r
-\r
   SYNCDELAY;\r
-\r
   GPIFADRH      = 0x00;\r
-\r
   SYNCDELAY;\r
-\r
   GPIFADRL      = 0x00;\r
 \r
-\r
-\r
   FLOWSTATE     = 0x00;\r
-\r
   FLOWLOGIC     = 0x00;\r
-\r
   FLOWEQ0CTL    = 0x00;\r
-\r
   FLOWEQ1CTL    = 0x00;\r
-\r
   FLOWHOLDOFF   = 0x00;\r
-\r
   FLOWSTB       = 0x00;\r
-\r
   FLOWSTBEDGE   = 0x00;\r
-\r
   FLOWSTBHPERIOD = 0x00;\r
 \r
-\r
-\r
   curios = 0;\r
-\r
 }\r
 \r
-\r
-\r
 unsigned char GetTDO(unsigned char r)\r
-\r
 {\r
-\r
   unsigned char x;\r
 \r
-\r
-\r
   IOC = 0x41;\r
-\r
   while(!(GPIFTRIG & 0x80)); x = XGPIFSGLDATLX;\r
-\r
   while(!(GPIFTRIG & 0x80)); x = XGPIFSGLDATLNOX;\r
 \r
-\r
-\r
   if(IOA & 0x20) IOA |= 0x40; else IOA &= ~0x40;\r
 \r
-\r
-\r
   return (x&1) ? r : 0;\r
-\r
 }\r
 \r
-\r
-\r
 #define SetPins(x) while(!(GPIFTRIG & 0x80)); XGPIFSGLDATLX = (x)\r
 \r
-\r
-\r
 void ProgIO_Set_State(unsigned char d)\r
-\r
 {\r
-\r
   /* Set state of output pins:\r
-\r
    *\r
-\r
    * d.0 => TCK (PE.6)\r
-\r
    * d.1 => TMS (PE.5)\r
-\r
    * d.4 => TDI (PE.4)\r
-\r
    * d.6 => LED / Output Enable\r
-\r
    */\r
 \r
\r
-\r
   curios  = (d & bmBIT0) ? 0x40 : 0; // TCK\r
-\r
   curios |= (d & bmBIT1) ? 0x20 : 0; // TMS\r
-\r
   curios |= (d & bmBIT4) ? 0x10 : 0; // TDI\r
 \r
-\r
-\r
-  IOC = 0x81;\r
-\r
+  IOC = 0x81; /* Select direction */\r
   SetPins(curios);\r
 \r
-\r
-\r
   if(d & bmBIT6) IOA=(IOA&~3)|1; else IOA=(IOA&~3)|2;\r
-\r
 }\r
 \r
-\r
-\r
 unsigned char ProgIO_Set_Get_State(unsigned char d)\r
-\r
 {\r
 \r
   ProgIO_Set_State(d);\r
 \r
-\r
-\r
   /* Read state of input pins:\r
-\r
    *\r
-\r
    * TDO => d.0\r
-\r
    * DATAOUT => d.1 (only #ifdef HAVE_AS_MODE)\r
-\r
    */\r
 \r
-\r
-\r
   return 2|GetTDO(0x01);\r
-\r
 }\r
 \r
 \r
 \r
 void ProgIO_ShiftOut(unsigned char c)\r
-\r
 {\r
-\r
   unsigned char r,i;\r
-\r
   unsigned char locios = curios & ~0x50;\r
 \r
-\r
-\r
-  IOC = 0x81;\r
-\r
-\r
+  IOC = 0x81; /* Select direction */\r
 \r
   for(i=0,r=1;i<8;i++)\r
-\r
   {\r
-\r
     unsigned char t = locios;\r
-\r
     if(c & r) t |= 0x10;\r
-\r
     SetPins(t);\r
-\r
     SetPins(t|0x40);\r
-\r
     r <<= 1;\r
-\r
     SetPins(t);\r
-\r
   };\r
 \r
-\r
-\r
   curios = locios;\r
-\r
 }\r
 \r
 \r
-\r
-\r
-\r
 unsigned char ProgIO_ShiftInOut(unsigned char c)\r
-\r
 {\r
-\r
   unsigned char r,i,n;\r
-\r
   unsigned char locios = curios & ~0x50;\r
 \r
-\r
-\r
   for(i=0,r=1,n=0;i<8;i++)\r
-\r
   {\r
-\r
     unsigned char t = locios;\r
 \r
-\r
-\r
     n |= GetTDO(r);\r
 \r
-\r
-\r
     IOC = 0x81;\r
 \r
     if(c & r) t |= 0x10;\r
 \r
     SetPins(t);\r
-\r
     SetPins(t|0x40);\r
-\r
     r <<= 1;\r
-\r
     SetPins(t);\r
-\r
   };\r
 \r
-\r
-\r
   curios = locios;\r
-\r
   return n;\r
-\r
 }\r
 \r
 \r
-\r
-\r
-\r
index 84ec4df..eb12b81 100644 (file)
 ;;; -*- asm -*-\r
-\r
 ;;;\r
-\r
 ;;;-----------------------------------------------------------------------------\r
-\r
 ;;; Startup code\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
 ;;; The default external memory initialization provided by sdcc is not\r
-\r
 ;;; appropriate to the FX2.  This is derived from the sdcc code, but uses \r
-\r
 ;;; the FX2 specific _MPAGE sfr.\r
 \r
 \r
-\r
-\r
-\r
         ;; .area XISEG   (XDATA)  ; the initialized external data area\r
-\r
         ;; .area XINIT   (CODE)          ; the code space consts to init XISEG\r
-\r
         .area XSEG    (XDATA)          ; zero initialized xdata\r
-\r
         .area USBDESCSEG (XDATA)  ; usb descriptors\r
 \r
 \r
-\r
-        \r
-\r
         .area CSEG    (CODE)\r
 \r
-\r
-\r
         ;; sfr that sets upper address byte of MOVX using @r0 or @r1\r
-\r
         _MPAGE        =        0x0092\r
 \r
-\r
-\r
 __sdcc_external_startup::\r
-\r
         ;; This system is now compiled with the --no-xinit-opt \r
-\r
         ;; which means that any initialized XDATA is handled\r
-\r
         ;; inline by code in the GSINIT segs emitted for each file.\r
-\r
         ;; \r
-\r
         ;; We zero XSEG and all of the internal ram to ensure \r
-\r
         ;; a known good state for uninitialized variables.\r
 \r
-\r
-\r
 ;        _mcs51_genRAMCLEAR() start\r
-\r
         mov        r0,#l_XSEG\r
-\r
         mov        a,r0\r
-\r
         orl        a,#(l_XSEG >> 8)\r
-\r
         jz        00002$\r
-\r
         mov        r1,#((l_XSEG + 255) >> 8)\r
-\r
         mov        dptr,#s_XSEG\r
-\r
         clr     a\r
-\r
         \r
-\r
 00001$:        movx        @dptr,a\r
-\r
         inc        dptr\r
-\r
         djnz        r0,00001$\r
-\r
         djnz        r1,00001$\r
-\r
         \r
-\r
         ;; We're about to clear internal memory.  This will overwrite\r
-\r
         ;; the stack which contains our return address.\r
-\r
         ;; Pop our return address into DPH, DPL\r
-\r
 00002$:        pop        dph\r
-\r
         pop        dpl\r
-\r
         \r
-\r
         ;; R0 and A contain 0.  This loop will execute 256 times.\r
-\r
         ;; \r
-\r
         ;; FWIW the first iteration writes direct address 0x00,\r
-\r
         ;; which is the location of r0.  We get lucky, we're \r
-\r
         ;; writing the correct value (0)\r
-\r
         \r
-\r
 00003$:        mov        @r0,a\r
-\r
         djnz        r0,00003$\r
 \r
-\r
-\r
         push        dpl                ; restore our return address\r
-\r
         push        dph\r
 \r
-\r
-\r
         mov        dpl,#0                ; indicate that data init is still required\r
-\r
         ret\r
-\r
index 3c81823..decf8cb 100644 (file)
--- a/usbjtag.c
+++ b/usbjtag.c
@@ -20,7 +20,7 @@
  */\r
  \r
 // The firmware version should be regularly updated.\r
-#define FWVERSION "4.1.0"\r
+#define FWVERSION "4.2.0"\r
 \r
 #include "isr.h"\r
 #include "timer.h"\r
@@ -297,7 +297,7 @@ void usb_jtag_activity(void) // Called repeatedly while the device is idle
 \r
    if(!(EP2468STAT & bmEP2EMPTY) && (Pending < OUTBUFFER_LEN-0x3F))\r
    {\r
-      BYTE i, n = EP2BCL;\r
+      WORD i, n = EP2BCL|EP2BCH<<8;\r
 \r
       APTR1H = MSB( EP2FIFOBUF );\r
       APTR1L = LSB( EP2FIFOBUF );\r
@@ -306,7 +306,7 @@ void usb_jtag_activity(void) // Called repeatedly while the device is idle
       {\r
          if(ClockBytes > 0)\r
          {\r
-            BYTE m;\r
+            WORD m;\r
 \r
             m = n-i;\r
             if(ClockBytes < m) m = ClockBytes;\r
index 9b3fbfa..d1bb952 100644 (file)
@@ -1,4 +1,4 @@
-:06000000020FA402006BD8\r
+:06000000020FF802006B84\r
 :03000B0002006B85\r
 :0300130002006B7D\r
 :03001B0002006B75\r
 :1001500002006B0002006B0002006B0002006B00EB\r
 :1001600002006B0002006B0002006B0002006B00DB\r
 :1001700002006B0002006B0002006B0002006B00CB\r
-:030FAC00020FAF82\r
-:030FC200020180A9\r
-:1001800012057B80FEC200E4F508F509F50AD201EC\r
-:10019000750B00750C0012077812077575CB637527\r
+:03100000021003D8\r
+:0310160002018054\r
+:100180001205CF80FEC200E4F508F509F50AD20198\r
+:10019000750B00750C001207CC1207C975CB63757F\r
 :1001A000CAC0758E0075C804D2AFD2B0D2B190E685\r
 :1001B0000B7403F00090E6047480F00090E6047481\r
 :1001C00002F00090E6047404F00090E6047406F077\r
@@ -42,7 +42,7 @@
 :10025000E6917480F00090E6957480F00043A080F1\r
 :1002600090E6FBE0FA54FDF090E601E0FA54F7F076\r
 :1002700022AA82850C827583E0EAF0050C0509E468\r
-:10028000B50902050A222000012212077490E6A295\r
+:10028000B50902050A22200001221207C890E6A241\r
 :10029000E0FA30E10302031FE509450A60697AC00C\r
 :1002A0007BE78B9D7AC07BE77B008A9E90E67C741F\r
 :1002B00031F07460F0C3743E9509E4950A50107AE9\r
 :10030000022BF0D2CF801830CF1590E7C07431F0B7\r
 :1003100090E7C17460F00090E68F7402F0C2CFE500\r
 :10032000AA30E00122C3E50994C1E50A9400400126\r
-:100330002290E691E0FA7B007CF08C9A7B007CF0C6\r
-:100340007C008B9B7B00C3EB9A4003020403E5080F\r
-:100350006065EAC39BFCC3E5089C5002AC08E50855\r
-:10036000C39CF508EC2BFB3001208C058D061DEE9F\r
-:1003700060D490E67BE0FEF582C002C003C00512A7\r
-:10038000080AD005D003D00280E28C051CED60B6CF\r
-:1003900090E67BE0FDF582C002C003C0041208476E\r
-:1003A000D004D003D002C002C003C004120271D036\r
-:1003B00004D003D00280D390E67BE0FC30E6047DDD\r
-:1003C0000080027D01ED24FF9201EC30E707743FCD\r
-:1003D0005CF508802A30010F8C82C002C00312072E\r
-:1003E0009AD003D00280188C82C002C0031207F793\r
-:1003F000D003D002C002C003120271D003D0020B9E\r
-:100400000203460090E6917480F02290E6B8E0FA8C\r
-:1004100020E70C90E6B9E07002D2007582012290CC\r
-:10042000E6B9E0FABA9002801ABA9102805ABA92FA\r
-:10043000030204C0BA93030204DABA940302050A61\r
-:1004400002054390E6BCE025E0547FFA2400F582E3\r
-:10045000E43418F583E0FB90E740F074012A2400AF\r
-:10046000F582E43418F583E0FA90E741F090E6BEB7\r
-:10047000E0FABA0200500790E6BEE0FA80027A0283\r
-:1004800090E68BEAF002056C90E6BCE0701390E613\r
-:10049000FBE0FA54FDF090E7407402F01209398055\r
-:1004A0001190E6FBE0FA4402F090E7407401F0128C\r
-:1004B000093990E68AE4F090E68B7401F002056C4D\r
-:1004C00090E6BCE0700543A080800353A07F90E6D7\r
-:1004D0008AE4F090E68BF002056C90E6BCE0700FC9\r
-:1004E00090E601E0FA54F7F090E740E4F0800E90D7\r
-:1004F000E601E0FA4408F090E7407401F090E68AE3\r
-:10050000E4F090E68B7401F080627A007B00EA24CC\r
-:10051000C5FCEB340FFD7E808C828D838EF0120F34\r
-:1005200088FC6013EA2440F582EB34E7F583ECF0B5\r
-:100530000ABA00DA0B80D790E68AE4F090E68BEAFC\r
-:10054000F0802990E7407436F090E7417483F09092\r
-:10055000E68AE4F090E6BEE0FABA0200500790E6C0\r
-:10056000BEE0FA80027A0290E68BEAF07582012200\r
-:10057000300203120AD412028680F5C2AF1201853E\r
-:100580001205D8120EB9120A3ED2AF12093902056D\r
-:0105900070FA\r
-:060FC500342E312E300035\r
+:100330002290E690E0FA8A037A0090E691E0FC7D54\r
+:1003400000EA4CF50DEB4DF50E7C007DF08D9A7CAE\r
+:10035000007DF07D008C9B7C007D00C3EC950DED55\r
+:10036000950E4003020457E5087003020407E50DEB\r
+:10037000C39CFEE50E9DFFA8087900C3E89EE99F97\r
+:100380005004880689078E00E508C398F508EE2C0E\r
+:10039000FCEF3DFD30012D8E008F0188028903188E\r
+:1003A000B8FF0119EA4B60B390E67BE0FAF582C032\r
+:1003B00004C005C000C00112085ED001D000D00505\r
+:1003C000D00480D78E028F038A068B071ABAFF01EA\r
+:1003D0001BEE4F700302035B90E67BE0FEF582C0EC\r
+:1003E00002C003C004C00512089BD005D004D0038E\r
+:1003F000D002C002C003C004C005120271D005D0F3\r
+:1004000004D003D00280C190E67BE0FA30E6047BA2\r
+:100410000080027B01EB24FF9201EA30E707743F82\r
+:100420005AF508802A30010F8A82C004C0051207DD\r
+:10043000EED005D00480188A82C004C00512084B93\r
+:10044000D005D004C004C005120271D005D0040C40\r
+:10045000BC00010D02035B0090E6917480F02290D5\r
+:10046000E6B8E0FA20E70C90E6B9E07002D2007539\r
+:1004700082012290E6B9E0FABA9002801ABA91029B\r
+:10048000805ABA9203020514BA930302052EBA9455\r
+:100490000302055E02059790E6BCE025E0547FFA72\r
+:1004A0002400F582E43418F583E0FB90E740F07413\r
+:1004B000012A2400F582E43418F583E0FA90E7413C\r
+:1004C000F090E6BEE0FABA0200500790E6BEE0FA0D\r
+:1004D00080027A0290E68BEAF00205C090E6BCE06A\r
+:1004E000701390E6FBE0FA54FDF090E7407402F0E0\r
+:1004F00012098D801190E6FBE0FA4402F090E7408B\r
+:100500007401F012098D90E68AE4F090E68B740194\r
+:10051000F00205C090E6BCE0700543A08080035364\r
+:10052000A07F90E68AE4F090E68BF00205C090E6AA\r
+:10053000BCE0700F90E601E0FA54F7F090E740E479\r
+:10054000F0800E90E601E0FA4408F090E740740174\r
+:10055000F090E68AE4F090E68B7401F080627A0015\r
+:100560007B00EA2419FCEB3410FD7E808C828D83A5\r
+:100570008EF0120FDCFC6013EA2440F582EB34E7C6\r
+:10058000F583ECF00ABA00DA0B80D790E68AE4F043\r
+:1005900090E68BEAF0802990E7407436F090E741CE\r
+:1005A0007483F090E68AE4F090E6BEE0FABA0200C6\r
+:1005B000500790E6BEE0FA80027A0290E68BEAF0FD\r
+:1005C00075820122300203120B2812028680F5C2C6\r
+:1005D000AF12018512062C120F0D120A92D2AF1221\r
+:0505E000098D0205C4B5\r
+:06101900342E322E3000DF\r
 :10E1000012011001FF000040FB0901600004010240\r
 :10E1100003010A061001FFFFFF400100090237005A\r
 :10E1200002010080FA0904000002FFFFFF02070558\r
 :10E1C400530042002D0042006C0061007300740093\r
 :10E1D400650072001203300030003000300030005F\r
 :06E1E400300030003000A5\r
-:10059100AA82E50D54FEFBB50D02802A8A048C0562\r
-:1005A100E4FC620EED620FEB2400F582E43418F5F1\r
-:1005B10083E0FB7C00620EEC620FE50E33C50F3366\r
-:1005C100C50F92E0F50EAB0D050DEB2400F582E4AD\r
-:1005D1003418F583EAF022750D00750EAA750FAA7D\r
-:1005E1007582001205917582001205917A00C3EAA5\r
-:1005F100648094865018EA2408F582E434E1F58396\r
-:10060100E0FBF582C002120591D0020A80E07A0077\r
-:10061100C3EA648094825018EA2423F582E434E129\r
-:10062100F583E0FBF582C002120591D0020A80E059\r
-:1006310075821C1205917582001205917A00C3EA38\r
-:10064100648094825018EA2402F582E434E1F5834F\r
-:10065100E0FBF582C002120591D0020A80E07486A7\r
-:10066100250DFAF582C002120591D00290E1B6E0A3\r
-:10067100FBF582C002120591D00290E1B6E0FB2A9F\r
-:10068100FAF582C002120591D00290E1C0E0FBF5BB\r
-:1006910082C002120591D00290E1C0E0FB2AFAF576\r
-:1006A1008212059190E1D8E0FAF5821205917A0063\r
-:1006B10090E1B6E0FBC3EA64808BF063F08095F0D3\r
-:1006C1005018EA24B6F582E434E1F583E0FBF582C3\r
-:1006D100C002120591D0020A80D67A0090E1C0E0F2\r
-:1006E100FBC3EA64808BF063F08095F05018EA2434\r
-:1006F100C0F582E434E1F583E0FBF582C002120526\r
-:1007010091D0020A80D67A0090E1D8E0FBC3EA6476\r
-:10071100808BF063F08095F05018EA24D8F582E4DC\r
-:1007210034E1F583E0FBF582C002120591D0020AA3\r
-:1007310080D67A00C3EA648094845018EA240EF5C6\r
-:1007410082E434E1F583E0FBF582C002120591D029\r
-:10075100020A80E07482250D40087582001205911D\r
-:1007610080F2AA0E7B0090187EEAF0AA0F90187F03\r
-:03077100EAF02289\r
-:020FA400D22158\r
-:100774002222222275B48075B67F75B14090E600BE\r
-:100784007410F075B48D90E60174E0F0E0FA90E630\r
-:1007940001740B4AF022E582FA30E0047B01800206\r
-:1007A4007B00EB24FF92A2EA30E1047B0180027B10\r
-:1007B40000EB24FF92A3EA30E2047B0180027B0079\r
-:1007C400EB24FF92A5EA30E3047B0180027B00EB7B\r
-:1007D40024FF92A4EA30E4047B0180027B00EB2432\r
-:1007E400FF92A0EA30E5047A0180027A00EA24FF4D\r
-:1007F40092A72212079AE4A2A63325E0FAE4A2A162\r
-:1008040033FB4AF58222E5821392A0D2A213C2A23C\r
-:1008140092A0D2A213C2A292A0D2A213C2A292A068\r
-:10082400D2A213C2A292A0D2A213C2A292A0D2A216\r
-:1008340013C2A292A0D2A213C2A292A0D2A200C2B8\r
-:10084400A22222AA8230A4058A820208568A82023F\r
-:1008540008A4E582A2A11392A0D2A2C2A2A2A113CB\r
-:1008640092A0D2A2C2A2A2A11392A0D2A2C2A2A278\r
-:10087400A11392A0D2A2C2A2A2A11392A0D2A2C2F8\r
-:10088400A2A2A11392A0D2A2C2A2A2A11392A0D208\r
-:10089400A2C2A2A2A11392A0D2A2C2A2F582222233\r
-:1008A400E582A2A61392A0D2A2C2A2A2A61392A0EB\r
-:1008B400D2A2C2A2A2A61392A0D2A2C2A2A2A6139C\r
-:1008C40092A0D2A2C2A2A2A61392A0D2A2C2A2A213\r
-:1008D400A61392A0D2A2C2A2A2A61392A0D2A2C28E\r
-:1008E400A2A2A61392A0D2A2C2A2F582222278804A\r
-:1008F400E84400600C7901901800E4F0A3D8FCD916\r
-:10090400FAD083D082F6D8FDC082C08375820022DB\r
-:1009140090E6A0E0FA4401F022AA8274805AFBC453\r
-:1009240023541FFB740F5A90E6834BF090E683E048\r
-:10093400FA4420F02290E680E0FA440AF09000FAAB\r
-:10094400120F7590E65D74FFF090E65F74FFF0534C\r
-:0B09540091EF90E680E0FA54F7F022EB\r
-:060FBC00E478FFF6D8FD09\r
-:060FA6007510007511003A\r
-:10095F0090E680E0FA30E7267512007513E1751402\r
-:10096F00127515E175161C7517E17518707519E17B\r
-:10097F0090E6267402F00090E627E4F0002275124C\r
-:10098F00547513E17514667515E17516707517E1D9\r
-:10099F0075181C7519E190E626E4F00090E62774AF\r
-:1009AF0040F000225391EF75A100D20232C0E0C097\r
-:1009BF00F0C082C083C002C003C004C005C006C01F\r
-:1009CF0007C000C001C0D075D0005391EF75A100D2\r
-:1009DF0012095FD0D0D001D000D007D006D005D0FB\r
-:1009EF0004D003D002D083D082D0F0D0E032C0E068\r
-:1009FF00C0F0C082C083C002C003C004C005C006DF\r
-:100A0F00C007C000C001C0D075D0005391EF75A1D1\r
-:100A1F000012095FD0D0D001D000D007D006D0058A\r
-:100A2F00D004D003D002D083D082D0F0D0E03212E5\r
-:100A3F00095F751AB3751B09758200120E0A751AB4\r
-:100A4F00BC751B09758210120E0A751AFD751B09EC\r
-:100A5F00758214120E0A90E65C7431F022E582540E\r
-:100A6F007FFA24F7500475820022BA0104758201BF\r
-:100A7F0022530201E4BA000104F58222AA82BA01CC\r
-:100A8F000C90E6A1E0FB7C008B828C8322BA810C58\r
-:100A9F0090E6A2E0FB7C008B828C832253027FEADC\r
-:100AAF00700C90E6A0E0FB7C008B828C832290E69A\r
-:100ABF00A3E0FB7C00EAC313FA7D00EA2BFBED3CBD\r
-:100ACF008B82F58322C20290E6B8E0FA530260BA35\r
-:100ADF0000028028BA2002800DBA4002800EBA6050\r
-:100AEF00028003020D9E120914020D9E12040BE5E3\r
-:100AFF00826003020D9E120914020D9E90E6B8E06B\r
-:100B0F00FA530280BA80028003020C9790E6B9E094\r
-:100B1F00FABA0003020C0EBA06028035BA08028038\r
-:100B2F0008BA0A028017020C9190E740E510F09086\r
-:100B3F00E68AE4F090E68B7401F0020D9E90E74098\r
-:100B4F00E511F090E68AE4F090E68B7401F0020D67\r
-:100B5F009E90E6BBE0FABA01028017BA0202803813\r
-:100B6F00BA03028059BA0602801BBA0702803C0200\r
-:100B7F000C08AA12AB1390E6B3EBF07B0090E6B42F\r
-:100B8F00EAF0020D9EAA14AB1590E6B3EBF07B00D2\r
-:100B9F0090E6B4EAF0020D9EAA16AB1790E6B3EBFF\r
-:100BAF00F07B0090E6B4EAF0020D9EAA18AB199004\r
-:100BBF00E6B3EBF07B0090E6B4EAF0020D9E90E610\r
-:100BCF00BAE0FA90E1A7E0FBC3EA9B4006120914D2\r
-:100BDF00020D9E90E6BAE0FA75F002A424A8F58201\r
-:100BEF0074E135F0F583E0FAA3E0FB90E6B3F07B18\r
-:100BFF000090E6B4EAF0020D9E120914020D9E90C9\r
-:100C0F00E6B8E0FA53021FBA0002800ABA01028066\r
-:100C1F001BBA0268802C90E740E4F090E741F09017\r
-:100C2F00E68AF090E68B7402F0020D9E90E740E4A6\r
-:100C3F00F090E741F090E68AF090E68B7402F002B4\r
-:100C4F000D9E90E6BCE0FAF582120A6CE5826026F2\r
-:100C5F0090E6BCE0FAF582120A8BE0FA530201909B\r
-:100C6F00E740EAF090E741E4F090E68AF090E68BF7\r
-:100C7F007402F0020D9E120914020D9E1209140245\r
-:100C8F000D9E120914020D9E90E6B9E0FA24F4505D\r
-:100C9F0003020D9BEA2A2A900CAA73020D9B020CE9\r
-:100CAF00E3020D61020D42020D9B020D9B020D9B93\r
-:100CBF00020D9B020D9B020CCE020D9B020CDA5310\r
-:100CCF00B1BF90E6BAE0F510020D9E90E6BAE0F5DE\r
-:100CDF0011020D9E90E6B8E0FA53021FBA0002808F\r
-:100CEF0005BA024A800A90E6BAE0120914020D9E74\r
-:100CFF0090E6BAE0703390E6BCE0FAF582120A6C27\r
-:100D0F00E582602590E6BCE0FAF582120A8BAA8292\r
-:100D1F00AB83E0FC5304FE8A828B83ECF090E6BC3D\r
-:100D2F00E0FAF58212091D8066120914806112091A\r
-:100D3F0014805C90E6B8E0FA53021FBA005190E6B7\r
-:100D4F00BAE0FABA01028005BA020280421209140F\r
-:100D5F00803D90E6BAE0FA702E90E6BCE0FAF5829C\r
-:100D6F00120A6CE582601B90E6BCE0FAF582120A6B\r
-:100D7F008BAA82AB83E0FC4304018A828B83ECF065\r
-:100D8F00800D12091480081209148003120914909F\r
-:100D9F00E6A0E0FA4480F022AA82BA03004005EAF6\r
-:100DAF00249C500122740F5AFBBB03028007740F5F\r
-:100DBF005AFBBB0B45A2AF9203C2AFEA2400F582E8\r
-:100DCF00E43400F5837402F07B0074012AFCE43BE9\r
-:100DDF00FDEC2400F582ED3400F583E51BFCF07487\r
-:100DEF00022AFAE43BFBEA2400F582EB3400F58398\r
-:100DFF00AA1A7B00EAF0A20392AF22E582FA2483BB\r
-:100E0F0050012274035AFB600122A2AF9204C2AFB9\r
-:100E1F00EA2400F582E43401F5837402F07B007458\r
-:100E2F00012AFCE43BFDEC2400F582ED3401F5834F\r
-:100E3F00E51BFCF074022AFAE43BFBEA2400F5827E\r
-:100E4F00EB3401F583AA1A7B00EAF0A20492AF22D9\r
-:100E5F00AA82BA80004005EA244B50012274035A3B\r
-:100E6F00FB600122A2AF9205C2AFEA2480F582E4B3\r
-:100E7F003400F5837402F07B0074012AFCE43BFD1F\r
-:100E8F00EC2480F582ED3400F583E51BFCF0740251\r
-:100E9F002AFAE43BFBEA2480F582EB3400F583AABF\r
-:100EAF001A7B00EAF0A20592AF22C2E8C2EA751AD5\r
-:100EBF0000751B01758243120DA7751A80751B00F3\r
-:100ECF00758253120DA70090E650E4F00090E652A1\r
-:100EDF00E4F00090E654E4F00090E656E4F0009061\r
-:100EEF00E65174FFF00090E65374FFF00090E65562\r
-:100EFF0074FFF00090E65774FFF00090E658E4F0AE\r
-:100F0F0090E65974FFF090E65AE4F090E65B74FFB8\r
-:100F1F00F090E65CE4F090E65D74FFF090E65EE43E\r
-:100F2F00F090E65F74FFF00090E660E4F00090E66A\r
-:100F3F006174FFF090E662E4F090E66374FFF09066\r
-:100F4F00E665E4F090E668740BF05391AFD2E8D207\r
-:100F5F00EA2222AA82120F61DAFB2290FB50A3E54C\r
-:100F6F0082458370F922AA82AB83120F6A1ABAFFE5\r
-:090F7F00011BBA00F5BB00F222CF\r
-:0D0FAF007581201208F2E5826003020180C6\r
-:100F880020F71430F6148883A88220F507E6A88392\r
-:0C0F980075830022E280F7E49322E0223F\r
+:1005E500AA82E50F54FEFBB50F02802A8A048C050A\r
+:1005F500E4FC6210ED6211EB2400F582E43418F599\r
+:1006050083E0FB7C006210EC6211E51033C5113309\r
+:10061500C51192E0F510AB0F050FEB2400F582E450\r
+:100625003418F583EAF022750F007510AA7511AA22\r
+:100635007582001205E57582001205E57A00C3EAA8\r
+:10064500648094865018EA2408F582E434E1F58341\r
+:10065500E0FBF582C0021205E5D0020A80E07A00CF\r
+:10066500C3EA648094825018EA2423F582E434E1D5\r
+:10067500F583E0FBF582C0021205E5D0020A80E0B1\r
+:1006850075821C1205E57582001205E57A00C3EA3C\r
+:10069500648094825018EA2402F582E434E1F583FB\r
+:1006A500E0FBF582C0021205E5D0020A80E07486FF\r
+:1006B500250FFAF582C0021205E5D00290E1B6E0F9\r
+:1006C500FBF582C0021205E5D00290E1B6E0FB2AF7\r
+:1006D500FAF582C0021205E5D00290E1C0E0FBF513\r
+:1006E50082C0021205E5D00290E1C0E0FB2AFAF5CE\r
+:1006F500821205E590E1D8E0FAF5821205E57A0067\r
+:1007050090E1B6E0FBC3EA64808BF063F08095F07E\r
+:100715005018EA24B6F582E434E1F583E0FBF5826E\r
+:10072500C0021205E5D0020A80D67A0090E1C0E049\r
+:10073500FBC3EA64808BF063F08095F05018EA24DF\r
+:10074500C0F582E434E1F583E0FBF582C0021205D1\r
+:10075500E5D0020A80D67A0090E1D8E0FBC3EA64CE\r
+:10076500808BF063F08095F05018EA24D8F582E488\r
+:1007750034E1F583E0FBF582C0021205E5D0020AFB\r
+:1007850080D67A00C3EA648094845018EA240EF572\r
+:1007950082E434E1F583E0FBF582C0021205E5D081\r
+:1007A500020A80E07482250F40087582001205E573\r
+:1007B50080F2AA107B0090187EEAF0AA1190187FAB\r
+:0307C500EAF02235\r
+:020FF800D22104\r
+:1007C8002222222290E6007412F090E60174E0F0F2\r
+:1007D800E0FA90E601740B4AF075B48075B67F753F\r
+:1007E800B14075B48D22E582FA30E0047B018002C5\r
+:1007F8007B00EB24FF92A2EA30E1047B0180027BBC\r
+:1008080000EB24FF92A3EA30E2047B0180027B0024\r
+:10081800EB24FF92A5EA30E3047B0180027B00EB26\r
+:1008280024FF92A4EA30E4047B0180027B00EB24DD\r
+:10083800FF92A0EA30E5047A0180027A00EA24FFF8\r
+:1008480092A7221207EEE4A2A63325E0FAE4A2A1B9\r
+:1008580033FB4AF58222E5821392A0D2A213C2A2E8\r
+:1008680092A0D2A213C2A292A0D2A213C2A292A014\r
+:10087800D2A213C2A292A0D2A213C2A292A0D2A2C2\r
+:1008880013C2A292A0D2A213C2A292A0D2A200C264\r
+:10089800A22222AA8230A4058A820208AA8A820297\r
+:1008A80008F8E582A2A11392A0D2A2C2A2A2A11323\r
+:1008B80092A0D2A2C2A2A2A11392A0D2A2C2A2A224\r
+:1008C800A11392A0D2A2C2A2A2A11392A0D2A2C2A4\r
+:1008D800A2A2A11392A0D2A2C2A2A2A11392A0D2B4\r
+:1008E800A2C2A2A2A11392A0D2A2C2A2F5822222DF\r
+:1008F800E582A2A61392A0D2A2C2A2A2A61392A097\r
+:10090800D2A2C2A2A2A61392A0D2A2C2A2A2A61347\r
+:1009180092A0D2A2C2A2A2A61392A0D2A2C2A2A2BE\r
+:10092800A61392A0D2A2C2A2A2A61392A0D2A2C239\r
+:10093800A2A2A61392A0D2A2C2A2F58222227880F5\r
+:10094800E84400600C7901901800E4F0A3D8FCD9C1\r
+:10095800FAD083D082F6D8FDC082C0837582002287\r
+:1009680090E6A0E0FA4401F022AA8274805AFBC4FF\r
+:1009780023541FFB740F5A90E6834BF090E683E0F4\r
+:10098800FA4420F02290E680E0FA440AF09000FA57\r
+:10099800120FC990E65D74FFF090E65F74FFF053A4\r
+:0B09A80091EF90E680E0FA54F7F02297\r
+:06101000E478FFF6D8FDB4\r
+:060FFA00751200751300E2\r
+:1009B30090E680E0FA30E7267514007515E17516A8\r
+:1009C300127517E175181C7519E1751A70751BE11D\r
+:1009D30090E6267402F00090E627E4F000227514F6\r
+:1009E300547515E17516667517E17518707519E17B\r
+:1009F300751A1C751BE190E626E4F00090E6277457\r
+:100A030040F000225391EF75A100D20232C0E0C042\r
+:100A1300F0C082C083C002C003C004C005C006C0CA\r
+:100A230007C000C001C0D075D0005391EF75A1007D\r
+:100A33001209B3D0D0D001D000D007D006D005D052\r
+:100A430004D003D002D083D082D0F0D0E032C0E013\r
+:100A5300C0F0C082C083C002C003C004C005C0068A\r
+:100A6300C007C000C001C0D075D0005391EF75A17D\r
+:100A7300001209B3D0D0D001D000D007D006D005E2\r
+:100A8300D004D003D002D083D082D0F0D0E0321291\r
+:100A930009B3751C07751D0A758200120E5E751C5D\r
+:100AA30010751D0A758210120E5E751C51751D0A94\r
+:100AB300758214120E5E90E65C7431F022E5825466\r
+:100AC3007FFA24F7500475820022BA01047582016B\r
+:100AD30022530201E4BA000104F58222AA82BA0178\r
+:100AE3000C90E6A1E0FB7C008B828C8322BA810C04\r
+:100AF30090E6A2E0FB7C008B828C832253027FEA88\r
+:100B0300700C90E6A0E0FB7C008B828C832290E645\r
+:100B1300A3E0FB7C00EAC313FA7D00EA2BFBED3C68\r
+:100B23008B82F58322C20290E6B8E0FA530260BAE0\r
+:100B330000028028BA2002800DBA4002800EBA60FB\r
+:100B4300028003020DF2120968020DF212045FE53E\r
+:100B5300826003020DF2120968020DF290E6B8E01A\r
+:100B6300FA530280BA80028003020CEB90E6B9E0EC\r
+:100B7300FABA0003020C62BA06028035BA08028090\r
+:100B830008BA0A028017020CE590E740E512F090DC\r
+:100B9300E68AE4F090E68B7401F0020DF290E740F0\r
+:100BA300E513F090E68AE4F090E68B7401F0020D11\r
+:100BB300F290E6BBE0FABA01028017BA020280386B\r
+:100BC300BA03028059BA0602801BBA0702803C02AC\r
+:100BD3000C5CAA14AB1590E6B3EBF07B0090E6B483\r
+:100BE300EAF0020DF2AA16AB1790E6B3EBF07B0026\r
+:100BF30090E6B4EAF0020DF2AA18AB1990E6B3EB53\r
+:100C0300F07B0090E6B4EAF0020DF2AA1AAB1B9057\r
+:100C1300E6B3EBF07B0090E6B4EAF0020DF290E667\r
+:100C2300BAE0FA90E1A7E0FBC3EA9B400612096829\r
+:100C3300020DF290E6BAE0FA75F002A424A8F58258\r
+:100C430074E135F0F583E0FAA3E0FB90E6B3F07BC3\r
+:100C53000090E6B4EAF0020DF2120968020DF29078\r
+:100C6300E6B8E0FA53021FBA0002800ABA01028012\r
+:100C73001BBA0268802C90E740E4F090E741F090C3\r
+:100C8300E68AF090E68B7402F0020DF290E740E4FE\r
+:100C9300F090E741F090E68AF090E68B7402F00260\r
+:100CA3000DF290E6BCE0FAF582120AC0E5826026F6\r
+:100CB30090E6BCE0FAF582120ADFE0FA53020190F3\r
+:100CC300E740EAF090E741E4F090E68AF090E68BA3\r
+:100CD3007402F0020DF2120968020DF212096802A1\r
+:100CE3000DF2120968020DF290E6B9E0FA24F4500D\r
+:100CF30003020DEFEA2A2A900CFE73020DEF020D98\r
+:100D030037020DB5020D96020DEF020DEF020DEF46\r
+:100D1300020DEF020DEF020D22020DEF020D2E5315\r
+:100D2300B1BF90E6BAE0F512020DF290E6BAE0F533\r
+:100D330013020DF290E6B8E0FA53021FBA000280E4\r
+:100D430005BA024A800A90E6BAE0120968020DF277\r
+:100D530090E6BAE0703390E6BCE0FAF582120AC07E\r
+:100D6300E582602590E6BCE0FAF582120ADFAA82EA\r
+:100D7300AB83E0FC5304FE8A828B83ECF090E6BCE9\r
+:100D8300E0FAF5821209718066120968806112091E\r
+:100D930068805C90E6B8E0FA53021FBA005190E60F\r
+:100DA300BAE0FABA01028005BA0202804212096867\r
+:100DB300803D90E6BAE0FA702E90E6BCE0FAF58248\r
+:100DC300120AC0E582601B90E6BCE0FAF582120AC3\r
+:100DD300DFAA82AB83E0FC4304018A828B83ECF0BD\r
+:100DE300800D12096880081209688003120968904F\r
+:100DF300E6A0E0FA4480F022AA82BA03004005EAA2\r
+:100E0300249C500122740F5AFBBB03028007740F0A\r
+:100E13005AFBBB0B45A2AF9203C2AFEA2400F58293\r
+:100E2300E43400F5837402F07B0074012AFCE43B94\r
+:100E3300FDEC2400F582ED3400F583E51DFCF07430\r
+:100E4300022AFAE43BFBEA2400F582EB3400F58343\r
+:100E5300AA1C7B00EAF0A20392AF22E582FA248364\r
+:100E630050012274035AFB600122A2AF9204C2AF65\r
+:100E7300EA2400F582E43401F5837402F07B007404\r
+:100E8300012AFCE43BFDEC2400F582ED3401F583FB\r
+:100E9300E51DFCF074022AFAE43BFBEA2400F58228\r
+:100EA300EB3401F583AA1C7B00EAF0A20492AF2283\r
+:100EB300AA82BA80004005EA244B50012274035AE7\r
+:100EC300FB600122A2AF9205C2AFEA2480F582E45F\r
+:100ED3003400F5837402F07B0074012AFCE43BFDCB\r
+:100EE300EC2480F582ED3400F583E51DFCF07402FB\r
+:100EF3002AFAE43BFBEA2480F582EB3400F583AA6B\r
+:100F03001C7B00EAF0A20592AF22C2E8C2EA751C7C\r
+:100F130000751D01758243120DFB751C80751D0044\r
+:100F2300758253120DFB0090E650E4F00090E652F8\r
+:100F3300E4F00090E654E4F00090E656E4F000900C\r
+:100F4300E65174FFF00090E65374FFF00090E6550D\r
+:100F530074FFF00090E65774FFF00090E658E4F059\r
+:100F630090E65974FFF090E65AE4F090E65B74FF64\r
+:100F7300F090E65CE4F090E65D74FFF090E65EE4EA\r
+:100F8300F090E65F74FFF00090E660E4F00090E616\r
+:100F93006174FFF090E662E4F090E66374FFF09012\r
+:100FA300E665E4F090E668740BF05391AFD2E8D2B3\r
+:100FB300EA2222AA82120FB5DAFB2290FB50A3E5A4\r
+:100FC30082458370F922AA82AB83120FBE1ABAFF3D\r
+:090FD300011BBA00F5BB00F2227B\r
+:0D100300758120120946E58260030201801C\r
+:100FDC0020F71430F6148883A88220F507E6A8833E\r
+:0C0FEC0075830022E280F7E49322E022EB\r
 :00000001FF\r
index c612e4b..a917170 100644 (file)
Binary files a/usbjtag.iic and b/usbjtag.iic differ
index 9ca70bd..9d33c89 100644 (file)
 ;;; -*- asm -*-\r
-\r
 ;;;\r
-\r
 ;;;-----------------------------------------------------------------------------\r
-\r
 ;;; Interrupt vectors\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
 ;;; N.B. This object module must come first in the list of modules\r
 \r
-\r
-\r
         .module vectors\r
 \r
-\r
-\r
 ;;; ----------------------------------------------------------------\r
-\r
 ;;;                  standard FX2 interrupt vectors\r
-\r
 ;;; ----------------------------------------------------------------\r
 \r
-\r
-\r
         .area CSEG (CODE)\r
-\r
         .area GSINIT (CODE)\r
-\r
         .area CSEG (CODE)\r
-\r
 __standard_interrupt_vector::\r
-\r
 __reset_vector::\r
-\r
         ljmp        s_GSINIT\r
-\r
         \r
-\r
         ;; 13 8-byte entries.  We point them all at __isr_nop\r
-\r
         ljmp        __isr_nop        ; 3 bytes\r
-\r
         .ds        5                ; + 5 = 8 bytes for vector slot\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
-\r
         ljmp        __isr_nop\r
-\r
         .ds        5\r
 \r
-\r
-\r
 __isr_nop::\r
-\r
         reti\r
 \r
-\r
-\r
 ;;; ----------------------------------------------------------------\r
-\r
 ;;; the FIFO/GPIF autovector.  14 4-byte entries.\r
-\r
 ;;; must start on a 128 byte boundary.\r
-\r
 ;;; ----------------------------------------------------------------\r
-\r
         \r
-\r
         . = __reset_vector + 0x0080\r
-\r
                 \r
-\r
 __fifo_gpif_autovector::\r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
-\r
         ljmp        __isr_nop\r
-\r
         nop        \r
 \r
-\r
-\r
         \r
-\r
 ;;; ----------------------------------------------------------------\r
-\r
 ;;; the USB autovector.  32 4-byte entries.\r
-\r
 ;;; must start on a 256 byte boundary.\r
-\r
 ;;; ----------------------------------------------------------------\r
 \r
-\r
-\r
         . = __reset_vector + 0x0100\r
-\r
         \r
-\r
 __usb_autovector::\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r
         ljmp        __isr_nop\r
-\r
         nop\r
-\r