<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SebC</id>
	<title>air - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://air.imag.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=SebC"/>
	<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php/Special:Contributions/SebC"/>
	<updated>2026-05-31T10:20:15Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1923</id>
		<title>Fiche Projet Qemu Stellaris</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1923"/>
		<updated>2011-04-06T22:38:10Z</updated>

		<summary type="html">&lt;p&gt;SebC: /* Image du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Fiche Projet Qemu=&lt;br /&gt;
==Repository==&lt;br /&gt;
Lien du dépot : http://svn3.xp-dev.com/svn/Stellaris_repo/ (Dépot publique)&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
Cahier des charges réalisé (14/02)&amp;lt;br&amp;gt;&lt;br /&gt;
Prise en charge OLED &amp;lt;br&amp;gt;&lt;br /&gt;
Réalisation Interface Graphique &amp;lt;br&amp;gt;&lt;br /&gt;
Communication Qemu - Interface Graphique &amp;lt;br&amp;gt;&lt;br /&gt;
Documentation et description du travail réalisé &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Images du Projet ==&lt;br /&gt;
Exécution du fichier hello.bin&lt;br /&gt;
[[File:Capture.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exécution du fichier blinky.bin&lt;br /&gt;
[[File:Capture2.png]]&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Capture2.png&amp;diff=1922</id>
		<title>File:Capture2.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Capture2.png&amp;diff=1922"/>
		<updated>2011-04-06T22:36:18Z</updated>

		<summary type="html">&lt;p&gt;SebC: Exécution de blinky.bin avec l&amp;#039;IHM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exécution de blinky.bin avec l&#039;IHM&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=File:Capture.png&amp;diff=1921</id>
		<title>File:Capture.png</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=File:Capture.png&amp;diff=1921"/>
		<updated>2011-04-06T22:35:11Z</updated>

		<summary type="html">&lt;p&gt;SebC: Exécution du fichier hello.bin sur Qemu&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Exécution du fichier hello.bin sur Qemu&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1920</id>
		<title>Fiche Projet Qemu Stellaris</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1920"/>
		<updated>2011-04-06T22:33:45Z</updated>

		<summary type="html">&lt;p&gt;SebC: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Fiche Projet Qemu=&lt;br /&gt;
==Repository==&lt;br /&gt;
Lien du dépot : http://svn3.xp-dev.com/svn/Stellaris_repo/ (Dépot publique)&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
Cahier des charges réalisé (14/02)&amp;lt;br&amp;gt;&lt;br /&gt;
Prise en charge OLED &amp;lt;br&amp;gt;&lt;br /&gt;
Réalisation Interface Graphique &amp;lt;br&amp;gt;&lt;br /&gt;
Communication Qemu - Interface Graphique &amp;lt;br&amp;gt;&lt;br /&gt;
Documentation et description du travail réalisé &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Image du Projet ==&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1918</id>
		<title>Fiche Projet Qemu Stellaris</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1918"/>
		<updated>2011-04-06T22:26:18Z</updated>

		<summary type="html">&lt;p&gt;SebC: /* Avancement du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Fiche Projet Qemu=&lt;br /&gt;
==Repository==&lt;br /&gt;
Lien du dépot : http://svn3.xp-dev.com/svn/Stellaris_repo/ (Dépot publique)&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
Cahier des charges réalisé (14/02)&amp;lt;br&amp;gt;&lt;br /&gt;
Prise en charge OLED &amp;lt;br&amp;gt;&lt;br /&gt;
Réalisation Interface Graphique &amp;lt;br&amp;gt;&lt;br /&gt;
Communication Qemu - Interface Graphique &amp;lt;br&amp;gt;&lt;br /&gt;
Documentation et description du travail réalisé &amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1917</id>
		<title>Fiche Projet Qemu Stellaris</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1917"/>
		<updated>2011-04-06T22:25:46Z</updated>

		<summary type="html">&lt;p&gt;SebC: /* Avancement du Projet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Fiche Projet Qemu=&lt;br /&gt;
==Repository==&lt;br /&gt;
Lien du dépot : http://svn3.xp-dev.com/svn/Stellaris_repo/ (Dépot publique)&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
Cahier des charges réalisé (14/02)&lt;br /&gt;
Prise en charge OLED&lt;br /&gt;
Réalisation Interface Graphique&lt;br /&gt;
Communication Qemu - Interface Graphique&lt;br /&gt;
Documentation et description du travail réalisé&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=1916</id>
		<title>Stellaris Luminary Lm3s6965</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=1916"/>
		<updated>2011-04-06T22:22:47Z</updated>

		<summary type="html">&lt;p&gt;SebC: Ajout de la Documentaion réalisée et des modifications&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;N&#039;hésitez pas à enrichir cette page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:EKI-LM3S6965.jpg|200px|thumb|right| Stellaris Luminary Lm3s6965 ]]&lt;br /&gt;
Ce [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit] est construit autour d&#039;un microcontrolleur [[ARM Cortex-M3]] Lm3s6965  &lt;br /&gt;
de marque Luminary Micro appartenant au groupe Texas Instrument.&lt;br /&gt;
&lt;br /&gt;
Les principales caratéristiques et intérêts de ce kit sont:&lt;br /&gt;
&lt;br /&gt;
* Processeur ARM 32bit Cortex-M3&lt;br /&gt;
* Port Ethernet&lt;br /&gt;
* Ecran OLED monochrome 128 x 64 pixels (16 niveaux)&lt;br /&gt;
* Un bon support d&#039;[[OpenOCD]]&lt;br /&gt;
* Support de [[eLua]] (port du langage de script Lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ressources=&lt;br /&gt;
* Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;br /&gt;
&lt;br /&gt;
* LM3S6965: Tips &amp;amp; Tricks / OpenOCD : [http://claymore.engineer.gvsu.edu/egr326/LM3S6965]&lt;br /&gt;
&lt;br /&gt;
* Building toolchain and OpenOCD for Stellaris on Linux : [http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/65137.aspx]&lt;br /&gt;
&lt;br /&gt;
* Test qemu + arm + gdb + ld ... :[http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/]&lt;br /&gt;
&lt;br /&gt;
* ARM Projets divers : [http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/]&lt;br /&gt;
&lt;br /&gt;
* Tutorial général: [[Media:Tuto_lm3s6965.pdf]]&lt;br /&gt;
&lt;br /&gt;
* Le document technique (datasheet) du microcontrolleur Lm3s6965: [[Media:Datasheet-LM3S6965.pdf‎]]&lt;br /&gt;
&lt;br /&gt;
= Exemples d&#039;utilisation =&lt;br /&gt;
&lt;br /&gt;
Les exemples ci-dessus rassemblent un ensemble d&#039;outils et de codes complétant ceux proposé par le constructeur dans une vision opensource.&lt;br /&gt;
Une image virtuelle est aussi fournie, voir ci-dessous.&lt;br /&gt;
&lt;br /&gt;
=Debut avec la Carte Stellaris=&lt;br /&gt;
&lt;br /&gt;
Pour programmer la carte, il faut tout d&#039;abord installer la chaîne de compilation.&lt;br /&gt;
&lt;br /&gt;
== Compilation du toolchain ==&lt;br /&gt;
&lt;br /&gt;
Suivre  [http://www.codesourcery.com/sgpp/lite/arm/portal/package7815/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin Binaire Linux] pour récupérer la chaîne de compilation Sourcery G++ Lite.&amp;lt;br&amp;gt;&lt;br /&gt;
D&#039;autres paquets disponibles sur le [http://www.codesourcery.com/sgpp/lite/arm/portal/release1592 site du logiciel]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compilation des exemples ==&lt;br /&gt;
&lt;br /&gt;
Une fois le toolchain installé, il est intéressant de regarder les fichiers de tests disponible sur le CD d&#039;Installation. L&#039;éxecutable SW-EK-LM3S6965.exe propose un grand nombre de test recompilable à l&#039;aide des fichiers adjacents. Ces codes étant fournis par le constructeur, ce sont eux qui vont valider la bonne émulation de la carte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compilation d&#039;exemples plus simples ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers test-cortex-m3.c, startup_gcc.c et lm3s.ld utilisés ci-aprés sont disponibles dans l&#039;archive: [[Media:Test-cortex-m3.tar]]&lt;br /&gt;
&lt;br /&gt;
Construction de l&#039;exécutable&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb test-cortex-m3.c -o test-cortex-m3.o&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb startup_gcc.c -o startup_gcc.o&lt;br /&gt;
 arm-none-eabi-ld -T lm3s.ld  startup_gcc.o test-cortex-m3.o -o test-cortex-m3.elf&lt;br /&gt;
 arm-none-eabi-nm test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Juste pour voir le code déassemblé&lt;br /&gt;
 arm-none-eabi-objdump -d test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faut une version binaire simple à charger et non la version trop riche&lt;br /&gt;
 arm-none-eabi-objcopy -O binary test-cortex-m3.elf test-cortex-m3.bin&lt;br /&gt;
&lt;br /&gt;
Le binaire peut ensuite être placé(flashé) sur la carte avec OpenOCD ou utilisé avec l&#039;émulateur QEMU, voir ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Chargement du bin sur la carte ==&lt;br /&gt;
&lt;br /&gt;
=== Utilisation avec [[OpenOCD]] sous linux  ===&lt;br /&gt;
&lt;br /&gt;
Récupérer le script &#039;&#039;setup_lm3s6965.sh&#039;&#039; sur [http://claymore.engineer.gvsu.edu/egr326/LM3S6965].&lt;br /&gt;
Ce script va récupérer et compiler openocd. Une copie est disponible [[Media:Setup_lm3s6965.txt]]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;sh setup_lm3s6965.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Construire et installer le bon pilote FTDI &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
 wget http://www.intra2net.com/en/developer/libftdi/download/libftdi-0.18.tar.gz&lt;br /&gt;
 #install open FTDI drivers&lt;br /&gt;
 tar -xzf libftdi-0.18.tar.gz&lt;br /&gt;
 cd libftdi-0.18/&lt;br /&gt;
 sudo apt-get install libusb-dev&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On lance openocd en root&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo openocd -f /usr/local/share/openocd/scripts/board/ek-lm3s6965.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et on peut flash le microcontrolleur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #flash mcu with some code at address 0x00000 and execute&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
 halt&lt;br /&gt;
 flash write_image erase /tmp/main.bin 0&lt;br /&gt;
 reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple avec le déboggeur gdb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Debut avec [[Qemu | QEMU]] =&lt;br /&gt;
&lt;br /&gt;
== Compilation et première utilisation ==&lt;br /&gt;
&lt;br /&gt;
Récupération et compilation du qemu version qemu-0.13.0&lt;br /&gt;
 wget http://wiki.qemu.org/download/qemu-0.13.0.tar.gz&lt;br /&gt;
 tar zxvf qemu-0.13.0.tar.gz&lt;br /&gt;
 cd qemu-0.13.0&lt;br /&gt;
 ./configure --target-list=arm-softmmu # On configure pour ne pas tout compiler&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : La version qemu-0.14.0 a été réalisée le 18/02/11&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;émulation avec qemu (faire &#039;&#039;&#039;crtl a + x&#039;&#039;&#039; pour sortir ou  &#039;&#039;&#039;crtl a + c&#039;&#039;&#039; pour accéder au moniteur)&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
 Hello world!&lt;br /&gt;
 QEMU 0.13.0 monitor - type &#039;help&#039; for more information&lt;br /&gt;
 (qemu) quit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Moniteur (console de commande et d&#039;interrogation de Qemu) ==&lt;br /&gt;
Qemu dispose d&#039;un moniteur assez puissant. Utilisez l&#039;option &#039;&#039;&#039;-S&#039;&#039;&#039; pour lancer le moniteur dès le démarrage l&#039;émulation sera alors suspendu, puis faire &#039;&#039;&#039;crtl+a c&#039;&#039;&#039; pour accèder à la console d moniteur &lt;br /&gt;
&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -S -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
  &#039;&#039;&#039;crtl+a c&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 (qemu) info roms &lt;br /&gt;
 addr=00000000 size=0x0001e0 mem=rom name=&amp;quot;test-cortex-m3.bin&amp;quot; &lt;br /&gt;
 (qemu) info registers &lt;br /&gt;
 R00=000001d0 R01=20000000 R02=0000000a R03=00000000&lt;br /&gt;
 R04=00000000 R05=00000000 R06=00000000 R07=2000fff0&lt;br /&gt;
 R08=00000000 R09=00000000 R10=00000000 R11=00000000&lt;br /&gt;
 R12=00000000 R13=2000fff0 R14=000001c9 R15=00000160&lt;br /&gt;
 PSR=60000173 -ZC- T svc32&lt;br /&gt;
&lt;br /&gt;
Malheureusement pour une émulation des cpus cortex-M3, l&#039;ensemble des fonctions du moniteur ne sont pas toutes supportées. Par exemple le déassembleur intégré ne décode pas correctement les instructions. Pour aller plus loin, il faut utiliser le déboggeur cf suite.&lt;br /&gt;
&lt;br /&gt;
== Qemu et GDB ==&lt;br /&gt;
On peut attaché GDB à Qemu&lt;br /&gt;
&lt;br /&gt;
 ./qemu/qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -monitor null -serial null -semihosting  -kernel  /tmp/hello.bin  -S  -gdb tcp::51234&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gdb /tmp/hello.axf &lt;br /&gt;
&lt;br /&gt;
 (gdb) &#039;&#039;&#039;target remote localhost:51234&#039;&#039;&#039;&lt;br /&gt;
 ... &lt;br /&gt;
 (gdb) &#039;&#039;&#039;load&#039;&#039;&#039;&lt;br /&gt;
 (gdb) &#039;&#039;&#039;break main&#039;&#039;&#039;&lt;br /&gt;
 (gdb) &#039;&#039;&#039;continue&#039;&#039;&#039;&lt;br /&gt;
   Continuing.&lt;br /&gt;
   Breakpoint 1, 0x000000f4 in main ()&lt;br /&gt;
 (gdb) stepi&lt;br /&gt;
   0x00000640 in SysCtlClockSet ()&lt;br /&gt;
 (gdb) &#039;&#039;&#039;disassemble 0x640&#039;&#039;&#039;&lt;br /&gt;
   Dump of assembler code for function SysCtlClockSet:&lt;br /&gt;
   0x00000640 &amp;lt;SysCtlClockSet+0&amp;gt;:	ldr	r3, [pc, #308]	; (0x778 &amp;lt;SysCtlClockSet+312&amp;gt;)&lt;br /&gt;
   0x00000642 &amp;lt;SysCtlClockSet+2&amp;gt;:	push	{r4, r5, r6, lr}&lt;br /&gt;
   0x00000644 &amp;lt;SysCtlClockSet+4&amp;gt;:	ldr	r2, [r3, #0]&lt;br /&gt;
   ....&lt;br /&gt;
&lt;br /&gt;
On peut attaché GDB à Qemu&lt;br /&gt;
 http://cgi.cs.indiana.edu/~geobrown/stm32/Main/Simulation&lt;br /&gt;
 http://garden.seeedstudio.com/index.php?title=DSO_Nano/Qemu_gdb&amp;amp;redirect=no&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Modifications réalisées sur QEMU=&lt;br /&gt;
&lt;br /&gt;
== Suivi et accès des GPIO en sortie ==&lt;br /&gt;
&lt;br /&gt;
Le principe va être d&#039;utiliser le code élémentaire de clignotement de LED blinky.bin disponible dans le répertoire StellarisWare puis de modifier le fichier stellaris.c dans repertoire hw de qemu pour repérer et intercepter les changement d&#039;état &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comprendre l&#039;émulation du stellaris proposé par QEMU suppose de se plonger dans le code. On peut notamment explorer les fichiers suivant, liste non exhaustive:&lt;br /&gt;
&lt;br /&gt;
 hw/irq.c  hw/qdev.c  hw/stellaris.c       hw/stellaris_input.c  hw/sysbus.h&lt;br /&gt;
 hw/irq.h  hw/qdev.h  hw/stellaris_enet.c  hw/sysbus.c           qemu-common.h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il est important d&#039;observer la struct &#039;&#039;&#039;qemu_irq&#039;&#039;&#039;. Dans le stellaris.c nous notons la déclaration suivante&lt;br /&gt;
&lt;br /&gt;
 static void stellaris_init(const char *kernel_filename, const char *cpu_model,&lt;br /&gt;
                           stellaris_board_info *board)&lt;br /&gt;
 {&lt;br /&gt;
    static const int uart_irq[] = {5, 6, 33, 34};&lt;br /&gt;
    static const int timer_irq[] = {19, 21, 23, 35};&lt;br /&gt;
    static const uint32_t gpio_addr[7] =&lt;br /&gt;
      { 0x40004000, 0x40005000, 0x40006000, 0x40007000,&lt;br /&gt;
        0x40024000, 0x40025000, 0x40026000};&lt;br /&gt;
    static const int gpio_irq[7] = {0, 1, 2, 3, 4, 30, 31};&lt;br /&gt;
&lt;br /&gt;
    qemu_irq *pic;&lt;br /&gt;
    DeviceState *gpio_dev[7];&lt;br /&gt;
    qemu_irq gpio_in[7][8];&lt;br /&gt;
    qemu_irq gpio_out[7][8];&lt;br /&gt;
&lt;br /&gt;
La déclaration qemu_irq gpio_out[7][8]; va permettre l&#039;émulation des 8 fils de sortie des 7 port d&#039;E/S (A,B,C,D,E,F,G).&lt;br /&gt;
&lt;br /&gt;
Si on suit &#039;&#039;&#039;qemu_irq&#039;&#039; à travers les fichiers, nous avons:&lt;br /&gt;
&lt;br /&gt;
Dans qemu-common.h qemu_irq est un pointer sur IRQState&lt;br /&gt;
&lt;br /&gt;
 typedef struct IRQState *qemu_irq;&lt;br /&gt;
&lt;br /&gt;
IRQState dans hw/irq.c&lt;br /&gt;
&lt;br /&gt;
 struct IRQState {&lt;br /&gt;
    qemu_irq_handler handler;&lt;br /&gt;
    void *opaque;&lt;br /&gt;
    int n;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Dans hw/irq.h:&lt;br /&gt;
 typedef void (*qemu_irq_handler)(void *opaque, int n, int level);&lt;br /&gt;
&lt;br /&gt;
qemu_irq_handler est un pointeur sur une fonction qui sera appelée lorsque &#039;&#039;le fils&#039;&#039; changera de valeur, voir la fonction qemu_set_irq dans irq.c:  &lt;br /&gt;
&lt;br /&gt;
 void qemu_set_irq(qemu_irq irq, int level)&lt;br /&gt;
 {&lt;br /&gt;
    if (!irq)&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    irq-&amp;gt;handler(irq-&amp;gt;opaque, irq-&amp;gt;n, level);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
On va maintenant maintenant de modifier le fichier stellaris.c pour suivre &#039;&#039;&#039; l&#039;état du bit 0 du port F en sortie &#039;&#039;&#039; lequel est cablé un LED sur la carte physique (utilisé par le code blinky.bin).&lt;br /&gt;
&lt;br /&gt;
  static void print_yop(void *opaque, int line, int level)&lt;br /&gt;
  {&lt;br /&gt;
   /* opaque is null, can by use to access to a global state ??? */&lt;br /&gt;
   printf(&amp;quot;poy line %d level %d\n&amp;quot;,line,level);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 qemu_irq yop; /*test*/&lt;br /&gt;
 yop =  qemu_allocate_irqs(print_yop, NULL, 1)[0]; /* on alloue de ma mémoire  et on positionne le handler, ici print_yop*/&lt;br /&gt;
