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:
Pouvez vous m'aider, et me signaler des erreurs si vous vous en apercevez?
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); }
Merci d'avance c'est urgent!
Partager