Modified Barette1, fixed Set_X and Reset_X memory overflow. Added the rest of the algorithm to send LED data.

This commit is contained in:
Yohan Boujon 2023-03-26 17:59:06 +02:00
parent 2f06d2ab01
commit 68717e2a2d
6 changed files with 180 additions and 195 deletions

1
.gitignore vendored
View file

@ -24,6 +24,7 @@
**/Objects/ **/Objects/
**/Listings/ **/Listings/
**/Debug/ **/Debug/
.obsidian

View file

@ -125,7 +125,7 @@
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
<Key>DLGDARM</Key> <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=287,138,708,565,1)(121=1190,75,1611,502,0)(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=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,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=532,24,953,451,1)(121=540,467,961,894,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=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,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>
<SetRegEntry> <SetRegEntry>
<Number>0</Number> <Number>0</Number>
@ -142,150 +142,22 @@
<Bp> <Bp>
<Number>0</Number> <Number>0</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>128</LineNumber> <LineNumber>80</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>134222544</Address> <Address>134222354</Address>
<ByteObject>0</ByteObject> <ByteObject>0</ByteObject>
<HtxType>0</HtxType> <HtxType>0</HtxType>
<ManyObjects>0</ManyObjects> <ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject> <SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess> <BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount> <BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename> <Filename>.\FonctionEtape.asm</Filename>
<ExecCommand></ExecCommand> <ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\128</Expression> <Expression>\\Simu_Etape0\FonctionEtape.asm\80</Expression>
</Bp> </Bp>
<Bp> <Bp>
<Number>1</Number> <Number>1</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>116</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222522</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\116</Expression>
</Bp>
<Bp>
<Number>2</Number>
<Type>0</Type>
<LineNumber>115</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222518</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\115</Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>113</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222512</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\113</Expression>
</Bp>
<Bp>
<Number>4</Number>
<Type>0</Type>
<LineNumber>99</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222500</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\99</Expression>
</Bp>
<Bp>
<Number>5</Number>
<Type>0</Type>
<LineNumber>98</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222498</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\98</Expression>
</Bp>
<Bp>
<Number>6</Number>
<Type>0</Type>
<LineNumber>58</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222426</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\58</Expression>
</Bp>
<Bp>
<Number>7</Number>
<Type>0</Type>
<LineNumber>57</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222424</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\57</Expression>
</Bp>
<Bp>
<Number>8</Number>
<Type>0</Type>
<LineNumber>56</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222422</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\56</Expression>
</Bp>
<Bp>
<Number>9</Number>
<Type>0</Type>
<LineNumber>87</LineNumber> <LineNumber>87</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>134222324</Address> <Address>134222324</Address>
@ -300,9 +172,25 @@
<Expression>\\Simu_Etape0\Principale.asm\87</Expression> <Expression>\\Simu_Etape0\Principale.asm\87</Expression>
</Bp> </Bp>
<Bp> <Bp>
<Number>10</Number> <Number>2</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>80</LineNumber> <LineNumber>117</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134222500</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\FonctionEtape2.asm</Filename>
<ExecCommand></ExecCommand>
<Expression>\\Simu_Etape0\FonctionEtape2.asm\117</Expression>
</Bp>
<Bp>
<Number>3</Number>
<Type>0</Type>
<LineNumber>91</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
<Address>0</Address> <Address>0</Address>
<ByteObject>0</ByteObject> <ByteObject>0</ByteObject>
@ -311,12 +199,28 @@
<SizeOfObject>0</SizeOfObject> <SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess> <BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount> <BreakIfRCount>0</BreakIfRCount>
<Filename>.\Principale.asm</Filename> <Filename>.\FonctionEtape.asm</Filename>
<ExecCommand></ExecCommand> <ExecCommand></ExecCommand>
<Expression></Expression> <Expression></Expression>
</Bp> </Bp>
<Bp> <Bp>
<Number>11</Number> <Number>4</Number>
<Type>0</Type>
<LineNumber>92</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\FonctionEtape.asm</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
<Bp>
<Number>5</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>91</LineNumber> <LineNumber>91</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
@ -332,7 +236,7 @@
<Expression></Expression> <Expression></Expression>
</Bp> </Bp>
<Bp> <Bp>
<Number>12</Number> <Number>6</Number>
<Type>0</Type> <Type>0</Type>
<LineNumber>92</LineNumber> <LineNumber>92</LineNumber>
<EnabledFlag>1</EnabledFlag> <EnabledFlag>1</EnabledFlag>
@ -352,7 +256,7 @@
<Mm> <Mm>
<WinNumber>1</WinNumber> <WinNumber>1</WinNumber>
<SubType>0</SubType> <SubType>0</SubType>
<ItemText>0x200004A0</ItemText> <ItemText>0x20000000</ItemText>
<AccSizeX>0</AccSizeX> <AccSizeX>0</AccSizeX>
</Mm> </Mm>
</MemoryWindow1> </MemoryWindow1>
@ -388,7 +292,7 @@
<AscS3>0</AscS3> <AscS3>0</AscS3>
<aSer3>0</aSer3> <aSer3>0</aSer3>
<eProf>0</eProf> <eProf>0</eProf>
<aLa>0</aLa> <aLa>1</aLa>
<aPa1>0</aPa1> <aPa1>0</aPa1>
<AscS4>0</AscS4> <AscS4>0</AscS4>
<aSer4>0</aSer4> <aSer4>0</aSer4>
@ -413,13 +317,13 @@
<LogicAnalyzers> <LogicAnalyzers>
<Wi> <Wi>
<IntNumber>0</IntNumber> <IntNumber>0</IntNumber>
<FirstString>((portA &amp; 0x00000100) &gt;&gt; 8 &amp; 0x100) &gt;&gt; 8</FirstString> <FirstString>(portA &amp; 0x20 &amp; 0x20) &gt;&gt; 0</FirstString>
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274412026203078303030303031303029203E3E2038000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000E03F170000000000000000000000000000000000000044140008</SecondString> <SecondString>FF000000000000000000000000000000E0FFEF4001000000000000000000000000000000706F7274412026203078323000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000E03F1400000000000000000000000000000000000000E4120008</SecondString>
</Wi> </Wi>
<Wi> <Wi>
<IntNumber>1</IntNumber> <IntNumber>1</IntNumber>
<FirstString>((portB &amp; 0x00000400) &gt;&gt; 10 &amp; 0x400) &gt;&gt; 10</FirstString> <FirstString>(portA &amp; 0x80 &amp; 0x80) &gt;&gt; 0</FirstString>
<SecondString>00800000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274422026203078303030303034303029203E3E2031300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000000000000000E03F17000000000000000000000000000000000000004C140008</SecondString> <SecondString>00800000000000000000000000000000E0FFEF4001000000000000000000000000000000706F7274412026203078383000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000000000000000E03F140000000000000000000000000000000000000062120008</SecondString>
</Wi> </Wi>
</LogicAnalyzers> </LogicAnalyzers>
<DebugDescription> <DebugDescription>
@ -689,7 +593,7 @@
<Group> <Group>
<GroupName>::Device</GroupName> <GroupName>::Device</GroupName>
<tvExp>1</tvExp> <tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg> <tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel> <cbSel>0</cbSel>
<RteFlg>1</RteFlg> <RteFlg>1</RteFlg>

View file

@ -32,14 +32,24 @@
SCLK EQU 5 SCLK EQU 5
SIN1 EQU 7 SIN1 EQU 7
Barette1 DCB 0,1,0 PF DCD (1<<31)
DCB 0,1,0 Barette1 DCB 0xff,0,0
DCB 0,1,0 DCB 0,0xff,0
DCB 0,1,0 DCB 0,0,0xff
DCB 0,1,0 DCB 0xff,0,0
DCB 0,1,0 DCB 0xff,0xff,0
DCB 0,1,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
@ -62,34 +72,28 @@ Set_SCLK PROC
ENDP ENDP
Set_X PROC Set_X PROC
PUSH {R7} ;On stocke R7 dans SP PUSH {R1,R2} ;On stocke R0 à R4 dans SP
MOV R7,SP ;R7 récupère l'adresse du SP MOV R1, #1 ;*******
PUSH {R0-R4} ;On stocke R0 à R4 dans SP LSL R0, R1, R0 ;1<<Arg
LDRB R0,[R7,#4] ;Argument 1 dans R0
MOV R4, #1 ;*******
LSL R0, R4, R0 ;1<<Arg
LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA
LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR
ORR R2, R2, R0 ;similaire à GPIOA->ODR |= (1<<Arg) ORR R2, R2, R0 ;similaire à GPIOA->ODR |= (1<<Arg)
STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR
POP{R0-R4,R7} ;Déchargement de la pile POP{R1,R2} ;Déchargement de la pile
BX LR ;Retour BX LR ;Retour
ENDP ENDP
Reset_X PROC Reset_X PROC
PUSH {R7} ;On stocke R7 dans SP PUSH {R1,R2} ;On stocke R0 à R4 dans SP
MOV R7,SP ;R7 récupère l'adresse du SP MOV R1, #1 ;*******
PUSH {R0-R4} ;On stocke R0 à R4 dans SP LSL R0, R1, R0 ;1<<Arg
LDRB R0,[R7,#4] ;Argument 1 dans R0
MOV R4, #1 ;*******
LSL R0, R4, R0 ;1<<Arg
MVN R0, R0 ;~(1<<Arg) MVN R0, R0 ;~(1<<Arg)
LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA
LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR
AND R2, R2, R0 ;similaire à GPIOA->ODR &= ~(1<<Arg) AND R2, R2, R0 ;similaire à GPIOA->ODR &= ~(1<<Arg)
STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR
POP{R0-R4,R7} ;Déchargement de la pile POP{R1,R2} ;Déchargement de la pile
BX LR ;Retour BX LR ;Retour
ENDP ENDP
@ -105,30 +109,52 @@ Reset_SCLK PROC
ENDP ENDP
;**************************************************************************** ;****************************************************************************
;R6 = NBLed ;R1 = *ValCourante
;R7 = *ValCourante ;R2 = NBLed (i)
;R8 = ValCourante[NBLed] ;R3 = ValCourante[i]
;**************************************************************************** ;****************************************************************************
DriverGlobal PROC DriverGlobal PROC
MOV R0, #SCLK ;************ MOV R0, #SCLK ;Argument SCLK
PUSH {R0} ;Set_X(SCLK) BL Set_X; ;Set_X(SCLK)
BL Set_X; ;************ LDR R1,=Barette1;On recupère l'adresse de base
MOV R6, #0;
WHILE_NBLED
;Pour NbLed = 1 à 48
LDR R7,=Barette1 ;On recupère l'adresse de base
LDRB R8,[R7,R6] ;R8 = ValCourante[...NBLed]
LSL R8,#24 ;ValCourante[NBLed]<<24 MOV R2, #0; ;*************************
WHILE_NBLED ;for(int i=0;i<48;i++)
LDRB R3,[R1,R2] ;ValCourante[i]
LSL R3,#24 ;ValCourante[i]<<24
ADD R6, R6, #1 ;On incrémente R6 LDR R0,=PF
CMP R6, #47 ; SI R6==47 alors on arrête la boucle LDR R5,[R0,#0] ;R5 = (1<<31)
MOV R4, #0 ;*************************
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 PoidFortOKIF ;{ Set_X(SIN1) }
BL Reset_X; ;else { Reset_X(SIN1) }
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 WHILE_NBBIT
ADD R2, R2, #1 ;On incrémente NBLed
CMP R2, #47 ;SI NBLED==47 alors on arrête la boucle
BNE WHILE_NBLED BNE WHILE_NBLED
MOV R0, #SCLK ;************ MOV R0, #SCLK ;Argument SCLK
PUSH {R0} ;Reset_X(SCLK) BL Reset_X; ;Reset_X(SCLK)
BL Reset_X; ;************ ;LDR R0,= ;DataSend <- 0
B . ;while(1) B . ;while(1)
PoidFortOKIF
BL Set_X ;Set_X(SCLK)
B PoidFortOKJUMP ;After Reset8X
ENDP ENDP
;************************************************************************** ;**************************************************************************

View file

@ -1,5 +1,31 @@
# But du projet # But du projet
Le but sera de faire fonctionner diverses LEDS à l'aide d'un STM32 et tout cela en langage Assembler Le but sera de faire fonctionner diverses LEDS à l'aide d'un STM32 et tout cela en langage Assembler.
# Fonctionnalitées
## 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|
---
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.
## Main
Le main pour l'instant ne fait qu'appeler DriverGlobal.
## Variables globales
- SCLK *(5)* et SIN1 *(7)* sont des variables globales permettant avec la fonction Set/Reset_X de définir l'état de sortie d'une pin X.
- PF *(1<<31)* est le poids fort, comme il n'est pas possible d'utiliser l'instruction **MOV** avec des nombres supérieurs à 1 octet, il est préférable d'utiliser une variable globale avec cette valeur.
- Barette1 (16\*3 valeurs), tableau contenant pour chaque LED *(16)*, le niveau RVB.
## Chronogramme
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)
# Réaliser un code assembler à partir de C # 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. 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.
Bien évidemment le but du projet n'est pas de recopier bêtement du code que le compilateur peut réaliser, mais de comprendre et de voir comment faire différents algorithmes en Assembler. Bien évidemment le but du projet n'est pas de recopier bêtement du code que le compilateur peut réaliser, mais de comprendre et de voir comment faire différents algorithmes en Assembler.
@ -48,16 +74,16 @@ Nous obtenons le résultat suivant :
```assembly ```assembly
00000000 <invert>: 00000000 <invert>:
0:e1e00000 mvnr0, r0 0:e1e00000 mvn r0, r0
4:e12fff1e bxlr 4:e12fff1e bx lr
00000008 <set>: 00000008 <set>:
8:e3a01001 movr1, #1 8:e3a01001 mov r1, #1
c:e59f3010 ldrr3, [pc, #16]@ 24 <add+0x1c> c:e59f3010 ldr r3, [pc, #16]@ 24 <add+0x1c>
10:e5932000 ldrr2, [r3] 10:e5932000 ldr r2, [r3]
14:e1d230b5 ldrhr3, [r2, #5] 14:e1d230b5 ldrh r3, [r2, #5]
18:e1c33011 bicr3, r3, r1, lsl r0 18:e1c33011 bic r3, r3, r1, lsl r0
1c:e1c230b5 strhr3, [r2, #5] 1c:e1c230b5 strh r3, [r2, #5]
20:e12fff1e bxlr 20:e12fff1e bx lr
24:00000000 andeqr0, r0, r0 24:00000000 andeq r0, r0, r0
``` ```

BIN
assets/graph_complete.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

28
capteur_signals.uvl Normal file
View file

@ -0,0 +1,28 @@
[Signal 1]
DispName=(portA & 0x00000100) >> 8
PlotType=1
Color=255
ValHex=0
MinDec=0
MinVal=0.
MaxDec=0
MaxVal=65535.
Mask=256
Offset=8
Adaptive=0
DispNumber=1
HeightFactor=0.5
[Signal 2]
DispName=(portB & 0x00000400) >> 10
PlotType=1
Color=32768
ValHex=0
MinDec=0
MinVal=0.
MaxDec=0
MaxVal=65535.
Mask=1024
Offset=10
Adaptive=0
DispNumber=2
HeightFactor=0.5