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é : ![SIN SCLK Graph](assets/graph_complete.png) +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 : + +![SIN SCLK Animated GIF](assets/graph_animated.gif) # 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