Faible niveau d'accès d'e/S à l'aide de outb et inb
je vais avoir du mal à comprendre comment les interruptions de travail.
le code ci-dessous initialiser le Contrôleur d'interruptions Programmable
#define PIC0_CTRL 0x20 /* Master PIC control register address. */
#define PIC0_DATA 0x21 /* Master PIC data register address. */
/* Mask all interrupts*/
outb (PIC0_DATA, 0xff);
/* Initialize master. */
outb (PIC0_CTRL, 0x11); /* ICW1: single mode, edge triggered, expect ICW4. */
outb (PIC0_DATA, 0x20); /* ICW2: line IR0...7 -> irq 0x20...0x27. */
outb (PIC0_DATA, 0x04); /* ICW3: slave PIC on line IR2. */
outb (PIC0_DATA, 0x01); /* ICW4: 8086 mode, normal EOI, non-buffered. */
/* Unmask all interrupts. */
outb (PIC0_DATA, 0x00);
quelqu'un peut m'expliquer comment cela fonctionne:
-le rôle de outb (je n'ai pas compris le linux homme)
-les adresses et leur signification
une autre question sans rapport,j'ai lu que outb et inb sont pour port-mapped I/O, peut-on utiliser memory-mapped I/o pour faire d'Entrée/sortie de la communication?
grâce.
Pour le matériel qui est contrôlé par mappés en mémoire IO (dont le PIC est pas), vous pouvez bien sûr le faire de mémoire mappée IO.
Le 8086 hérité de ces instructions de ses prédécesseurs, 8080 et 8085, où une e/S distincts de l'espace a été très utile afin de ne pas perdre l'un de l'64 ko d'espace d'adressage de mémoire.
Le 8086 hérité de ces instructions de ses prédécesseurs, 8080 et 8085, où une e/S distincts de l'espace a été très utile afin de ne pas perdre l'un de l'64 ko d'espace d'adressage de mémoire.
OriginalL'auteur Amine Hajyoussef | 2012-01-22
Vous devez vous connecter pour publier un commentaire.
outb()
écrit l'octet spécifié par son deuxième argument de l'I/O port spécifié par son premier argument. Dans ce contexte, un "port" est un moyen pour le PROCESSEUR de communication avec une autre puce.Spécifiques du code C qui vous présente a trait à la 8259A PIC (Programmable Interrupt Controller).
Vous pouvez lire sur le PIC ici et ici.
Si cela ne fournissent pas suffisamment de détails pour comprendre les commandes et les masques de bits, vous pouvez toujours vous référer à la puce feuille de données.
OriginalL'auteur NPE
Appareil code spécifique est préférable de lire en conjonction avec la fiche technique correspondante. Par exemple, le "8259A Contrôleur d'interruptions Programmable" fiche technique (http://pdos.csail.mit.edu/6.828/2005/readings/hardware/8259A.pdf clairement (mais de manière concise) explique à peu près tout.
Toutefois, cette fiche sera seulement d'expliquer comment la puce peut être utilisée (dans n'importe quel système), et de ne pas expliquer comment la puce est utilisée dans un système spécifique (par exemple, dans "compatible PC" 80x86 systèmes). Pour cela vous avez besoin de s'appuyer sur "implicite des normes de facto" (comme un grand nombre des fonctionnalités du PIC puces ne sont pas utilisées sur la "compatible PC" 80x86 systèmes, et ne peuvent pas être pris en charge sur les modernes/les chipsets intégrés).
Normalement (pour des raisons historiques), le PIC de puce Irq sont mappés à des interruptions dans un étrange/mauvaise voie. Par exemple, IRQ 0 est mappé à l'interruption de 8 et les conflits avec les CPU double-faute d'exception. Le code que vous avez posté reconfigure le PIC puces de sorte que IRQ0 est mappé à interrompre 0x20 (et IRQ1 interrompre 0x21, ..., IRQ 15 mappés à des IRQ 0x2F). C'est quelque chose que l'OS est généralement à éviter les conflits (par exemple, de sorte que chaque interruption est utilisée pour une IRQ ou une exception et jamais les deux).
À comprendre "outb()", regardez les "SORTIR" de l'enseignement d'Intel manuels. C'est comme il y a 2 espaces d'adressage - un pour le mode normal adresses physiques et un tout distinct pour les ports e /s, là où des instructions (indirectement) l'accès physique normal de la mémoire; et la port e /instructions (IN, OUT, INSB/W/D, OUTSB/W/D) pour accéder à la séparer "IO espace d'adressage".
OriginalL'auteur Brendan
La traditionnelle 8088/86 a/a une mémoire de signal de commande qui est essentiellement une autre adresse bits directement liée à l'instruction. Le signal de commande de séparer les accès I/O et la Mémoire, la création de deux espaces d'adressage. Pas contrairement à CS, DS, etc création de séparer les espaces de mémoire à l'intérieur de la puce (avant d'appuyer sur la mémoire externe de l'espace). D'autres familles de processeurs utilisent ce qu'on appelle memory mapped I/O.
Ces jours, les contrôleurs de mémoire/système de coupe à l'intérieur et à l'extérieur de la puce dans toutes les différentes façons, parfois par exemple avec de nombreux signaux de commande qui indiquent l'instruction vs de données, la ligne de cache se remplit, écrire par le biais de vs écrire de nouveau, etc. Pour économiser sur les circuits externes le mappage de la mémoire qui se passe à l'intérieur de la carte à puce par exemple dédié rom interfaces, distincte de la ram, etc se trouvent sur le bord, bien plus compliqué et plus distincte que l'espace d'e/S vs de l'espace Mémoire de l'ancien 8088/86.
la sortie et de l'instruction et de quelques membres de la famille de changement si vous faites un I/O de l'accès ou de l'accès à la mémoire, et traditinally le contrôleur d'interruption a été une puce qui décodé le bus mémoire à la recherche pour les accès I/O avec l'adresse attribuée à l'appareil. Des décennies de la rétro compatibilité plus tard et vous avez le présent code que vous recherchez.
Si vous voulez vraiment comprendre, il vous suffit de trouver les fiches techniques de l'appareil qui contient le contrôleur d'interruption, susceptibles d'être combinés avec un tas d'autres logiques, d'un grand soutien de la puce. D'autres fiches techniques peuvent être requis.
Oui, je suis en train d'expliquer ce que j'/S mappées vs mappés en mémoire signifie que, traditionnellement, pour les architectures x86, signifie une seule ligne de commande. D'autres architectures ont utilisé une ou plusieurs des bits de l'adresse pour faire la même chose. très peu de différence d'autres que x86 que le signal de commande a été liée à des instructions spéciales.
pci ajouté à la complication en permettant à certains éléments pour être adressable dans l'espace d'adresse. coller avec in/out, éventuellement, facilite le contrôle et la virtualisation par rapport à la mémoire. Il y a un IOPM I/O, la protection de la carte, je pense que par VM (dans ce cas, même une simple application sur une machine linux) vous avez un IOPM. Regardez en haut de la giveio pilote pour windows pour en apprendre un peu plus à ce sujet et comment la contourner.
OriginalL'auteur old_timer