Added LUMIERES.inc variables. Created DriverReg(char *) function. Modified Main function to blink LEDS.

This commit is contained in:
Yohan Boujon 2023-03-28 00:40:07 +02:00
parent ea995a5dfe
commit 3832cd5355
7 changed files with 168 additions and 73 deletions

View file

@ -125,7 +125,7 @@
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(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)</Name>
<Name>(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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
@ -142,41 +142,25 @@
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>65</LineNumber>
<LineNumber>52</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222334</Address>
<Address>134222536</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Principale.asm</Filename>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\Principale.asm\65</Expression>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\52</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>66</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222338</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Principale.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\Principale.asm\66</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>92</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222342</Address>
<Address>134222434</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
@ -188,27 +172,43 @@
<Expression>\\Simu_Etape0\Principale.asm\92</Expression>
</Bp>
<Bp>
<Number>3</Number>
<Number>2</Number>
<Type>0</Type>
<LineNumber>171</LineNumber>
<LineNumber>66</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222642</Address>
<Address>134222430</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<Filename>.\Principale.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\171</Expression>
<Expression>\\Simu_Etape0\Principale.asm\66</Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>62</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222416</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Principale.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\Principale.asm\62</Expression>
</Bp>
<Bp>
<Number>4</Number>
<Type>0</Type>
<LineNumber>170</LineNumber>
<LineNumber>204</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222638</Address>
<Address>134222836</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
@ -217,28 +217,28 @@
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\170</Expression>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\204</Expression>
</Bp>
<Bp>
<Number>5</Number>
<Type>0</Type>
<LineNumber>80</LineNumber>
<LineNumber>175</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222370</Address>
<Address>134222762</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape.asm</Filename>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape.asm\80</Expression>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\175</Expression>
</Bp>
<Bp>
<Number>6</Number>
<Type>0</Type>
<LineNumber>91</LineNumber>
<LineNumber>47</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -247,14 +247,14 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\FonctionEtape.asm</Filename>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>7</Number>
<Type>0</Type>
<LineNumber>150</LineNumber>
<LineNumber>51</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -270,7 +270,7 @@
<Bp>
<Number>8</Number>
<Type>0</Type>
<LineNumber>182</LineNumber>
<LineNumber>134</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -286,7 +286,7 @@
<Bp>
<Number>9</Number>
<Type>0</Type>
<LineNumber>96</LineNumber>
<LineNumber>173</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -295,14 +295,14 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\Principale.asm</Filename>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>10</Number>
<Type>0</Type>
<LineNumber>97</LineNumber>
<LineNumber>174</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
@ -311,7 +311,7 @@
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\Principale.asm</Filename>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
@ -320,7 +320,7 @@
<Mm>
<WinNumber>1</WinNumber>
<SubType>0</SubType>
<ItemText>0x40021000</ItemText>
<ItemText>0x20000000</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>

View file

@ -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
END

44
LUMIERES.inc Normal file
View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -45,9 +45,6 @@ TIM1_SR EQU 0x40012c10
TIM1_CNT EQU 0x40012c24
TIM4_ARR EQU 0x4000082C
TIM4_SR EQU 0x40000810
END

BIN
assets/graph_animated.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 MiB