&lt;br /&gt;
 gpio_out[GPIO_F][0] = yop; /* /!\ à faire après l&#039;intialisation de tous les gpio_out, si il y a écrassement */&lt;br /&gt;
&lt;br /&gt;
Archive contenant le fichier modifié stellaris.c et le code de clignotement de LED blinky.bin [[Media:stellaris_mod_blinky.tar]]&lt;br /&gt;
&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel blinky.bin&lt;br /&gt;
&lt;br /&gt;
 poy line 0 level 1 &lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
 poy line 0 level 1&lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
 poy line 0 level 1&lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; Ctrl A puis x quitter QEMU, voir les commandes du moniteur pour plus de détail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Affichage de Caractères sur l&#039;OLED==&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un registre d&#039;horloge ===&lt;br /&gt;
Les programmes de test de l&#039;OLED fournis ne fonctionnent pas en tant que tels. Qemu affiche une erreur dès le début de l&#039;exécution.&lt;br /&gt;
Après des recherches dans le code des fonctions utilisées dans les exemples. Il vient qu&#039;il est nécessaire de modifier les fonctions ssys_read et ssys_write de stellaris.c en ajoutant un cas supplémentaire.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case 0x070: /* RCC2 */&lt;br /&gt;
    return s-&amp;gt;rcc2;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
et&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      case 0x070 : /* RCC2 */						&lt;br /&gt;
			//p95 datasheet	Register 10: Run-Mode Clock Configuration 2 &lt;br /&gt;
		&lt;br /&gt;
		if(value &amp;gt;&amp;gt; 31 != 0 ){	// if the USERCC2 bit is to 1 we&lt;br /&gt;
			s-&amp;gt;rcc=value;			// override RCC;&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		if ((s-&amp;gt;rcc2 &amp;amp; (1 &amp;lt;&amp;lt; 13)) != 0 &amp;amp;&amp;amp; (value &amp;amp; (1 &amp;lt;&amp;lt; 13)) == 0) { &lt;br /&gt;
                    /* PLL enable.  */&lt;br /&gt;
                    s-&amp;gt;int_status |= (1 &amp;lt;&amp;lt; 6);&lt;br /&gt;
                }&lt;br /&gt;
		&lt;br /&gt;
		s-&amp;gt;rcc2 = value;&lt;br /&gt;
		break;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le champs rcc2 de la structure s a été ajouté également. Ce champ correspond au registre Run-Mode Clock Configuration 2 (RCC2) décrit dans le datasheet.&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un registre déprécié ===&lt;br /&gt;
