summaryrefslogtreecommitdiff
path: root/2004/n/fpga/doc
diff options
context:
space:
mode:
authorprot2004-03-11 21:54:51 +0000
committerprot2004-03-11 21:54:51 +0000
commit0a5c9862bef6ea68e05213f3d097de90e85f0087 (patch)
tree22f0913699cac960ce363aa68fcffd75a40fed30 /2004/n/fpga/doc
parent0de72f95a5502dd157fd5f3b40f9b611940c2e75 (diff)
.
Diffstat (limited to '2004/n/fpga/doc')
-rw-r--r--2004/n/fpga/doc/dossierconception/Makefile18
-rw-r--r--2004/n/fpga/doc/dossierconception/image.pngbin0 -> 18419 bytes
-rw-r--r--2004/n/fpga/doc/dossierconception/images/rxserie.pdfbin0 -> 14895 bytes
-rw-r--r--2004/n/fpga/doc/dossierconception/images/txserie.pdfbin0 -> 15083 bytes
-rw-r--r--2004/n/fpga/doc/dossierconception/io.c171
-rw-r--r--2004/n/fpga/doc/dossierconception/io.h15
-rw-r--r--2004/n/fpga/doc/dossierconception/ov6620.fig200
-rw-r--r--2004/n/fpga/doc/dossierconception/ovcam.c47
-rw-r--r--2004/n/fpga/doc/dossierconception/ovcam.tex120
-rw-r--r--2004/n/fpga/doc/dossierconception/ovcam1.fig67
-rw-r--r--2004/n/fpga/doc/dossierconception/ovcam2.fig140
-rw-r--r--2004/n/fpga/doc/dossierconception/portserie.tex392
-rw-r--r--2004/n/fpga/doc/dossierconception/rapport.tex68
-rw-r--r--2004/n/fpga/doc/dossierconception/rdcam.c124
-rw-r--r--2004/n/fpga/doc/dossierconception/rdcam.h18
15 files changed, 1380 insertions, 0 deletions
diff --git a/2004/n/fpga/doc/dossierconception/Makefile b/2004/n/fpga/doc/dossierconception/Makefile
new file mode 100644
index 0000000..221bd36
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/Makefile
@@ -0,0 +1,18 @@
+SUBDIR=
+
+all: ovcam2.pdf ov6620.pdf
+ for i in $(SUBDIR); do (cd $$i; $(MAKE) all); done
+ $(MAKE) rapport.pdf
+
+%.pdf: %.tex
+ pdflatex $<
+ pdflatex $<
+ pdflatex $<
+
+%.pdf: %.fig
+ fig2dev -L pdf -p dummy $< $@
+
+clean:
+ for i in $(SUBDIR); do (cd $$i; $(MAKE) clean); done
+ rm -f *.dvi *.aux *.log *.toc *.eps *.pdf *.ps
+
diff --git a/2004/n/fpga/doc/dossierconception/image.png b/2004/n/fpga/doc/dossierconception/image.png
new file mode 100644
index 0000000..130b1f4
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/image.png
Binary files differ
diff --git a/2004/n/fpga/doc/dossierconception/images/rxserie.pdf b/2004/n/fpga/doc/dossierconception/images/rxserie.pdf
new file mode 100644
index 0000000..0606476
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/images/rxserie.pdf
Binary files differ
diff --git a/2004/n/fpga/doc/dossierconception/images/txserie.pdf b/2004/n/fpga/doc/dossierconception/images/txserie.pdf
new file mode 100644
index 0000000..4a2f3b9
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/images/txserie.pdf
Binary files differ
diff --git a/2004/n/fpga/doc/dossierconception/io.c b/2004/n/fpga/doc/dossierconception/io.c
new file mode 100644
index 0000000..0fd6d21
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/io.c
@@ -0,0 +1,171 @@
+/* io.c contient la procedure pour configurer la camera
+ * (I2C)
+ */
+
+#include "io.h"
+#include <sys/ports.h>
+
+#include <sys/sio.h>
+#include <sys/interrupts.h>
+
+#define I2CCLK BITN(3)
+#define I2CDATA BITN(4)
+
+void
+i2c_init (void)
+{
+ // 1 ---> ouput
+ // 0 ---> input
+ // configuration des lignes en sortie
+ _io_ports[M6811_DDRA] = I2CCLK | I2CDATA;
+ // mise à 1 des lignes dans (libération du bus
+ _io_ports[M6811_PORTA] |= I2CCLK |I2CDATA;
+}
+
+/*
+ * Start procedure
+ * Data ---------------\________________
+ * Clk --------------------\___________
+ *
+ */
+
+void
+i2c_start(void)
+{
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+}
+/*
+ * End procedure
+ * Data ___________________/-----
+ * Clk _________/---------------
+ *
+ */
+
+void
+i2c_end(void)
+{
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] |= I2CDATA;
+ wait_2v5us();
+}
+
+ void
+wait_2v5us(void)
+{
+ unsigned char i;
+ for (i=0;i<200;i++)
+ {
+ __asm__("nop");
+ }
+}
+
+void
+i2c_send_charnl (unsigned char data)
+{
+ unsigned char cmpt;
+ for (cmpt=0;cmpt<8;cmpt++)
+ {
+ if (data & 0x80) // si le bit de poids fort est 1, il faut mettre 1 sur la ligne
+ {
+ _io_ports[M6811_PORTA] |= I2CDATA;
+ }
+ else
+ {
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ }
+ wait_2v5us();
+ wait_2v5us();
+ // on s'occupe de produire un front d'horloge
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ /* Nous avons traité le bit de poid le plus fort
+ * continuons */
+ data = data << 1;
+ }
+ wait_2v5us();
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+}
+
+unsigned char
+i2c_read_char (void)
+{
+ char cmpt;
+ unsigned char data = 0;
+ // configuration de la ligne data en entré
+ _io_ports[M6811_DDRA] &= ~I2CDATA;
+ for (cmpt=0; cmpt<8;cmpt++)
+ {
+ _io_ports[M6811_PORTA] |=I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA];
+ if (_io_ports[M6811_PORTA] & I2CDATA) //si ligne data est à 1
+ data++;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &=~I2CCLK;
+ wait_2v5us();
+ data = data<<1;
+ }
+ // traitement de l'ack dans le cas d'une derniere lecture
+ _io_ports[M6811_DDRA] |= I2CDATA;
+ _io_ports[M6811_PORTA] |= I2CDATA;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] |= I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CCLK;
+ wait_2v5us();
+ _io_ports[M6811_PORTA] &= ~I2CDATA;
+ return data;
+}
+
+void
+i2c_send (unsigned char reg,unsigned char data)
+{
+ // on déclanche un procedure de start
+ i2c_start();
+ // C0 est l'adresse d'ecriture de l'ov6620
+ i2c_send_charnl(0xc0);
+ // On specifie le registre
+ i2c_send_charnl(reg);
+ // on donnee la valeur
+ i2c_send_charnl(data);
+ // procedure de stop
+ i2c_end();
+}
+
+unsigned char
+i2c_recv(unsigned char reg)
+{
+ unsigned char data;
+
+ /* pour lire un registre particulié, il faut commencer par
+ * ecrire le registre que l'on veut lire
+ */
+
+ i2c_start();
+ i2c_send_charnl(0xc0);
+ i2c_send_charnl(reg);
+ i2c_end();
+
+
+ i2c_start();
+ i2c_send_charnl(0xC1);
+ data = i2c_read_char();
+ i2c_end();
+ return data;
+
+}
+
+void
+i2c_dump(unsigned char * tab)
+{
+}
diff --git a/2004/n/fpga/doc/dossierconception/io.h b/2004/n/fpga/doc/dossierconception/io.h
new file mode 100644
index 0000000..8ea9221
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/io.h
@@ -0,0 +1,15 @@
+#ifndef IO_H
+#define IO_H
+
+#define BITN(x) (1<<(x))
+
+void i2c_init (void);
+void i2c_send_charnl (unsigned char mot);
+unsigned char i2c_read_char (void);
+void i2c_start (void);
+void i2c_end (void);
+void wait_2v5us (void);
+void i2c_send (unsigned char reg, unsigned char data);
+unsigned char i2c_recv ( unsigned char reg);
+void i2c_dump (unsigned char * tab);
+#endif
diff --git a/2004/n/fpga/doc/dossierconception/ov6620.fig b/2004/n/fpga/doc/dossierconception/ov6620.fig
new file mode 100644
index 0000000..bd11f82
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/ov6620.fig
@@ -0,0 +1,200 @@
+#FIG 3.2
+Landscape
+Center
+Inches
+Letter
+100.00
+Single
+-2
+1200 2
+0 32 #c6b694
+0 33 #eff7ff
+0 34 #decba5
+0 35 #424142
+0 36 #848284
+0 37 #bdbebd
+0 38 #dedfde
+0 39 #8c8e8c
+0 40 #adaaad
+0 41 #525552
+0 42 #424142
+0 43 #848284
+0 44 #bdbebd
+0 45 #848284
+0 46 #bdbebd
+0 47 #dedfde
+0 48 #8c8e8c
+0 49 #8c8e8c
+0 50 #424142
+0 51 #848284
+0 52 #bdbebd
+0 53 #dedfde
+0 54 #424142
+0 55 #848284
+0 56 #bdbebd
+0 57 #dedfde
+0 58 #848284
+0 59 #bdbebd
+0 60 #dedfde
+0 61 #c6b694
+0 62 #eff7ff
+0 63 #decba5
+0 64 #c6b694
+0 65 #eff7ff
+0 66 #decba5
+0 67 #adaaad
+0 68 #525552
+0 69 #8c8e8c
+0 70 #d6d7d6
+0 71 #8c8e8c
+0 72 #424142
+0 73 #848284
+0 74 #bdbebd
+0 75 #dedfde
+0 76 #adaead
+0 77 #424142
+0 78 #848284
+0 79 #bdbebd
+0 80 #dedfde
+0 81 #848284
+0 82 #bdbebd
+0 83 #dedfde
+0 84 #424142
+0 85 #848284
+0 86 #bdbebd
+0 87 #adaead
+0 88 #8c8e8c
+0 89 #8c8e8c
+0 90 #8c8e8c
+0 91 #424142
+0 92 #bdbebd
+0 93 #dedfde
+0 94 #424142
+0 95 #848284
+0 96 #bdbebd
+0 97 #8c8e8c
+0 98 #424142
+0 99 #848284
+0 100 #bdbebd
+0 101 #dedfde
+0 102 #424142
+0 103 #848284
+0 104 #bdbebd
+0 105 #dedfde
+0 106 #bdbebd
+0 107 #525152
+0 108 #e7e3e7
+0 109 #00004a
+0 110 #525152
+0 111 #bdbebd
+0 112 #7b797b
+0 113 #313431
+0 114 #525152
+0 115 #bdbebd
+0 116 #7b797b
+0 117 #313431
+0 118 #525152
+0 119 #424142
+0 120 #c6b694
+0 121 #bdbebd
+0 122 #7b797b
+0 123 #313431
+0 124 #525152
+0 125 #313431
+0 126 #525152
+0 127 #8c8e8c
+0 128 #424542
+0 129 #8c8e8c
+0 130 #bdbebd
+0 131 #7b797b
+0 132 #313431
+0 133 #525152
+0 134 #bdbebd
+0 135 #7b797b
+0 136 #313431
+0 137 #525152
+0 138 #7b797b
+0 139 #313431
+0 140 #525152
+0 141 #424142
+0 142 #848284
+0 143 #bdbebd
+0 144 #dedfde
+0 145 #c6c3c6
+0 146 #6b6d6b
+0 147 #c6c3c6
+0 148 #6b6d6b
+0 149 #424542
+0 150 #8c8e8c
+0 151 #6b6d6b
+0 152 #8c8e8c
+0 153 #737173
+0 154 #adaead
+0 155 #313431
+0 156 #949294
+0 157 #737173
+0 158 #525552
+0 159 #b5b2b5
+0 160 #c6c3c6
+0 161 #424542
+0 162 #6b6d6b
+0 163 #424542
+0 164 #6b6d6b
+0 165 #c6c3c6
+0 166 #6b6d6b
+0 167 #424542
+0 168 #8c8e8c
+0 169 #c6c3c6
+0 170 #6b6d6b
+0 171 #c6c3c6
+0 172 #424542
+0 173 #8c8e8c
+# Camcorder
+# drawn by W. Chimiak
+6 1275 2400 2250 3675
+6 1504 2963 1952 3400
+1 2 0 1 -1 7 2 0 0 0.000 1 0.0000 1728 3182 224 219 1504 2963 1952 3400
+-6
+1 4 0 1 -1 7 0 0 20 0.000 1 0.0000 1839 3262 238 238 1814 3026 1864 3499
+1 4 0 1 -1 150 1 0 20 0.000 1 0.0000 1837 3262 338 338 1499 2924 2175 3600
+2 3 0 1 -1 149 4 0 20 0.000 0 0 -1 0 0 5
+ 2015 3475 2015 2794 1462 2794 1459 3475 2015 3475
+2 3 0 1 0 148 4 0 20 0.000 0 0 -1 0 0 5
+ 2015 2798 1455 2798 1275 2438 1775 2438 2015 2798
+2 3 0 1 0 7 4 0 20 0.000 1 0 -1 0 0 5
+ 1463 2794 1283 2442 1283 3072 1465 3470 1463 2794
+2 2 0 1 -1 7 3 0 5 0.000 0 0 -1 0 0 5
+ 1515 2918 1965 2918 1965 3371 1515 3371 1515 2918
+-6
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 600 1800 3000 1800 3000 4350 600 4350 600 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1800 825 1800 1800
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1575 5775 1575 4350
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 2625 4200 2625
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 3075 4200 3075
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 3525 4125 3525
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 3000 3900 4200 3900
+4 0 0 50 -1 0 12 0.0000 4 135 1950 750 2025 Carte d'\351valuation ov6620\001
+4 0 0 50 -1 0 12 0.0000 4 135 225 1950 825 5V\001
+4 0 0 50 -1 0 12 0.0000 4 180 1260 1725 5175 configuration via\001
+4 0 0 50 -1 0 12 0.0000 4 135 270 1725 5400 I2C\001
+4 0 0 50 -1 0 12 0.0000 4 180 900 3225 3450 Vsync_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 750 3225 3000 Href_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 3225 2550 Pclk_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 1140 3225 3825 data_cam [7-0]\001
+4 0 0 50 -1 0 12 0.0000 4 180 5490 4575 2550 L'horloge, \340 chaque front montant les donn\351es sur data_cam sont valides\001
+4 0 0 50 -1 0 12 0.0000 4 180 4950 4575 3000 L'orsque c'est 1 \340 chaque Pclk_cam correspond un pixel d'un ligne\001
+4 0 0 50 -1 0 12 0.0000 4 180 2835 4575 3375 Passe \340 1 lorsque l'on change d'image\001
+4 0 0 50 -1 0 12 0.0000 4 135 2295 4575 3825 donn\351e de la camera sur 8 bits\001
diff --git a/2004/n/fpga/doc/dossierconception/ovcam.c b/2004/n/fpga/doc/dossierconception/ovcam.c
new file mode 100644
index 0000000..f5ddfd8
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/ovcam.c
@@ -0,0 +1,47 @@
+/* Programme ovcam.c pour 68hc11f1
+ * compile avec gcc pour 68HC11 et la librairy GEL
+ */
+
+#include <sys/sio.h>
+#include <sys/interrupts.h>
+#include <unistd.h>
+#include "io.h"
+#include "rdcam.h"
+
+int main (void);
+
+void
+_start (void)
+{
+ set_bus_expanded ();
+ _io_ports[M6811_CSCTL] &= 1<<3;
+ main();
+}
+
+unsigned char tab[25344];
+
+int
+main (void)
+{
+ int i, j, k;
+
+ serial_init ();
+ i2c_init();
+ cam_init();
+ /*configuration*/
+ i2c_send(0x12,0x80);
+ i2c_send(0x11,0x3f);
+ //i2c_send(0x12,0x26);
+ cam_skip_frames (2);
+ /*attrappe l'image et l'envoie*/
+ for (i = 0; i < 4; i++)
+ {
+ for(j=0;j<25344;j++)
+ tab[j] = 0;
+ cam_get(tab, i);
+ for(j=0;j<25344;j++)
+ serial_send (tab[j]);
+ }
+ while(1);
+ return 0;
+}
diff --git a/2004/n/fpga/doc/dossierconception/ovcam.tex b/2004/n/fpga/doc/dossierconception/ovcam.tex
new file mode 100644
index 0000000..b686b02
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/ovcam.tex
@@ -0,0 +1,120 @@
+
+\section{Gestion de la caméra}
+u
+
+\subsection{Comment fonctionne la caméra ?}
+
+La camera produit un flot de donnée incessant. elle fournit aussi des
+signaux de synchronisation. Ceux-ci nous permettent de savoir quand est-ce
+qu'une nouvelle image commence, quand est-ce que l'on change de ligne. De
+cette manière nous pouvons reconstitué une information cohérente avec
+notre vision.
+
+\begin{figure}[htbp]
+\caption{La camera}
+\includegraphics[width=\textwidth]{ov6620.pdf}
+\label{schema1}
+\end{figure}
+
+Pour vérifier que nous avions bien compris le fonctionnement de la camera,
+nous avons écrit un programme pour micro-contrôleur qui saisie une image.
+
+Pour réaliser cette application teste, nous avons utilisé une carte à base
+de 68HC11F1 à 8MHz doté de 64Ko de mémoire. Voici le résultat: figure
+\ref{image_test} page \pageref{image_test}.
+
+\begin{figure}[htbp]
+\caption{L'image test}
+\includegraphics[]{image.png}
+\label{image_test}
+\end{figure}
+
+Pour obtenir cette image nous avons écrit un programme en C avec gcc pour
+68HC11. Ce programme prend 72 lignes d'une première image puis les envoie
+à l'ordinateur à 9600 baud (c'est très lent) puis attend une nouvelle
+image, saute les 72 premières lignes et enregistre les 72 lignes
+suivantes puis les envoie. Ainsi de suite 4 fois par image car Le
+microcontroleur n'a pas assez de mémoire pour enregistrer l'image entière.
+Il faut donc la "tronçonner". En effet l'image fait normalement 352
+par 288 pixel et chaque pixel est codé sur 8 bits.
+
+La caméra dispose d'un réglage de gain automatique c'est pour cela que les 4
+parties ont des contrastes différents.
+
+Bien que l'on ait ralenti au maximum la fréquence de Pclk, nous
+n'arrivons à obtenir que 72 point par lignes au lieu de 288.
+Comme l'image reste "compréhensible" nous pouvons croire que le
+microcontroleur n'est pas assez rapide pour lire plus de points. Et du
+coups il fait un "sample régulié" de la ligne, ce qui nous donne cette
+impression d'image comprimé en largeur.
+
+Tout ceci nous laisse croire que nous maitrisons la capture d'une image.
+
+\subsection{Comment implémenter la récupération d'image dans un fpga ?}
+
+Le principe utilisé est simple, il s'agit de remplir une mémoire avec les
+données provenant de la caméra. Un compteur peut incrémenté l'adresse et
+ainsi parcourir la mémoire. Nous allons utilisé les macros que fournit
+Xilinx pour réaliser des DPRAMs : qui sont des mémoires ram à double
+ports, permettant une lecture et une écriture sur deux ports differents.
+
+Nous utiliserons 2 DPRAM afin que l'ordinateur puisse lire un bank mémoire
+alors que l'automate de récupartion de donnée caméra en remplit un autre.
+
+\begin{figure}[htbp]
+\caption{Synopitque d'implémentation}
+\includegraphics[width=\textwidth]{ovcam2.pdf}
+\label{ovcam}
+\end{figure}
+
+Ce système est ordonné par un séquenceur. Cette machine d'état aura la
+charge de choisir le bank à remplir, la gestion de la ligne d'interruption
+( moyen d'avertir d'ordinateur pour qu'il vienne lire) et le registre de
+contrôle avec ses quelques bits:
+\begin{itemize}
+\item Un bit disant quel bank doit être lu.
+\item Un bit disant si l'interruption est levé, c'est dire si le bit
+précédant est valide.
+\item Un bit disant s'il y a eu un écrasement d'un bank, dans le cas ou
+l'ordinateur ne serait pas venu suffsament tôt.
+\item un bit de reset pour remettre à zero la machine d'état les diffrents
+compteurs et convertisseur.
+\item Un bit servant à dire que l'odinateur va bientot lire un bank et
+donc, que le sequenceur doit baissé sa ligne d'interruption. Cette
+dernière fonction pourrait être remplacer par un système qui détecte la
+lecture du bank.
+\end{itemize}
+
+
+D'autres indicateurs pourraient être donné, par exemple : un flag pourrait se
+levé pour marqué que le bank de remplissage est déjà à moitier rempli.
+
+\subsection{Le driver}
+
+Avec le fonctionnement décrit si dessus, Le driver devra réaliser la
+sous-routine suivante:
+\begin{itemize}
+\item Détecter une interruption camera
+\item Lire le registre de la camera pour savoir si il y a bien eu une
+interruption, et connaitre le bank à lire.
+\item Ecrire dans le registre le bit correspondant à "lecture imminante"
+\item Lire le bank, le placé en mémoire, incrémenté une variable. Lorsque
+cette variable sera égal à 50, l'ordinateur aura récupéré une image
+complete.
+\end{itemize}
+
+Bien sûr, si la cadence des images est trop rapproché dans le temps, Une
+fois que l'on a récupérer une image complete, on peut ne pas écrire le bit
+"lecture imminante", ce qui aura pour conséquence de ne pas baissé la
+ligne d'interruption et de ne plus être déranger.
+Pour reprendre la capture, il suffit de faire un reset avec le bit prévu
+dans le registre de controle.
+\pagebreak
+
+\section{Réalisation de la carte }
+
+La principale difficulté provient du logiciel. Toutes fois cela avance,
+à en voir les documents produits. Ceux-ci encore tres incomplet. Toutes
+fois ils permettent de déceller les premières grosses erreurs.
+
+
diff --git a/2004/n/fpga/doc/dossierconception/ovcam1.fig b/2004/n/fpga/doc/dossierconception/ovcam1.fig
new file mode 100644
index 0000000..8fb8bb4
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/ovcam1.fig
@@ -0,0 +1,67 @@
+#FIG 3.2
+Portrait
+Flush left
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1425 1200 3325 1200 3325 2138 1425 2138 1425 1200
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 2375 3313 2375 3313 3313 1438 3313 1438 2375
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6637 4013 8287 4013 8287 6151 6637 6151 6637 4013
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6625 1400 8275 1400 8275 3538 6625 3538 6625 1400
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 4025 4025 4025 4025 6375 1438 6375 1438 4025
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3338 1888 6613 1888
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5450 1913 5450 4725 6638 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 1888 1438 1888 1425 1888
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3313 2825 6638 2825
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 1
+ 5200 2838
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5200 2813 5200 5175 6638 5175
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 1425 1425 1425
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 4263 1438 4263 1425 4275
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 4725 1425 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 225 5200 1438 5200 1413 5200
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 1886 4013 1886 3322 1894 3322
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 2833 3330 2833 4013 2833 4028
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 5
+ 1545 4005 1545 3648 1094 3648 1094 2010 1413 2010
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 248 2833 1428 2833 1335 2724
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 2833 1343 2934
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1420 1343 1327
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1428 1358 1521
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1878 1343 1762
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1894 1343 1948
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4253 1312 4145
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4261 1319 4346
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 4727 1343 4626
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 4735 1327 4789
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 5192 1327 5076
diff --git a/2004/n/fpga/doc/dossierconception/ovcam2.fig b/2004/n/fpga/doc/dossierconception/ovcam2.fig
new file mode 100644
index 0000000..beb374d
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/ovcam2.fig
@@ -0,0 +1,140 @@
+#FIG 3.2
+Portrait
+Flush left
+Metric
+A4
+100.00
+Single
+-2
+1200 2
+0 32 #636163
+0 33 #cecbce
+0 34 #cecbce
+0 35 #6b6d6b
+# Right brace
+6 8370 2206 8910 9405
+3 4 0 1 0 7 50 0 -1 0.000 0 0 0 7
+ 8370 9405 8640 9405 8640 5806 8910 5806 8640 5806 8640 2206
+ 8370 2206
+ 0.000 1.000 1.000 0.000 1.000 1.000 0.000
+-6
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1425 1200 3325 1200 3325 2138 1425 2138 1425 1200
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 2375 3313 2375 3313 3313 1438 3313 1438 2375
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6637 4013 8287 4013 8287 6151 6637 6151 6637 4013
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 6625 1400 8275 1400 8275 3538 6625 3538 6625 1400
+2 2 0 1 0 7 50 0 -1 4.000 0 0 7 0 0 5
+ 1438 4025 4025 4025 4025 6375 1438 6375 1438 4025
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3338 1888 6613 1888
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5450 1913 5450 4725 6638 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 3313 2825 6638 2825
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 1
+ 5200 2838
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 5200 2813 5200 5175 6638 5175
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 1425 1425 1425
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 4263 1438 4263 1425 4275
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 238 4725 1425 4725
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 225 5200 1438 5200 1413 5200
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 1886 4013 1886 3322 1894 3322
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 2833 3330 2833 4013 2833 4028
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 5
+ 1545 4005 1545 3648 1094 3648 1094 2010 1413 2010
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 248 2833 1428 2833 1335 2724
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 2833 1343 2934
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1420 1343 1327
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 1428 1358 1521
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1878 1343 1762
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 1894 1343 1948
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4253 1312 4145
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 4261 1319 4346
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1420 4727 1343 4626
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1413 4735 1327 4789
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 2
+ 1428 5192 1327 5076
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 4050 4365 6615 3105
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 4050 5580 6615 5580
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 315 5805 1395 5805
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 3
+ 0 0 1.00 60.00 120.00
+ 2430 6390 2430 9900 4320 9900
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+ 3015 6615 7830 6615 7830 8865 3015 8865 3015 6615
+2 1 0 1 0 7 50 0 -1 4.000 0 0 0 0 0 3
+ 250 1845 1438 1845 1425 1845
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 1620 765 1620 1215
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 765 2475 1440 2475
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 1 0 2
+ 0 0 1.00 60.00 120.00
+ 630 6165 1440 6165
+2 1 0 1 0 7 50 0 -1 0.000 0 0 -1 0 0 3
+ 1440 5220 1260 5355 1260 5400
+4 0 0 50 -1 0 12 0.0000 4 135 1110 1575 1440 Convertisseur \001
+4 0 0 50 -1 0 12 0.0000 4 135 1125 1575 1665 8bits to 16 bits\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 450 1305 Pclk_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 1110 1800 2745 compteur 1024\001
+4 0 0 50 -1 0 12 0.0000 4 180 780 3915 1800 data[15-0]\001
+4 0 0 50 -1 0 12 0.0000 4 180 690 4230 2745 addr[9-0]\001
+4 0 0 50 -1 0 12 0.0000 4 135 480 6885 1935 Bank0\001
+4 0 0 50 -1 0 12 0.0000 4 135 660 6885 2385 DPRAM\001
+4 0 0 50 -1 0 12 0.0000 4 135 630 6885 2610 1024x16\001
+4 0 0 50 -1 0 12 0.0000 4 135 870 1890 4320 sequenceur\001
+4 0 0 50 -1 0 12 0.0000 4 135 480 6975 4320 Bank1\001
+4 0 0 50 -1 0 12 0.0000 4 135 660 6975 4770 DPRAM\001
+4 0 0 50 -1 0 12 0.0000 4 135 630 6975 4995 1024x16\001
+4 0 0 50 -1 0 12 0.0000 4 180 750 4410 5490 En_bank1\001
+4 0 0 50 -1 0 12 0.0000 4 180 600 1890 3510 enb_cpt\001
+4 0 0 50 -1 0 12 0.0000 4 135 390 2880 3780 carry\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 405 4185 Pclk_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 750 405 4590 Href_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 900 405 5130 Vsync_cam\001
+4 0 0 50 -1 0 12 0.0000 4 180 1530 3105 6840 Registre de controle\001
+4 0 0 50 -1 0 12 0.0000 4 180 2175 3105 7290 BK : bit indique le bank \340 lire\001
+4 0 0 50 -1 0 12 0.0000 4 180 3525 3105 7515 INT : indique qu'il y a un bank \340 lire. bit est \340 1 \001
+4 0 0 50 -1 0 12 0.0000 4 180 3225 3105 7740 lorsque la ligne d'interruption est \340 1.\001
+4 0 0 50 -1 0 12 0.0000 4 180 3555 3105 7965 ERR : indique qu'il y a eu ecrasement d'un bank\001
+4 0 0 50 -1 0 12 0.0000 4 180 3090 3105 8190 RST : permet de faire un reset du system\001
+4 0 0 50 -1 0 12 0.0000 4 180 4620 3105 8415 RDB : doit etre mis \340 1 avant de lire un bank. Le sequenceur \001
+4 0 0 50 -1 0 12 0.0000 4 180 4470 3105 8640 utilisera ce signal pour baisser la ligne d'interruption.\001
+4 0 0 50 -1 0 12 0.0000 4 180 885 2610 9810 Interruption\001
+4 0 0 50 -1 0 12 0.0000 4 135 360 8865 4680 BUS\001
+4 0 0 50 -1 0 12 0.0000 4 135 300 8865 5130 ISA\001
+4 0 0 50 -1 0 12 0.0000 4 180 2010 4545 9900 Gestionnaire d'interruption\001
+4 0 0 50 -1 0 12 0.0000 4 180 1095 180 1800 data_cam[7-0]\001
+4 0 0 50 -1 0 12 0.4363 4 180 720 4320 4140 en_bank0\001
+4 0 0 50 -1 0 12 0.0000 4 180 660 450 5760 Chip_clk\001
+4 0 0 50 -1 0 12 0.0000 4 180 735 315 2790 Pclk_cam\001
+4 0 0 50 0 0 12 0.0000 4 135 270 1665 900 Rst\001
+4 0 0 50 0 0 12 0.0000 4 135 270 720 2430 Rst\001
diff --git a/2004/n/fpga/doc/dossierconception/portserie.tex b/2004/n/fpga/doc/dossierconception/portserie.tex
new file mode 100644
index 0000000..944ed60
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/portserie.tex
@@ -0,0 +1,392 @@
+\section{Le TXserie}
+\subsection{Cahier des charges}
+Le cahier des charges du transmetteur série est le suivant :
+
+\begin{itemize}
+\item Transmission série 8 bits, 1 start, 2 stop
+\item Vitesse : paramétrable 9600 et 115200 bauds
+\item Fifo de stockage avant transmision
+\item Interruption activable signalant que la pile est pleine
+\end{itemize}
+
+
+\subsection{Schéma-bloc}
+
+\begin{figure}[htbp]
+\caption{Schéma-bloc du TXserie}
+\includegraphics[width=\textwidth]{images/txserie.pdf}
+\label{schematxserie}
+\end{figure}
+
+Le schéma modulaire est visible sur la figure \ref{schematxserie} page \pageref{schematxserie}.
+
+\subsection{Descritpion des modules}
+\label{descriptmodules}
+
+\subsubsection{La fifo}
+
+C'est une fifo générée avec coregen. Elle contient des mots de 8 bits en
+mémoire distribuée (car les BRAMs du FPGA seront utilisés à d'autres fins).
+
+Elle possède une entrée avec son horloge ckin, une sortie avec son horloge
+ckout, et un pannel de flags en sortie.
+
+L'entrée ckin est la combinaison du csData et de la clock du bus. Ainsi, dès
+qu'on écrit à son adresse mémoire, la fifo charge la donnée présente sur le
+bus.
+
+
+\subsubsection{Le TXcever}
+
+C'est un transmetteur série qui reçoit en entrée les données provenant de la
+fifo. Dès qu'il est vide, il agit sur le signal ckout de la fifo, ce qui
+dépile un élément, et le charge dans le transmetteur, qui peut alors le
+transmettre.
+
+\subsubsection{Le générateur de clock}
+
+C'est un prédiviseur de la fréquence d'horloge du fpga. Il a pour but de
+fournir l'horloge de référence pour le transmetteur (égale à 16 fois le
+baudrate).
+
+Il est paramétrable, pour pouvoir choisir la fréquence utilisée parmis les 4
+baudrates disponibles.
+
+Pour avoir la bonne fréquence en sortie, on doit avoir en entrée une fréquence
+multiple de 16 fois 115200 (le baudrate maxi). Les quartz qui sont utilisables
+sont : 14.7456MHz, 29.4912MHz (14.7456*2), et 44.2368MHz (14.7456*3),
+
+\subsubsection{Registre config}
+
+C'est un registre de 8 bits branché sur le bus, en lecture/écriture, dans
+lequel le PC vient déposer les bits de configuration du port série.
+La sortie du registre controle le générateur de clock (pour fixer le
+baudrate), et le gestionaire d'IRQ.
+
+\subsubsection{Registre flag}
+
+C'est un registre de 8 bits branché sur le bus en lecture seule dans lequel le
+PC vient lire l'état des flags de la fifo. Son entrée est branchée sur les
+sorties flag de la fifo.
+
+\subsubsection{IRQ}
+
+Le gestionaire d'IRQ est tout simplement un activateur d'interruptions. Il
+déclenche des IRQ sur front montant, et ceci à condition que le signal IntEn
+soit activé.
+
+
+\subsection{Fonctionalités et utilisation}
+Ce port série utilise 3 registres : TxData, Flag, et Config
+
+\subsubsection{Txdata}
+Ce registre 8 bits sert à recevoir les données à envoyer. On les écrit
+séquentiellement, et chaque écriture dans ce registre empile la donnée en haut
+de la fifo.
+
+\subsubsection{Flag}
+C'est le registre d'état. il donne essentiellement des informations sur l'état
+de remplissage de la pile de transmision.
+
+Structure :
+\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
+\hline
+bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0
+\\ \hline
+nom & x & x & x & x & Empty & Full/Int & FLI1 & FLI0
+\\ \hline
+\end{tabular}
+
+\begin{description}
+\item [FL1/FL0] : Fifo Level 1/0. Ces bits donnent le niveau de remplissage de
+la fifo.\\
+ \begin{tabular}{|c|c|c|}
+ \hline
+ FL1/FL0 & Tx de remplissage
+ \\ \hline
+ 00 & < 25\%
+ \\ \hline
+ 01 & 25\% < Tx < 50\%
+ \\ \hline
+ 10 & 20\% < Tx < 75\%
+ \\ \hline
+ 11 & 75\% < Tx
+ \\ \hline
+ \end{tabular}
+\item [Full/Int] : indique que la pile est pleine, ce qui déclenche une
+interruption
+\item [Empty] : indique que la pile ET le transmetteur sont vides, que la
+transmission est donc terminée.
+\end{description}
+
+\subsubsection{Config}
+Ce registre sert de configuration pour la transmission.
+
+Structure :
+\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
+\hline
+bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0
+\\ \hline
+nom & x & x & x & On/Off & Purge & IntEn & BdR1 & BdR0
+\\ \hline
+\end{tabular}
+
+\begin{description}
+\item [BdR1/BdR0] : BaudRate1/0. Ces bits paramètrent la vitesse de
+transmission. \\
+ \begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
+ \hline
+ BdR1/BdR0 & Vitessse
+ \\ \hline
+ 00 & 9600
+ \\ \hline
+ 00 & 9600
+ \\ \hline
+ 01 & 19200
+ \\ \hline
+ 10 & 57600
+ \\ \hline
+ 11 & 115200
+ \\ \hline
+ \end{tabular}
+\item [Int/En] : active ou non l'interruption de fifo pleine
+\item [Purge] : vide la fifo de toutes ses données
+\item [On/Off] : active ou non la transmission
+\end{description}
+
+\subsection{Procédure d'utilisation}
+Pour utiliser ce port série, on doit pouvoir effectuer les actions suivantes :
+
+\begin{itemize}
+\item Mettre le bit On/Off à 1 pour activer la transmission
+\item Paramétrer la vitesse à l'aide des bits BdR1/0
+\item Il est conseillé d'activer l'interruption de fifo pleine en mettant à 1
+le bit IntEn.
+\item Ecriture dans txdata pour charger les données dans la fifo. Elles sont
+alors automatiquement transférées, au plus tôt. Dès que le registre à décalage
+est vide, il dépile le dernier élément de la fifo et le transmet à nouveau.
+\item On peut lire en permanence l'état de la fifo grâce aux bits FL1/0.
+\item Quand la fifo est pleine, le flag Full/Int passe à 1, et le front
+montant de ce bit génère une interruption.
+\item Il est possible de vider la fifo en mettant Purge à 1. Il faut le
+remettre à 0 pour qu'il puisse être à nouveau actif, car la purge de la fifo
+ne s'effectue que sur front montant de ce bit.
+\end{itemize}
+
+
+\subsection{Interfaçage vhdl}
+
+Voici le code vhdl de l'entité txserie :
+\begin{verbatim}
+entity txserie is
+generic(adr : integer);
+constant adr_w : integer :=10;
+port(
+ databus: inout std_logic_vector(7 downto 0);
+ rw: in std_logic;
+ busck: in std_logic;
+ rst: in std_logic;
+ masterck: in std_logic;
+ txout: out std_logic;
+ intout: out std_logic;
+ csData: in std_logic;
+ csFlag: in std_logic;
+ csConfig: in std_logic;
+ );
+end txserie;
+\end{verbatim}
+
+Voici une description de ces signaux :
+
+\begin{description}
+\item [databus] : bus de données
+\item [rw] : ligne Read/Write\_
+\item [busck] : horloge bus
+\item [rst] : patte de reset
+\item [masterck] : horloge générale du fpga
+\item [txout] : patte de sortie série
+\item [intout] : sortie d'interruption
+\item [csData] : chip select du registre de data
+\item [csFlag] : chip select du registre de flag
+\item [csConfig] : chip select du registre de configuration
+\end{description}
+
+
+
+
+
+% Deuxième partie : le RXserie
+
+\section{Le RXserie}
+\subsection{Cahier des charges}
+Le cahier des charges du récepteur série est le suivant :
+
+\begin{itemize}
+\item Réception série 8 bits, 1 start, 2 stop
+\item Vitesse : paramétrable 9600 et 115200 bauds
+\item Fifo de stockage des données reçues
+\item Interruption activable signalant que la fifo est pleine
+\item Interruption activable signalant qu'on a reçu une donnée
+\end{itemize}
+
+
+\subsection{Schéma-bloc}
+
+Le schéma modulaire est visible sur la figure \ref{schemarxserie} page \pageref{schemarxserie}.
+
+\begin{figure}[htbp]
+\caption{Schéma-bloc du RXserie}
+\includegraphics[width=\textwidth]{images/rxserie.pdf}
+\label{schemarxserie}
+\end{figure}
+
+
+\subsection{Descritpion des modules}
+\subsubsection{Le RXcever}
+
+C'est un récepteur série qui présente ses données à l'entrée de la fifo
+Dès qu'il a reçu un octet, il agit sur le signal fifockin de la fifo
+ce qui empile l'octet reçu.
+
+\subsubsection{Autres modules}
+
+Les autres modules utilisés sont les mêmes que pour le transmetteur. Voir
+chapitre \ref{descriptmodules}.
+
+
+\subsection{Fonctionalités et utilisation}
+Ce port série utilise 3 adresses mémoire :
+\subsubsection{Rxdata}
+Ce registre 8 bits permet de récupérer les données reçues. On les lit
+séquentiellement, et chaque lecture dans ce registre dépile la donnée en bas
+de la fifo.
+
+\subsubsection{Flag}
+C'est le registre d'état. Il donne essentiellement des informations sur l'état
+de remplissage de la pile de réception.
+
+Structure :
+\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
+\hline
+bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0 \\
+\hline
+nom & x & x & x & x & DR & FFull & FL1 & FL0 \\
+\hline
+\end{tabular}
+
+\begin{description}
+\item [FL1/FL0] : Fifo Level 1/0. Ces bits donnent le niveau de remplissage de
+la fifo. \\
+ \begin{tabular}{|c|c|c|}
+ \hline
+ FL1/FL0 & Tx de remplissage
+ \\ \hline
+ 00 & < 25\%
+ \\ \hline
+ 01 & 25\% < Tx < 50\%
+ \\ \hline
+ 10 & 20\% < Tx < 75\%
+ \\ \hline
+ 11 & 75\% < Tx
+ \\ \hline
+ \end{tabular}
+\item [FFull] : indique que la pile est pleine. Chaque front montant de ce
+bit déclenche l'interruption FifoFullInt
+\item [DR] : DataReady. Indique que la fifo n'est plus vide, et donc qu'une
+donnée est arrivée dans le récepteur. Chaque front montant de ce bit déclenche
+l'interruption DRInt
+\end{description}
+
+\subsubsection{Config}
+Ce registre sert de configuration pour la transmission.
+
+Structure
+\begin{tabular}{|c|c|c|c|c|c|c|c|c|c|}
+\hline
+bit & 7 & 6 & 5 & 4 & 3 & 2 & 1 & 0
+\\ \hline
+nom & x & x & x & On/Off & DRIE & FFIE & BdR1 & BdR0
+\\ \hline
+\end{tabular}
+
+\begin{description}
+\item [BdR1/BdR0] : BaudRate1/0. Ces bits paramètrent la vitesse de
+transmission. \\
+ \begin{tabular}{|c|c|c|}
+ \hline
+ BdR1/BdR0 & Vitessse
+ \\ \hline
+ 00 & 9600
+ \\ \hline
+ 01 & 19200
+ \\ \hline
+ 10 & 57600
+ \\ \hline
+ 11 & 115200
+ \\ \hline
+ \end{tabular}
+\item [FFIF] : FifoFull-Int-Enable. Active ou non l'interruption FifoFull
+(actif à 1)
+\item [DRIE] : DataReady-Int-Enable. Active ou non l'interruption
+DataReady (actif à 1)
+\item [On/Off] : active ou non la réception de données
+\end{description}
+
+\subsection{Procédure d'utilisation}
+Pour utiliser ce port série, on doit pouvoir effectuer les actions suivantes :
+\begin{itemize}
+\item Mettre le bit On/Off à 1 pour activer la réception des données.
+\item Paramétrer la vitesse à l'aide des bits BdR1/0
+\item Il est conseillé d'activer l'interruption de fifo pleine (FFInt) en
+mettant à 1 le bit FFIE.
+\item On peut également activer l'interruption de donnée reçue DRInt en
+mettant à 1 le bit DRIE.
+\item Tester si une donnée est présente dans le buffer en testant le bit DR.
+S'il est à 1, lire la donnée dans rxdata. La donnée est alors automatiquement
+dépilée de la fifo.
+\item On peut lire en permanence l'état de la fifo grâce aux bits FL1/0.
+\item Quand la fifo est pleine, le flag FFI passe à 1, et le front
+montant de ce bit génère une interruption. Il faut alors lire les 512 octets
+de la fifo pour la vider.
+\end{itemize}
+
+
+
+\subsection{Interfaçage vhdl}
+
+Voici le code vhdl de l'entité rxserie :
+\begin{verbatim}
+entity rxserie is
+generic(adr : integer);
+constant adr_w : integer :=10;
+port(
+ databus: inout std_logic_vector(7 downto 0);
+ rw: in std_logic;
+ busck: in std_logic;
+ rst: in std_logic;
+ masterck: in std_logic;
+ rxin: in std_logic;
+ DRIout: out std_logic;
+ FFIout: out std_logic;
+ csData: in std_logic;
+ csFlag: in std_logic;
+ csConfig: in std_logic
+ );
+end rxserie;
+\end{verbatim}
+
+\begin{description}
+\item [databus] : bus de données
+\item [rw] : ligne Read/Write\_
+\item [busck] : horloge bus
+\item [rst] : patte de reset
+\item [masterck] : horloge générale du fpga
+\item [rxin] : patte de sortie série
+\item [DRIout] : sortie d'interruption DRInt
+\item [FFIout] : sortie d'interruption FFInt
+\item [csData] : chip select du registre de data
+\item [csFlag] : chip select du registre de flag
+\item [csConfig] : chip select du registre de configuration
+\end{description}
+
+
diff --git a/2004/n/fpga/doc/dossierconception/rapport.tex b/2004/n/fpga/doc/dossierconception/rapport.tex
new file mode 100644
index 0000000..bef1baa
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/rapport.tex
@@ -0,0 +1,68 @@
+\documentclass[a4paper,dvips,pdftex]{article}
+
+% Inclusion de packages :
+%{{{1
+\usepackage[T1]{fontenc}
+\usepackage[latin1]{inputenc}
+\usepackage[french]{babel}
+\usepackage{fancyhdr}
+\usepackage[dvips]{graphicx,color}
+%\usepackage[pdftex]{graphicx,color}
+%\usepackage{verbatim}
+\usepackage{times}
+
+\usepackage{listings}
+\lstset{language=C,
+ basicstyle=\footnotesize, %diminue la taille de listings
+ numbers=left, % nombre à gauche
+ numberstyle=\tiny,
+ stepnumber=5,
+ %numbersep=10pts
+ xleftmargin=30pt
+ }
+
+% Pour les maths :
+%\usepackage{amssymb}
+%\usepackage{amsfonts}
+%\usepackage{amsmath,amsthm}
+%}}}1
+
+% Mise en page du document :
+%{{{1
+\pagestyle{fancy}
+\parskip=10pt
+\baselineskip=11pt
+\parindent=0pt % alinéa
+
+%}}}1
+
+% Entête de page :
+\lhead{\small{TB - PP - PAG - FG}}
+\rhead{I2 ET\\ Mars 2004}
+
+% Structure du document :
+\begin{document}
+
+\title{Pré-projet de VHDL : \\ Réalisation d'un périphérique ISA pour PC104}
+\author{Thomas Burg - Pierre-Andre Galmes - Fidèle Gafan - Pierre Prot\\ EFREI
+- Ingénieur 2$^{\textrm{ième}}$ année}
+
+\date{Mars 2004}
+\maketitle
+\pagebreak
+\tableofcontents
+\pagebreak
+
+\section{Introduction}
+
+Notre projet s'articule autour de plusieurs modules.
+Dans ce rapport, nous exposerons l'architecture de chacun de ces modules.
+
+\input{ovcam.tex}
+\pagebreak
+
+\input{portserie.tex}
+\pagebreak
+
+
+\end{document}
diff --git a/2004/n/fpga/doc/dossierconception/rdcam.c b/2004/n/fpga/doc/dossierconception/rdcam.c
new file mode 100644
index 0000000..8584282
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/rdcam.c
@@ -0,0 +1,124 @@
+/* rdcam.c contient les fonctions qui enregistre l'image
+ */
+
+#include "rdcam.h"
+#include <sys/ports.h>
+#include <sys/sio.h>
+#include <sys/interrupts.h>
+
+#define CAM_PCLK BITN(1)
+#define CAM_HREF BITN(2)
+#define CAM_VSYNC BITN(3)
+
+void
+cam_init(void)
+{
+ // configuration des lignes en entrée;
+ //_io_ports[M6811_DDRA] &= ~0x07 ;
+ _io_ports[M6811_DDRG] = 0;
+}
+
+unsigned char
+test_portcam(unsigned char bit)
+{
+ if ((_io_ports[M6811_PORTA] & bit) !=0)
+ return 1;
+ else
+ return 0;
+}
+
+/* 352*288 = 101376 octect
+ * le 68 hc ne dispose que de 64ko de RAM !!! PB --> on segmente en 4
+ * parties :
+ * 288 /4 = 72
+ *
+ * 352 * 72
+ */
+
+void
+cam_get(unsigned char * tab, unsigned char part)
+{
+ unsigned char ligne;
+ unsigned char *p;
+ // attend que CAM_VSYNC passe à 1
+ while (!(_io_ports[M6811_PORTA] & 0x04))
+ ;
+ for (ligne=0;ligne < 72 * part;ligne++)
+ {
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ // attend que CAM_HREF passe à 0
+ while((_io_ports[M6811_PORTA] & 0x02))
+ ;
+ }
+ for (ligne=0;ligne<72;ligne++)
+ {
+ p = tab;
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ // tant que CAM_HREF est à 1
+ while(_io_ports[M6811_PORTA] & 0x02)
+ {
+ // si CAM_PCLK passe à 1
+ if(_io_ports[M6811_PORTA] & 0x01)
+ {
+ *p++ = _io_ports[M6811_PORTG];
+ // attend que CAM_PCK passe à 0
+ while(_io_ports[M6811_PORTA] & 0x01)
+ ;
+ }
+ }
+ tab += 352;
+ }
+}
+
+void
+cam_count_href_pclk(int *tab)
+{
+ int i = 0;
+ int c;
+ // attend que CAM_VSYNC passe à 1
+ while (!(_io_ports[M6811_PORTA] & 0x04))
+ ;
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ // attend que CAM_HREF passe à 0
+ while(_io_ports[M6811_PORTA] & 0x02)
+ ;
+ // attend que CAM_HREF passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x02))
+ ;
+ for (i = 0; i < 288; i++)
+ {
+ c = 0;
+ // tant que CAM_HREF est à 1
+ while(_io_ports[M6811_PORTA] & 0x02)
+ {
+ // attend que PCLK passe à 1
+ while(!(_io_ports[M6811_PORTA] & 0x01))
+ ;
+ // attend que PCLK passe à 0
+ while(_io_ports[M6811_PORTA] & 0x01)
+ ;
+ c++;
+ }
+ *tab++ = c;
+ }
+}
+
+void
+cam_skip_frames(int n)
+{
+ int i;
+ for (i = 0; i < n; i++)
+ {
+ // attend que CAM_VSYNC passe à 1 puis 0
+ while (!(_io_ports[M6811_PORTA] & 0x04))
+ ;
+ while ((_io_ports[M6811_PORTA] & 0x04))
+ ;
+ }
+}
diff --git a/2004/n/fpga/doc/dossierconception/rdcam.h b/2004/n/fpga/doc/dossierconception/rdcam.h
new file mode 100644
index 0000000..1544641
--- /dev/null
+++ b/2004/n/fpga/doc/dossierconception/rdcam.h
@@ -0,0 +1,18 @@
+#ifndef RDCAM_H
+#define RDCAM_H
+
+#define BITN(x) (1<<(x))
+
+
+void
+cam_init(void);
+void
+cam_get(unsigned char * tab, unsigned char part);
+unsigned char
+test_portcam(unsigned char bit);
+void
+cam_count_href_pclk(int *tab);
+void
+cam_skip_frames(int n);
+
+#endif