2010-08-13 17 views
0

Je vois du code qui va lire/écrire des registres périphériques. Je vois que les opérations d'écriture sont toutes suivies avec quelques retards. Il me semble que SW doit attendre que la valeur prenne effet sur HW. Certaines pages Web disent que le registre sera mis à jour à chaque cycle d'horloge. Je suppose que c'est la raison d'attendre. Eh bien, mes questions sont:comment lire/écrire un registre

  1. Est-ce que l'opération de lecture nécessite également un retard? Si oui, quand SW veut lire/écrire un registre, quelle est la séquence correcte pour le faire? Comme

[DELAY]

tmp = some_register // lire

some_register = tmp + 1 // écrire

[DELAY]

ou

tmp = some_register // lire

[DELAY]

some_register = tmp + 1 // écrire

[DELAY]

  1. si SW ne pas un tel retard après opération d'écriture? Je vois effectivement une opération d'écriture sans que ce délai puisse fonctionner correctement sur un processeur plus lent. Mais lorsque le code s'exécute à un processeur plus rapide, il échoue. Je pense que le délai est raisonnable. J'ai juste besoin d'une explication pourquoi cela fonctionne pour un processeur plus lent.

  2. Je ne suis pas très familier avec la fonctionnalité de registre. Des matériaux ou des liens utiles?

+0

Quelle plate-forme/CPU, x86, SPARC, BBC Micro? : D – Skurmedel

+0

Quel microcontrôleur ou microprocesseur et matériel externe utilisez-vous? – starblue

+0

X86 ............ – woho

Répondre

0

Faites votre retard après l'écriture.

  • lire
  • écrire
  • retard

Le matériel; un tableau de série externe aura besoin de temps pour que les choses se passent. Les processeurs peuvent écrire des données dans les registres IO très rapidement. De nombreuses puces IO n'acceptent pas les modifications souvent.

Les dispositifs les plus simples sur les ports IO sont des verrous connectés à une LED. Si vous écrivez 1, la lumière s'allume. Si vous écrivez 0, ça s'éteint. Si vous écrivez 0,1,0,1 sur l'appareil plus rapidement qu'il ne peut changer d'état, il ne sera pas mis à jour. La vitesse à laquelle le périphérique peut transférer des données de manière fiable depuis le bus de données de l'ordinateur est souvent plus rapide que la vitesse de sortie vers le monde réel. Il y a des tensions plus grandes, et un courant plus élevé dans les périphériques IO, et ils prennent plus de temps à changer que les petits signaux requis pour enregistrer les changements. Pour réduire la consommation d'énergie, de nombreux périphériques utilisent des broches de sortie cadencées. C'est parce que les dispositifs CMOS (CMOS est une technique de fabrication de puces commune de nos jours) dépensent une puissance proportionnelle au taux de changement des bits. Tenir tous les bits th même utilise peu de pouvoir. Les changements l'utilisent.

Les périphériques avec E/S cadencées (et les ports série sont le cas définitif) ne changeront/ne se mettront à jour que sur l'horloge suivante.

Lorsque vous utilisez un port série pour envoyer des données série, il peut prendre des millions d'horloges CPU pour les données à transmettre (si la vitesse (vitesse de transmission) du port série est très faible)

Le le délai correct le plus simple pour un port série simple est de lire le "bit prêt" du "registre d'état", et quand il est prêt à envoyer un autre octet, écrivez-le.

La solution avancée utilise des tampons et des interruptions. C'est un peu avancé pour vous de vous inquiéter pour le moment.