📄 s7026.cpp
字号:
timesec=time(NULL);
for (i=0; i < SIZEb-rb_size;)
{
receivf=0;
transf=0;
outportb(BaseAdr+portadr[gstepn]+IER, 0x02);
//enable transmit and receive interrupt
if (display==1)
{
if (re_rec==1)
{
gotoxy(x,y);
printf("%d %c",i,BBuffer[gstep][i-1]);
re_rec=0;
}
}
if ((time(NULL)-timesec) > 20)
{
fprintf(stderr,"\ncheck physical connection,confirmed right and try again\n");
printf("if confirmed, what wrong with the two ports \n");
exit(0);
}
if ((1==transf)&&(0==receivf))
{
printf("PORT%d couldn't receive,check physical connection\n",gstep+1);
transf=0;
break;
}
if ((bioskey(1)!=0))//press any key to break
{
bioskey(0);
break;
}
//delay(20);
}
if (display==1)
printf("\n");
}
else if (gstep < PORTSUM) //a port comminute to other device serial port
{
outportb(BaseAdr+portadr[gstep]+IER, 0x01);
fprintf(stderr, "Receive char number and last char:");
x=wherex();
y=wherey();
if (portsend == 1)
{
i=0;
{
outport(BaseAdr+portadr[gstep],txbuf1[1]);
head1=0;
}
for (; ;)
{
outportb(BaseAdr+portadr[gstep]+IER, 0x03);
//enable transmit and receive interrupt
if ((bioskey(1)!=0))//press any key to break
{
bioskey(0);
break;
}
if (i >= SIZEb-rb_size)
{
break;
}
gotoxy(x,y);
printf("%d %c",ide[gstep],BBuffer[gstep][i-1]);
// delay(20);
}
}
for ( ; i < SIZEb-rb_size ;)
{
if ((bioskey(1)!=0))//press any key to break
{
bioskey(0);
break;
}
}
//return 0;
if (display==1)
printf("\n");
}
else //eight port
{
for (j=0; j < PORTSUM; j++)
{
if (titl950 < 36)
{
titl950=36;
tralevel=rb_size-titl950;
}
for (i=0; i < PORTSUM; i++)
{
IndecontrolReg(BaseAdr,portadr[i],0x0c,0x00);
UartsRegsset(BaseAdr, portadr[i], bautrat);
//IndecontrolReg(BaseAdr,portadr[i],TTL, titl950);
outportb(BaseAdr+portadr[i]+IER, 0x00);
outportb(BaseAdr+portadr[i]+LCR, inportb(BaseAdr+portadr[i]+LCR) & 0x7f);
while ((inportb(BaseAdr+portadr[i]+LSR) & 0x01) == 0x01)
inportb(BaseAdr+portadr[i]);
}
outportb(BaseAdr+portadr[7-j]+IER, 0x01);
if (modevar == 6)
{
for (head2=tralevel; head2 != rb_size; head2++)//trigger empty trans
{
outportb(BaseAdr+portadr[gstep], txbuf1[head2]);
}
}
else if (modevar == 4)
{
for (head2=(rb_size-titl650); head2 != rb_size; head2++)//trigger empty trans
{
outportb(BaseAdr+portadr[gstep], txbuf1[head2]);
}
}
else
{
outport(BaseAdr+portadr[gstep],txbuf1[1]);
head1=0;
}
if (display==1)
{
printf("PORT%d Interrupt received char number last char:",8-j);
x=wherex();
y=wherey();
}
timesec=time(NULL);
for (i=0 ; i < SIZEb-rb_size;)
{
outportb(BaseAdr+portadr[j]+IER, 0x02);
//enable transmit and receive interrupt
if ((bioskey(1)!=0))//press any key to break
{
bioskey(0);
break;
}
if (display==1)
{
if (re_rec==1)
{
gotoxy(x,y);
printf("%d %c",i,BBuffer[7-j][i-1]);
re_rec=0;
}
}
if ((time(NULL)-timesec) > 20)
{
fprintf(stderr,"\ncheck physical connection,confirmed right and try again\n");
printf("if confirmed, what wrong with PORT %d couldn't receive char\n",8-j);
exit(0);
}
}
delay(8);
if (display==1)
printf("\n");
}
}
for (j=0; j < PORTSUM; j++)
outport(BaseAdr+portadr[j]+IER, 0x00);
Close_txrx(intvet);
//showmsg(ErrDetected, ErrorCode);
if (modevar == 4)
slength=titl650;
else if (modevar == 6)
slength=titl950;
else slength=rb_size;
cyccount=(SIZEb-rb_size)/slength;
//if (loopbackb==0x10)
if (portsend == 1)
{
if (ide[gstep] >= SIZEb-rb_size)
{
BBuffer[gstep][SIZEb-rb_size]='\0';
printf("%s",BBuffer[gstep]);
exit(0);
}
}
for (i=0; i < PORTSUM; i++)
intok[i]=0;
if (stsleng == 0)
{
for (i=0; i < PORTSUM; i++)
{
if (BBuffer[i][0] == 0xff)continue;
errno=0;
recright=0;
if ((modevar == 4)||(modevar == 6))
{
for (k=0; k<slength; k++)
{
Stemp[k]=txbuf1[rb_size-slength+k];
}
Stemp[k]='\0';
}
else strcpy(Stemp, txbuf1);
for (m=0,l=0; l<2; l++)
{
for (; ;m++)
{
if (BBuffer[i][m]==Stemp[0])break;
}
m++;
}
m--;
for (k=0; k<cyccount; k++)
{
for (l=0; l<slength; l++)
{
if (modevar==4||modevar==6)
Rtemp[l]=BBuffer[i][k*slength+m+l];
else Rtemp[l]=BBuffer[i][k*slength+l];
if (display==1)
{
if ((gstep<PORTSUM)&&(gstepn<PORTSUM))
printf("%c",Rtemp[l]);
}
}
Rtemp[l]='\0';
if (!strcmp(Stemp,Rtemp))
recright++;
else errno++;
}
if ((recright == cyccount)||((recright+1)==cyccount)||(errno < 3))
intok[i]=1;
else if(errno>1) intok[i]=errno;
}
if (display==1)
printf("\n");
for (i=0; i < PORTSUM; i++)
{
if (intok[i] == 1)
{
printf("PORT%d Interrupt ",i+1);
textcolor(GREEN);
printf("OK \r\n");
textattr(CRTtextinfo.attribute);
}
else if (intok[i] > 1)
printf("existing %d error \n",intok[i]);
}
}//end strleng==0
else//if (stsleng > 0)
{
for (i=0; i < PORTSUM; i++)
{
if (BBuffer[i][0] == 0xff)continue;
for (j=0; j < 128; j++)
printf("%c",BBuffer[i][j]);
printf("\n\r");
}
}
if (com1_writefileid==1)
{
if ((com1_fp=fopen("\\com1xx.dat","ab"))==NULL)
{
printf("cannot open \\com1xx.dat file\n");
}
if (com1_writebufferid==1)
{
if (portsend == 1)
fwrite(BBuffer[gstep],SIZEb,1,com1_fp);
else if (gstep < PORTSUM)
fwrite(BBuffer[gstep],SIZEb,1,com1_fp);
else
fwrite(BBuffer[2],SIZEb,1,com1_fp);
fclose(com1_fp);
com1_writefileid=0;
}
else
{
if (gstep < PORTSUM)
fwrite(BBuffer[gstep],SIZEb,1,com1_fp);
else
fwrite(BBuffer[2],SIZEb,1,com1_fp);
fclose(com1_fp);
com1_writefileid=0;
}
}
if (com2_writefileid==1)
{
if ((com2_fp=fopen("\\com2xx.dat","ab"))==NULL)
{
printf("cannot open \\com2xx.dat file\n");
}
if (com2_writebufferid==1)
{
if (gstepn < PORTSUM)
fwrite(BBuffer[gstepn],SIZEb,1,com1_fp);
else
fwrite(BBuffer[1],SIZEb,1,com2_fp);
fclose(com2_fp);
com2_writefileid=0;
}
else
{
if (gstepn < PORTSUM)
fwrite(BBuffer[gstepn],SIZEb,1,com1_fp);
else
fwrite(BBuffer[1],SIZEb,1,com2_fp);
fclose(com2_fp);
com2_writefileid=0;
}
}
return 0;
}
/*
void SendChar(int chanel,char c)
{
unsigned int port=BA[chanel];
while((inportb(port+LSR) & 0x20) !=0x20) ;
outportb(port+THR,c);
}
void SendString(int chanel,char *buffer,int len)
{
int i;
for(i=0;i<len;i++)
SendChar(chanel,buffer[i]);
}
enum portstate{NONE,STARTSEND,SENDING,ENDSEND,STARTRECIEVE,RECIEVING,ENDRECIEVE};
enum portstate ps[8],pspre[8];//ps1=NONE,ps1pre=NONE,ps2=NONE,ps2pre=NONE;
BQue queue[8];
BQue *ptrqueue[8];
char buf[8][2048];//buf2[2048];
int Intertxrx( )
{
int k;
char recloop[8];
char sendchar[8];
char endchar,c,tt;
char seldata;
char pause=0;
char display=0;
for (k=0; k < 8; k++)
{
ps[k]=NONE;
pspre[k]=NONE;
}
for (k=0; k < 8; k++)
{
ptrqueue[k]=&queue[k];
}
printf("select data bits:[0--5 1--6 2--7 3--8]:");
scanf("%d",&seldata);
switch(seldata){
case 0://5 bit
endchar=0x1f;
break;
case 1://6 bit
endchar=0x3f;
break;
case 2://7 bit
endchar=0x7f;
break;
case 3://8 bit
endchar=0xff;
break;
default:
endchar=0xff;
break;
}
printf("press space to begin\n");
for (k=0; k < 8; k++)
{
BQueInit(ptrqueue[k],2000,buf[k]);
}
outportb(0x20, 0x20);
outportb(0xa0, 0x20);
for (k=0; k < 8; k++)
{
outportb(BaseAdr+portadr[i]+LCR, inportb(BaseAdr+portadr[i]+LCR) & 0x7f);
while ((inportb(BaseAdr+portadr[i]+LSR) & 0x01) == 0x01)
inportb(BaseAdr+portadr[i]);
outportb(BaseAdr+portadr[i]+IER, 0x00);
}
Inter_txrx(intvet);
while (1)
{
if (pause == 0)
{
for (k=0; k < 8; k++)
{
//while(inportb(BA[0]+LSR) & 0x01)
while (ptrqueue[k]->count > 0)
{
//c=inportb(BA[0]+RBR);
c=BQueGet(ptrqueue[k]);
if (c == 0x00)
{ ps[k]=STARTRECIEVE;expectchar=0x02;continue;}
if (c == 0x01)
{
ps[k]=STARTSEND;
if(display) printf("\n");
recloop[k]++;
if (recloop[k] > 30)
{
recloop[k]=0;
if(display==0) printf("1");
}
continue;
}
if (ps[k] == STARTRECIEVE)
{
if (display) printf("%x ",(unsigned char)c);
if (expectchar != c)
{
printf("error %02x %02x\n",expectchar,c);
error=1;
}
expectchar++;
}
}
// }
//for (k=0; k < 8; k++)
// {
if (ps[k] != NONE)
{
if (ps[k] == STARTSEND)
{
SendChar(0,0x00);
ps[k]=SENDING;
sendchar[k]=0x02;
}
if (ps[k] == SENDING)
{
SendChar(0,sendchar[k]);
if (sendchar[k] != endchar) sendchar[k]++;
else ps[k]=ENDSEND;
}
if (ps[k] == ENDSEND)
{
SendChar(0,0x01);
ps[k]=NONE;
}
}
}
}
if(kbhit())
{
tt=getch();
if(tt==27) break;
if(tt==' ') {ps[0]=STARTSEND;sendchar[0]=0x02;};
if(tt=='p') pause=1-pause;
}
return 0;
}
*/
int main(int argc, char **argv)
{
unsigned char rtl[4];
unsigned char ttl[4];
unsigned char ritl[4];
unsigned char titl[4];
unsigned char ccpb[4];
unsigned char pcitest[3];
int testmode=2;
char bautrat[8]="B19200";
modevar=6;
portsend=0;
display=1;
re_rec=0;
//cks54=0x20;
//acr43=0;
tcr30ccpb=0x00;/*0--16 clock cycle per bit*/
fcr54titl=0x00;/*0--16 transmit interrupt trigger level*/
lcr10dl=3; /*3--8bits data length of serial characters*/
lcr2nos=0; /*0--1bit number of stop bits per serial charater*/
lcr53pt=0x00; /*0-no parity po pe p1 p0*/
titl950=0x30;
fcr76rtl=0x00;
titl650=0x20;
rtl650=0x10;
rtl950=0x30;
gstep=20;
gstepn=20;
loopbackb=0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -