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

Subversion Repositories mips789

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /mips789/branches/avendor/CTool
    from Rev 35 to Rev 51
    Reverse comparison

Rev 35 → Rev 51

/convert_sp.c
0,0 → 1,306
 
/* convert.c by Steve Rhoads 4/26/01 */
/* Now uses the ELF format (get gccmips_elf.zip) */
/* set $gp and zero .sbss and .bss */
/* Reads test.axf and creates code.txt */
/* modified by Liwei 2007-8-29 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUF_SIZE (1024*1024*4)
/*Assumes running on PC little endian*/
#ifndef USE_BIG_ENDIAN
#define ntohl(A) (((A)>>24)|(((A)&0x00ff0000)>>8)|(((A)&0xff00)<<8)|((A)<<24))
#define ntohs(A) (unsigned short)((((A)&0xff00)>>8)|((A)<<8))
#else
#define ntohl(A) A
#define ntohs(A) A
#endif
 
#define EI_NIDENT 16
#define SHT_PROGBITS 1
#define SHT_STRTAB 3
#define SHT_NOBITS 8
 
typedef struct
{
unsigned char e_ident[EI_NIDENT];
unsigned short e_e_type ;
unsigned short e_machine ;
unsigned long e_version ;
unsigned long e_entry ;
unsigned long e_phoff ;
unsigned long e_shoff ;
unsigned long e_flags ;
unsigned short e_ehsize ;
unsigned short e_phentsize ;
unsigned short e_phnum ;
unsigned short e_shentsize ;
unsigned short e_shnum ;
unsigned short e_shstrndx ;
}
ElfHeader ;
 
typedef struct
{
unsigned long p_type ;
unsigned long p_offset ;
unsigned long p_vaddr ;
unsigned long p_paddr ;
unsigned long p_filesz ;
unsigned long p_memsz ;
unsigned long p_flags ;
unsigned long p_align ;
}
Elf32_Phdr ;
 
typedef struct
{
unsigned long sh_name ;
unsigned long sh_type ;
unsigned long sh_flags ;
unsigned long sh_addr ;
unsigned long sh_offset ;
unsigned long sh_size ;
unsigned long sh_link ;
unsigned long sh_info ;
unsigned long sh_addralign ;
unsigned long sh_entsize ;
}
Elf32_Shdr ;
 
typedef struct
{
unsigned long ri_gprmask ;
unsigned long ri_cprmask[4];
unsigned long ri_gp_value ;
}
ELF_RegInfo ;
 
#define PT_MIPS_REGINFO 0x70000000
#define SHT_MIPS_REGINFO 0x70000006
 
void set_low(unsigned char*ptr,unsigned long address,unsigned long value)
{
unsigned long opcode ;
opcode=*(unsigned long*)(ptr+address);
opcode=ntohl(opcode);
opcode=(opcode&0xffff0000)|(value&0xffff);
opcode=ntohl(opcode);
*(unsigned long*)(ptr+address)=opcode ;
}
 
/*the two functions listed between are added by Liwei 2007-8-29*/
char HEX[]="0123456789ABCDEF" ;
char hex[]="0123456789abcdef" ;
unsigned char hex2byte(char hex_char)
{
unsigned char i ;
for(i=0;i<16;++i)if(HEX[i]==hex_char)return i ;
for(i=0;i<16;++i)if(hex[i]==hex_char)return i ;
return 0 ;
}
unsigned int par2u32(char*par)
{
unsigned int i,ret=0 ;
if(par==NULL)return ;
if((0==strncmp(par,"0x",2))||(0==strncmp(par,"0X",2)))
for(i=2;;++i)
{
if(par[i]=='\0')return ret ;
if(par[i]==' ')return ret ;
ret=ret*16+hex2byte(par[i]);
}
else
for(i=0;;++i)
{
if(par[i]=='\0')return ret ;
if(par[i]==' ')return ret ;
ret=ret*10+hex2byte(par[i]);
}
return 0 ;
}
/****************************/
 
