diff --git a/Etape_2.uvoptx b/Etape_2.uvoptx
index dabfc33..9c36c2d 100644
--- a/Etape_2.uvoptx
+++ b/Etape_2.uvoptx
@@ -125,7 +125,7 @@
0
DLGDARM
- (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=15,39,661,712,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=10,69,431,496,1)(121=30,595,451,1022,1)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=18,101,612,852,0)(131=255,99,849,850,0)(132=49,93,643,844,0)(133=-1105,32,-511,783,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)
+ (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=15,39,661,712,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=1074,413,1495,840,1)(121=1495,417,1916,844,1)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=18,101,612,852,0)(131=255,99,849,850,0)(132=49,93,643,844,0)(133=-1105,32,-511,783,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0)
0
@@ -142,41 +142,25 @@
0
0
- 65
+ 52
1
- 134222334
+ 134222536
0
0
0
0
0
1
- .\Principale.asm
+ .\FonctionEtape2.asm
- \\Simu_Etape0\Principale.asm\65
+ \\Simu_Etape0\FonctionEtape2.asm\52
1
0
- 66
- 1
- 134222338
- 0
- 0
- 0
- 0
- 0
- 1
- .\Principale.asm
-
- \\Simu_Etape0\Principale.asm\66
-
-
- 2
- 0
92
1
- 134222342
+ 134222434
0
0
0
@@ -188,27 +172,43 @@
\\Simu_Etape0\Principale.asm\92
- 3
+ 2
0
- 171
+ 66
1
- 134222642
+ 134222430
0
0
0
0
0
1
- .\FonctionEtape2.asm
+ .\Principale.asm
- \\Simu_Etape0\FonctionEtape2.asm\171
+ \\Simu_Etape0\Principale.asm\66
+
+
+ 3
+ 0
+ 62
+ 1
+ 134222416
+ 0
+ 0
+ 0
+ 0
+ 0
+ 1
+ .\Principale.asm
+
+ \\Simu_Etape0\Principale.asm\62
4
0
- 170
+ 204
1
- 134222638
+ 134222836
0
0
0
@@ -217,28 +217,28 @@
1
.\FonctionEtape2.asm
- \\Simu_Etape0\FonctionEtape2.asm\170
+ \\Simu_Etape0\FonctionEtape2.asm\204
5
0
- 80
+ 175
1
- 134222370
+ 134222762
0
0
0
0
0
1
- .\FonctionEtape.asm
+ .\FonctionEtape2.asm
- \\Simu_Etape0\FonctionEtape.asm\80
+ \\Simu_Etape0\FonctionEtape2.asm\175
6
0
- 91
+ 47
1
0
0
@@ -247,14 +247,14 @@
0
0
0
- .\FonctionEtape.asm
+ .\FonctionEtape2.asm
7
0
- 150
+ 51
1
0
0
@@ -270,7 +270,7 @@
8
0
- 182
+ 134
1
0
0
@@ -286,7 +286,7 @@
9
0
- 96
+ 173
1
0
0
@@ -295,14 +295,14 @@
0
0
0
- .\Principale.asm
+ .\FonctionEtape2.asm
10
0
- 97
+ 174
1
0
0
@@ -311,7 +311,7 @@
0
0
0
- .\Principale.asm
+ .\FonctionEtape2.asm
@@ -320,7 +320,7 @@
1
0
- 0x40021000
+ 0x20000000
0
diff --git a/FonctionEtape2.asm b/FonctionEtape2.asm
index 0ddc754..7b164c0 100644
--- a/FonctionEtape2.asm
+++ b/FonctionEtape2.asm
@@ -15,6 +15,7 @@
EXPORT Reset_SCLK
EXPORT DriverGlobal
EXPORT Tempo
+ EXPORT DriverReg
;**************************************************************************
@@ -23,6 +24,7 @@
;***************CONSTANTES*************************************************
include REG_UTILES.inc
+ include LUMIERES.inc
;**************************************************************************
@@ -37,24 +39,6 @@ MILSEC EQU 1304
PF DCD (1<<31)
DataSend DCB 1
-Barette1 DCB 0xad,0xff,0
- DCB 0,0xff,0
- DCB 0,0,0xff
- DCB 0xff,0,0
- DCB 0xff,0xff,0
- DCB 0xff,0xff,0xff
- DCB 0xff,0,0
- DCB 0,0xff,0
- DCB 0,0,0xff
- DCB 0xff,0,0
- DCB 0xff,0xff,0
- DCB 0xff,0xff,0xff
- DCB 0xff,0,0
- DCB 0xff,0xff,0
- DCB 0xff,0xff,0xff
- DCB 0x0f,0xff,0x00
-
-
;**************************************************************************
@@ -180,5 +164,60 @@ PoidFortOKIF
ENDP
+;****************************************************************************
+;R0 Argument : Barette
+;R1 = *ValCourante
+;R2 = NBLed (i)
+;R3 = ValCourante[i]
+;****************************************************************************
+
+DriverReg PROC
+ PUSH {LR} ;R7 recupère LR
+ MOV R1,R0 ;On recupère l'adresse de base
+ MOV R0, #SCLK ;Argument SCLK
+ BL Set_X; ;Set_X(SCLK)
+
+ MOV R2, #0; ;*************************
+REG_WHILE_NBLED ;for(int i=0;i<48;i++)
+ LDRB R3,[R1,R2] ;ValCourante[i]
+ LSL R3,#24 ;ValCourante[i]<<24
+
+ LDR R0,=PF
+ LDR R5,[R0,#0] ;R5 = (1<<31)
+ MOV R4, #0 ;*************************
+REG_WHILE_NBBIT ;for(int j=0;j<12;j++)
+ MOV R0, #SCLK ;Argument SCLK
+ BL Reset_X; ;Reset_X(SCLK)
+ MOV R0, #SIN1 ;Argument SIN1
+ AND R6,R3,R5 ;ValCourante[i] &= (1<<31) (<- PF)
+ CMP R6,R5 ;if(PF == 1)
+ BEQ REG_PoidFortOKIF;{ Set_X(SIN1) }
+ BL Reset_X; ;else { Reset_X(SIN1) }
+REG_PoidFortOKJUMP ;Fin Si
+ LSL R3,#1 ;ValeurCourante[i]<<1
+ MOV R0, #SCLK ;Argument SCLK
+ BL Set_X; ;Set_X(SCLK)
+ ADD R4, R4, #1 ;On incrémente NBBit
+ CMP R4, #11 ;SI NBBIT==11 alors on arrête la boucle
+ BNE REG_WHILE_NBBIT
+
+ ADD R2, R2, #1 ;On incrémente NBLed
+ CMP R2, #47 ;SI NBLED==47 alors on arrête la boucle
+ BNE REG_WHILE_NBLED
+
+ MOV R0, #SCLK ;Argument SCLK
+ BL Reset_X; ;Reset_X(SCLK)
+ LDR R0,=DataSend;Adresse de DataSend
+ MOV R1,#0 ; DataSend
+ STRB R1,[R0,#0] ;DataSend=0
+ POP {LR}
+ BX LR ;while(1)
+
+REG_PoidFortOKIF
+ BL Set_X ;Set_X(SCLK)
+ B REG_PoidFortOKJUMP ;After Reset8X
+
+ ENDP
+
;**************************************************************************
- END
\ No newline at end of file
+ END
diff --git a/LUMIERES.inc b/LUMIERES.inc
new file mode 100644
index 0000000..bd542ae
--- /dev/null
+++ b/LUMIERES.inc
@@ -0,0 +1,44 @@
+;**************************************
+; Les deux Barettes
+;***************************************
+
+;***************VARIABLES**************************************************
+ AREA MesDonnees, data, readwrite
+;**************************************************************************
+
+Barette1 DCB 0xad,0xff,0
+ DCB 0,0xff,0
+ DCB 0,0,0xff
+ DCB 0xff,0,0
+ DCB 0xff,0xff,0
+ DCB 0xff,0xff,0xff
+ DCB 0xff,0,0
+ DCB 0,0xff,0
+ DCB 0,0,0xff
+ DCB 0xff,0,0
+ DCB 0xff,0xff,0
+ DCB 0xff,0xff,0xff
+ DCB 0xff,0,0
+ DCB 0xff,0xff,0
+ DCB 0xff,0xff,0xff
+ DCB 0x0f,0xff,0x00
+
+Barette2 DCB 0xe6,0x3f,0
+ DCB 0,0x56,0x64
+ DCB 0x52,0,0xfe
+ DCB 0x1f,0x1e,0
+ DCB 0xff,0x5a,0
+ DCB 0x6f,0xf7,0x8d
+ DCB 0xdf,0x3e,0
+ DCB 0,0xfa,0x6f
+ DCB 0xe6,0x8c,0x2d
+ DCB 0xf4,0x4f,0
+ DCB 0,0x56,0x64
+ DCB 0x52,0,0xfe
+ DCB 0x1f,0x1e,0
+ DCB 0xff,0x5a,0
+ DCB 0x6f,0xf7,0x8d
+ DCB 0xff,0,0
+
+ END
+
\ No newline at end of file
diff --git a/Principale.asm b/Principale.asm
index 6f8a965..1d19fd5 100644
--- a/Principale.asm
+++ b/Principale.asm
@@ -7,7 +7,7 @@
;************************************************************************
include REG_UTILES.inc
-
+ include LUMIERES.inc
;************************************************************************
; IMPORT/EXPORT Système
@@ -29,6 +29,7 @@
IMPORT Set_SCLK
IMPORT Reset_SCLK
IMPORT DriverGlobal
+ IMPORT DriverReg
IMPORT Tempo
EXPORT main
@@ -38,10 +39,6 @@
;*******************************************************************************
AREA mesdonnees, data, readwrite
-
-
-
-
;*******************************************************************************
AREA moncode, code, readonly
@@ -61,9 +58,12 @@ main PROC
;*******************************************************************************
; ETAPE 2
;*******************************************************************************
- BL DriverGlobal ;*******************
+ LDR R0, =Barette1
+ BL DriverReg ;*******************
MOV R0, #10 ;Argument : 10ms
BL Tempo; :Tempo(10)
+ LDR R0, =Barette2
+ BL DriverReg ;*******************
;*******************************************************************************
; ETAPE 1
diff --git a/README.md b/README.md
index d8c70fa..b155863 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,25 @@
# But du projet
Le but sera de faire fonctionner diverses LEDS Ã l'aide d'un STM32 et tout cela en langage Assembler.
# Fonctionnalitées
+
+## Variables
+|Nom|Description|Source|Type|
+|---|---|---|---|
+|Barette1|Jeu de LED : 16\*3 Données sur 1 octet|[LUMIERES.inc](LUMIERES.inc)|```Data Memory```|
+|Barette2|2ème jeu de LED avec des couleurs différentes|[LUMIERES.inc](LUMIERES.inc)|```Data Memory```|
+|SCLK|PIN pour SCLK (5)|[FonctionEtape2.asm](FonctionEtape2.asm)|```Egalitée```|
+|SIN1|PIN pour SIN1 (7)|[FonctionEtape2.asm](FonctionEtape2.asm)|```Egalitée```|
+|MILSEC|Pour Tempo(Nms) -> Le nombre d'itération pour avoir 1ms|[FonctionEtape2.asm](FonctionEtape2.asm)|```Egalitée```|
+|PF|Décalage à 31 bits pour le Poid Fort|[FonctionEtape2.asm](FonctionEtape2.asm)|```Data Memory```|
+|DataSend|Variable globale pour savoir si une donnée est transmise|[FonctionEtape2.asm](FonctionEtape2.asm)|```Data Memory```|
## Fonctions
|Nom|Argument(s)|Retour|Description|
|---|---|---|---|
|Set_X|**1** - R0 : PINAX||Pour un output donné, met à 1 ce dernier.|
|Reset_X|**1** - R0 : PINAX||Pour un output donné, force à 0 ce dernier.|
-|DriverGlobal|||Pour une Barette de LED donnée, envoie les signaux demandés|
+|DriverGlobal|||Envoie les signaux liés à la LED|
|Tempo|**1** - R0 : Nms||Pour un temps donné, le processeur se met en attente (similaire à sleep)|
+|DriverReg|**1** - R0 : \*LEDArray||Pour une Barette de LED donnée, envoie les signaux demandés|
---
Chaque fonction prendra des arguments de R0 à R3 (avec R3 étant une référence au tas si le besoin d'argument est supérieur à 3). Le renvoi se fait sur R0.
@@ -36,7 +48,7 @@ En réalité j'ai par la suite changé ce paramètre en 1. Avec la valeur forcé
(Par la suite le Timer2,3,4 sont allumés (APB1ENR |= 0x07))
-On appelle ensuite le DriverGlobal
+On appelle ensuite DriverReg qui va lire dans R0 l'adresse du tableau de LEDS. Ce dernier doit contenir les 16\*3 valeurs de leds. Une tempo est ensuite lancée, et un nouveau jeu de led est lu.
## Variables globales
@@ -48,6 +60,9 @@ On appelle ensuite le DriverGlobal
Voici le premier chronogramme observable avec les états de SCLK et SIN1. Aucun test matériel n'a encore été réalisé :

+Dans la dernière version du programme, deux jeux de LEDS sont envoyés après une tempo de quelques millisecondes. Voici les chronogrammes de ces dernières en simulation :
+
+
# Réaliser un code assembler à partir de C
Comme vous le savez le code en langage C peut être compilé puis récupéré en assembler. C'est justement ici une solution que j'ai trouvé pour mieux comprendre différents principes, ou si certaines instructions ne me paraissent pas clair.
diff --git a/REG_UTILES.inc b/REG_UTILES.inc
index 6eea1dc..c5b9576 100644
--- a/REG_UTILES.inc
+++ b/REG_UTILES.inc
@@ -45,9 +45,6 @@ TIM1_SR EQU 0x40012c10
TIM1_CNT EQU 0x40012c24
TIM4_ARR EQU 0x4000082C
TIM4_SR EQU 0x40000810
-
-
-
END
\ No newline at end of file
diff --git a/assets/graph_animated.gif b/assets/graph_animated.gif
new file mode 100644
index 0000000..94e15fb
Binary files /dev/null and b/assets/graph_animated.gif differ