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

Subversion Repositories mips789

[/] [mips789/] [branches/] [avendor/] [CTool/] [ser_dld.c] - Rev 51

Compare with Previous | Blame | View Log

 
/*  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();
}
 

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

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