int main(int argc,char*argv[])
{
FILE*infile,*outfile,*txtfile ;
unsigned char*buf,*code ;
long size,stack_pointer ;
long stack_limit=0 ;
unsigned long length,d,i,gp_ptr=0,gp_ptr_backup=0 ;
unsigned long bss_start=0,bss_end=0 ;
ElfHeader*elfHeader ;
Elf32_Phdr*elfProgram ;
ELF_RegInfo*elfRegInfo ;
Elf32_Shdr*elfSection ;
(void)argc ;
(void)argv ;
// printf(">%s<=>%d<\n",argv[1],par2u32((char*)argv[1]));//Liwei 2007-8.29
// printf(">%s<=>%d<\n",argv[2],par2u32((char*)argv[2]));//Liwei 2007-8.29
// printf("argc = %d\n",argc);
if(argc>=3)
stack_limit=((par2u32((char*)argv[1])-par2u32((char*)argv[2])));
//alig 4
/* added by Liwei 2007_8_29 */
/*usage example :
convert_sp 0x800 0xf0
the sp_pointer is limited and set as (0x800 - 0xf0)
0x800 is your instructions space lenth while 0xf0 is your stack lenth
but make sure your instructions space is big enough...
comment by Liwei
*/
printf("test.axf -> code.txt & test.bin\n");
infile=fopen("test.axf","rb");
if(infile==NULL)
{
printf("Can't open test.axf");
return 0 ;
}
buf=(unsigned char*)malloc(BUF_SIZE);
size=(int)fread(buf,1,BUF_SIZE,infile);
fclose(infile);
code=(unsigned char*)malloc(BUF_SIZE);
memset(code,0,BUF_SIZE);
elfHeader=(ElfHeader*)buf ;
if(strncmp((char*)elfHeader->e_ident+1,"ELF",3))
{
printf("Error: Not an ELF file!\n");
printf("Use the gccmips_elf.zip from opencores/projects/plasma!\n");
return-1 ;
}
elfHeader->e_entry=ntohl(elfHeader->e_entry);
elfHeader->e_phoff=ntohl(elfHeader->e_phoff);
elfHeader->e_shoff=ntohl(elfHeader->e_shoff);
elfHeader->e_flags=ntohl(elfHeader->e_flags);
elfHeader->e_phentsize=ntohs(elfHeader->e_phentsize);
elfHeader->e_phnum=ntohs(elfHeader->e_phnum);
elfHeader->e_shentsize=ntohs(elfHeader->e_shentsize);
elfHeader->e_shnum=ntohs(elfHeader->e_shnum);
printf("Entry=0x%x ",elfHeader->e_entry);
length=0 ;
for(i=0;i<elfHeader->e_phnum;++i)
{
elfProgram=(Elf32_Phdr*)(buf+elfHeader->e_phoff+
elfHeader->e_phentsize*i);
elfProgram->p_type=ntohl(elfProgram->p_type);
elfProgram->p_offset=ntohl(elfProgram->p_offset);
elfProgram->p_vaddr=ntohl(elfProgram->p_vaddr);
elfProgram->p_filesz=ntohl(elfProgram->p_filesz);
elfProgram->p_memsz=ntohl(elfProgram->p_memsz);
elfProgram->p_flags=ntohl(elfProgram->p_flags);
elfProgram->p_vaddr-=elfHeader->e_entry ;
if(elfProgram->p_type==PT_MIPS_REGINFO)
{
elfRegInfo=(ELF_RegInfo*)(buf+elfProgram->p_offset);
gp_ptr=ntohl(elfRegInfo->ri_gp_value);
}
if(elfProgram->p_vaddr<BUF_SIZE)
{
/* printf("[0x%x,0x%x,0x%x,0x%x,0x%x]\n", elfProgram->p_vaddr, */
/* elfProgram->p_offset, elfProgram->p_filesz, elfProgram->p_memsz, */
/* elfProgram->p_flags); */
memcpy(code+elfProgram->p_vaddr,buf+elfProgram->p_offset,
elfProgram->p_filesz);
length=elfProgram->p_vaddr+elfProgram->p_filesz ;
/* printf("length = %d 0x%x\n", length, length); */
}
}
for(i=0;i<elfHeader->e_shnum;++i)
{
elfSection=(Elf32_Shdr*)(buf+elfHeader->e_shoff+
elfHeader->e_shentsize*i);
elfSection->sh_name=ntohl(elfSection->sh_name);
elfSection->sh_type=ntohl(elfSection->sh_type);
elfSection->sh_addr=ntohl(elfSection->sh_addr);
elfSection->sh_offset=ntohl(elfSection->sh_offset);
elfSection->sh_size=ntohl(elfSection->sh_size);
if(elfSection->sh_type==SHT_MIPS_REGINFO)
{
elfRegInfo=(ELF_RegInfo*)(buf+elfSection->sh_offset);
gp_ptr=ntohl(elfRegInfo->ri_gp_value);
}
if(elfSection->sh_type==SHT_PROGBITS)
{
/* printf("elfSection->sh_addr=0x%x\n", elfSection->sh_addr); */
if(elfSection->sh_addr>gp_ptr_backup)
gp_ptr_backup=elfSection->sh_addr ;
}
if(elfSection->sh_type==SHT_NOBITS)
{
if(bss_start==0)
{
bss_start=elfSection->sh_addr ;
}
bss_end=elfSection->sh_addr+elfSection->sh_size ;
}
}
if(length>bss_start-elfHeader->e_entry)
{
length=bss_start-elfHeader->e_entry ;
}
if(bss_start==length)
{
bss_start=length ;
bss_end=length+4 ;
}
if(gp_ptr==0)
gp_ptr=gp_ptr_backup+0x7ff0 ;
/* #if 0 */
/*Initialize the $gp register for sdata and sbss */
printf("gp_ptr=0x%x ",gp_ptr);
/*modify the first opcodes in boot.asm */
/*modify the lui opcode */
set_low(code,0,gp_ptr>>16);
/*modify the ori opcode */
set_low(code,4,gp_ptr&0xffff);
/*Clear .sbss and .bss */
printf("sbss=0x%x bss_end=0x%x\nlength=0x%x ",bss_start,bss_end,length);
set_low(code,8,bss_start>>16);
set_low(code,12,bss_start&0xffff);
set_low(code,16,bss_end>>16);
set_low(code,20,bss_end&0xffff);
/*Set stack pointer */
if(elfHeader->e_entry<0x10000000)
stack_pointer=bss_end+512 ;
else
stack_pointer=bss_end+1024*4 ;
if(stack_limit)stack_pointer=(stack_pointer<stack_limit)?stack_pointer:stack_limit ;
//added by Liwei 2007-8-29
stack_pointer&=~7 ;
printf("SP=0x%x\n",stack_pointer);
set_low(code,24,stack_pointer>>16);
set_low(code,28,stack_pointer&0xffff);
/* #endif */
/*write out test.bin */
outfile=fopen("test.bin","wb");
fwrite(code,length,1,outfile);
fclose(outfile);
/*write out code.txt */
txtfile=fopen("code.txt","w");
for(i=0;i<=length;i+=4)
{
d=ntohl(*(unsigned long*)(code+i));
fprintf(txtfile,"%8.8x\n",d);
}
fclose(txtfile);
free(buf);
printf("\n");
return 0 ;
}
/gensim.c
0,0 → 1,218
/******************************************************************
* *
* Author: Liwei *
* *
* This file is part of the "mips789" project. *
* Downloaded from: *
* http://www.opencores.org/pdownloads.cgi/list/mips789 *
* *
* If you encountered any problem, please contact me via, *
* Email:mcupro@opencores.org or mcupro@163.com *
* *
******************************************************************/
#include "stdio.h"
#include "stdlib.h"
 
