jeu qui marche (avec score, sans son, sans arrêt)

This commit is contained in:
Maelle Cros 2023-05-16 18:02:06 +02:00
parent 45fd8589c0
commit bc0529e014
4 changed files with 98 additions and 32 deletions

View file

@ -98,8 +98,7 @@ BoucleFor
FinBoucle
; on met le résultat à disposition dans r0
;mov r1, r7
;mov r0, r8
smull r1, r0, r7, r7 ;NB :poids fort en 2eme pos
smlal r1, r0, r8, r8 ;

View file

@ -2,8 +2,7 @@
THUMB
INCLUDE DriverJeuLaser.inc
EXPORT timer_callback
;IMPORT GPIOB_Set
;IMPORT GPIOB_Clear
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly

View file

@ -41,8 +41,8 @@ IndiceCourrant dcd 0
;}
EXPORT callbackSon
callbackSon proc
push{lr}
push{r4}
push {lr}
push {r4}
push {r5}
ldr r0, =Son
@ -63,7 +63,7 @@ callbackSon proc
add r1, #1
str r1, [r2]
; SortieSon += 32767;
; SortieSon += 32768;
add r3, #32768
; SortieSon = SortieSon*719/65534;

View file

@ -5,20 +5,89 @@
extern short int LeSignal[];
extern int DFT_ModuleAuCarre( short int * Signal64ech, char k);
int moduleSignal[64] ;
int score[4];
int moduleSignal[4] ;
short int dma_buf[64] ;
int score[4] = {0,0,0,0};
int cnt[4] = {0,0,0,0};
int ordreCible[15] = {1,3,4,2,4,3,1,4,3,2,1,2,3,4} ;
int clk5Hz = 0;
int i = 0;
void miseAJourScores(int score0, int score1, int score2, int score3) {
Prepare_Afficheur(1, score0);
Prepare_Afficheur(2, score1);
Prepare_Afficheur(3, score2);
Prepare_Afficheur(4, score3);
}
void callback() {
clk5Hz += 1;
Start_DMA1(64);
Wait_On_End_Of_DMA1();
Stop_DMA1;
for (int j=0; j<64 ; j++) {
moduleSignal[j] = DFT_ModuleAuCarre(&(dma_buf[0]), j);
}
}
moduleSignal[0] = DFT_ModuleAuCarre(&(dma_buf[0]), 17);
moduleSignal[1] = DFT_ModuleAuCarre(&(dma_buf[0]), 18);
moduleSignal[2] = DFT_ModuleAuCarre(&(dma_buf[0]), 19);
moduleSignal[3] = DFT_ModuleAuCarre(&(dma_buf[0]), 20);
// Choisir à qui attribuer les points
if (moduleSignal[0] > 10000) {
cnt[0]+=1;
if (cnt[0] >= 15) {
score[0] +=1;
cnt[0]=0;
}
} else {cnt[0]=0;}
if (moduleSignal[1] > 10000) {
cnt[1]+=1;
if (cnt[1] >= 15) {
score[1] +=1;
cnt[1]=0;
}
} else {cnt[1]=0;}
if (moduleSignal[2] > 10000) {
cnt[2]+=1;
if (cnt[2] >= 15) {
score[2] +=1;
cnt[2]=0;
}
} else {cnt[2]=0;}
if (moduleSignal[3] > 10000) {
cnt[3]+=1;
if (cnt[3] >= 15) {
score[3] +=1;
cnt[3]=0;
}
} else {cnt[3]=0;}
if (clk5Hz %400 ==0) {
i = (i+1)%15;
if (i == 0){
Choix_Capteur(ordreCible[i]);
Prepare_Clear_LED(ordreCible[14]-1);
Prepare_Set_LED(ordreCible[i]-1);
}else{
Choix_Capteur(ordreCible[i]);
Prepare_Clear_LED(ordreCible[i-1]-1);
Prepare_Set_LED(ordreCible[i]-1);
}
}
//Pour mise a jour régulière des scores
miseAJourScores(score[0],score[1],score[2],score[3]);
Mise_A_Jour_Afficheurs_LED();
}
int main(void)
{
@ -30,35 +99,34 @@ int main(void)
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
CLOCK_Configure();
//Systick_Period_ff(5000*72);
//Systick_Prio_IT(11, callback) ;
//SysTick_On ;
//SysTick_Enable_IT ;
//Configuration intéruptions timer
Systick_Period_ff(5000*72);
Systick_Prio_IT(11, callback );
SysTick_On ;
SysTick_Enable_IT ;
//Init_TimingADC_ActiveADC_ff( ADC1, 72 ) ;
//Single_Channel_ADC( ADC1, 2 );
//Init_Conversion_On_Trig_Timer_ff( ADC1, TIM2_CC2, 225 );
//Init_ADC1_DMA1( 0, dma_buf );
//Configuration
Init_TimingADC_ActiveADC_ff( ADC1, 72 ) ;
Single_Channel_ADC( ADC1, 2 );
Init_Conversion_On_Trig_Timer_ff( ADC1, TIM2_CC2, 225 );
Init_ADC1_DMA1( 0, dma_buf );
//La malette
Init_Affichage();
Prepare_Afficheur(1, 11);
Prepare_Afficheur(2, 22);
Prepare_Afficheur(3, 33);
Prepare_Afficheur(4, 44);
Mise_A_Jour_Afficheurs_LED();
//TODO : englober dans fct qui fait changer la cible active régulièrement (mais wait nécessaire)
Choix_Capteur(1);
Prepare_Set_LED(LED_Cible_1);
//============================================================================
while (1)
{
while (1) {
}
}