24.06.2013 Views

Programmation proche du hardware avec le kit de développement ...

Programmation proche du hardware avec le kit de développement ...

Programmation proche du hardware avec le kit de développement ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Hardwarenahe Programmierung in C<br />

l’adresse <strong>de</strong> la routine <strong>de</strong> service dans la tabel<strong>le</strong> <strong>de</strong>s vecteurs d’interruption. Dans <strong>le</strong> second cas, il doit<br />

déposer <strong>le</strong> co<strong>de</strong> <strong>de</strong> la routine <strong>de</strong> service d’interruption à l’adresse prédéfinie dans la mémoire.<br />

Le C8051F travail<strong>le</strong> <strong>avec</strong> un tab<strong>le</strong>au <strong>de</strong> vecteurs d’interruptions. Ce tab<strong>le</strong>au contient 21 vecteurs<br />

d’interruption, dont 9 sont dédiés aux composants périphériques, comme par exemp<strong>le</strong> : <strong>le</strong> mo<strong>du</strong><strong>le</strong><br />

temporel (Timer 2), la communication sériel, <strong>le</strong>s convertisseurs AD et <strong>le</strong>s comparateurs (voir tab<strong>le</strong>au<br />

9.4 <strong>de</strong> la documentation <strong>du</strong> C8051F2xx).<br />

Vector number<br />

Timer 2<br />

5<br />

Serial Port (UART)<br />

Vector number<br />

Mo<strong>du</strong><strong>le</strong><br />

CPU<br />

4<br />

40 / 41<br />

Program memory<br />

Co<strong>de</strong> for timer 2<br />

interrupt hand<strong>le</strong>r<br />

Co<strong>de</strong> for serial port<br />

interrupt hand<strong>le</strong>r<br />

Vector tab<strong>le</strong><br />

Figure 30 : Principe d’appel <strong>de</strong> la routine <strong>de</strong> service d’interruption<br />

Lorsque qu’un composant périphérique génère une requête d’interruption, il transmet simultanément<br />

son vecteur d’interruption. A l’ai<strong>de</strong> <strong>de</strong> ce vecteur d’interruption, <strong>le</strong> CPU peut chercher l’adresse <strong>de</strong> la<br />

routine <strong>de</strong> service dans la tabel<strong>le</strong> <strong>de</strong>s vecteurs d’interruption.<br />

Dans notre environnement <strong>de</strong> <strong>développement</strong>, <strong>le</strong> mot clé interrupt permet d’écrire l’adresse <strong>de</strong> la<br />

routine <strong>de</strong> service d’interruption dans la tabel<strong>le</strong> <strong>de</strong>s vecteurs d’interruption. Ce <strong>de</strong>rnier doit être<br />

complété <strong>avec</strong> <strong>le</strong> numéro <strong>du</strong> vecteur d’interruption. Dans <strong>le</strong>s exemp<strong>le</strong>s <strong>de</strong> ci-<strong>de</strong>ssus, l’adresse <strong>de</strong> la<br />

routine <strong>de</strong> service d’interruption est stockée dans <strong>le</strong> vecteur numéro 5 <strong>de</strong> la tabel<strong>le</strong> <strong>de</strong>s vecteurs<br />

d’interruption. En effet, ce vecteur d’interruption est réservé pour <strong>le</strong> mo<strong>du</strong><strong>le</strong> temporel 2 :<br />

void TimerInterruptHand<strong>le</strong>r (void) interrupt 5<br />

{<br />

Timeout--;<br />

}<br />

6<br />

5<br />

4<br />

3

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!