#define MAX_LEN (1024*2)
 
int print_module(FILE * ft){
if (ft==NULL)return 0;
fprintf(ft,"//This file is only used for simulation.\nmodule sim_mem_array \n");
fprintf(ft," ( \n");
fprintf(ft," input clk, \n");
fprintf(ft," input [31:0] pc_i, \n");
fprintf(ft," output [31:0] ins_o, \n");
fprintf(ft," input [3:0] wren, \n");
fprintf(ft," input [31:0]din, \n");
fprintf(ft," input [31:0]data_addr_i, \n");
fprintf(ft," output [31:0]dout \n");
fprintf(ft," ); \n\n");
fprintf(ft," wire [29:0] data_addr,pc; \n");
fprintf(ft," wire [31:0]dout_w; \n");
fprintf(ft," assign dout = dout_w; \n");
fprintf(ft," assign data_addr=data_addr_i[31:2]; \n");
fprintf(ft," assign pc= pc_i[31:2]; \n\n");
 
 
fprintf(ft," sim_syn_ram3 ram3 ( \n");
fprintf(ft," .data(din[31:24]), \n");
fprintf(ft," .wraddress(data_addr), \n");
fprintf(ft," .rdaddress_a(pc), \n");
fprintf(ft," .rdaddress_b(data_addr), \n");
fprintf(ft," .wren(wren[3]), \n");
fprintf(ft," .clock(clk), \n");
fprintf(ft," .qa(ins_o[31:24]), \n");
fprintf(ft," .qb(dout_w[31:24]) \n");
fprintf(ft," ); \n");
 
fprintf(ft," sim_syn_ram2 ram2( \n");
fprintf(ft," .data(din[23:16]), \n");
fprintf(ft," .wraddress(data_addr), \n");
fprintf(ft," .rdaddress_a(pc), \n");
fprintf(ft," .rdaddress_b(data_addr), \n");
fprintf(ft," .wren(wren[2]), \n");
fprintf(ft," .clock(clk), \n");
fprintf(ft," .qa(ins_o[23:16]), \n");
fprintf(ft," .qb(dout_w[23:16]) \n");
fprintf(ft," ); \n");
 
fprintf(ft," sim_syn_ram1 ram1( \n");
fprintf(ft," .data(din[15:8]), \n");
fprintf(ft," .wraddress(data_addr), \n");
fprintf(ft," .rdaddress_a(pc), \n");
fprintf(ft," .rdaddress_b(data_addr), \n");
fprintf(ft," .wren(wren[1]), \n");
fprintf(ft," .clock(clk), \n");
fprintf(ft," .qa(ins_o[15:8]), \n");
fprintf(ft," .qb(dout_w[15:8]) \n");
fprintf(ft," ); \n");
 
fprintf(ft," sim_syn_ram0 ram0( \n");
fprintf(ft," .data(din[7:0]), \n");
fprintf(ft," .wraddress(data_addr), \n");
fprintf(ft," .rdaddress_a(pc), \n");
fprintf(ft," .rdaddress_b(data_addr), \n");
fprintf(ft," .wren(wren[0]), \n");
fprintf(ft," .clock(clk), \n");
fprintf(ft," .qa(ins_o[7:0]), \n");
fprintf(ft," .qb(dout_w[7:0]) \n");
fprintf(ft," ); \n");
fprintf(ft,"endmodule \n\n\n");
return 1;
}
 
