/***************************************************************************** Kontrollprogramm des VAMP (c)2002 Carsten Meyer *****************************************************************************/ #include #include #include #include #include #include #include #include "umrbus.h" #include "file.h" #include "boardaccess.h" #include "run.h" UMR_HANDLE addr_handle; UMR_HANDLE data1_handle; UMR_HANDLE data2_handle; UMR_HANDLE reset_handle; extern int buffer_Mask; #define LOWBYTES 15 #define HIGHBYTES 240 int memory_access(int sel) /* MEMORY ACCESS */ { FILE *file; int select=0,quit=0; long j, count; char filename[128]; unsigned long wert, adr, tmpadr; int bytewert; unsigned long readbuffer[2]; do { if (sel!=0) { select=sel; sel=0; } else { printf("\nVAMP-MEMEMORY ACCESS:\n\n"); printf(" 40 VAMP-Memory schreiben\n"); printf(" 41 VAMP-Memory lesen\n"); printf(" 42 Speicherblock auslesen\n"); printf(" 43 Speicherblock in File dumpen\n"); printf(" 44 Memfill (word)\n"); printf(" 45 Memfill (byte)\n"); printf(" 99 Return\n"); fflush(stdin); printf("\nIhre Wahl : "); scanf("%i",&select); } switch (select) { case 40: printf("Alle Werte als Hex Zahlen!!\n\n"); printf("Adresse: ");scanf("%lx",&adr); printf("Wert : ");scanf("%lx",&wert); tmpadr=adr >> 3; if ( (adr%4) != 0 ){ printf("Bitte Adressenalignment beachten!!\n"); printf("Wert nicht geschrieben!!\n");} else{ if ( (adr%8)== 0 ){ write_data(&wert,&wert,&tmpadr,15); read_data(&tmpadr,readbuffer); wert=readbuffer[0];} else { write_data(&wert,&wert,&tmpadr,240); read_data(&tmpadr,readbuffer); wert=readbuffer[1]; } printf("geschriebener Wert: 0x%lx\n",wert); } break; case 41: printf("Alle Werte als Hex Zahlen!!\n\n"); printf("Adresse : ");scanf("%lx",&adr); tmpadr=adr >> 3; read_data(&tmpadr,readbuffer); adr=tmpadr << 3; printf("Adr: 0x%08lx Wert: 0x%08lx\n", adr,readbuffer[0]); printf("Adr: 0x%08lx Wert: 0x%08lx\n", adr+4,readbuffer[1]); break; case 42: printf("Start-Adresse: ");scanf("%lx",&adr); printf("End-Adresse+1: "); scanf("%lx",&count); count=count-adr; printf("\n\n"); for (j=0;j> 3; read_data(&tmpadr,readbuffer); printf("0x%08lx : 0x%08lx",adr+j,readbuffer[1]); printf(" 0x%08lx\n",readbuffer[0]);} } printf("\n"); break; case 43: printf("Start-Adresse: ");scanf("%lx",&adr); printf("End-Adresse+1: "); scanf("%lx",&count); printf("Filename : ");scanf("%s", filename); count=count-adr; printf("\n\n"); if ((file = fopen(filename, "w")) == NULL) { perror(filename); return 0; } for (j=0;j> 3; read_data(&tmpadr,readbuffer); fprintf(file,":0x%08lx\n",readbuffer[0]); fprintf(file,":0x%08lx\n",readbuffer[1]);} } fclose(file); printf("\n"); break; case 44: printf("Adressalignment: 4 Bytes\n\n"); printf("Start-Adresse: ");scanf("%lx",&adr); printf("End-Adresse: ");scanf("%lx",&count); count=((count-adr)>>2) +1; printf("Wert : ");scanf("%lx",&wert); printf("\n Fuellen des Speichers mit 0x%08lx !!!\n",wert); adr=adr >> 2; for (j=0;j> 1; write_data(&wert,&wert,&tmpadr,15);} else{ tmpadr=tmpadr >>1; write_data(&wert,&wert,&tmpadr,240);} } break; case 45: printf("Start-Adresse: ");scanf("%lx",&adr); printf("End-Adresse: ");scanf("%lx",&count); count=count-adr +1; printf("Wert : ");scanf("%02x",&bytewert); printf("\n Fuellen des Speichers mit 0x%02x !!!\n",bytewert); buffer_Mask=0; flush_Buffer(); for (j=0;j=10) sel=select; else sel=0; if ((select>=10)&&(select<99)) select=select/10; switch (select) { case 1: if (configure_fpga_new()!=0) exit(1); reset(1); break; case 2: upload_file(); break; case 3: run(); break; case 4: memory_access(sel); break; case 5: reset(1); break; case 6: reset(0); break; case 7: hardwarereset(); break; case 8: set_select_signals(); break; case 99: close_capims(); quit=1; } } while(!quit); return(0); }