Bonjour,

J'ai un compte rendu de TP a rendre sur une liaison serie RS232 et je seche un peu. voici le sujet (en gros)
- Écrire en langage C une fonction initialiser_interface() qui effectue l'initialisation de l'UART 8250, Rapidité de modulation : 9600 bauds.
- Écrire une fonction qui envoie un caractère sur la liaison série.
Répéter :
interroger l'interface (lire LSR);
Tant que pas prêt à émettre (bit 5 de LSR == 0);
Envoyer l'octet (l'écrire dans THR).
- Écrire une fonction qui attend l'arrivée d'un caractère, le lit et le retourne.
Lorsque j'execute mon programme j'ai une permission refusée. le voici:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);	
 
}
Pouvez vous m'aider, et me signaler des erreurs si vous vous en apercevez?
Merci d'avance c'est urgent!