/*Liwei 2007-8-29*/
char HEX[]="0123456789ABCDEF" ;
char hex[]="0123456789abcdef" ;
unsigned char hex2byte( char hex_char)
{
unsigned char i ;
for(i=0;i<16;++i)if(HEX[i]==hex_char)return i ;
for(i=0;i<16;++i)if(hex[i]==hex_char)return i ;
return 0 ;
}
unsigned int par2u32(char*par)
{
unsigned int i,ret=0 ;
if(par==NULL)return ;
if((0==strncmp(par,"0x",2))||(0==strncmp(par,"0X",2)))
for(i=2;;++i) {if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ; ret=ret*16+hex2byte(par[i]);}
else
for(i=0;;++i) {if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ; ret=ret*10+hex2byte(par[i]);}
return 0 ;
}
 
main(int argc,char*argv[])
{
int j=4,i=0,ii=0 ;
int cntr=0,base=0 ;
char str1[100],str2[111];
FILE*ff=fopen("code.txt","r");
FILE*ft=fopen("sim_ram.v","w");
if(NULL!=argv[1])
base=par2u32(argv[1])/4;
print_module(ft);
for(j=0;j<4;++j)
{
cntr=-10 ;
fprintf(ft,"module sim_syn_ram%d(\n",j);
fprintf(ft," input [7:0] data,\n");
fprintf(ft," input [10:0] wraddress,\n");
fprintf(ft," input [10:0] rdaddress_a,\n");
fprintf(ft," input [10:0] rdaddress_b,\n");
fprintf(ft," input wren,\n");
fprintf(ft," input clock,\n");
fprintf(ft," output [7:0] qa,\n");
fprintf(ft," output [7:0] qb\n");
fprintf(ft," );\n\n");
 
fprintf(ft," reg [7:0] r_data;\n");
fprintf(ft," reg [10:0] r_wraddress;\n");
fprintf(ft," reg [10:0] r_rdaddress_a;\n");
fprintf(ft," reg [10:0] r_rdaddress_b;\n");
fprintf(ft," reg r_wren;\n");
 
fprintf(ft," reg [7:0] mem_bank [0:2047] ;\n");
if(base!=0)
fprintf(ft," \ninteger i;\n initial begin\n for(i=0;i<%d;i=1+i)\n mem_bank[i] = 'h00;\n ",base);
else
fprintf(ft," \ninitial begin \n ");
 
rewind(ff);
cntr=-10 ;
i=-1 ;
while(fgets(str2,100,ff))
{
++i ;
if(3==j)
{
str2[2]=0 ;
fprintf(ft,"mem_bank[%d] = 'h%s ; ",base+i,&str2[0]);
++cntr ;
if(!(cntr%10))
{
cntr=0 ;
fprintf(ft,"\n ");
}
}
else
if(2==j)
{
str2[4]=0 ;
fprintf(ft,"mem_bank[%d] = 'h%s ; ",base+i,&str2[2]);
++cntr ;
if(!(cntr%10))
{
cntr=0 ;
fprintf(ft,"\n ");
}
}
else
if(1==j)
{
str2[6]=0 ;
fprintf(ft,"mem_bank[%d] = 'h%s ; ",base+i,&str2[4]);
++cntr ;
if(!(cntr%10))
{
cntr=0 ;
fprintf(ft,"\n ");
}
}
else
if(0==j)
{
str2[8]=0 ;
fprintf(ft,"mem_bank[%d] = 'h%s ; ",base+i,&str2[6]);
++cntr ;
if(!(cntr%10))
{
cntr=0 ;
fprintf(ft,"\n ");
}
}
}
fprintf(ft," \n end\n");
fprintf(ft," always @ (posedge clock) if (r_wren) mem_bank[r_wraddress]<=r_data;\n");
fprintf(ft," always @ (posedge clock)\n");
fprintf(ft," begin\n");
fprintf(ft," r_data<=data;\n");
fprintf(ft," r_wraddress<=wraddress;\n");
fprintf(ft," r_rdaddress_a<=rdaddress_a;\n");
fprintf(ft," r_rdaddress_b<=rdaddress_b;\n");
fprintf(ft," r_wren<=wren;\n");
fprintf(ft," end\n");
fprintf(ft," assign qa =(r_rdaddress_a>%d)?0:mem_bank[r_rdaddress_a];\n",base+i);
fprintf(ft," assign qb =(r_rdaddress_b>%d)?0:mem_bank[r_rdaddress_b];\n",base+i);
fprintf(ft,"endmodule\n\n\n\n");
}fclose(ft);
}
/genmif.c
0,0 → 1,110
/******************************************************************
* *
* Author: Liwei *
* *
* This file is part of the "mips789" project. *
* Downloaded from: *
* http://www.opencores.org/pdownloads.cgi/list/mips789 *
* *
* If you encountered any problem, please contact me via *
* Email:mcupro@opencores.org or mcupro@163.com *
* *
******************************************************************/
#include "stdio.h"
#include "stdlib.h"
#define DEFAULT_LEN "2048"
/*Liwei 2007-8-29*/
char HEX[]="0123456789ABCDEF" ;
char hex[]="0123456789abcdef" ;
unsigned char hex2byte(char hex_char)
{
unsigned char i ;
for(i=0;i<16;++i)if(HEX[i]==hex_char)return i ;
for(i=0;i<16;++i)if(hex[i]==hex_char)return i ;
return 0 ;
}
unsigned int par2u32(char*par)
{
unsigned int i,ret=0 ;
if(par==NULL)return ;
if((0==strncmp(par,"0x",2))||(0==strncmp(par,"0X",2)))
for(i=2;;++i)
{
if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ;
ret=ret*16+hex2byte(par[i]);
}
else
for(i=0;;++i)
{
if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ;
ret=ret*10+hex2byte(par[i]);
}
return 0 ;
}
/****************************/
 
 
void main(int argc,char*argv[])
{
int j=4,base=0,i=0 ;
char str1[100],str2[111];
FILE*ff=fopen("code.txt","r");
FILE*ft ;
for(j=0;j<4;++j)
{
if(j==0)
ft=fopen("qu2_ram0.mif","w");
else if(j==1)
ft=fopen("qu2_ram1.mif","w");
else if(j==2)
ft=fopen("qu2_ram2.mif","w");
else if(j==3)
ft=fopen("qu2_ram3.mif","w");
base=(NULL!=argv[1])?par2u32(argv[1]):0 ;
base=base/4 ;
fprintf(ft,"WIDTH=8;\n");
fprintf(ft,"DEPTH=%s;\n\n",DEFAULT_LEN);
fprintf(ft,"ADDRESS_RADIX=HEX;\n");
fprintf(ft,"DATA_RADIX=HEX;\n\n");
fprintf(ft,"CONTENT BEGIN \n");
i=base ;
if(base)while(i)
{
fprintf(ft," %X : %s;\n ",base-i,"00");
--i ;
}
rewind(ff);
rewind(ff);
rewind(ff);
i=-1 ;
while(fgets(str2,100,ff))
{
++i ;
if(3==j)
{
str2[2]=0 ;
fprintf(ft," %X : %s;\n ",i+base,&str2[0]);
}
else if(2==j)
{
str2[4]=0 ;
fprintf(ft," %X : %s;\n ",i+base,&str2[2]);
}
else if(1==j)
{
str2[6]=0 ;
fprintf(ft," %X : %s;\n ",i+base,&str2[4]);
}
else if(0==j)
{
str2[8]=0 ;
fprintf(ft," %X : %s;\n ",i+base,&str2[6]);
}
}
fprintf(ft,"END;");
}
}
/ser_dld.c
0,0 → 1,173
 
