summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc/dcd/gpio/gpio.tex
diff options
context:
space:
mode:
Diffstat (limited to '2004/n/fpga/doc/dcd/gpio/gpio.tex')
-rw-r--r--2004/n/fpga/doc/dcd/gpio/gpio.tex87
1 files changed, 87 insertions, 0 deletions
diff --git a/2004/n/fpga/doc/dcd/gpio/gpio.tex b/2004/n/fpga/doc/dcd/gpio/gpio.tex
new file mode 100644
index 0000000..50911e8
--- /dev/null
+++ b/2004/n/fpga/doc/dcd/gpio/gpio.tex
@@ -0,0 +1,87 @@
+\subsection{Cahier des charges}
+
+Voici les contraintes du bloc de d'entrées / sorties :
+
+\begin{itemize}
+\item{Bloc de 8 entrées / sorties}
+\item{Chaque fils est configurable soit en entrée, soit en sortie}
+\item{Chaque fils est configurable pour générer ou non, une interruption lors
+d'un changement d'état}
+\item{Un signal de RAZ}
+\end{itemize}
+
+
+% en gros c'est comment est vu le module côté userland.
+\subsection{Vue comportementale}
+
+Les blocs d'entrées / sorties ont plusieurs utilités. La première est de
+pouvoir brancher des capteurs renvoyant une entrée binaire, par exemple la
+sortie d'un comparateur. Ce bloc permettra aussi de commander, des sorties
+comme par exemple l'allumage de LEDs.
+
+Finalement la troisième fonction de ce bloc sera de simuler un bus parallèle.
+En effet, l'année dernière, nous utilisions un bus parallèle pour lequel nous
+avons développé un certain nombre de cartes. A partir de blocs d'entrées /
+sorties, on peut donc réutiliser les modules précédements développés.
+
+On pourra voir la figure \ref{entity_gpio} page
+\pageref{entity_gpio} pour avoir une vue globale du module.
+
+\begin{figure}[htbp]
+\caption{Entity du bloc de gestion des interruptions}
+\begin{center}
+\scalebox{0.7}{
+\includegraphics {./gpio/images/entity.pdf}
+%\includegraphics[width=\textwidth]{./interrupt/images/entity.pdf}
+}
+\end{center}
+\label{entity_gpio}
+\end{figure}
+
+Du point de vue comportemental, son fonctionnement est le suivant. Au début,
+le PC configure le bloc après avoir envoyé un signal de remise à zéro. Il
+commence par configurer les différents fils soit en entrées, soit en sorties.
+Ensuite le PC configure quels fils devront générer une interruption. Une fois
+cela fait, il peut lire et écrire des données sur les entrées et sorties. La
+configuration du bloc gpio est réalisées en écrivant dans des registres.
+
+On remarque que ce module possède quatres signaux "chip select" :
+cs\_reg\_data, cs\_reg\_direction, cs\_reg\_it\_mask et cs\_read\_output.
+Le signal cs\_read\_output permet de lire l'états de 8 broches d'entrées /
+sorties. Les autres signaux permettent d'accéder aux registres contenant le
+masque des directions, le masque d'interruption et les données à mettre sur
+les lignes en sorties.
+
+Ces trois registres ont la particularité de pouvoir être écrit mais aussi lu.
+En effet, pour la phase de teste il nous semble utile que les registres
+puissent être relus. Ainsi on pourra s'assurer que la configuration est bien
+celle désirée. Voici donc les procédures d'écriture et de lecture des
+registres.
+
+La procédure d'écriture est la suivante. Tout d'abord, le PC écrit sur le bus
+de donnés l'octet lui permettant de configurer tel ou tel registre.
+Simultanément, il positionne le signal $R\bar{W}$ en mode écriture (Write).
+Finalement, il sélectionne à l'aide d'un des signal CS (Chip select) le
+registre dans lequel il veut écrire.
+
+La procédure de lecture s'effectue en positionnant le signal $R\bar{W}$ en
+lecture (Read), puis en sélectionnant le chip select du registre auquel on
+désire accéder.
+
+Pour résumer, voici quelques informations utiles :
+\begin{itemize}
+\item{La lecture (signal $R\bar{W}$) : active pour un état haut}
+\item{La écriture (signal $R\bar{W}$) : active pour un état bas}
+\item{Le masque d'interruptions : interruption active pour un état haut,
+ inactive pour un état bas}
+\item{Le masque de directions : en sortie pour un état haut, en entrée pour un
+ état bas}
+\end{itemize}
+
+% Voici un exemple pour illustrer les discours précédents.
+
+% Ajouter le chronogramme du test des gpio.
+% Mettre en R / W_barre. si c'est cela. Ajouter quelle valeur est on a une
+% interruption et quelle valeur dis a pas !
+
+% Copier la suite dans le fichier de la gestion des interruptions !