1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
| void initialiser_interface(void)
{
int LCR = 0x3FB; //initialisation adresse LCR
int DLM = 0x3F8; //initialisation adresse DLM
int DLL = 0x3F9; //initialisation adresse DLL
int erreur=ioperm(LCR,10,666);
if(erreur==-1) // test permission acces aux couches basses des systemes
{
printf("permission refusee\n");
}
outb(inb(LCR)|0x80,LCR); // force le DLAB a 1 pour programmer la vitesse avec un Masque
outb(0x00, DLM); //programation vitesse 9600 bauds
outb(0x0C, DLL);
}
void envoi_octet(unsigned char car)
{
int LSR = 0x3FD; //initialisation adresse LSR
int THR = 0x3F8; //initialisation adresse THR
int LCR = 0x3FB; //initialisation adresse LCR
int erreur=ioperm(LCR,10,666);
if(erreur==-1) // test permission acces aux couches basses des systemes
{
printf("permission refusee\n");
}
do
{
wait(); // Attendre
}while((inb(LSR) & 0x20)==0); // tant que le registre d 'emission est plein (test bit 5 si egale 0 ou1)
outb(inb(LCR) & 0x7F,THR);
outb(car,THR);
}
unsigned char lecture(void)
{
int LSR = 0x3FD; //initialisation adresse LSR
int RHR = 0x3F8; //initialisation adresse RHR
int LCR = 0x3FB; //initialisation adresse LCR
char car;
int erreur=ioperm(LCR,10,666);
if(erreur==-1) // test permission acces aux couches basses des systemes
{
printf("permission refusee\n");
}
do
{
wait(); //Attente d'un caractere
}while((inb(LSR) & 0X01)==0); // tant que bit de poids faible ==0 / pas de reception
outb(inb(LCR) & 0x7F,RHR); //lecture registre RHR, insere valeur dans variable car
outb(car,RHR);
return(RHR);
} |
Partager