/* RS-232 example */
/* Compiles with Microsoft Visual C++ 5.0/6.0 */
/* (c) fpga4fun.com KNJN LLC - 2003, 2004, 2005, 2006 */
/* modified by Liwei 2007-9-2 */
 
#include "stdio.h"
#include "windows.h"
#include "conio.h"
#define MAX_PRG_SIZE 0x1d00
 
#define DEFAULT_BAUD_RATE 38400
/*the two functions listed between are added by Liwei 2007-8-29*/
char HEX[]="0123456789ABCDEF" ;
char hex[]="0123456789abcdef" ;
unsigned char hex2byte(char hex_char)
{
unsigned char i ;
for(i=0;i<16;++i)if(HEX[i]==hex_char)return i ;
for(i=0;i<16;++i)if(hex[i]==hex_char)return i ;
return 0 ;
}
unsigned char hex2u8(char*par)
{
return(hex2byte(par[0])*16+hex2byte(par[1]));
}
unsigned int par2u32(char*par)
{
unsigned int i,ret=0 ;
if(par==NULL)return ;
if((0==strncmp(par,"0x",2))||(0==strncmp(par,"0X",2)))
for(i=2;;++i)
{
if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ;
ret=ret*16+hex2byte(par[i]);
}
else
for(i=0;;++i)
{
if(par[i]=='\0')return ret ;if(par[i]==' ')return ret ;
ret=ret*10+hex2byte(par[i]);
}
return 0 ;
}
/****************************/
HANDLE hCom ;
 
