From df329adbef66774f6ec98a4fe918c8dbcf90520e Mon Sep 17 00:00:00 2001 From: Axel Olougouna Date: Wed, 10 May 2023 18:10:37 +0200 Subject: [PATCH] Debut_Affichage --- soft/ModuleAffichage/Driver/DriverJeuLaser.h | 345 +++++ .../ModuleAffichage/Driver/DriverJeuLaser.inc | 56 + .../{ => Src}/Affichage_Valise.h | 0 soft/ModuleAffichage/Src/DFT.s | 210 +++ soft/ModuleAffichage/Src/Signal.asm | 68 + soft/ModuleAffichage/Src/Signal2.asm | 68 + soft/ModuleAffichage/Src/calculdft.s | 67 + soft/ModuleAffichage/Src/principal.c | 56 + soft/ModuleAffichage/Src/startup-rvds.s | 335 ++++ soft/ModuleAffichage/StepDFT.uvprojx | 1377 +++++++++++++++++ soft/ModuleAffichage/affichage_valise.o | Bin 251212 -> 0 bytes 11 files changed, 2582 insertions(+) create mode 100644 soft/ModuleAffichage/Driver/DriverJeuLaser.h create mode 100644 soft/ModuleAffichage/Driver/DriverJeuLaser.inc rename soft/ModuleAffichage/{ => Src}/Affichage_Valise.h (100%) create mode 100644 soft/ModuleAffichage/Src/DFT.s create mode 100644 soft/ModuleAffichage/Src/Signal.asm create mode 100644 soft/ModuleAffichage/Src/Signal2.asm create mode 100644 soft/ModuleAffichage/Src/calculdft.s create mode 100644 soft/ModuleAffichage/Src/principal.c create mode 100644 soft/ModuleAffichage/Src/startup-rvds.s create mode 100644 soft/ModuleAffichage/StepDFT.uvprojx delete mode 100644 soft/ModuleAffichage/affichage_valise.o diff --git a/soft/ModuleAffichage/Driver/DriverJeuLaser.h b/soft/ModuleAffichage/Driver/DriverJeuLaser.h new file mode 100644 index 0000000..bc9b3bd --- /dev/null +++ b/soft/ModuleAffichage/Driver/DriverJeuLaser.h @@ -0,0 +1,345 @@ +/** + * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) + * + * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz + * Modifs : + * enlèvement de tout ce qui est inutile dans le .h + * ajout de fonctions GPIO dans le .c pour utilisation en ASM ou en C : + * - GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) + * - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + * + * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3) + * PWM_Set_Value_On_TIM3_C3( int Val) + * permet en ASM ou en C de fixer la valeur de PWM + + * Ajout de commentaires + + */ +#ifndef DRIVERJEULASER_H__ +#define DRIVERJEULASER_H__ + +#include "stm32f10x.h" + +//********************************************************************************************************** +//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- +//********************************************************************************************************** + +/** + * @brief Configure l'ensemble des horloges du uC + * @note horloge systeme (config statique a 72 MHz pour le STM32F103) + * @param None + * @retval None + */ +void CLOCK_Configure(void); + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée + * @note L' horloge des 4 timers a une fréquence de 72MHz + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Durée_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); + +/** + * Macros de base pour utiliser les timers + */ + // bloque le timer +#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) +// Lance timer +#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); + + + + + + + + + + + +//********************************************************************************************************* +//--------------------- PWM TIM1 to TIM 4 ------------------------------ +//********************************************************************************************************* + +/** + * @brief Configure un timer en PWM + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param voie : un des 4 canaux possibles 1 à 4. + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval Retourne la période en tick (normalement la même que le param d'entrée sauf si PSC utilisé + */ +unsigned short int PWM_Init_ff( TIM_TypeDef *Timer, char Voie, u32 Periode_ticks ); + + + +/** + * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif + * est donc : rcy = Thaut_ticks / Periode_ticks + * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 + * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks + * @retval None + */ +void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure le timer Systick avec une périodicité donnée + * @note Ce timer ne peut servir qu'à créer des temporisations ou générer des interruption + * ce n'est pas à proprement parler un périphérique, il fait partie du Cortex M3 + * Ce timer est un 24 bits + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Systick_Period_ff( unsigned int Periode_ticks ); + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick + * @note + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); + + +/** + * Macros de base pour utiliser le Systick + */ +#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) +#define SysTick_Off ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<0)) +#define SysTick_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1) +#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps + * de fermeture du switch d'acquisition + * @note + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU + * exemple pour 1µs on choisira 72. + * @retval Nombre de Tick réellement pris en compte + */ +unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); + + +/** + * @brief Sélectionne la voie à convertir + * @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Voie_ADC : 1 à 15 + * @retval None + */ +void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); + + + + + +/** + * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également + * la période de débordement du timer + * @note pas besoin de régler le timer avec une autre fonction dédiée timer + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Source : indique le timer qui déclenche l'ADC choix dans les define ci-dessous + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ + +// param pour Source : +#define TIM1_CC1 0 +#define TIM1_CC2 1 +#define TIM1_CC3 2 +#define TIM2_CC2 3 +#define TIM4_CC4 5 +void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); + + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- ANALOG INPUT ADC & DMA ------------------------------ +//********************************************************************************************************** + +/** + * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA + * @note + * @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé + * si '1' le ptr d'@ se recale à celle du début. + * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire + * @retval None + */ +void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); + + + + + +/** + * @brief Lance une DMA sur le nombre de points spécifie. Les resultats seront stockes + * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1 + * @note + * @param NbEchDMA est le nombre d'échantillons à stocker. + * @retval None + */ +void Start_DMA1( u16 NbEchDMA ); + +// arret DMA +#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; + + +/** + * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition + * et du nombre d'echantillons + * @note fonction d'attente (bloquante) + * @param None + * @retval None + */ +void Wait_On_End_Of_DMA1(void); + + + + + + + + +//********************************************************************************************************** +//--------------------- GPIO ------------------------------ +//********************************************************************************************************** + +/** + * @brief Initialisation d'un GPIO (A à C), pin x. + * peut être configuré : + * -> Input ou output + * -> architecture technologique (push-pull, open drain...) + + * @note + * @param Port : GPIOA, GPIOB, GPIOC + * @param Broche : 0 à 15 + * @param Sens : INPUT ou OUTPUT + * @param Techno : voir define ci dessous + * @retval 1 erreur, 0 si OK + */ + +// Sens +#define INPUT 'i' +#define OUTPUT 'o' + +// Techno pour pin en entrée (INPUT) +#define ANALOG 0 +#define INPUT_FLOATING 1 +#define INPUT_PULL_DOWN_UP 2 + +// Techno pour pin en sortie (OUTPUT) +#define OUTPUT_PPULL 0 +#define OUTPUT_OPDRAIN 1 +#define ALT_PPULL 2 +#define ALT_OPDRAIN 3 + +// Exemple : +// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); +// Place le bit 8 du port B en sortie Push-pull +char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); + + +/** + * @brief Mise à 1 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Set(char Broche); +void GPIOB_Set(char Broche); +void GPIOC_Set(char Broche); + + + +/** + * @brief Mise à 0 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Clear(char Broche); +void GPIOB_Clear(char Broche); +void GPIOC_Clear(char Broche); + + +#endif + + diff --git a/soft/ModuleAffichage/Driver/DriverJeuLaser.inc b/soft/ModuleAffichage/Driver/DriverJeuLaser.inc new file mode 100644 index 0000000..48d5e50 --- /dev/null +++ b/soft/ModuleAffichage/Driver/DriverJeuLaser.inc @@ -0,0 +1,56 @@ + +; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) +; Accès en aux fonctions suivantes : +; GPIO : +; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) +; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + +; PWM : +;/** +; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif +; * est donc : rcy = Thaut_ticks / Periode_ticks +; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 +; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks +; * @retval None +; */ + +;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + import PWM_Set_Value_TIM3_Ch3 + + + +;/** +; * @brief Mise à 1 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Set(char Broche); + import GPIOA_Set + +;void GPIOB_Set(char Broche); + import GPIOB_Set + +;void GPIOC_Set(char Broche); + import GPIOC_Set + + + +;/** +; * @brief Mise à 0 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Clear(char Broche); + import GPIOA_Clear + +;void GPIOB_Clear(char Broche); + import GPIOB_Clear + +;void GPIOC_Clear(char Broche); + import GPIOC_Clear + + end diff --git a/soft/ModuleAffichage/Affichage_Valise.h b/soft/ModuleAffichage/Src/Affichage_Valise.h similarity index 100% rename from soft/ModuleAffichage/Affichage_Valise.h rename to soft/ModuleAffichage/Src/Affichage_Valise.h diff --git a/soft/ModuleAffichage/Src/DFT.s b/soft/ModuleAffichage/Src/DFT.s new file mode 100644 index 0000000..094e1bf --- /dev/null +++ b/soft/ModuleAffichage/Src/DFT.s @@ -0,0 +1,210 @@ + PRESERVE8 + THUMB + include Driver/DriverJeuLaser.inc + +; ====================== zone de réservation de données, ====================================== +;Section RAM (read only) : + area mesdata,data,readonly + + +;Section RAM (read write): + area maram,data,readwrite + + + +; =============================================================================================== + EXPORT DFT_ModuleAuCarre + + + +;Section ROM code (read only) : + area moncode,code,readonly +; écrire le code ici + +DFT_ModuleAuCarre proc + push{lr, r4,r5, r6, r7, r8, r9, r10} + + mov r2, r0 ; mettre l'adresse du signal dans r2 + mov r0, #0 ; r0 peut être utilisé ;dans r1 on a la valeur de k + ldr r4,=TabCos + ldr r9,=TabSin + mov r5, #0 ; contient notre indice n + +Boucle + cmp r5,#63 + bgt Fin + ldrsh r3,[r2, r5, LSL #1] ; x[n] ; là format 4.12 (1.12) + mul r6, r1, r5 ; kn + and r6, r6, #63 ; kn & 000000000011111 + ldrsh r7,[r4, r6, LSL #1] ; TabCos[kn] ; là format 1.15 + mul r10, r3, r7 ; x[n]*TabCos[n] 5.27 + asr r10, r10, #1 ; 5.26 + ;asr r0, r0, #1 ; 6.26 + ;mla r0, r7, r3, r0 ; x(k) += x[n]*TabCos[n] ;11.27 + add r0, r0, r10 ; 6.24 ; r0 contient la valeur de la somme des Cos + + ldrsh r7,[r9, r6, LSL #1] ; TabSin[kn] ; là format 1.15 + mul r10, r3, r7 ; x[n]*TabSin[n] 5.27 + asr r10, r10, #1 ; 5.26 + ;asr r8, r8, #4 ; 5.26 + add r8, r8, r10 ; 6.26 ; r8 contient la valeur de la somme des Sin + + add r5, #1 + bl Boucle + +Fin + + asr r0, r0, #16 ; 6.10 + asr r8, r8, #16 ; 6.10 + mul r0, r0, r0 ; 12.20 + mul r8, r8, r8 ; 12.20 + asr r0, r0, #1 ; 12.19 + asr r8, r8, #1 ; 12.19 + + add r0, r0, r8 ; 13.19 + + pop{pc, r4, r5, r6, r7, r8, r9, r10} + + endp + + + +;Section ROM code (read only) : + AREA Trigo, DATA, READONLY +; codage fractionnaire 1.15 + +TabCos + DCW 32767 ; 0 0x7fff 0.99997 + DCW 32610 ; 1 0x7f62 0.99518 + DCW 32138 ; 2 0x7d8a 0.98077 + DCW 31357 ; 3 0x7a7d 0.95694 + DCW 30274 ; 4 0x7642 0.92389 + DCW 28899 ; 5 0x70e3 0.88193 + DCW 27246 ; 6 0x6a6e 0.83148 + DCW 25330 ; 7 0x62f2 0.77301 + DCW 23170 ; 8 0x5a82 0.70709 + DCW 20788 ; 9 0x5134 0.63440 + DCW 18205 ; 10 0x471d 0.55557 + DCW 15447 ; 11 0x3c57 0.47141 + DCW 12540 ; 12 0x30fc 0.38269 + DCW 9512 ; 13 0x2528 0.29028 + DCW 6393 ; 14 0x18f9 0.19510 + DCW 3212 ; 15 0x0c8c 0.09802 + DCW 0 ; 16 0x0000 0.00000 + DCW -3212 ; 17 0xf374 -0.09802 + DCW -6393 ; 18 0xe707 -0.19510 + DCW -9512 ; 19 0xdad8 -0.29028 + DCW -12540 ; 20 0xcf04 -0.38269 + DCW -15447 ; 21 0xc3a9 -0.47141 + DCW -18205 ; 22 0xb8e3 -0.55557 + DCW -20788 ; 23 0xaecc -0.63440 + DCW -23170 ; 24 0xa57e -0.70709 + DCW -25330 ; 25 0x9d0e -0.77301 + DCW -27246 ; 26 0x9592 -0.83148 + DCW -28899 ; 27 0x8f1d -0.88193 + DCW -30274 ; 28 0x89be -0.92389 + DCW -31357 ; 29 0x8583 -0.95694 + DCW -32138 ; 30 0x8276 -0.98077 + DCW -32610 ; 31 0x809e -0.99518 + DCW -32768 ; 32 0x8000 -1.00000 + DCW -32610 ; 33 0x809e -0.99518 + DCW -32138 ; 34 0x8276 -0.98077 + DCW -31357 ; 35 0x8583 -0.95694 + DCW -30274 ; 36 0x89be -0.92389 + DCW -28899 ; 37 0x8f1d -0.88193 + DCW -27246 ; 38 0x9592 -0.83148 + DCW -25330 ; 39 0x9d0e -0.77301 + DCW -23170 ; 40 0xa57e -0.70709 + DCW -20788 ; 41 0xaecc -0.63440 + DCW -18205 ; 42 0xb8e3 -0.55557 + DCW -15447 ; 43 0xc3a9 -0.47141 + DCW -12540 ; 44 0xcf04 -0.38269 + DCW -9512 ; 45 0xdad8 -0.29028 + DCW -6393 ; 46 0xe707 -0.19510 + DCW -3212 ; 47 0xf374 -0.09802 + DCW 0 ; 48 0x0000 0.00000 + DCW 3212 ; 49 0x0c8c 0.09802 + DCW 6393 ; 50 0x18f9 0.19510 + DCW 9512 ; 51 0x2528 0.29028 + DCW 12540 ; 52 0x30fc 0.38269 + DCW 15447 ; 53 0x3c57 0.47141 + DCW 18205 ; 54 0x471d 0.55557 + DCW 20788 ; 55 0x5134 0.63440 + DCW 23170 ; 56 0x5a82 0.70709 + DCW 25330 ; 57 0x62f2 0.77301 + DCW 27246 ; 58 0x6a6e 0.83148 + DCW 28899 ; 59 0x70e3 0.88193 + DCW 30274 ; 60 0x7642 0.92389 + DCW 31357 ; 61 0x7a7d 0.95694 + DCW 32138 ; 62 0x7d8a 0.98077 + DCW 32610 ; 63 0x7f62 0.99518 +TabSin + DCW 0 ; 0 0x0000 0.00000 + DCW 3212 ; 1 0x0c8c 0.09802 + DCW 6393 ; 2 0x18f9 0.19510 + DCW 9512 ; 3 0x2528 0.29028 + DCW 12540 ; 4 0x30fc 0.38269 + DCW 15447 ; 5 0x3c57 0.47141 + DCW 18205 ; 6 0x471d 0.55557 + DCW 20788 ; 7 0x5134 0.63440 + DCW 23170 ; 8 0x5a82 0.70709 + DCW 25330 ; 9 0x62f2 0.77301 + DCW 27246 ; 10 0x6a6e 0.83148 + DCW 28899 ; 11 0x70e3 0.88193 + DCW 30274 ; 12 0x7642 0.92389 + DCW 31357 ; 13 0x7a7d 0.95694 + DCW 32138 ; 14 0x7d8a 0.98077 + DCW 32610 ; 15 0x7f62 0.99518 + DCW 32767 ; 16 0x7fff 0.99997 + DCW 32610 ; 17 0x7f62 0.99518 + DCW 32138 ; 18 0x7d8a 0.98077 + DCW 31357 ; 19 0x7a7d 0.95694 + DCW 30274 ; 20 0x7642 0.92389 + DCW 28899 ; 21 0x70e3 0.88193 + DCW 27246 ; 22 0x6a6e 0.83148 + DCW 25330 ; 23 0x62f2 0.77301 + DCW 23170 ; 24 0x5a82 0.70709 + DCW 20788 ; 25 0x5134 0.63440 + DCW 18205 ; 26 0x471d 0.55557 + DCW 15447 ; 27 0x3c57 0.47141 + DCW 12540 ; 28 0x30fc 0.38269 + DCW 9512 ; 29 0x2528 0.29028 + DCW 6393 ; 30 0x18f9 0.19510 + DCW 3212 ; 31 0x0c8c 0.09802 + DCW 0 ; 32 0x0000 0.00000 + DCW -3212 ; 33 0xf374 -0.09802 + DCW -6393 ; 34 0xe707 -0.19510 + DCW -9512 ; 35 0xdad8 -0.29028 + DCW -12540 ; 36 0xcf04 -0.38269 + DCW -15447 ; 37 0xc3a9 -0.47141 + DCW -18205 ; 38 0xb8e3 -0.55557 + DCW -20788 ; 39 0xaecc -0.63440 + DCW -23170 ; 40 0xa57e -0.70709 + DCW -25330 ; 41 0x9d0e -0.77301 + DCW -27246 ; 42 0x9592 -0.83148 + DCW -28899 ; 43 0x8f1d -0.88193 + DCW -30274 ; 44 0x89be -0.92389 + DCW -31357 ; 45 0x8583 -0.95694 + DCW -32138 ; 46 0x8276 -0.98077 + DCW -32610 ; 47 0x809e -0.99518 + DCW -32768 ; 48 0x8000 -1.00000 + DCW -32610 ; 49 0x809e -0.99518 + DCW -32138 ; 50 0x8276 -0.98077 + DCW -31357 ; 51 0x8583 -0.95694 + DCW -30274 ; 52 0x89be -0.92389 + DCW -28899 ; 53 0x8f1d -0.88193 + DCW -27246 ; 54 0x9592 -0.83148 + DCW -25330 ; 55 0x9d0e -0.77301 + DCW -23170 ; 56 0xa57e -0.70709 + DCW -20788 ; 57 0xaecc -0.63440 + DCW -18205 ; 58 0xb8e3 -0.55557 + DCW -15447 ; 59 0xc3a9 -0.47141 + DCW -12540 ; 60 0xcf04 -0.38269 + DCW -9512 ; 61 0xdad8 -0.29028 + DCW -6393 ; 62 0xe707 -0.19510 + DCW -3212 ; 63 0xf374 -0.09802 + + + + + END \ No newline at end of file diff --git a/soft/ModuleAffichage/Src/Signal.asm b/soft/ModuleAffichage/Src/Signal.asm new file mode 100644 index 0000000..5a79596 --- /dev/null +++ b/soft/ModuleAffichage/Src/Signal.asm @@ -0,0 +1,68 @@ + AREA Signal, DATA, READONLY + export LeSignal +LeSignal + DCW 0x0fff ; 0 4095 0.99976 + DCW 0x0ff6 ; 1 4086 0.99756 + DCW 0x0fd9 ; 2 4057 0.99048 + DCW 0x0fa8 ; 3 4008 0.97852 + DCW 0x0f64 ; 4 3940 0.96191 + DCW 0x0f0e ; 5 3854 0.94092 + DCW 0x0ea7 ; 6 3751 0.91577 + DCW 0x0e2f ; 7 3631 0.88647 + DCW 0x0da8 ; 8 3496 0.85352 + DCW 0x0d13 ; 9 3347 0.81714 + DCW 0x0c72 ; 10 3186 0.77783 + DCW 0x0bc5 ; 11 3013 0.73560 + DCW 0x0b10 ; 12 2832 0.69141 + DCW 0x0a53 ; 13 2643 0.64526 + DCW 0x0990 ; 14 2448 0.59766 + DCW 0x08c9 ; 15 2249 0.54907 + DCW 0x0800 ; 16 2048 0.50000 + DCW 0x0737 ; 17 1847 0.45093 + DCW 0x0670 ; 18 1648 0.40234 + DCW 0x05ad ; 19 1453 0.35474 + DCW 0x04f0 ; 20 1264 0.30859 + DCW 0x043b ; 21 1083 0.26440 + DCW 0x038e ; 22 910 0.22217 + DCW 0x02ed ; 23 749 0.18286 + DCW 0x0258 ; 24 600 0.14648 + DCW 0x01d1 ; 25 465 0.11353 + DCW 0x0159 ; 26 345 0.08423 + DCW 0x00f2 ; 27 242 0.05908 + DCW 0x009c ; 28 156 0.03809 + DCW 0x0058 ; 29 88 0.02148 + DCW 0x0027 ; 30 39 0.00952 + DCW 0x000a ; 31 10 0.00244 + DCW 0x0000 ; 32 0 0.00000 + DCW 0x000a ; 33 10 0.00244 + DCW 0x0027 ; 34 39 0.00952 + DCW 0x0058 ; 35 88 0.02148 + DCW 0x009c ; 36 156 0.03809 + DCW 0x00f2 ; 37 242 0.05908 + DCW 0x0159 ; 38 345 0.08423 + DCW 0x01d1 ; 39 465 0.11353 + DCW 0x0258 ; 40 600 0.14648 + DCW 0x02ed ; 41 749 0.18286 + DCW 0x038e ; 42 910 0.22217 + DCW 0x043b ; 43 1083 0.26440 + DCW 0x04f0 ; 44 1264 0.30859 + DCW 0x05ad ; 45 1453 0.35474 + DCW 0x0670 ; 46 1648 0.40234 + DCW 0x0737 ; 47 1847 0.45093 + DCW 0x0800 ; 48 2048 0.50000 + DCW 0x08c9 ; 49 2249 0.54907 + DCW 0x0990 ; 50 2448 0.59766 + DCW 0x0a53 ; 51 2643 0.64526 + DCW 0x0b10 ; 52 2832 0.69141 + DCW 0x0bc5 ; 53 3013 0.73560 + DCW 0x0c72 ; 54 3186 0.77783 + DCW 0x0d13 ; 55 3347 0.81714 + DCW 0x0da8 ; 56 3496 0.85352 + DCW 0x0e2f ; 57 3631 0.88647 + DCW 0x0ea7 ; 58 3751 0.91577 + DCW 0x0f0e ; 59 3854 0.94092 + DCW 0x0f64 ; 60 3940 0.96191 + DCW 0x0fa8 ; 61 4008 0.97852 + DCW 0x0fd9 ; 62 4057 0.99048 + DCW 0x0ff6 ; 63 4086 0.99756 + END diff --git a/soft/ModuleAffichage/Src/Signal2.asm b/soft/ModuleAffichage/Src/Signal2.asm new file mode 100644 index 0000000..31bb084 --- /dev/null +++ b/soft/ModuleAffichage/Src/Signal2.asm @@ -0,0 +1,68 @@ + AREA Signal, DATA, READONLY + export LeSignal2 +LeSignal2 + DCW 0x0be8 ; 0 3048 0.74414 + DCW 0x0b72 ; 1 2930 0.71533 + DCW 0x0a2c ; 2 2604 0.63574 + DCW 0x0862 ; 3 2146 0.52393 + DCW 0x0681 ; 4 1665 0.40649 + DCW 0x04fb ; 5 1275 0.31128 + DCW 0x042b ; 6 1067 0.26050 + DCW 0x0443 ; 7 1091 0.26636 + DCW 0x053d ; 8 1341 0.32739 + DCW 0x06de ; 9 1758 0.42920 + DCW 0x08c3 ; 10 2243 0.54761 + DCW 0x0a7a ; 11 2682 0.65479 + DCW 0x0b9c ; 12 2972 0.72559 + DCW 0x0be3 ; 13 3043 0.74292 + DCW 0x0b3f ; 14 2879 0.70288 + DCW 0x09d7 ; 15 2519 0.61499 + DCW 0x0800 ; 16 2048 0.50000 + DCW 0x0629 ; 17 1577 0.38501 + DCW 0x04c1 ; 18 1217 0.29712 + DCW 0x041d ; 19 1053 0.25708 + DCW 0x0464 ; 20 1124 0.27441 + DCW 0x0586 ; 21 1414 0.34521 + DCW 0x073d ; 22 1853 0.45239 + DCW 0x0922 ; 23 2338 0.57080 + DCW 0x0ac3 ; 24 2755 0.67261 + DCW 0x0bbd ; 25 3005 0.73364 + DCW 0x0bd5 ; 26 3029 0.73950 + DCW 0x0b05 ; 27 2821 0.68872 + DCW 0x097f ; 28 2431 0.59351 + DCW 0x079e ; 29 1950 0.47607 + DCW 0x05d4 ; 30 1492 0.36426 + DCW 0x048e ; 31 1166 0.28467 + DCW 0x0418 ; 32 1048 0.25586 + DCW 0x048e ; 33 1166 0.28467 + DCW 0x05d4 ; 34 1492 0.36426 + DCW 0x079e ; 35 1950 0.47607 + DCW 0x097f ; 36 2431 0.59351 + DCW 0x0b05 ; 37 2821 0.68872 + DCW 0x0bd5 ; 38 3029 0.73950 + DCW 0x0bbd ; 39 3005 0.73364 + DCW 0x0ac3 ; 40 2755 0.67261 + DCW 0x0922 ; 41 2338 0.57080 + DCW 0x073d ; 42 1853 0.45239 + DCW 0x0586 ; 43 1414 0.34521 + DCW 0x0464 ; 44 1124 0.27441 + DCW 0x041d ; 45 1053 0.25708 + DCW 0x04c1 ; 46 1217 0.29712 + DCW 0x0629 ; 47 1577 0.38501 + DCW 0x0800 ; 48 2048 0.50000 + DCW 0x09d7 ; 49 2519 0.61499 + DCW 0x0b3f ; 50 2879 0.70288 + DCW 0x0be3 ; 51 3043 0.74292 + DCW 0x0b9c ; 52 2972 0.72559 + DCW 0x0a7a ; 53 2682 0.65479 + DCW 0x08c3 ; 54 2243 0.54761 + DCW 0x06de ; 55 1758 0.42920 + DCW 0x053d ; 56 1341 0.32739 + DCW 0x0443 ; 57 1091 0.26636 + DCW 0x042b ; 58 1067 0.26050 + DCW 0x04fb ; 59 1275 0.31128 + DCW 0x0681 ; 60 1665 0.40649 + DCW 0x0862 ; 61 2146 0.52393 + DCW 0x0a2c ; 62 2604 0.63574 + DCW 0x0b72 ; 63 2930 0.71533 + END diff --git a/soft/ModuleAffichage/Src/calculdft.s b/soft/ModuleAffichage/Src/calculdft.s new file mode 100644 index 0000000..60ff2ff --- /dev/null +++ b/soft/ModuleAffichage/Src/calculdft.s @@ -0,0 +1,67 @@ + PRESERVE8 + THUMB + include Driver/DriverJeuLaser.inc + + +; ====================== zone de réservation de données, ====================================== +;Section RAM (read only) : + area mesdata,data,readonly + extern TabCos + extern LeSignal + +;Section RAM (read write): + area maram,data,readwrite + + + +; =============================================================================================== + + + + +;Section ROM code (read only) : + area moncode,code,readonly +; écrire le code ici + + EXPORT DFT_ModuleAuCarre + + +DFT_ModuleAuCarre proc + + push {lr} + ldr r0,=Son + ldr r1,=LongueurSon + ldr r1,[r1] + + + ldr r3,=Index ;on met l'adr d'Index dans r3 + ldrh r2,[r3] + + cmp r1,r2 + ble Fin + push{r4,r5} + + ldrsh r0,[r0,r2, LSL #1]; en C Son[Index] + add r2, r2, #1 + strh r2,[r3] ; maj Index + mov r1, #32768 + add r0, r0, r1 + mov r4, #719 + mul r0, r0, r4 + asr r0, r0, #16 + + ldr r5,=SortieSon + str r0,[r5] + bl PWM_Set_Value_TIM3_Ch3 + + pop{r4,r5} + +Fin + + pop {pc} + + endp + + + + END \ No newline at end of file diff --git a/soft/ModuleAffichage/Src/principal.c b/soft/ModuleAffichage/Src/principal.c new file mode 100644 index 0000000..71d482c --- /dev/null +++ b/soft/ModuleAffichage/Src/principal.c @@ -0,0 +1,56 @@ + + +#include "DriverJeuLaser.h" + + +extern short int LeSignal2; +extern int DFT_ModuleAuCarre(short int* Signal64ech, char k); + +short dma_buf[64]; +int tab_module[64]; + +void Callback_Systick(void){ + Start_DMA1(64); + Wait_On_End_Of_DMA1(); + Stop_DMA1; + for(int i=0; i<64; i++){ + tab_module[i] = DFT_ModuleAuCarre(dma_buf, i); + } +} + + +int main(void) +{ + + +// =========================================================================== +// ============= INIT PERIPH (faites qu'une seule fois) ===================== +// =========================================================================== + +// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers +CLOCK_Configure(); + + +Systick_Period_ff( 360000); +Systick_Prio_IT( 1,Callback_Systick); +SysTick_On; +SysTick_Enable_IT ; + +//Timer_1234_Init_ff(TIM2, 225); +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 ); + + + + + +//============================================================================ + + +while (1) + { + } +} + diff --git a/soft/ModuleAffichage/Src/startup-rvds.s b/soft/ModuleAffichage/Src/startup-rvds.s new file mode 100644 index 0000000..a7b631a --- /dev/null +++ b/soft/ModuleAffichage/Src/startup-rvds.s @@ -0,0 +1,335 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. +; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + +; +; Enable UsageFault, MemFault and Busfault interrupts +; +_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 + LDR.W R0, =_SHCSR + LDR R1, [R0] ; Read CPACR + ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts + STR R1, [R0] ; Write back the modified value to the CPACR + DSB ; Wait for store to complete + +; +; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) +; +_AIRCR EQU 0xE000ED0C +_AIRCR_VAL EQU 0x05FA0300 + LDR.W R0, =_AIRCR + LDR.W R1, =_AIRCR_VAL + STR R1,[R0] + +; +; Finaly, jump to main function (void main (void)) +; + LDR R0, =__main + BX R0 + ENDP + +SystemInit PROC + EXPORT SystemInit [WEAK] + BX LR + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/soft/ModuleAffichage/StepDFT.uvprojx b/soft/ModuleAffichage/StepDFT.uvprojx new file mode 100644 index 0000000..c2ec326 --- /dev/null +++ b/soft/ModuleAffichage/StepDFT.uvprojx @@ -0,0 +1,1377 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Simu + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARMCC + 0 + + + STM32F103RB + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + + + + + + + + + + + + + + $$Device:STM32F103RB$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Obj\ + StepDFT + 1 + 0 + 1 + 1 + 1 + + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4100 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + --C99 + STM32F103xB,USE_FULL_LL_DRIVER + + .\Driver + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Sources + + + principal.c + 1 + .\Src\principal.c + + + DFT.s + 2 + .\Src\DFT.s + + + Signal.asm + 2 + .\Src\Signal.asm + + + Signal2.asm + 2 + .\Src\Signal2.asm + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + + + CibleSondeKEIL + 0x4 + ARM-ADS + 5060960::V5.06 update 7 (build 960)::.\ARMCC + 0 + + + STM32F103RB + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + + + + + + + + + + + + + + $$Device:STM32F103RB$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Obj\ + StepDFT + 1 + 0 + 1 + 1 + 1 + + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4100 + + 1 + STLink\ST-LINKIII-KEIL_SWO.dll + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + --C99 + STM32F103xB,USE_FULL_LL_DRIVER + + .\Driver + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Sources + + + principal.c + 1 + .\Src\principal.c + + + DFT.s + 2 + .\Src\DFT.s + + + Signal.asm + 2 + .\Src\Signal.asm + + + Signal2.asm + 2 + .\Src\Signal2.asm + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + + + + + + + + + + + + + + CibleSondeST + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32F103RB + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + + + + + + + + + + + + + + $$Device:STM32F103RB$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Obj\ + StepDFT + 1 + 0 + 1 + 1 + 1 + + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4100 + + 1 + STLink\ST-LINKIII-KEIL_SWO.dll + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + --C99 + STM32F103xB,USE_FULL_LL_DRIVER + + .\Driver + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Sources + + + principal.c + 1 + .\Src\principal.c + + + DFT.s + 2 + .\Src\DFT.s + + + Signal.asm + 2 + .\Src\Signal.asm + + + Signal2.asm + 2 + .\Src\Signal2.asm + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + + + <Project Info> + 0 + 1 + + + + +
diff --git a/soft/ModuleAffichage/affichage_valise.o b/soft/ModuleAffichage/affichage_valise.o deleted file mode 100644 index 140ce962dc065751fe58934d03deca5364dd5675..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251212 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