@lay:3326l2

@sidehd:Listing 2.The application program.

@cx:#include <\<>linux/unistd.h<\>><\n>
_syscall1(int,sioEnable,int,numero)<\n>
_syscall0(int,sioRead)<\n>
_syscall0(int,sioUartType)<\n>
_syscall0(int,sioEnd)<\n>
_syscall1(int,sioWrite,unsigned char,c)<\n>
_syscall1(void,sioSetDivisor,unsigned,newDiv)<\n>
static void SelectDivisor();<\n>
unsigned *divisores[]={0,0x0900,0x0600,0x0417,0x0180,0x00c0,0x0060,<\n>
			0x0030,0x0018,0x000c};<\n>
main()<\n>
{<\n>
int i,op;<\n>
unsigned char c;<\n>
char *tipo[]={<\#34>0<\#34>,<\#34>16550a<\#34>,<\#34>16550<\#34>,<\#34>16450 o 8250A<\#34>,<\#34>8250 o 8250B<\#34>};<\n>
while(1){<\n>
do{<\n>
printf(<\#34>OPCIONES:<\\>n<\#34>);<\n>
printf(<\#34>  1) Enable COM1<\\>n<\#34>);<\n>
printf(<\#34>  2) Change Divisor<\\>n<\#34>);<\n>
printf(<\#34>  3) Disable COM1<\\>n<\#34>);<\n>
printf(<\#34>  4) Write to COM1<\\>n<\#34>);<\n>
printf(<\#34>  5) Quit this menu<\\>n<\#34>);<\n>
printf(<\#34>==<\>><\#34>);<\n>
scanf(<\#34>%d<\#34>,&op);<\n>
}while(op<\<>1||op<\>>6);<\n>
switch(op){<\n>
	case 1:<\n>
	  if((i=sioEnable(4))==1)printf(<\#34>IRQ4<\#150><\#150>ok!!<\\>n<\#34>);<\n>
	  break;<\n>
	case 2:<\n>
	  SelectDivisor();<\n>
	  break;<\n>
	  case 3:<\n>
	  sioEnd();<\n>
	  break;<\n>
	case 4:<\n>
	  do{<\n>
c=getchar();<\n>
sioWrite(c);<\n>
}while(c!=27);<\n>
if(c==27)printf(<\#34>ESC<\\>n<\#34>);<\n>
	  break;<\n>
	case 5:<\n>
	exit(0);<\n>
	}<\n>
}/*while 1*/<\n>
}/*main*/<\n>
<\n>
static void SelectDivisor()<\n>
{<\n>
int op;<\n>
do{<\n>
printf(<\#34>1) Default 0x0900 =    50 BPS<\\>n<\#34>);<\n>
printf(<\#34>2) 0x0600 =    75 BPS<\\>n<\#34>);<\n>
printf(<\#34>3) 0x0417 =   110 BPS<\\>n<\#34>);<\n>
printf(<\#34>4) 0x0180 =   300 BPS<\\>n<\#34>);<\n>
printf(<\#34>5) 0x00C0 =   600 BPS<\\>n<\#34>);<\n>
printf(<\#34>6) 0x0060 =  1200 BPS<\\>n<\#34>); <\n>
printf(<\#34>7) 0x0030 =  2400 BPS<\\>n<\#34>); <\n>
printf(<\#34>8) 0x0018 =  4800 BPS<\\>n<\#34>); <\n>
printf(<\#34>9) 0x000C    9600 BPS<\\>n<\#34>);	<\n>
printf(<\#34> 10) Quit this menu<\\>n<\#34>);<\n>
printf(<\#34>==<\>><\#34>);<\n>
  scanf(<\#34>%d<\#34>,&op);<\n>
}while(op<\<>1 || op<\>>10);<\n>
  printf(<\#34>%x<\\>n<\#34>,divisores[op]);<\n>
  sioSetDivisor(divisores[op]);<\n>
}/*SelectDivisor*/<\n>
1