void OpenCom(unsigned int baudrate,char*comno)
{
DCB dcb ;
COMMTIMEOUTS ct ;
hCom=CreateFile(comno,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hCom==INVALID_HANDLE_VALUE)exit(1);
if(!SetupComm(hCom,4096,4096))exit(1);
if(!GetCommState(hCom,&dcb))exit(1);
dcb.BaudRate=baudrate ;
//modified by `Liwei 2007-9-4
((DWORD*)(&dcb))[2]=0x1001 ;
/* set port properties for TXDI + no flow-control */
dcb.ByteSize=8 ;
dcb.Parity=NOPARITY ;
dcb.StopBits=2 ;
if(!SetCommState(hCom,&dcb))exit(1);
 
/* set the timeouts to 0 */
ct.ReadIntervalTimeout=MAXDWORD ;
ct.ReadTotalTimeoutMultiplier=0 ;
ct.ReadTotalTimeoutConstant=0 ;
ct.WriteTotalTimeoutMultiplier=0 ;
ct.WriteTotalTimeoutConstant=0 ;
if(!SetCommTimeouts(hCom,&ct))exit(1);
}
 
void CloseCom()
{
CloseHandle(hCom);
}
 
DWORD WriteCom(char*buf,int len)
{
DWORD nSend ;
if(!WriteFile(hCom,buf,len,&nSend,NULL))exit(1);
return nSend ;
}
 