&#039;&#039;&#039;Rédaction en Cours&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Documentation =&lt;br /&gt;
Une documentation sommaire a été réalisée afin que les personnes continuant le projet puisse comprendre ce qui a déjà été fait. Elle contient également quelques explications de la structure de Qemu et les fonctions. Le code n&#039;étant pas très commenté, il est difficile à appréhender.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Présentation Générale==&lt;br /&gt;
&lt;br /&gt;
Ce texte présente brievement comment marche globalement l&#039;émulation de la carte&lt;br /&gt;
Stellaris et quelques points importants pour comprendre le fonctionnement.&lt;br /&gt;
&lt;br /&gt;
De la documentation spécifique à certains fichier est disponible.&lt;br /&gt;
Elle est plutot sommaire la plupart du temps mais permet d&#039;appréhender mieux le&lt;br /&gt;
système.&lt;br /&gt;
&lt;br /&gt;
La majeur partie  de l&#039;émulation de la carte Stellaris est réalisée dans le &lt;br /&gt;
fichier stellaris.c du dossier hw de Qemu. &lt;br /&gt;
On peut trouver dans ce fichier la déclaration de plusieurs structures correpondant&lt;br /&gt;
au convertisseur analogique numérique (adc), ssi, timer (gptm) et i2c.&lt;br /&gt;
Ensuite, on trouve les fonctions de lecture et d&#039;ecriture dans les registres systemes.&lt;br /&gt;
Les 29 Registres systemes sont décrit dans le DataSheet de Stellaris. &lt;br /&gt;
(Attention, certains commentaires de code redirige vers un Datasheet plus ancien&lt;br /&gt;
que celui qu&#039;on peut trouver sur le site du constructeur)&lt;br /&gt;
&lt;br /&gt;
Stellaris utilise également des éléments extérieurs pour fonctionner. &lt;br /&gt;
L&#039;OLED fait parti de ces éléments, étant donné qu&#039;il peut être utilisé dans d&#039;autres&lt;br /&gt;
carte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pour comprendre comment est émulé la carte, il est important de partir des tests&lt;br /&gt;
de base proposés sur le CD de Stellaris. Les bin donnés en paramètres de qemu &lt;br /&gt;
&amp;quot;simulent&amp;quot; déjà une partie du code donné.&lt;br /&gt;
Par exemple : le fichier hello.c appelle la fonction RIT128x96x4StringDraw avec &lt;br /&gt;
le paramètre &amp;quot;Hello World!&amp;quot;. La compilation du programme va &amp;quot;déjà&amp;quot; modifier le paramètre&lt;br /&gt;
entré pour le mettre sous la forme de donnée en hexadécimal transmises à l&#039;OLED.&lt;br /&gt;
C&#039;est logique, étant donné que les bin seront éxécutés aussi sur la carte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cependant la compréhension de ce code est indispensable pour pouvoir ajouter des&lt;br /&gt;
fonctionnalités à qemu. Il faut savoir quelles sont les infos contenues dans le bin&lt;br /&gt;
afin de pouvoir les traiter et simuler le comportement réél.&lt;br /&gt;
Exemple pour une fonction largement répandue dans les fichiers de test :&lt;br /&gt;
&amp;lt;pre&amp;gt;	Decomposition de l&#039;exécution de l&#039;appel à SysCtlClockSet (fichier sysctl.c)&lt;br /&gt;
&lt;br /&gt;
	Sortie console : &lt;br /&gt;
&lt;br /&gt;
	//Debut Qemu &lt;br /&gt;
	Trying to read at offset : 0x0 //Printf ajoutés dans ssys_read &lt;br /&gt;
	Trying to read at offset : 0x0&lt;br /&gt;
&lt;br /&gt;
	Début fonction : l 1367&lt;br /&gt;
	Ne rentre pas dans le if du début :&lt;br /&gt;
	CLASS_IS_SANDSTORM &amp;amp;&amp;amp; (ulConfig &amp;amp; SYSCTL_RCC2_USERCC2)&lt;br /&gt;
&lt;br /&gt;
	Lecture de RCC et RCC2 : l 1389&lt;br /&gt;
	Trying to read at offset : 0x60		ulRCC = HWREG(SYSCTL_RCC);		 &lt;br /&gt;
	Trying to read at offset : 0x70		ulRCC2 = HWREG(SYSCTL_RCC2);		&lt;br /&gt;
&lt;br /&gt;
	Calculs...&lt;br /&gt;
&lt;br /&gt;
	Ecriture de RCC et RCC2 : l 1402&lt;br /&gt;
	Trying to write 0x78e3ac0 at offset : 0x60  	HWREG(SYSCTL_RCC) = ulRCC;&lt;br /&gt;
	Trying to write 0x800 at offset : 0x70 			HWREG(SYSCTL_RCC2) = ulRCC2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	N&#039;entre pas dans le if : &lt;br /&gt;
	(((ulRCC &amp;amp; SYSCTL_RCC_IOSCDIS) &amp;amp;&amp;amp; !(ulConfig &amp;amp; SYSCTL_RCC_IOSCDIS)) ||&lt;br /&gt;
    ((ulRCC &amp;amp; SYSCTL_RCC_MOSCDIS) &amp;amp;&amp;amp; !(ulConfig &amp;amp; SYSCTL_RCC_MOSCDIS)))&lt;br /&gt;
	L&#039;oscillateur n&#039;a pas besoin d&#039;être activé&lt;br /&gt;
	Calculs...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Ecriture MISC : l 1468&lt;br /&gt;
	// Clear the PLL lock interrupt&lt;br /&gt;
	HWREG(SYSCTL_MISC) = SYSCTL_INT_PLL_LOCK;&lt;br /&gt;
	Trying to write 0x40 at offset : 0x58&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Passe dans le else : !ulRCC2 &amp;amp; SYSCTL_RCC2_USERCC2&lt;br /&gt;
	&lt;br /&gt;
	Ecriture de RCC et RCC2 : l 1480&lt;br /&gt;
	Trying to write 0x78e3b80 at offset : 0x60	HWREG(SYSCTL_RCC) = ulRCC;&lt;br /&gt;
	Trying to write 0x2800 at offset : 0x70		HWREG(SYSCTL_RCC2) = ulRCC2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	Ecriture de RCC et RCC2 : l 1537&lt;br /&gt;
	Trying to write 0x78e3b80 at offset : 0x60    HWREG(SYSCTL_RCC) = ulRCC;&lt;br /&gt;
	Trying to write 0x7802800 at offset : 0x70 	HWREG(SYSCTL_RCC2) = ulRCC2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	QEMU: Terminated&lt;br /&gt;
&amp;lt;/pre&amp;gt;	&lt;br /&gt;
Le fait de dérouler le code de l&#039;appel de la fonction nous a permis de cibler &lt;br /&gt;
les erreurs et de comprendre comment les traiter. &lt;br /&gt;
De cette facon nous avons pu émuler l&#039;horloge.&lt;br /&gt;
Cette façon d&#039;avancer dans le developpement est assez fastidieuse mais assure de &lt;br /&gt;
ne pas faire d&#039;erreur et d&#039;avoir bien compris ce qu&#039;il se passe.&lt;br /&gt;
L&#039;utilisation d&#039;un outil de debuggage est recommandé.&lt;br /&gt;
&lt;br /&gt;
==SSD0323==&lt;br /&gt;
Le fichier ssd0323 correspond à l&#039;interface entre l&#039;OLED et le bus SSI sur la carte.&lt;br /&gt;
Les les commandes et données du bus SSI sont passées en paramètre de la fonction&lt;br /&gt;
ssd0323_transfer. &lt;br /&gt;
A partir de cette fonction, on pilote l&#039;OLED selon les spécification fournie dans&lt;br /&gt;
la documentation. (voir Treiber_IC-SSD0323_OLED_128x64_GELB et SSD1329_1.1)&lt;br /&gt;
De base, l&#039;interface émulée etait la SSD0323 commme l&#039;indique le fichier, mais &lt;br /&gt;
il a fallu ajouter des fonctions comprise dans le SSD1329 pour qu&#039;il n&#039;y ait plus&lt;br /&gt;
d&#039;erreur apparante à l&#039;éxécution.&lt;br /&gt;
&lt;br /&gt;
Details de la fonction ssd0323_transfer :&lt;br /&gt;
Cette fonction récupère commandes et données. Pour faire la différence entre les &lt;br /&gt;
deux il faut regarder le champ mode de la structure.&lt;br /&gt;
Pour les données, un travail effectué pour conserver la position du curseur de l&#039;OLED&lt;br /&gt;
Pour les commandes, une astuce est utilisée pour recuperer la commande dans un premier&lt;br /&gt;
temps puis les paramètres. En fait, tant que le nombre de paramètre n&#039;est pas bon,&lt;br /&gt;
le paramètre courant est stocké. &lt;br /&gt;
(Voir le traitement fait à l&#039;entrée du case l93 et la macro DATA définie )&lt;br /&gt;
Le detail des commandes est un peu commenté, pour plus d&#039;info voir les fichier&lt;br /&gt;
sur le SSD0323 et SSD1329 à la section de la liste des commandes.&lt;br /&gt;
&lt;br /&gt;
Details de la structure : Les champs de la structures sont utiles pour &lt;br /&gt;
la simulation des commandes.&lt;br /&gt;
Les noms des entiers utilisés sont assez explicite. De plus il est assez intuitif&lt;br /&gt;
d&#039;avoir un SSIDev dans la structure étant donné que c&#039;est l&#039;interface.&lt;br /&gt;
De même pour la présence du DisplayState.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==PL061 ==&lt;br /&gt;
Le fichier pl061.c correpond aux registres GPIO. Il a la même structure que les&lt;br /&gt;
autres fichiers (fonction pour lire/ecrire/initialiser, structure d&#039;info ...)&lt;br /&gt;
Le pl061 est connecté à l&#039;APB (Advanced Peripheral Bus) sur la carte le Bus utilisé&lt;br /&gt;
lors d&#039;un accès à un péripherique.&lt;br /&gt;
Les GPIO sont très souvent utilisés dans les programmes de test disponible&lt;br /&gt;
(OLED par exemple)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Détails sur différentes structures==&lt;br /&gt;
===Details sur la création d&#039;un device===&lt;br /&gt;
La fonction qdev_create est utilisée pour creer des peripheriques. Elle est située&lt;br /&gt;
dans le fichier qdev.c. Cette fonction n&#039;est pas directement appellée dans stellaris.c.&lt;br /&gt;
On peut la trouver par exemple dans ssi_create_slave.&lt;br /&gt;
La fonction a besoin d&#039;information sur le péripherique pour pouvoir le creer. &lt;br /&gt;
De telles informations sont déclarées dans des structures que l&#039;on peut trouver dans &lt;br /&gt;
stellaris (par exemple). Ces structures ont un formatage particulier, il faut faire attention.&lt;br /&gt;
Il faut également spécifier un bus, sinon c&#039;est celui du système qui est pris par défaut.&lt;br /&gt;
&lt;br /&gt;
Exemple : &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static SSISlaveInfo stellaris_ssi_bus_info = {&lt;br /&gt;
    .qdev.name = &amp;quot;evb6965-ssi&amp;quot;,&lt;br /&gt;
    .qdev.size = sizeof(stellaris_ssi_bus_state),&lt;br /&gt;
    .init = stellaris_ssi_bus_init,&lt;br /&gt;
    .transfer = stellaris_ssi_bus_transfer&lt;br /&gt;
 };&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Details sur l&#039;ajout d&#039;un device ===&lt;br /&gt;
Dans qdev.c on peut trouver la fonction suivante : &lt;br /&gt;
	DeviceState *qdev_device_add(QemuOpts *opts)&lt;br /&gt;
Cette fonction recupère les options pour creer un driver.&lt;br /&gt;
Ensuite elle recupère les infos relatives à ce driver puis le bus correspondant&lt;br /&gt;
A partir du bus et des infos elle créée un device et met les propriétés.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Détails sur la création d&#039;un QemuOpts===&lt;br /&gt;
Dans qemu-options.c on trouve la fonction suivante : &lt;br /&gt;
	QemuOpts *qemu_opts_create(QemuOptsList *list, const char *id, int fail_if_exists)&lt;br /&gt;
Elle se contente de verifier la forme de l&#039;id et recuperer les options dans la liste&lt;br /&gt;
afin de les placer dans la structure à retourner.&lt;br /&gt;
&lt;br /&gt;
Les QemuOptsList sont à initialiser à la main à priori le detail de cette structure &lt;br /&gt;
se trouve dans qemu-options.h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Image de machine virtuelle =&lt;br /&gt;
L&#039;image de machine virtuelle ci-dessous contient les outils adaptés pour le  LM3S6965EVB comme présenté précédemment: la chaîne de compilation Sourcery G++ Lite, l&#039;outil de pilotage de sonde matérielle OpenOCD, et QEMU.&lt;br /&gt;
&lt;br /&gt;
* Image de système au format vdi pour VirtualBox: [http://mescal.imag.fr/membres/olivier.richard/documents/debian_air_32bit.vdi]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
&lt;br /&gt;
==Quels sont les composants reconnus de la carte?==&lt;br /&gt;
&lt;br /&gt;
:Extrait de la [http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator Documentation Officielle] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The Luminary Micro Stellaris LM3S6965EVB emulation includes the following devices:&lt;br /&gt;
&lt;br /&gt;
Cortex-M3 CPU core.&lt;br /&gt;
256k Flash and 64k SRAM.&lt;br /&gt;
Timers, UARTs, ADC, I^2C and SSI interfaces.&lt;br /&gt;
OSRAM Pictiva 128x64 OLED with SSD0323 controller connected via SSI.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=1905</id>
		<title>Stellaris Luminary Lm3s6965</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=1905"/>
		<updated>2011-04-06T21:51:20Z</updated>

		<summary type="html">&lt;p&gt;SebC: Restructuration de la page afin d&amp;#039;inclure les docs et le travail réalisé&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;N&#039;hésitez pas à enrichir cette page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:EKI-LM3S6965.jpg|200px|thumb|right| Stellaris Luminary Lm3s6965 ]]&lt;br /&gt;
Ce [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit] est construit autour d&#039;un microcontrolleur [[ARM Cortex-M3]] Lm3s6965  &lt;br /&gt;
de marque Luminary Micro appartenant au groupe Texas Instrument.&lt;br /&gt;
&lt;br /&gt;
Les principales caratéristiques et intérêts de ce kit sont:&lt;br /&gt;
&lt;br /&gt;
* Processeur ARM 32bit Cortex-M3&lt;br /&gt;
* Port Ethernet&lt;br /&gt;
* Ecran OLED monochrome 128 x 64 pixels (16 niveaux)&lt;br /&gt;
* Un bon support d&#039;[[OpenOCD]]&lt;br /&gt;
* Support de [[eLua]] (port du langage de script Lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ressources=&lt;br /&gt;
* Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;br /&gt;
&lt;br /&gt;
* LM3S6965: Tips &amp;amp; Tricks / OpenOCD : [http://claymore.engineer.gvsu.edu/egr326/LM3S6965]&lt;br /&gt;
&lt;br /&gt;
* Building toolchain and OpenOCD for Stellaris on Linux : [http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/65137.aspx]&lt;br /&gt;
&lt;br /&gt;
* Test qemu + arm + gdb + ld ... :[http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/]&lt;br /&gt;
&lt;br /&gt;
* ARM Projets divers : [http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/]&lt;br /&gt;
&lt;br /&gt;
* Tutorial général: [[Media:Tuto_lm3s6965.pdf]]&lt;br /&gt;
&lt;br /&gt;
* Le document technique (datasheet) du microcontrolleur Lm3s6965: [[Media:Datasheet-LM3S6965.pdf‎]]&lt;br /&gt;
&lt;br /&gt;
= Exemples d&#039;utilisation =&lt;br /&gt;
&lt;br /&gt;
Les exemples ci-dessus rassemblent un ensemble d&#039;outils et de codes complétant ceux proposé par le constructeur dans une vision opensource.&lt;br /&gt;
Une image virtuelle est aussi fournie, voir ci-dessous.&lt;br /&gt;
&lt;br /&gt;
=Debut avec la Carte Stellaris=&lt;br /&gt;
&lt;br /&gt;
Pour programmer la carte, il faut tout d&#039;abord installer la chaîne de compilation.&lt;br /&gt;
&lt;br /&gt;
== Compilation du toolchain ==&lt;br /&gt;
&lt;br /&gt;
Suivre  [http://www.codesourcery.com/sgpp/lite/arm/portal/package7815/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin Binaire Linux] pour récupérer la chaîne de compilation Sourcery G++ Lite.&amp;lt;br&amp;gt;&lt;br /&gt;
D&#039;autres paquets disponibles sur le [http://www.codesourcery.com/sgpp/lite/arm/portal/release1592 site du logiciel]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compilation des exemples ==&lt;br /&gt;
&lt;br /&gt;
Une fois le toolchain installé, il est intéressant de regarder les fichiers de tests disponible sur le CD d&#039;Installation. L&#039;éxecutable SW-EK-LM3S6965.exe propose un grand nombre de test recompilable à l&#039;aide des fichiers adjacents. Ces codes étant fournis par le constructeur, ce sont eux qui vont valider la bonne émulation de la carte.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Compilation d&#039;exemples plus simples ==&lt;br /&gt;
&lt;br /&gt;
Les fichiers test-cortex-m3.c, startup_gcc.c et lm3s.ld utilisés ci-aprés sont disponibles dans l&#039;archive: [[Media:Test-cortex-m3.tar]]&lt;br /&gt;
&lt;br /&gt;
Construction de l&#039;exécutable&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb test-cortex-m3.c -o test-cortex-m3.o&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb startup_gcc.c -o startup_gcc.o&lt;br /&gt;
 arm-none-eabi-ld -T lm3s.ld  startup_gcc.o test-cortex-m3.o -o test-cortex-m3.elf&lt;br /&gt;
 arm-none-eabi-nm test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Juste pour voir le code déassemblé&lt;br /&gt;
 arm-none-eabi-objdump -d test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faut une version binaire simple à charger et non la version trop riche&lt;br /&gt;
 arm-none-eabi-objcopy -O binary test-cortex-m3.elf test-cortex-m3.bin&lt;br /&gt;
&lt;br /&gt;
Le binaire peut ensuite être placé(flashé) sur la carte avec OpenOCD ou utilisé avec l&#039;émulateur QEMU, voir ci-dessous.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Chargement du bin sur la carte ==&lt;br /&gt;
&lt;br /&gt;
=== Utilisation avec [[OpenOCD]] sous linux  ===&lt;br /&gt;
&lt;br /&gt;
Récupérer le script &#039;&#039;setup_lm3s6965.sh&#039;&#039; sur [http://claymore.engineer.gvsu.edu/egr326/LM3S6965].&lt;br /&gt;
Ce script va récupérer et compiler openocd. Une copie est disponible [[Media:Setup_lm3s6965.txt]]&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;sh setup_lm3s6965.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Construire et installer le bon pilote FTDI &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
 wget http://www.intra2net.com/en/developer/libftdi/download/libftdi-0.18.tar.gz&lt;br /&gt;
 #install open FTDI drivers&lt;br /&gt;
 tar -xzf libftdi-0.18.tar.gz&lt;br /&gt;
 cd libftdi-0.18/&lt;br /&gt;
 sudo apt-get install libusb-dev&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On lance openocd en root&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo openocd -f /usr/local/share/openocd/scripts/board/ek-lm3s6965.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et on peut flash le microcontrolleur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #flash mcu with some code at address 0x00000 and execute&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
 halt&lt;br /&gt;
 flash write_image erase /tmp/main.bin 0&lt;br /&gt;
 reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple avec le déboggeur gdb&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Debut avec [[Qemu | QEMU]] =&lt;br /&gt;
&lt;br /&gt;
== Compilation et première utilisation ==&lt;br /&gt;
&lt;br /&gt;
Récupération et compilation du qemu version qemu-0.13.0&lt;br /&gt;
 wget http://wiki.qemu.org/download/qemu-0.13.0.tar.gz&lt;br /&gt;
 tar zxvf qemu-0.13.0.tar.gz&lt;br /&gt;
 cd qemu-0.13.0&lt;br /&gt;
 ./configure --target-list=arm-softmmu # On configure pour ne pas tout compiler&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; : La version qemu-0.14.0 a été réalisée le 18/02/11&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;émulation avec qemu (faire &#039;&#039;&#039;crtl a + x&#039;&#039;&#039; pour sortir ou  &#039;&#039;&#039;crtl a + c&#039;&#039;&#039; pour accéder au moniteur)&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
 Hello world!&lt;br /&gt;
 QEMU 0.13.0 monitor - type &#039;help&#039; for more information&lt;br /&gt;
 (qemu) quit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Moniteur (console de commande et d&#039;interrogation de Qemu) ==&lt;br /&gt;
Qemu dispose d&#039;un moniteur assez puissant. Utilisez l&#039;option &#039;&#039;&#039;-S&#039;&#039;&#039; pour lancer le moniteur dès le démarrage l&#039;émulation sera alors suspendu, puis faire &#039;&#039;&#039;crtl+a c&#039;&#039;&#039; pour accèder à la console d moniteur &lt;br /&gt;
&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -S -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
  &#039;&#039;&#039;crtl+a c&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 (qemu) info roms &lt;br /&gt;
 addr=00000000 size=0x0001e0 mem=rom name=&amp;quot;test-cortex-m3.bin&amp;quot; &lt;br /&gt;
 (qemu) info registers &lt;br /&gt;
 R00=000001d0 R01=20000000 R02=0000000a R03=00000000&lt;br /&gt;
 R04=00000000 R05=00000000 R06=00000000 R07=2000fff0&lt;br /&gt;
 R08=00000000 R09=00000000 R10=00000000 R11=00000000&lt;br /&gt;
 R12=00000000 R13=2000fff0 R14=000001c9 R15=00000160&lt;br /&gt;
 PSR=60000173 -ZC- T svc32&lt;br /&gt;
&lt;br /&gt;
Malheureusement pour une émulation des cpus cortex-M3, l&#039;ensemble des fonctions du moniteur ne sont pas toutes supportées. Par exemple le déassembleur intégré ne décode pas correctement les instructions. Pour aller plus loin, il faut utiliser le déboggeur cf suite.&lt;br /&gt;
&lt;br /&gt;
== Qemu et GDB ==&lt;br /&gt;
On peut attaché GDB à Qemu&lt;br /&gt;
&lt;br /&gt;
 ./qemu/qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -monitor null -serial null -semihosting  -kernel  /tmp/hello.bin  -S  -gdb tcp::51234&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gdb /tmp/hello.axf &lt;br /&gt;
&lt;br /&gt;
 (gdb) &#039;&#039;&#039;target remote localhost:51234&#039;&#039;&#039;&lt;br /&gt;
 ... &lt;br /&gt;
 (gdb) &#039;&#039;&#039;load&#039;&#039;&#039;&lt;br /&gt;
 (gdb) &#039;&#039;&#039;break main&#039;&#039;&#039;&lt;br /&gt;
 (gdb) &#039;&#039;&#039;continue&#039;&#039;&#039;&lt;br /&gt;
   Continuing.&lt;br /&gt;
   Breakpoint 1, 0x000000f4 in main ()&lt;br /&gt;
 (gdb) stepi&lt;br /&gt;
   0x00000640 in SysCtlClockSet ()&lt;br /&gt;
 (gdb) &#039;&#039;&#039;disassemble 0x640&#039;&#039;&#039;&lt;br /&gt;
   Dump of assembler code for function SysCtlClockSet:&lt;br /&gt;
   0x00000640 &amp;lt;SysCtlClockSet+0&amp;gt;:	ldr	r3, [pc, #308]	; (0x778 &amp;lt;SysCtlClockSet+312&amp;gt;)&lt;br /&gt;
   0x00000642 &amp;lt;SysCtlClockSet+2&amp;gt;:	push	{r4, r5, r6, lr}&lt;br /&gt;
   0x00000644 &amp;lt;SysCtlClockSet+4&amp;gt;:	ldr	r2, [r3, #0]&lt;br /&gt;
   ....&lt;br /&gt;
&lt;br /&gt;
On peut attaché GDB à Qemu&lt;br /&gt;
 http://cgi.cs.indiana.edu/~geobrown/stm32/Main/Simulation&lt;br /&gt;
 http://garden.seeedstudio.com/index.php?title=DSO_Nano/Qemu_gdb&amp;amp;redirect=no&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Modifications réalisée sur QEMU=&lt;br /&gt;
&lt;br /&gt;
== Suivi et accès des GPIO en sortie ==&lt;br /&gt;
&lt;br /&gt;
Le principe va être d&#039;utiliser le code élémentaire de clignotement de LED blinky.bin disponible dans le répertoire StellarisWare puis de modifier le fichier stellaris.c dans repertoire hw de qemu pour repérer et intercepter les changement d&#039;état &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comprendre l&#039;émulation du stellaris proposé par QEMU suppose de se plonger dans le code. On peut notamment explorer les fichiers suivant, liste non exhaustive:&lt;br /&gt;
&lt;br /&gt;
 hw/irq.c  hw/qdev.c  hw/stellaris.c       hw/stellaris_input.c  hw/sysbus.h&lt;br /&gt;
 hw/irq.h  hw/qdev.h  hw/stellaris_enet.c  hw/sysbus.c           qemu-common.h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il est important d&#039;observer la struct &#039;&#039;&#039;qemu_irq&#039;&#039;&#039;. Dans le stellaris.c nous notons la déclaration suivante&lt;br /&gt;
&lt;br /&gt;
 static void stellaris_init(const char *kernel_filename, const char *cpu_model,&lt;br /&gt;
                           stellaris_board_info *board)&lt;br /&gt;
 {&lt;br /&gt;
    static const int uart_irq[] = {5, 6, 33, 34};&lt;br /&gt;
    static const int timer_irq[] = {19, 21, 23, 35};&lt;br /&gt;
    static const uint32_t gpio_addr[7] =&lt;br /&gt;
      { 0x40004000, 0x40005000, 0x40006000, 0x40007000,&lt;br /&gt;
        0x40024000, 0x40025000, 0x40026000};&lt;br /&gt;
    static const int gpio_irq[7] = {0, 1, 2, 3, 4, 30, 31};&lt;br /&gt;
&lt;br /&gt;
    qemu_irq *pic;&lt;br /&gt;
    DeviceState *gpio_dev[7];&lt;br /&gt;
    qemu_irq gpio_in[7][8];&lt;br /&gt;
    qemu_irq gpio_out[7][8];&lt;br /&gt;
&lt;br /&gt;
La déclaration qemu_irq gpio_out[7][8]; va permettre l&#039;émulation des 8 fils de sortie des 7 port d&#039;E/S (A,B,C,D,E,F,G).&lt;br /&gt;
&lt;br /&gt;
Si on suit &#039;&#039;&#039;qemu_irq&#039;&#039; à travers les fichiers, nous avons:&lt;br /&gt;
&lt;br /&gt;
Dans qemu-common.h qemu_irq est un pointer sur IRQState&lt;br /&gt;
&lt;br /&gt;
 typedef struct IRQState *qemu_irq;&lt;br /&gt;
&lt;br /&gt;
IRQState dans hw/irq.c&lt;br /&gt;
&lt;br /&gt;
 struct IRQState {&lt;br /&gt;
    qemu_irq_handler handler;&lt;br /&gt;
    void *opaque;&lt;br /&gt;
    int n;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Dans hw/irq.h:&lt;br /&gt;
 typedef void (*qemu_irq_handler)(void *opaque, int n, int level);&lt;br /&gt;
&lt;br /&gt;
qemu_irq_handler est un pointeur sur une fonction qui sera appelée lorsque &#039;&#039;le fils&#039;&#039; changera de valeur, voir la fonction qemu_set_irq dans irq.c:  &lt;br /&gt;
&lt;br /&gt;
 void qemu_set_irq(qemu_irq irq, int level)&lt;br /&gt;
 {&lt;br /&gt;
    if (!irq)&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    irq-&amp;gt;handler(irq-&amp;gt;opaque, irq-&amp;gt;n, level);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
On va maintenant maintenant de modifier le fichier stellaris.c pour suivre &#039;&#039;&#039; l&#039;état du bit 0 du port F en sortie &#039;&#039;&#039; lequel est cablé un LED sur la carte physique (utilisé par le code blinky.bin).&lt;br /&gt;
&lt;br /&gt;
  static void print_yop(void *opaque, int line, int level)&lt;br /&gt;
  {&lt;br /&gt;
   /* opaque is null, can by use to access to a global state ??? */&lt;br /&gt;
   printf(&amp;quot;poy line %d level %d\n&amp;quot;,line,level);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 qemu_irq yop; /*test*/&lt;br /&gt;
 yop =  qemu_allocate_irqs(print_yop, NULL, 1)[0]; /* on alloue de ma mémoire  et on positionne le handler, ici print_yop*/&lt;br /&gt;
&lt;br /&gt;
 gpio_out[GPIO_F][0] = yop; /* /!\ à faire après l&#039;intialisation de tous les gpio_out, si il y a écrassement */&lt;br /&gt;
&lt;br /&gt;
Archive contenant le fichier modifié stellaris.c et le code de clignotement de LED blinky.bin [[Media:stellaris_mod_blinky.tar]]&lt;br /&gt;
&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel blinky.bin&lt;br /&gt;
&lt;br /&gt;
 poy line 0 level 1 &lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
 poy line 0 level 1&lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
 poy line 0 level 1&lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; Ctrl A puis x quitter QEMU, voir les commandes du moniteur pour plus de détail.&lt;br /&gt;
&lt;br /&gt;
= Image de machine virtuelle =&lt;br /&gt;
L&#039;image de machine virtuelle ci-dessous contient les outils adaptés pour le  LM3S6965EVB comme présenté précédemment: la chaîne de compilation Sourcery G++ Lite, l&#039;outil de pilotage de sonde matérielle OpenOCD, et QEMU.&lt;br /&gt;
&lt;br /&gt;
* Image de système au format vdi pour VirtualBox: [http://mescal.imag.fr/membres/olivier.richard/documents/debian_air_32bit.vdi]&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
==Quels sont les composants reconnus de la carte?==&lt;br /&gt;
&lt;br /&gt;
:Extrait de la [http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator Documentation Officielle] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The Luminary Micro Stellaris LM3S6965EVB emulation includes the following devices:&lt;br /&gt;
&lt;br /&gt;
Cortex-M3 CPU core.&lt;br /&gt;
256k Flash and 64k SRAM.&lt;br /&gt;
Timers, UARTs, ADC, I^2C and SSI interfaces.&lt;br /&gt;
OSRAM Pictiva 128x64 OLED with SSD0323 controller connected via SSI.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ressources=&lt;br /&gt;
&lt;br /&gt;
*Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Qemu_Cortex-M3_Boards&amp;diff=1011</id>
		<title>Qemu Cortex-M3 Boards</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Qemu_Cortex-M3_Boards&amp;diff=1011"/>
		<updated>2011-02-14T15:51:30Z</updated>

		<summary type="html">&lt;p&gt;SebC: /* Qemu et cartes ARM Cortex-M3 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Qemu et cartes ARM Cortex-M3=&lt;br /&gt;
&lt;br /&gt;
* Enseignant: Olivier Richard&lt;br /&gt;
* Elèves RICM4 :  COAVOUX Sébastien (Chef de projet), ALEXANDRE Arthur, GERARD Cédric. [[ Fiche_Projet_Qemu_Stellaris|Fiche Projet]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://wiki.qemu.org Qemu] est émulateur sur portant l&#039;émulation d&#039;un grand nombre de processeurs et de périphériques. Sa richesse &lt;br /&gt;
est telle qu&#039;il est souvent utilisé, au moins partiellement, dans outils d&#039;émulation ou des chaînes de développement. Parmi les matériels émulés qui nous intéresse ici il y les processeurs ARM Cortex-M3 ainsi que la carte [[Stellaris Luminary Lm3s6965]]. Cette dernière n&#039;est que partiellement supportée.&lt;br /&gt;
&lt;br /&gt;
Projets proposés:&lt;br /&gt;
# Extension du support de la carte [[Stellaris Luminary Lm3s6965]]&lt;br /&gt;
# Support de la carte [[STM32VL-Discovery]]&lt;br /&gt;
# Support du [[STM32 Primer2]]&lt;br /&gt;
&lt;br /&gt;
== Matériel emprunté ==&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1009</id>
		<title>Fiche Projet Qemu Stellaris</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1009"/>
		<updated>2011-02-14T15:48:57Z</updated>

		<summary type="html">&lt;p&gt;SebC: /* Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Fiche Projet Qemu=&lt;br /&gt;
==Repository==&lt;br /&gt;
Lien du dépot : http://svn3.xp-dev.com/svn/Stellaris_repo/ (Dépot publique)&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
Cahier des charges réalisé (14/02)&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1008</id>
		<title>Fiche Projet Qemu Stellaris</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Fiche_Projet_Qemu_Stellaris&amp;diff=1008"/>
		<updated>2011-02-14T15:48:40Z</updated>

		<summary type="html">&lt;p&gt;SebC: Created page with &amp;quot;=Fiche Projet Qemu= ==Repository== Lien du dépot : http://svn3.xp-dev.com/svn/Stellaris_repo/ (Dépot publique)  ==Avancement du Projet== Cahier des charges réalisé (14/02…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Fiche Projet Qemu=&lt;br /&gt;
==Repository==&lt;br /&gt;
Lien du dépot : [[http://svn3.xp-dev.com/svn/Stellaris_repo/]] (Dépot publique)&lt;br /&gt;
&lt;br /&gt;
==Avancement du Projet==&lt;br /&gt;
Cahier des charges réalisé (14/02)&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=1005</id>
		<title>Stellaris Luminary Lm3s6965</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=1005"/>
		<updated>2011-02-14T14:31:36Z</updated>

		<summary type="html">&lt;p&gt;SebC: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;N&#039;hésitez pas à enrichir cette page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:EKI-LM3S6965.jpg|200px|thumb|right| Stellaris Luminary Lm3s6965 ]]&lt;br /&gt;
Ce [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit] est construit autour d&#039;un microcontrolleur [[ARM Cortex-M3]] Lm3s6965  &lt;br /&gt;
de marque Luminary Micro appartenant au groupe Texas Instrument.&lt;br /&gt;
&lt;br /&gt;
Les principales caratéristiques et intérêts de ce kit sont:&lt;br /&gt;
&lt;br /&gt;
* Processeur ARM 32bit Cortex-M3&lt;br /&gt;
* Port Ethernet&lt;br /&gt;
* Ecran OLED monochrome 128 x 64 pixels (16 niveaux)&lt;br /&gt;
* Un bon support d&#039;[[OpenOCD]]&lt;br /&gt;
* Support de [[eLua]] (port du langage de script Lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Ressources=&lt;br /&gt;
* Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;br /&gt;
&lt;br /&gt;
* LM3S6965: Tips &amp;amp; Tricks / OpenOCD : [http://claymore.engineer.gvsu.edu/egr326/LM3S6965]&lt;br /&gt;
&lt;br /&gt;
* Building toolchain and OpenOCD for Stellaris on Linux : [http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/65137.aspx]&lt;br /&gt;
&lt;br /&gt;
* Test qemu + arm + gdb + ld ... :[http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/]&lt;br /&gt;
&lt;br /&gt;
* ARM Projets divers : [http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/]&lt;br /&gt;
&lt;br /&gt;
* Tutorial général: [[Media:Tuto_lm3s6965.pdf]]&lt;br /&gt;
&lt;br /&gt;
* Le document technique (datasheet) du microcontrolleur Lm3s6965: [[Media:Datasheet-LM3S6965.pdf‎]]&lt;br /&gt;
&lt;br /&gt;
= Exemples d&#039;utilisation =&lt;br /&gt;
&lt;br /&gt;
== Compilation ==&lt;br /&gt;
&lt;br /&gt;
Suivre  [http://www.codesourcery.com/sgpp/lite/arm/portal/package7815/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin Binaire Linux] pour récupérer la chaîne de compilation Sourcery G++ Lite.&amp;lt;br&amp;gt;&lt;br /&gt;
D&#039;autres paquets disponibles sur le [http://www.codesourcery.com/sgpp/lite/arm/portal/release1592 site du logiciel]&lt;br /&gt;
&lt;br /&gt;
Les fichiers test-cortex-m3.c, startup_gcc.c et lm3s.ld utilisés ci-aprés sont disponibles dans l&#039;archive: [[File:Test-cortex-m3.tar]]&lt;br /&gt;
&lt;br /&gt;
Construction de l&#039;exécutable&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb test-cortex-m3.c -o test-cortex-m3.o&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb startup_gcc.c -o startup_gcc.o&lt;br /&gt;
 arm-none-eabi-ld -T lm3s.ld  startup_gcc.o test-cortex-m3.o -o test-cortex-m3.elf&lt;br /&gt;
 arm-none-eabi-nm test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Juste pour voir le code déassemblé&lt;br /&gt;
 arm-none-eabi-objdump -d test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faut une version binaire simple à charger et non la version trop riche&lt;br /&gt;
 arm-none-eabi-objcopy -O binary test-cortex-m3.elf test-cortex-m3.bin&lt;br /&gt;
&lt;br /&gt;
Le binaire peut ensuite être placé(flashé) sur la carte avec OpenOCD ou utilisé avec l&#039;émulateur QEMU, voir ci-dessous.&lt;br /&gt;
&lt;br /&gt;
== Utilisation avec OpenOCD sous linux  ==&lt;br /&gt;
&lt;br /&gt;
Récupérer le script &#039;&#039;setup_lm3s6965.sh&#039;&#039; sur [http://claymore.engineer.gvsu.edu/egr326/LM3S6965].&lt;br /&gt;
Ce script va récupérer et compiler openocd.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;./setup_lm3s6965.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Construire et installer le bon pilote FTDI &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
 wget http://www.intra2net.com/en/developer/libftdi/download/libftdi-0.18.tar.gz&lt;br /&gt;
 #install open FTDI drivers&lt;br /&gt;
 tar -xzf libftdi-0.18.tar.gz&lt;br /&gt;
 cd libftdi-0.18/&lt;br /&gt;
 sudo apt-get install libusb-dev&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On lance openocd en root&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo openocd -f /usr/local/share/openocd/scripts/board/ek-lm3s6965.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et on peut flash le microcontrolleur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #flash mcu with some code at address 0x00000 and execute&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
 halt&lt;br /&gt;
 flash write_image erase /tmp/main.bin 0&lt;br /&gt;
 reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple avec le déboggeur gdb&lt;br /&gt;
&lt;br /&gt;
== QEMU ==&lt;br /&gt;
&lt;br /&gt;
=== Installation et première utilisation ===&lt;br /&gt;
&lt;br /&gt;
Récupération et compilation du qemu version qemu-0.13.0&lt;br /&gt;
 wget http://wiki.qemu.org/download/qemu-0.13.0.tar.gz&lt;br /&gt;
 cd qemu-0.13.0&lt;br /&gt;
 ./configure --target-list=arm-softmmu # On configure pour ne pas tout compiler&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;émulation avec qemu&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
 Hello world!&lt;br /&gt;
 QEMU 0.13.0 monitor - type &#039;help&#039; for more information&lt;br /&gt;
 (qemu) quit&lt;br /&gt;
&lt;br /&gt;
=== Modification de QEMU pour le suivi et l&#039;accès des GPIO en sortie ===&lt;br /&gt;
&lt;br /&gt;
Le principe va être d&#039;utiliser le code élémentaire de clignotement de LED blinky.bin disponible dans le répertoire StellarisWare puis de modifier le fichier stellaris.c dans repertoire hw de qemu pour repérer et intercepter les changement d&#039;état &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Comprendre l&#039;émulation du stellaris proposé par QEMU suppose de se plonger dans le code. On peut notamment explorer les fichiers suivant, liste non exhaustive:&lt;br /&gt;
&lt;br /&gt;
 hw/irq.c  hw/qdev.c  hw/stellaris.c       hw/stellaris_input.c  hw/sysbus.h&lt;br /&gt;
 hw/irq.h  hw/qdev.h  hw/stellaris_enet.c  hw/sysbus.c           qemu-common.h&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il est important d&#039;observer la struct &#039;&#039;&#039;qemu_irq&#039;&#039;&#039;. Dans le stellaris.c nous notons la déclaration suivante&lt;br /&gt;
&lt;br /&gt;
 static void stellaris_init(const char *kernel_filename, const char *cpu_model,&lt;br /&gt;
                           stellaris_board_info *board)&lt;br /&gt;
 {&lt;br /&gt;
    static const int uart_irq[] = {5, 6, 33, 34};&lt;br /&gt;
    static const int timer_irq[] = {19, 21, 23, 35};&lt;br /&gt;
    static const uint32_t gpio_addr[7] =&lt;br /&gt;
      { 0x40004000, 0x40005000, 0x40006000, 0x40007000,&lt;br /&gt;
        0x40024000, 0x40025000, 0x40026000};&lt;br /&gt;
    static const int gpio_irq[7] = {0, 1, 2, 3, 4, 30, 31};&lt;br /&gt;
&lt;br /&gt;
    qemu_irq *pic;&lt;br /&gt;
    DeviceState *gpio_dev[7];&lt;br /&gt;
    qemu_irq gpio_in[7][8];&lt;br /&gt;
    qemu_irq gpio_out[7][8];&lt;br /&gt;
&lt;br /&gt;
La déclaration qemu_irq gpio_out[7][8]; va permettre l&#039;émulation des 8 fils de sortie des 7 port d&#039;E/S (A,B,C,D,E,F,G).&lt;br /&gt;
&lt;br /&gt;
Si on suit &#039;&#039;&#039;qemu_irq&#039;&#039; à travers les fichiers, nous avons:&lt;br /&gt;
&lt;br /&gt;
Dans qemu-common.h qemu_irq est un pointer sur IRQState&lt;br /&gt;
&lt;br /&gt;
 typedef struct IRQState *qemu_irq;&lt;br /&gt;
&lt;br /&gt;
IRQState dans hw/irq.c&lt;br /&gt;
&lt;br /&gt;
 struct IRQState {&lt;br /&gt;
    qemu_irq_handler handler;&lt;br /&gt;
    void *opaque;&lt;br /&gt;
    int n;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
Dans hw/irq.h:&lt;br /&gt;
 typedef void (*qemu_irq_handler)(void *opaque, int n, int level);&lt;br /&gt;
&lt;br /&gt;
qemu_irq_handler est un pointeur sur une fonction qui sera appelée lorsque &#039;&#039;le fils&#039;&#039; changera de valeur, voir la fonction qemu_set_irq dans irq.c:  &lt;br /&gt;
&lt;br /&gt;
 void qemu_set_irq(qemu_irq irq, int level)&lt;br /&gt;
 {&lt;br /&gt;
    if (!irq)&lt;br /&gt;
        return;&lt;br /&gt;
&lt;br /&gt;
    irq-&amp;gt;handler(irq-&amp;gt;opaque, irq-&amp;gt;n, level);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
On va maintenant maintenant de modifier le fichier stellaris.c pour suivre &#039;&#039;&#039; l&#039;état du bit 0 du port F en sortie &#039;&#039;&#039; lequel est cablé un LED sur la carte physique (utilisé par le code blinky.bin).&lt;br /&gt;
&lt;br /&gt;
  static void print_yop(void *opaque, int line, int level)&lt;br /&gt;
  {&lt;br /&gt;
   /* opaque is null, can by use to access to a global state ??? */&lt;br /&gt;
   printf(&amp;quot;poy line %d level %d\n&amp;quot;,line,level);&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
 qemu_irq yop; /*test*/&lt;br /&gt;
 yop =  qemu_allocate_irqs(print_yop, NULL, 1)[0]; /* on alloue de ma mémoire  et on positionne le handler, ici print_yop*/&lt;br /&gt;
&lt;br /&gt;
 gpio_out[GPIO_F][0] = yop; /* /!\ à faire après l&#039;intialisation de tous les gpio_out, si il y a écrassement */&lt;br /&gt;
&lt;br /&gt;
Archive contenant le fichier modifié stellaris.c et le code de clignotement de LED blinky.bin [[Media:stellaris_mod_blinky.tar]]&lt;br /&gt;
&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel blinky.bin&lt;br /&gt;
&lt;br /&gt;
 poy line 0 level 1 &lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
 poy line 0 level 1&lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
 poy line 0 level 1&lt;br /&gt;
 poy line 0 level 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039; Ctrl A puis x quitter QEMU, voir les commandes du moniteur pour plus de détail.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= FAQ =&lt;br /&gt;
==Quels sont les composants reconnus de la carte?==&lt;br /&gt;
&lt;br /&gt;
:Extrait de la [http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator Documentation Officielle] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The Luminary Micro Stellaris LM3S6965EVB emulation includes the following devices:&lt;br /&gt;
&lt;br /&gt;
Cortex-M3 CPU core.&lt;br /&gt;
256k Flash and 64k SRAM.&lt;br /&gt;
Timers, UARTs, ADC, I^2C and SSI interfaces.&lt;br /&gt;
OSRAM Pictiva 128x64 OLED with SSD0323 controller connected via SSI.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ressources=&lt;br /&gt;
&lt;br /&gt;
*Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=462</id>
		<title>Stellaris Luminary Lm3s6965</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=462"/>
		<updated>2011-01-27T18:08:36Z</updated>

		<summary type="html">&lt;p&gt;SebC: Mise en Page + Ortho&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;N&#039;hésitez pas à enrichir cette page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:EKI-LM3S6965.jpg|200px|thumb|right| Stellaris Luminary Lm3s6965 ]]&lt;br /&gt;
Ce [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit] est construit autour d&#039;un microcontrolleur [[ARM Cortex-M3]] Lm3s6965  &lt;br /&gt;
de marque Luminary Micro appartenant au groupe Texas Instrument.&lt;br /&gt;
&lt;br /&gt;
Les principales caratéristiques et intérêts de ce kit sont:&lt;br /&gt;
&lt;br /&gt;
* Processeur ARM 32bit Cortex-M3&lt;br /&gt;
* Port Ethernet&lt;br /&gt;
* Ecran OLED monochrome 128 x 64 pixels (16 niveaux)&lt;br /&gt;
* Un bon support d&#039;[[OpenOCD]]&lt;br /&gt;
* Support de [[eLua]] (port du langage de script Lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
* Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;br /&gt;
&lt;br /&gt;
* LM3S6965: Tips &amp;amp; Tricks / OpenOCD : [http://claymore.engineer.gvsu.edu/egr326/LM3S6965]&lt;br /&gt;
&lt;br /&gt;
* Building toolchain and OpenOCD for Stellaris on Linux : [http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/65137.aspx]&lt;br /&gt;
&lt;br /&gt;
* Test qemu + arm + gdb + ld ... :[http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/]&lt;br /&gt;
&lt;br /&gt;
* ARM Projets divers : [http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/]&lt;br /&gt;
&lt;br /&gt;
* Tutorial général: [[File:Tuto_lm3s6965.pdf]]&lt;br /&gt;
&lt;br /&gt;
* Le document technique (datasheet) du microcontrolleur Lm3s6965: [[File:Datasheet-LM3S6965.pdf‎]]&lt;br /&gt;
&lt;br /&gt;
== Exemples d&#039;utilisation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Utilisation avec OpenOCD sous linux  ===&lt;br /&gt;
&lt;br /&gt;
Récupérer le script &#039;&#039;setup_lm3s6965.sh&#039;&#039; sur [http://claymore.engineer.gvsu.edu/egr326/LM3S6965].&lt;br /&gt;
Ce script va récupérer et compiler openocd.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;./setup_lm3s6965.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Construire et installer le bon pilote FTDI &lt;br /&gt;
&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
 wget http://www.intra2net.com/en/developer/libftdi/download/libftdi-0.18.tar.gz&lt;br /&gt;
 #install open FTDI drivers&lt;br /&gt;
 tar -xzf libftdi-0.18.tar.gz&lt;br /&gt;
 cd libftdi-0.18/&lt;br /&gt;
 sudo apt-get install libusb-dev&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On lance openocd en root&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sudo openocd -f /usr/local/share/openocd/scripts/board/ek-lm3s6965.cfg&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Et on peut flash la microntrolleur&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #flash mcu with some code at address 0x00000 and execute&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
 halt&lt;br /&gt;
 flash write_image erase /tmp/main.bin 0&lt;br /&gt;
 reset&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple avec le déboggeur gdb&lt;br /&gt;
&lt;br /&gt;
=== qemu ===&lt;br /&gt;
[http://www.codesourcery.com/sgpp/lite/arm/portal/package7815/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin Binaire Linux] pour Sourcery G++ Lite.&amp;lt;br&amp;gt;&lt;br /&gt;
D&#039;autres paquets disponibles sur le [http://www.codesourcery.com/sgpp/lite/arm/portal/release1592 site du logiciel]&lt;br /&gt;
&lt;br /&gt;
Les fichiers test-cortex-m3.c, startup_gcc.c et lm3s.ld utilisés ci-aprés sont disponibles dans l&#039;archive: [[File:Test-cortex-m3.tar]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Construction de l&#039;exécutable&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb test-cortex-m3.c -o test-cortex-m3.o&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb startup_gcc.c -o startup_gcc.o&lt;br /&gt;
 arm-none-eabi-ld -T lm3s.ld  startup_gcc.o test-cortex-m3.o -o test-cortex-m3.elf&lt;br /&gt;
 arm-none-eabi-nm test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Juste pour voir le code déassemblé&lt;br /&gt;
 arm-none-eabi-objdump -d test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Il faut une version binaire simple à charger et non la version trop riche&lt;br /&gt;
 arm-none-eabi-objcopy -O binary test-cortex-m3.elf test-cortex-m3.bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Récupération et compilation du qemu version qemu-0.13.0&lt;br /&gt;
 wget http://wiki.qemu.org/download/qemu-0.13.0.tar.gz&lt;br /&gt;
 cd qemu-0.13.0&lt;br /&gt;
 ./configure --target-list=arm-softmmu # On configure pour ne pas tout compiler&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;émulation avec qemu&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
 Hello world!&lt;br /&gt;
 QEMU 0.13.0 monitor - type &#039;help&#039; for more information&lt;br /&gt;
 (qemu) quit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
===Quels sont les composants reconnus de la carte?===&lt;br /&gt;
&lt;br /&gt;
:Extrait de la [http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator Documentation Officielle] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The Luminary Micro Stellaris LM3S6965EVB emulation includes the following devices:&lt;br /&gt;
&lt;br /&gt;
Cortex-M3 CPU core.&lt;br /&gt;
256k Flash and 64k SRAM.&lt;br /&gt;
Timers, UARTs, ADC, I^2C and SSI interfaces.&lt;br /&gt;
OSRAM Pictiva 128x64 OLED with SSD0323 controller connected via SSI.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
&lt;br /&gt;
*Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=461</id>
		<title>Stellaris Luminary Lm3s6965</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=461"/>
		<updated>2011-01-27T18:05:08Z</updated>

		<summary type="html">&lt;p&gt;SebC: /* qemu */  Ajoute liens Sourcery G++&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;N&#039;hésitez pas à enrichir cette page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:EKI-LM3S6965.jpg|200px|thumb|right| Stellaris Luminary Lm3s6965 ]]&lt;br /&gt;
Ce [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit] est contruit autour d&#039;un microcontrolleur [[ARM Cortex-M3]] Lm3s6965  &lt;br /&gt;
de marque Luminary Micro appartenant au groupe Texas Instrument.&lt;br /&gt;
&lt;br /&gt;
Les principales caratéristiques et intérêt de ce kit sont:&lt;br /&gt;
&lt;br /&gt;
* Processeur ARM 32bit Cortex-M3&lt;br /&gt;
* Port Ethernet&lt;br /&gt;
* Ecran OLED monochrome 128 x 64 pixels (16 niveaux)&lt;br /&gt;
* Un bon support d&#039;[[OpenOCD]]&lt;br /&gt;
* Support de [[eLua]] (port du langage de script Lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
* Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;br /&gt;
&lt;br /&gt;
* LM3S6965: Tips &amp;amp; Tricks / OpenOCD : [http://claymore.engineer.gvsu.edu/egr326/LM3S6965]&lt;br /&gt;
&lt;br /&gt;
* Building toolchain and OpenOCD for Stellaris on Linux : [http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/65137.aspx]&lt;br /&gt;
&lt;br /&gt;
* Test qemu + arm + gdb + ld ... :[http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/]&lt;br /&gt;
&lt;br /&gt;
* ARM Projets divers : [http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/]&lt;br /&gt;
&lt;br /&gt;
* Tutorial général: [[File:Tuto_lm3s6965.pdf]]&lt;br /&gt;
&lt;br /&gt;
* Le document technique (datasheet) du microcontrolleur Lm3s6965: [[File:Datasheet-LM3S6965.pdf‎]]&lt;br /&gt;
&lt;br /&gt;
== Exemples d&#039;utilisation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Utilisation avec OpenOCD sous linux  ===&lt;br /&gt;
&lt;br /&gt;
Récupérer le script &#039;&#039;setup_lm3s6965.sh&#039;&#039; sur [http://claymore.engineer.gvsu.edu/egr326/LM3S6965].&lt;br /&gt;
Ce script va récupérer et compiler openocd.&lt;br /&gt;
&lt;br /&gt;
 ./setup_lm3s6965.sh&lt;br /&gt;
&lt;br /&gt;
Construire et installer le bon pilote FTDI &lt;br /&gt;
&lt;br /&gt;
 wget http://www.intra2net.com/en/developer/libftdi/download/libftdi-0.18.tar.gz&lt;br /&gt;
 #install open FTDI drivers&lt;br /&gt;
 tar -xzf libftdi-0.18.tar.gz&lt;br /&gt;
 cd libftdi-0.18/&lt;br /&gt;
 sudo apt-get install libusb-dev&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
On lance openocd en root&lt;br /&gt;
&lt;br /&gt;
 sudo openocd -f /usr/local/share/openocd/scripts/board/ek-lm3s6965.cfg&lt;br /&gt;
&lt;br /&gt;
Et on peut flash la microntrolleur&lt;br /&gt;
&lt;br /&gt;
 #flash mcu with some code at address 0x00000 and execute&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
 halt&lt;br /&gt;
 flash write_image erase /tmp/main.bin 0&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple avec le déboggeur gdb&lt;br /&gt;
&lt;br /&gt;
=== qemu ===&lt;br /&gt;
[http://www.codesourcery.com/sgpp/lite/arm/portal/package7815/public/arm-none-eabi/arm-2010.09-51-arm-none-eabi.bin Binaire Linux] pour Sourcery G++ Lite.&amp;lt;br&amp;gt;&lt;br /&gt;
D&#039;autres paquets disponibles sur le [http://www.codesourcery.com/sgpp/lite/arm/portal/release1592 site du logiciel]&lt;br /&gt;
&lt;br /&gt;
Les fichiers test-cortex-m3.c, startup_gcc.c et lm3s.ld utilisé ci-aprés sont disponible dans l&#039;archive: [[File:Test-cortex-m3.tar]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Construction de l&#039;exécutable&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb test-cortex-m3.c -o test-cortex-m3.o&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb startup_gcc.c -o startup_gcc.o&lt;br /&gt;
 arm-none-eabi-ld -T lm3s.ld  startup_gcc.o test-cortex-m3.o -o test-cortex-m3.elf&lt;br /&gt;
 arm-none-eabi-nm test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
Juste de pour voir le code déassemblé&lt;br /&gt;
 arm-none-eabi-objdump -d test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
Il faut une version binaire simple à charger et non la version trop riche&lt;br /&gt;
 arm-none-eabi-objcopy -O binary test-cortex-m3.elf test-cortex-m3.bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Récupération et compilation du qemu version qemu-0.13.0&lt;br /&gt;
 wget http://wiki.qemu.org/download/qemu-0.13.0.tar.gz&lt;br /&gt;
 cd qemu-0.13.0&lt;br /&gt;
 ./configure --target-list=arm-softmmu # On configure pour ne pas tout compiler&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;émulation avec qemu&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
 Hello world!&lt;br /&gt;
 QEMU 0.13.0 monitor - type &#039;help&#039; for more information&lt;br /&gt;
 (qemu) quit&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
===Quels sont les composant reconnus de la carte?===&lt;br /&gt;
&lt;br /&gt;
:Extrait de la [http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator Documentation Officielle] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The Luminary Micro Stellaris LM3S6965EVB emulation includes the following devices:&lt;br /&gt;
&lt;br /&gt;
Cortex-M3 CPU core.&lt;br /&gt;
256k Flash and 64k SRAM.&lt;br /&gt;
Timers, UARTs, ADC, I^2C and SSI interfaces.&lt;br /&gt;
OSRAM Pictiva 128x64 OLED with SSD0323 controller connected via SSI.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
&lt;br /&gt;
*Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
	<entry>
		<id>https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=460</id>
		<title>Stellaris Luminary Lm3s6965</title>
		<link rel="alternate" type="text/html" href="https://air.imag.fr/index.php?title=Stellaris_Luminary_Lm3s6965&amp;diff=460"/>
		<updated>2011-01-27T17:55:14Z</updated>

		<summary type="html">&lt;p&gt;SebC: /* FAQ */  Ajout des composants reconnus&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;N&#039;hésitez pas à enrichir cette page&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[File:EKI-LM3S6965.jpg|200px|thumb|right| Stellaris Luminary Lm3s6965 ]]&lt;br /&gt;
Ce [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit] est contruit autour d&#039;un microcontrolleur [[ARM Cortex-M3]] Lm3s6965  &lt;br /&gt;
de marque Luminary Micro appartenant au groupe Texas Instrument.&lt;br /&gt;
&lt;br /&gt;
Les principales caratéristiques et intérêt de ce kit sont:&lt;br /&gt;
&lt;br /&gt;
* Processeur ARM 32bit Cortex-M3&lt;br /&gt;
* Port Ethernet&lt;br /&gt;
* Ecran OLED monochrome 128 x 64 pixels (16 niveaux)&lt;br /&gt;
* Un bon support d&#039;[[OpenOCD]]&lt;br /&gt;
* Support de [[eLua]] (port du langage de script Lua)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
* Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;br /&gt;
&lt;br /&gt;
* LM3S6965: Tips &amp;amp; Tricks / OpenOCD : [http://claymore.engineer.gvsu.edu/egr326/LM3S6965]&lt;br /&gt;
&lt;br /&gt;
* Building toolchain and OpenOCD for Stellaris on Linux : [http://e2e.ti.com/support/microcontrollers/stellaris_arm_cortex-m3_microcontroller/f/471/t/65137.aspx]&lt;br /&gt;
&lt;br /&gt;
* Test qemu + arm + gdb + ld ... :[http://balau82.wordpress.com/2010/02/28/hello-world-for-bare-metal-arm-using-qemu/]&lt;br /&gt;
&lt;br /&gt;
* ARM Projets divers : [http://gandalf.arubi.uni-kl.de/avr_projects/arm_projects/]&lt;br /&gt;
&lt;br /&gt;
* Tutorial général: [[File:Tuto_lm3s6965.pdf]]&lt;br /&gt;
&lt;br /&gt;
* Le document technique (datasheet) du microcontrolleur Lm3s6965: [[File:Datasheet-LM3S6965.pdf‎]]&lt;br /&gt;
&lt;br /&gt;
== Exemples d&#039;utilisation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Utilisation avec OpenOCD sous linux  ===&lt;br /&gt;
&lt;br /&gt;
Récupérer le script &#039;&#039;setup_lm3s6965.sh&#039;&#039; sur [http://claymore.engineer.gvsu.edu/egr326/LM3S6965].&lt;br /&gt;
Ce script va récupérer et compiler openocd.&lt;br /&gt;
&lt;br /&gt;
 ./setup_lm3s6965.sh&lt;br /&gt;
&lt;br /&gt;
Construire et installer le bon pilote FTDI &lt;br /&gt;
&lt;br /&gt;
 wget http://www.intra2net.com/en/developer/libftdi/download/libftdi-0.18.tar.gz&lt;br /&gt;
 #install open FTDI drivers&lt;br /&gt;
 tar -xzf libftdi-0.18.tar.gz&lt;br /&gt;
 cd libftdi-0.18/&lt;br /&gt;
 sudo apt-get install libusb-dev&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 sudo make install&lt;br /&gt;
 sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
On lance openocd en root&lt;br /&gt;
&lt;br /&gt;
 sudo openocd -f /usr/local/share/openocd/scripts/board/ek-lm3s6965.cfg&lt;br /&gt;
&lt;br /&gt;
Et on peut flash la microntrolleur&lt;br /&gt;
&lt;br /&gt;
 #flash mcu with some code at address 0x00000 and execute&lt;br /&gt;
 telnet localhost 4444&lt;br /&gt;
 halt&lt;br /&gt;
 flash write_image erase /tmp/main.bin 0&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Exemple avec le déboggeur gdb&lt;br /&gt;
&lt;br /&gt;
=== qemu ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Les fichiers test-cortex-m3.c, startup_gcc.c et lm3s.ld utilisé ci-aprés sont disponible dans l&#039;archive: [[File:Test-cortex-m3.tar]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Construction de l&#039;exécutable&lt;br /&gt;
&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb test-cortex-m3.c -o test-cortex-m3.o&lt;br /&gt;
 arm-none-eabi-gcc -c -mcpu=cortex-m3 -mthumb startup_gcc.c -o startup_gcc.o&lt;br /&gt;
 arm-none-eabi-ld -T lm3s.ld  startup_gcc.o test-cortex-m3.o -o test-cortex-m3.elf&lt;br /&gt;
 arm-none-eabi-nm test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
Juste de pour voir le code déassemblé&lt;br /&gt;
 arm-none-eabi-objdump -d test-cortex-m3.elf&lt;br /&gt;
&lt;br /&gt;
Il faut une version binaire simple à charger et non la version trop riche&lt;br /&gt;
 arm-none-eabi-objcopy -O binary test-cortex-m3.elf test-cortex-m3.bin&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Récupération et compilation du qemu version qemu-0.13.0&lt;br /&gt;
 wget http://wiki.qemu.org/download/qemu-0.13.0.tar.gz&lt;br /&gt;
 cd qemu-0.13.0&lt;br /&gt;
 ./configure --target-list=arm-softmmu # On configure pour ne pas tout compiler&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
Lancement de l&#039;émulation avec qemu&lt;br /&gt;
 ./qemu-0.13.0/arm-softmmu/qemu-system-arm -M lm3s6965evb -nographic -kernel test-cortex-m3.bin&lt;br /&gt;
 Hello world!&lt;br /&gt;
 QEMU 0.13.0 monitor - type &#039;help&#039; for more information&lt;br /&gt;
 (qemu) quit&lt;br /&gt;
&lt;br /&gt;
== FAQ ==&lt;br /&gt;
===Quels sont les composant reconnus de la carte?===&lt;br /&gt;
&lt;br /&gt;
:Extrait de la [http://qemu.weilnetz.de/qemu-doc.html#ARM-System-emulator Documentation Officielle] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
The Luminary Micro Stellaris LM3S6965EVB emulation includes the following devices:&lt;br /&gt;
&lt;br /&gt;
Cortex-M3 CPU core.&lt;br /&gt;
256k Flash and 64k SRAM.&lt;br /&gt;
Timers, UARTs, ADC, I^2C and SSI interfaces.&lt;br /&gt;
OSRAM Pictiva 128x64 OLED with SSD0323 controller connected via SSI.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Ressources==&lt;br /&gt;
&lt;br /&gt;
*Site officiel du [http://www.luminarymicro.com/products/lm3s6965_ethernet_evaluation_kit.html kit Stellaris Luminary Lm3s6965]&lt;/div&gt;</summary>
		<author><name>SebC</name></author>
	</entry>
</feed>