From: hackbard Date: Tue, 4 Sep 2007 19:42:46 +0000 (+0200) Subject: test commit X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dc754367536310b01e2ea0fc7225ac899a8e8539;p=my-code%2Ffpga.git test commit --- diff --git a/fx2/cypress_fx2_xilprg.patch b/fx2/cypress_fx2_xilprg.patch index 7d5ace2..8aa0971 100644 --- a/fx2/cypress_fx2_xilprg.patch +++ b/fx2/cypress_fx2_xilprg.patch @@ -1,218 +1,6 @@ -diff -Nur xilprg-0.5/cypress_fx2_xilprg.patch xilprg-new/cypress_fx2_xilprg.patch ---- xilprg-0.5/cypress_fx2_xilprg.patch 1970-01-01 01:00:00.000000000 +0100 -+++ xilprg-new/cypress_fx2_xilprg.patch 2007-04-10 10:33:17.000000000 +0200 -@@ -0,0 +1,208 @@ -+diff -Nur xilprg-0.5/makefile xilprg-new/makefile -+--- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200 -++++ xilprg-new/makefile 2007-04-07 17:09:16.000000000 +0200 -+@@ -40,6 +40,7 @@ -+ $(SRC_DIR)/prgfile.cpp \ -+ $(SRC_DIR)/chip.cpp \ -+ $(SRC_DIR)/parport.cpp \ -++ $(SRC_DIR)/onbusb.cpp \ -+ $(SRC_DIR)/cable.cpp \ -+ $(SRC_DIR)/digilent.cpp \ -+ $(SRC_DIR)/xilinx.cpp -+diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp -+--- xilprg-0.5/src/cable.cpp 2006-08-23 07:38:34.000000000 +0200 -++++ xilprg-new/src/cable.cpp 2007-04-07 17:20:55.000000000 +0200 -+@@ -49,6 +49,7 @@ -+ #include "chip.h" -+ #include "cmdline.h" -+ #include "digilent.h" -++#include "onbusb.h" -+ #include "parport.h" -+ -+ cable::cable() -+@@ -587,6 +588,9 @@ -+ if (stricmp(argv[0], "dusb") == 0) -+ cbl = new digilent; -+ else -++ if (stricmp(argv[0], "ousb") ==0) -++ cbl = new onbusb; -++ else -+ { -+ msgf(STR_INVALID_CABLE_DEF); -+ return NULL; -+diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp -+--- xilprg-0.5/src/onbusb.cpp 1970-01-01 01:00:00.000000000 +0100 -++++ xilprg-new/src/onbusb.cpp 2007-04-07 17:15:34.000000000 +0200 -+@@ -0,0 +1,113 @@ -++/* -++ * onboard usb -++ * -++ * author: till & frank zirkelbach -++ * -++ */ -++ -++#include "xilprg.h" -++#include "utils.h" -++#include "onbusb.h" -++ -++onbusb::onbusb() -++{ -++ handle=NULL; -++} -++ -++onbusb::~onbusb() -++{ -++} -++ -++int onbusb::open() -++{ -++ -++ struct usb_bus *bus; -++ -++ usb_init(); -++ usb_find_busses(); -++ usb_find_devices(); -++ -++ bus=usb_get_busses(); -++ while(bus) { -++ dev=bus->devices; -++ while(dev) { -++ if(dev->descriptor.idVendor==USB_VENDOR_ID && -++ dev->descriptor.idProduct==USB_PRODUCT_ID) -++ /* found the device */ -++ return 0; -++ dev=dev->next; -++ } -++ bus=bus->next; -++ } -++ -++ return -1; -++ -++ handle=usb_open(dev); -++ if(handle==NULL) -++ goto cleanup; -++ -++ if(usb_set_configuration(handle,1)<0) -++ goto cleanup; -++ -++ if(usb_claim_interface(handle,0)<0) -++ goto cleanup; -++ -++ if(usb_set_altinterface(handle,1)<0) -++ goto cleanup; -++ -++ data = 0x10; -++ -++ reset_tap_state(); -++ -++ return 0; -++ -++cleanup: -++ -++ close(); -++ -++ return 1; -++ -++} -++ -++int onbusb::close() -++{ -++ -++ usb_close(handle); -++ -++ return 0; -++} -++ -++int onbusb::get_description(string& desc) -++{ -++ char s[256]; -++ sprintf(s, "onboard usb bitbanging"); -++ desc = s; -++ return 0; -++} -++ -++void onbusb::set_tdi(int bit) -++{ -++ if (bit) data |= 0x04; else data &= ~0x04; -++ data|=0xa0; -++ usb_bulk_write(handle,0x01,&data,1,0); -++} -++ -++void onbusb::set_tck(int bit) -++{ -++ if (bit) data |= 0x10; else data &= ~0x10; -++ data|=0xa0; -++ usb_bulk_write(handle,0x01,&data,1,0); -++} -++ -++void onbusb::set_tms(int bit) -++{ -++ if (bit) data |= 0x08; else data &= ~0x08; -++ data|=0xa0; -++ usb_bulk_write(handle,0x01,&data,1,0); -++} -++ -++int onbusb::get_tdo() -++{ -++ usb_bulk_read(handle,0x81,&data,1,0); -++ return data & 0x01 ? 1 : 0; -++} -+diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h -+--- xilprg-0.5/src/onbusb.h 1970-01-01 01:00:00.000000000 +0100 -++++ xilprg-new/src/onbusb.h 2007-04-07 17:14:07.000000000 +0200 -+@@ -0,0 +1,43 @@ -++/* -++ * onboard usb -++ * -++ * author: till & frank zirkelbach -++ * -++ */ -++ -++#ifndef _ONBUSB_H_INCLUDED_ -++#define _ONBUSB_H_INCLUDED_ -++ -++#include "cable.h" -++ -++#include -++ -++class onbusb : public cable -++{ -++public: -++ onbusb(); -++ virtual ~onbusb(); -++ -++ enum -++ { -++ USB_VENDOR_ID = 0x04b4, -++ USB_PRODUCT_ID = 0x8613 -++ }; -++ -++ virtual int open(); -++ virtual int close(); -++ -++ virtual int get_description(string&); -++ -++ virtual void set_tdi(int); -++ virtual void set_tck(int); -++ virtual void set_tms(int); -++ virtual int get_tdo(); -++ -++protected: -++ char data; -++ struct usb_device *dev; -++ usb_dev_handle *handle; -++}; -++ -++#endif -+diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp -+--- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200 -++++ xilprg-new/src/strtable.cpp 2007-04-07 16:56:25.000000000 +0200 -+@@ -137,7 +137,7 @@ -+ //STR_CMD_CABLE -+ "cable\0" -+ "Sets programmer cable\0" -+- "cable {xil3 [ioaddr]|dusb}\0", -++ "cable {xil3 [ioaddr]|dusb|ousb}\0", -+ //STR_CMD_CHIPS -+ "chips\0" -+ "Prints supported devices\0" diff -Nur xilprg-0.5/makefile xilprg-new/makefile --- xilprg-0.5/makefile 2006-08-23 07:41:20.000000000 +0200 -+++ xilprg-new/makefile 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-new/makefile 2007-04-07 17:09:16.000000000 +0200 @@ -40,6 +40,7 @@ $(SRC_DIR)/prgfile.cpp \ $(SRC_DIR)/chip.cpp \ @@ -223,7 +11,7 @@ diff -Nur xilprg-0.5/makefile xilprg-new/makefile $(SRC_DIR)/xilinx.cpp diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp --- xilprg-0.5/src/cable.cpp 2006-08-23 07:38:34.000000000 +0200 -+++ xilprg-new/src/cable.cpp 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-new/src/cable.cpp 2007-04-07 17:20:55.000000000 +0200 @@ -49,6 +49,7 @@ #include "chip.h" #include "cmdline.h" @@ -244,12 +32,12 @@ diff -Nur xilprg-0.5/src/cable.cpp xilprg-new/src/cable.cpp return NULL; diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp --- xilprg-0.5/src/onbusb.cpp 1970-01-01 01:00:00.000000000 +0100 -+++ xilprg-new/src/onbusb.cpp 2007-04-21 14:12:15.000000000 +0200 -@@ -0,0 +1,126 @@ ++++ xilprg-new/src/onbusb.cpp 2007-09-04 21:39:30.000000000 +0200 +@@ -0,0 +1,119 @@ +/* + * onboard usb + * -+ * author: till & frank zirkelbach ++ * author: till, hunz, koppi, hackbard + * + */ + @@ -257,6 +45,8 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp +#include "utils.h" +#include "onbusb.h" + ++#define GET_TDO 0x20 ++ +onbusb::onbusb() +{ + handle=NULL; @@ -280,39 +70,28 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp + dev=bus->devices; + while(dev) { + if(dev->descriptor.idVendor==USB_VENDOR_ID && -+ dev->descriptor.idProduct==USB_PRODUCT_ID) { -+ -+ /* found the device */ -+ -+ printf("found matching usb device\n"); -+ -+ handle=usb_open(dev); -+ if(handle==NULL) -+ goto cleanup; -+ -+ printf("got handle\n"); -+ -+ if(usb_set_configuration(handle,1)<0) ++ dev->descriptor.idProduct==USB_PRODUCT_ID) { ++ ++ /* found the device */ ++ handle=usb_open(dev); ++ if(handle==NULL) + goto cleanup; -+ -+ printf("set configuration\n"); + -+ if(usb_claim_interface(handle,0)<0) ++ if(usb_set_configuration(handle,1)<0) + goto cleanup; -+ -+ printf("claimed interface\n"); + -+ if(usb_set_altinterface(handle,1)<0) -+ goto cleanup; -+ -+ printf("set alt interface\n"); ++ if(usb_claim_interface(handle,0)<0) ++ goto cleanup; + -+ data = 0x10; ++ if(usb_set_altinterface(handle,1)<0) ++ goto cleanup; + -+ reset_tap_state(); ++ data = 0x10; + -+ return 0; -+ } ++ reset_tap_state(); ++ ++ return 0; ++ } + dev=dev->next; + } + bus=bus->next; @@ -322,10 +101,10 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp + +cleanup: + -+ perror("device open"); -+ + close(); + ++ printf("usb init failed!\n"); ++ + return -1; + +} @@ -341,7 +120,7 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp +int onbusb::get_description(string& desc) +{ + char s[256]; -+ sprintf(s, "onboard usb bitbanging"); ++ sprintf(s, "onboard usb bitbanging (till, hunz, koppi, hackbard)"); + desc = s; + return 0; +} @@ -349,37 +128,39 @@ diff -Nur xilprg-0.5/src/onbusb.cpp xilprg-new/src/onbusb.cpp +void onbusb::set_tdi(int bit) +{ + if (bit) data |= 0x04; else data &= ~0x04; -+ data|=0xa0; ++ usb_bulk_write(handle,0x01,&data,1,0); +} + +void onbusb::set_tck(int bit) +{ + if (bit) data |= 0x10; else data &= ~0x10; -+ data|=0xa0; + usb_bulk_write(handle,0x01,&data,1,0); -+ // if(data&0x10) printf("tms: %d tdi: %d\n",data&0x08?1:0,data&0x04?1:0); +} + +void onbusb::set_tms(int bit) +{ + if (bit) data |= 0x08; else data &= ~0x08; -+ data|=0xa0; ++ usb_bulk_write(handle,0x01,&data,1,0); +} + +int onbusb::get_tdo() +{ ++ /* send get tdo command */ ++ data=GET_TDO; ++ usb_bulk_write(handle,0x01,&data,1,0); ++ ++ /* receive tdo */ + usb_bulk_read(handle,0x81,&data,1,0); -+ // printf(" ----> %d\n",data&0x01?1:0); + return data & 0x01 ? 1 : 0; +} diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h --- xilprg-0.5/src/onbusb.h 1970-01-01 01:00:00.000000000 +0100 -+++ xilprg-new/src/onbusb.h 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-new/src/onbusb.h 2007-09-04 21:17:18.000000000 +0200 @@ -0,0 +1,43 @@ +/* + * onboard usb + * -+ * author: till & frank zirkelbach ++ * author: till, hunz, koppi, hackbard + * + */ + @@ -421,7 +202,7 @@ diff -Nur xilprg-0.5/src/onbusb.h xilprg-new/src/onbusb.h +#endif diff -Nur xilprg-0.5/src/strtable.cpp xilprg-new/src/strtable.cpp --- xilprg-0.5/src/strtable.cpp 2006-08-23 07:38:34.000000000 +0200 -+++ xilprg-new/src/strtable.cpp 2007-04-10 10:33:28.000000000 +0200 ++++ xilprg-new/src/strtable.cpp 2007-04-07 16:56:25.000000000 +0200 @@ -137,7 +137,7 @@ //STR_CMD_CABLE "cable\0" diff --git a/fx2/fx2.c b/fx2/fx2.c index 3a57b12..a8f0467 100644 --- a/fx2/fx2.c +++ b/fx2/fx2.c @@ -11,10 +11,7 @@ */ /* constant definitions */ -#define TRUE 1 -#define FALSE 0 -#define POWER_ON 1; -#define POWER_OFF 0; +#define GET_TDO 0x20 /* type definitions */ typedef unsigned char u8; @@ -227,6 +224,9 @@ void ep1_init() { void fx2_init() { + /* syncdelay */ + SYNCDELAY; + /* cpu init */ cpu_init(); @@ -239,11 +239,14 @@ void fx2_init() { /* ep1 init */ ep1_init(); + + /* jtag init */ + jtag_init(); } void main() { - u8 buf; + u8 buf,set; /* initialize the fx2 */ fx2_init(); @@ -252,14 +255,18 @@ void main() { while(1) { if(!(EP1OUTCS&BUSY)) { buf=EP1OUTBUF[0]; - buf&=0x1c; - IOD|=buf; - EP1OUTBC=1; - } - if(!(EP1INCS&BUSY)) { - buf=IOD&0x01?1:0; - EP1INBUF[0]=buf; - EP1INBC=1; + if(buf!=GET_TDO) { + set=(IOD&(~0x1c))|(buf&0x1c); + IOD=set; + EP1OUTBC=1; + } + else { + while(EP1INCS&BUSY) + continue; + buf=IOD&0x01?1:0; + EP1INBUF[0]=buf; + EP1INBC=1; + } } }