void WriteComChar(char b)
{
WriteCom(&b,1);
}
 
int ReadCom(char*buf,int len)
{
DWORD nRec ;
if(!ReadFile(hCom,buf,len,&nRec,NULL))exit(1);
return(int)nRec ;
}
 
char ReadComChar()
{
DWORD nRec ;
char c ;
if(!ReadFile(hCom,&c,1,&nRec,NULL))exit(1);
return nRec?c:0 ;
}
//ser_dld 19200 COM1 N
void main(int argc,char*argv[])
{
char c,s[11];
int i,baud_rate ;
FILE*ff=fopen("code.txt","r");
baud_rate=(NULL!=argv[1])?par2u32(argv[1]):DEFAULT_BAUD_RATE ;
//baud_rate=DEFAULT_BAUD_RATE;
OpenCom(baud_rate,argv[2]);
WriteComChar('?');
Sleep(1);
i=100 ;
while(i--);
c=ReadComChar();
WriteComChar('!');
Sleep(10);
c=ReadComChar();
if((argv[3]!=NULL)&&(argv[3][0]=='N'))
{
}
else
{
if(c!='O')
{
//printf("%c",c);
printf("1,Powerup you board.\n2,Chech cable.\nany key to exit...\n");
getchar();
return ;
}
else
{
printf("Downloading,wait...\n");
}
}
 
rewind(ff);
while(fgets(s,10,ff))
{
WriteComChar(hex2u8((char*)(s+0)));
printf("%2.2x ",hex2u8((char*)(s+0)));
Sleep(1);
WriteComChar(hex2u8((char*)(s+2)));
printf("%2.2x ",hex2u8((char*)(s+2)));
Sleep(1);
WriteComChar(hex2u8((char*)(s+4)));
printf("%2.2x ",hex2u8((char*)(s+4)));
Sleep(1);
WriteComChar(hex2u8((char*)(s+6)));
printf("%2.2x \n",hex2u8((char*)(s+6)));
Sleep(1);
}
Sleep(1);
printf("Download to MIPS789 OK!\nPress RESET botton to RUN the MIPS789 program...");
WriteComChar(0x88);
getch();
CloseCom();
}

powered by: WebSVN 2.1.0

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