From 0ac25435cddc7ae8601e3a4538583d25ecd96c41 Mon Sep 17 00:00:00 2001 From: Jules-Ian Barnavon Date: Fri, 21 Apr 2023 18:12:43 +0200 Subject: [PATCH] Projet Final, config DFT, Son, Affichage en cours --- ModuleAffichage.zip | Bin 0 -> 50775 bytes PjtKEIL_Final/Driver/DriverJeuLaser.h | 345 + PjtKEIL_Final/Driver/DriverJeuLaser.inc | 56 + PjtKEIL_Final/Driver/DriverJeuLaser_1.h | 345 + PjtKEIL_Final/Driver/DriverJeuLaser_1.inc | 56 + .../ModuleAffichage/Affichage_Valise.h | 78 + PjtKEIL_Final/Obj/Signal.asm | 68 + PjtKEIL_Final/Signaux/Signal.asm | 68 + PjtKEIL_Final/Signaux/Signal.m | 38 + PjtKEIL_Final/Src/DFT.s | 266 + PjtKEIL_Final/Src/GestionSon.s | 71 + PjtKEIL_Final/Src/Signal.asm | 68 + PjtKEIL_Final/Src/bruitverre.asm | 5527 +++++++++++++++++ PjtKEIL_Final/Src/principal.c | 104 + PjtKEIL_Final/Src/startup-rvds.s | 335 + PjtKEIL_Final/StepDFT.uvprojx | 1437 +++++ PjtKEIL_Final/rep_questions.md | 38 + PjtKEIL_Final/rep_questions.txt | 0 18 files changed, 8900 insertions(+) create mode 100644 ModuleAffichage.zip create mode 100644 PjtKEIL_Final/Driver/DriverJeuLaser.h create mode 100644 PjtKEIL_Final/Driver/DriverJeuLaser.inc create mode 100644 PjtKEIL_Final/Driver/DriverJeuLaser_1.h create mode 100644 PjtKEIL_Final/Driver/DriverJeuLaser_1.inc create mode 100644 PjtKEIL_Final/ModuleAffichage/Affichage_Valise.h create mode 100644 PjtKEIL_Final/Obj/Signal.asm create mode 100644 PjtKEIL_Final/Signaux/Signal.asm create mode 100644 PjtKEIL_Final/Signaux/Signal.m create mode 100644 PjtKEIL_Final/Src/DFT.s create mode 100644 PjtKEIL_Final/Src/GestionSon.s create mode 100644 PjtKEIL_Final/Src/Signal.asm create mode 100644 PjtKEIL_Final/Src/bruitverre.asm create mode 100644 PjtKEIL_Final/Src/principal.c create mode 100644 PjtKEIL_Final/Src/startup-rvds.s create mode 100644 PjtKEIL_Final/StepDFT.uvprojx create mode 100644 PjtKEIL_Final/rep_questions.md create mode 100644 PjtKEIL_Final/rep_questions.txt diff --git a/ModuleAffichage.zip b/ModuleAffichage.zip new file mode 100644 index 0000000000000000000000000000000000000000..db3c6e91239c1f7778a659770944d521ea320c50 GIT binary patch literal 50775 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 z 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 +// 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/PjtKEIL_Final/Driver/DriverJeuLaser.inc b/PjtKEIL_Final/Driver/DriverJeuLaser.inc new file mode 100644 index 0000000..48d5e50 --- /dev/null +++ b/PjtKEIL_Final/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/PjtKEIL_Final/Driver/DriverJeuLaser_1.h b/PjtKEIL_Final/Driver/DriverJeuLaser_1.h new file mode 100644 index 0000000..bc9b3bd --- /dev/null +++ b/PjtKEIL_Final/Driver/DriverJeuLaser_1.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/PjtKEIL_Final/Driver/DriverJeuLaser_1.inc b/PjtKEIL_Final/Driver/DriverJeuLaser_1.inc new file mode 100644 index 0000000..48d5e50 --- /dev/null +++ b/PjtKEIL_Final/Driver/DriverJeuLaser_1.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/PjtKEIL_Final/ModuleAffichage/Affichage_Valise.h b/PjtKEIL_Final/ModuleAffichage/Affichage_Valise.h new file mode 100644 index 0000000..990ced9 --- /dev/null +++ b/PjtKEIL_Final/ModuleAffichage/Affichage_Valise.h @@ -0,0 +1,78 @@ + +/* Fichier devant contenir l'ensemble de fichiers utiles pour le projet LaserQuest +et qui concenent l'affichage sur la valise */ +/* mais non disponible en version source pour les étudiants. */ + +#ifndef _AFFICHAGE_VALISE_H__ +#define _AFFICHAGE_VALISE_H__ +#include "stm32f10x.h" + + +/** + * @brief Initialise les périphériques nécessaires à l'affichage sur la Mallette + * et gère la cible active. S'utilise aussi avec les ùmodules affichages simple (pas de mallette) + * @note Utilise TIM1, PA5, PA6 pour les cibles, PC7 à PC9 pour SPI émulé + * utilise aussi une interruption sut TIM1, prio 8. + * @param none + * @retval None + */ +void Init_Affichage(void); + + +/** + * @brief Prépare l'affichage 2 digit sur l'afficheur demandé + * @note Exemple : Prepare_Afficheur(2, 99); + * prépare l'affichage de la valeur 99 sur l'afficheur n°2 + * L'action est différée à l'exécution de Mise_A_Jour_Afficheurs_LED() + * @param char Aff : de 1 à 4 ; char Valeur de 0 à 99 + * @retval None + */ +void Prepare_Afficheur(char Aff, char Valeur); + + + +void Prepare_Set_Point_Unite(char Aff); +void Prepare_Clear_Point_Unite(char Aff); + + +/** + * @brief Prépare l'allumage de la LED demandée + * @note Exemple : Prepare_Set_LED(LED_Cible_2); + * prépare l'allumage de la LED correspondant à la cible n°2 + * L'action est différée à l'exécution de Mise_A_Jour_Afficheurs_LED() + * @param voir #define ci-dessous + * @retval None + */ +void Prepare_Set_LED(char LED); +void Prepare_Clear_LED(char LED); + + +/** + * @brief Effectue l'action d'écriture dans le module d'affichage + * à partir de tout ce qui a été préparé auparavant. + * @note + * @param None + * @retval None + */ +void Mise_A_Jour_Afficheurs_LED(void); + +/** + * @brief Spécifie le capteut actif, à savoir celui effectivement relié + * aux sorties disponibles sur la malette + * @note Exemple : Choix_Capteur(1) + * @param 1 à 4 + * @retval None + */ +void Choix_Capteur(char Capteur); +// define utile pour la fonction Prepare_Set_LED et Prepare_Clear_LED +#define LED_LCD_R 5 +#define LED_LCD_V 4 +#define LED_Cible_4 3 +#define LED_Cible_3 2 +#define LED_Cible_2 1 +#define LED_Cible_1 0 + + + +#endif + diff --git a/PjtKEIL_Final/Obj/Signal.asm b/PjtKEIL_Final/Obj/Signal.asm new file mode 100644 index 0000000..afe6352 --- /dev/null +++ b/PjtKEIL_Final/Obj/Signal.asm @@ -0,0 +1,68 @@ + AREA Signal, DATA, READONLY + export LeSignal +LeSignal + DCW 0x0fff ; 0 4095 0.99976 + DCW 0x0737 ; 1 1847 0.45093 + DCW 0x0027 ; 2 39 0.00952 + DCW 0x0a53 ; 3 2643 0.64526 + DCW 0x0f64 ; 4 3940 0.96191 + DCW 0x043b ; 5 1083 0.26440 + DCW 0x0159 ; 6 345 0.08423 + DCW 0x0d13 ; 7 3347 0.81714 + DCW 0x0da8 ; 8 3496 0.85352 + DCW 0x01d1 ; 9 465 0.11353 + DCW 0x038e ; 10 910 0.22217 + DCW 0x0f0e ; 11 3854 0.94092 + DCW 0x0b10 ; 12 2832 0.69141 + DCW 0x0058 ; 13 88 0.02148 + DCW 0x0670 ; 14 1648 0.40234 + DCW 0x0ff6 ; 15 4086 0.99756 + DCW 0x0800 ; 16 2048 0.50000 + DCW 0x000a ; 17 10 0.00244 + DCW 0x0990 ; 18 2448 0.59766 + DCW 0x0fa8 ; 19 4008 0.97852 + DCW 0x04f0 ; 20 1264 0.30859 + DCW 0x00f2 ; 21 242 0.05908 + DCW 0x0c72 ; 22 3186 0.77783 + DCW 0x0e2f ; 23 3631 0.88647 + DCW 0x0258 ; 24 600 0.14648 + DCW 0x02ed ; 25 749 0.18286 + DCW 0x0ea7 ; 26 3751 0.91577 + DCW 0x0bc5 ; 27 3013 0.73560 + DCW 0x009c ; 28 156 0.03809 + DCW 0x05ad ; 29 1453 0.35474 + DCW 0x0fd9 ; 30 4057 0.99048 + DCW 0x08c9 ; 31 2249 0.54907 + DCW 0x0000 ; 32 0 0.00000 + DCW 0x08c9 ; 33 2249 0.54907 + DCW 0x0fd9 ; 34 4057 0.99048 + DCW 0x05ad ; 35 1453 0.35474 + DCW 0x009c ; 36 156 0.03809 + DCW 0x0bc5 ; 37 3013 0.73560 + DCW 0x0ea7 ; 38 3751 0.91577 + DCW 0x02ed ; 39 749 0.18286 + DCW 0x0258 ; 40 600 0.14648 + DCW 0x0e2f ; 41 3631 0.88647 + DCW 0x0c72 ; 42 3186 0.77783 + DCW 0x00f2 ; 43 242 0.05908 + DCW 0x04f0 ; 44 1264 0.30859 + DCW 0x0fa8 ; 45 4008 0.97852 + DCW 0x0990 ; 46 2448 0.59766 + DCW 0x000a ; 47 10 0.00244 + DCW 0x0800 ; 48 2048 0.50000 + DCW 0x0ff6 ; 49 4086 0.99756 + DCW 0x0670 ; 50 1648 0.40234 + DCW 0x0058 ; 51 88 0.02148 + DCW 0x0b10 ; 52 2832 0.69141 + DCW 0x0f0e ; 53 3854 0.94092 + DCW 0x038e ; 54 910 0.22217 + DCW 0x01d1 ; 55 465 0.11353 + DCW 0x0da8 ; 56 3496 0.85352 + DCW 0x0d13 ; 57 3347 0.81714 + DCW 0x0159 ; 58 345 0.08423 + DCW 0x043b ; 59 1083 0.26440 + DCW 0x0f64 ; 60 3940 0.96191 + DCW 0x0a53 ; 61 2643 0.64526 + DCW 0x0027 ; 62 39 0.00952 + DCW 0x0737 ; 63 1847 0.45093 + END diff --git a/PjtKEIL_Final/Signaux/Signal.asm b/PjtKEIL_Final/Signaux/Signal.asm new file mode 100644 index 0000000..5a79596 --- /dev/null +++ b/PjtKEIL_Final/Signaux/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/PjtKEIL_Final/Signaux/Signal.m b/PjtKEIL_Final/Signaux/Signal.m new file mode 100644 index 0000000..016fc56 --- /dev/null +++ b/PjtKEIL_Final/Signaux/Signal.m @@ -0,0 +1,38 @@ +clc +clear + +N = 64 %input('Nombre d''échantilllons pour ce signal : '); +Frel = input('Fréquence normalisée (nombre de périodes dans la durée totale) : '); +Ph0 = input('Phase a l''origine (en degrés) : '); +Ph0 = Ph0 * pi / 180.0; % a present en radian + +Ampl = 2048; +Offset = 2048; +%% Création du fichier .asm + +fileID = fopen(['Signalech64.asm'], 'w'); +fprintf(fileID,'\tAREA Signal, DATA, READONLY\n'); +fprintf(fileID,'\texport LeSignal\n'); + +fprintf(fileID,'LeSignal\n'); + +for i = 1: N + % fonction a modifier en fonction des besoins + Sig(i) = Offset + Ampl * cos( 2*pi*Frel*(i-1)/N + Ph0 ); + % arrondi + iSig = int16(Sig(i)); + % bornage du signal similaire a la sortie brute de l'ADC 12 bits + if ( iSig < 0 ) + iSig = 0; + end + if ( iSig > 4095 ) + iSig = 4095; + end + + fprintf(fileID,'\tDCW\t0x%04x\t; %2d %4d %7.5f\n',iSig, i-1, iSig, double(iSig) / 4096.0 ); + +end + +fprintf(fileID,'\tEND\n'); +fclose(fileID); +plot(Sig); \ No newline at end of file diff --git a/PjtKEIL_Final/Src/DFT.s b/PjtKEIL_Final/Src/DFT.s new file mode 100644 index 0000000..fc761fa --- /dev/null +++ b/PjtKEIL_Final/Src/DFT.s @@ -0,0 +1,266 @@ + PRESERVE8 + THUMB + IMPORT LeSignal + EXPORT DFT_ModuleAuCarre + EXPORT DFT_reel + EXPORT DFT_imag + +;int DFT_ModuleAuCarre( short int * Signal64ech, char k){ +; int acumReel = 0; +; int acumImag = 0; +; for (int i= 0; i< 64; i++){ +; acumReel += Signal64ech[i]*TabCos[(i*k)%64]; +; } +; return acumReel; +;} + +; ====================== zone de réservation de données, ====================================== +;Section RAM (read only) : + area mesdata,data,readonly + + +;Section RAM (read write): + area maram,data,readwrite + + + +; =============================================================================================== + + + + +;Section ROM code (read only) : + area moncode,code,readonly +; écrire le code ici + +DFT_reel proc + +;int DFT_ModuleAuCarre( short int * Signal64ech, char k){ + + push {r4, r5, r6, r7} +; int acumReel = 0; + ldr r5,=TabCos + + + mov r2,#0 ; r2 = acumReel + mov r7, #63 + mov r3,#0 ; r3 = i +boucle1 +; for (int i= 0; i< 64; i++){ + mul r4,r3,r1 ; = i*k + and r4,r7 ;= i*k%64 + + ldrsh r6, [r5,r4,LSL #1]; r6 = TabCos[(i*k)%64] + ldrsh r4, [r0,r3,LSL #1]; r4 = Signal64ech[i]; + mul r4, r4,r6 + add r2, r4 + add r3, #1 + cmp r3,#63 + ble boucle1 + mov r0, r2 + +; acumReel += Signal64ech[i]*TabCos[(i*k)%64]; +; } +; return acumReel; +;} + pop {r4,r5,r6,r7} + bx lr + ENDFUNC + +DFT_imag proc + +;int DFT_ModuleAuCarre( short int * Signal64ech, char k){ + + push {r4, r5, r6, r7} +; int acumReel = 0; + ldr r5,=TabSin + + + mov r2,#0 ; r2 = acumReel + mov r7, #63 + mov r3,#0 ; r3 = i +boucle2 +; for (int i= 0; i< 64; i++){ + mul r4,r3,r1 ; = i*k + and r4,r7 ;= i*k%64 + + ldrsh r6, [r5,r4,LSL #1]; r6 = TabCos[(i*k)%64] + ldrsh r4, [r0,r3,LSL #1]; r4 = Signal64ech[i]; + mul r4, r4,r6 + add r2, r4 + add r3, #1 + cmp r3,#63 + ble boucle2 + mov r0, r2 + +; acumReel += Signal64ech[i]*TabCos[(i*k)%64]; +; } +; return acumReel; +;} + pop {r4,r5,r6,r7} + bx lr + ENDFUNC + +DFT_ModuleAuCarre proc + +;int DFT_ModuleAuCarre( short int * Signal64ech, char k){ + push {lr} + push {r4} + + push {r0} + push {r1} + bl DFT_reel + mov r4,r0 + pop {r1} + pop {r0} + bl DFT_imag + + asr r4, #16 + asr r0, #16 + mul r4,r4 + mul r0,r0;utiliser multiplication longue (smul?) et garder uniquement le registre de poids fort + add r0,r4 + + pop{r4} + pop{pc} + ENDFUNC +;Section ROM code (read only) : + AREA Trigo, DATA, READONLY +; codage fractionnaire 1.15 + export TabCos + export TabSin +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/PjtKEIL_Final/Src/GestionSon.s b/PjtKEIL_Final/Src/GestionSon.s new file mode 100644 index 0000000..df3c5a1 --- /dev/null +++ b/PjtKEIL_Final/Src/GestionSon.s @@ -0,0 +1,71 @@ + PRESERVE8 + THUMB + EXPORT CallbackSon + EXPORT SortieSon + EXPORT i + IMPORT Son + IMPORT LongueurSon + INCLUDE DriverJeuLaser.inc +;void CallbackSon(void){ +; static int i = 0; +; if(i < 5512){ +;0 SortieSon = (Son[i] + 32768) * 719 / 65535; +; i++; +; } +;} + + + +; ====================== zone de réservation de données, ====================================== +;Section RAM (read only) : + area mesdata,data,readonly + + +;Section RAM (read write): + area maram,data,readwrite + +i dcd 0 +SortieSon dcw 0 + + +; =============================================================================================== + + + + +;Section ROM code (read only) : + area moncode,code,readonly +; écrire le code ici + +CallbackSon proc + push {lr} +; static int i = 0; + ldr r0,=i + ldr r1, [r0] + ldr r2,LongueurSon + cmp r2, r1 +; if(i < 5512) + ble fin +;0 SortieSon = (Son[i] + 32768) * 719 / 65535; + ldr r3,=Son + ldrsh r2, [r3,r1, LSL#1] + add r2, #32768 + mov r12, #719 + mul r2, r12 + mov r12, #65535 + udiv r2, r12 +; i++; + add r1, #1 + str r1, [r0] +; On stocke enfin la sortie son + ldr r0, =SortieSon + strh r2, [r0] + mov r0, r2 + bl PWM_Set_Value_TIM3_Ch3 + +fin + pop {pc} + ENDFUNC + + + END \ No newline at end of file diff --git a/PjtKEIL_Final/Src/Signal.asm b/PjtKEIL_Final/Src/Signal.asm new file mode 100644 index 0000000..5a79596 --- /dev/null +++ b/PjtKEIL_Final/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/PjtKEIL_Final/Src/bruitverre.asm b/PjtKEIL_Final/Src/bruitverre.asm new file mode 100644 index 0000000..bf5ba29 --- /dev/null +++ b/PjtKEIL_Final/Src/bruitverre.asm @@ -0,0 +1,5527 @@ +;********************************************* + + AREA SecSon, DATA, READONLY + ;********************************************* + + + export LongueurSon + export PeriodeSonMicroSec + export Son + +LongueurSon DCD 5512 +PeriodeSonMicroSec DCD 91 +Son + DCW -6911 + DCW 20666 + DCW -1338 + DCW 10995 + DCW -23488 + DCW -18984 + DCW 29795 + DCW -21890 + DCW 12388 + DCW 16304 + DCW -32768 + DCW 13298 + DCW 22737 + DCW -20334 + DCW 4588 + DCW 5271 + DCW -27547 + DCW 19370 + DCW -4248 + DCW -7368 + DCW 24620 + DCW -21404 + DCW 14442 + DCW 4961 + DCW -7125 + DCW 21290 + DCW -22096 + DCW -6605 + DCW 6777 + DCW -14300 + DCW 8261 + DCW -2223 + DCW -6714 + DCW 15935 + DCW -13063 + DCW -3648 + DCW 19575 + DCW -15365 + DCW 7934 + DCW 23001 + DCW -10157 + DCW -5535 + DCW -7091 + DCW 3950 + DCW 7741 + DCW -8492 + DCW 1686 + DCW -6785 + DCW -6663 + DCW 5548 + DCW -15768 + DCW -2114 + DCW 18837 + DCW -13201 + DCW 3493 + DCW 21693 + DCW -2961 + DCW 8207 + DCW -12924 + DCW -10400 + DCW 16283 + DCW -22049 + DCW 2080 + DCW 21521 + DCW -12295 + DCW -3355 + DCW 3766 + DCW -1736 + DCW 243 + DCW -3078 + DCW 5452 + DCW 14019 + DCW -8475 + DCW 386 + DCW -12182 + DCW -13620 + DCW 20749 + DCW -1921 + DCW 4332 + DCW 11159 + DCW -17239 + DCW -9343 + DCW 9758 + DCW -11566 + DCW -294 + DCW 8244 + DCW -13503 + DCW 18862 + DCW 4927 + DCW -22662 + DCW -1355 + DCW -6030 + DCW -1854 + DCW 14325 + DCW -2709 + DCW -1665 + DCW 7607 + DCW -5997 + DCW 14191 + DCW -369 + DCW -14400 + DCW 19106 + DCW -8857 + DCW -2881 + DCW 5414 + DCW -12354 + DCW 16309 + DCW -1308 + DCW -9557 + DCW 9532 + DCW 3107 + DCW -1447 + DCW -7263 + DCW -15617 + DCW 8681 + DCW -4843 + DCW -13457 + DCW 31439 + DCW -13612 + DCW -4588 + DCW 3405 + DCW -23987 + DCW 32767 + DCW -289 + DCW -10215 + DCW 30843 + DCW -16631 + DCW -8412 + DCW -3242 + DCW -3221 + DCW 13516 + DCW -16531 + DCW -10689 + DCW 13306 + DCW -15306 + DCW -10861 + DCW 11322 + DCW -12702 + DCW 16518 + DCW 7024 + DCW -12572 + DCW 26193 + DCW -25496 + DCW 101 + DCW 18116 + DCW -20557 + DCW 20468 + DCW -14099 + DCW -12211 + DCW 18611 + DCW 1619 + DCW 8068 + DCW -10891 + DCW -7313 + DCW 10123 + DCW -570 + DCW 4290 + DCW 7582 + DCW -12287 + DCW -923 + DCW 5078 + DCW -6840 + DCW 17533 + DCW -7871 + DCW -13977 + DCW 2084 + DCW -9092 + DCW 11742 + DCW -4667 + DCW -365 + DCW 5552 + DCW -8580 + DCW 1166 + DCW 6215 + DCW 4592 + DCW -5636 + DCW -3627 + DCW -17856 + DCW 8047 + DCW 12723 + DCW -24196 + DCW 6399 + DCW 16589 + DCW -11700 + DCW -6102 + DCW 23366 + DCW -11679 + DCW -12132 + DCW 22477 + DCW -18841 + DCW 2550 + DCW 10048 + DCW -6823 + DCW 7502 + DCW -1166 + DCW 9234 + DCW -13864 + DCW -9263 + DCW 8848 + DCW -5632 + DCW 956 + DCW 2835 + DCW 3535 + DCW -1241 + DCW 4932 + DCW -3715 + DCW -2235 + DCW 6211 + DCW -9477 + DCW -4445 + DCW -12195 + DCW 9863 + DCW 15617 + DCW -14069 + DCW 5405 + DCW 9632 + DCW 323 + DCW -13247 + DCW -654 + DCW 14946 + DCW -12803 + DCW 1497 + DCW 2566 + DCW 1598 + DCW 9611 + DCW -14388 + DCW -1367 + DCW 14761 + DCW -1287 + DCW -26503 + DCW 18472 + DCW 18917 + DCW -25589 + DCW 16162 + DCW -19114 + DCW -4919 + DCW 20200 + DCW -18250 + DCW 11327 + DCW -1912 + DCW 3439 + DCW -21051 + DCW 6680 + DCW 32767 + DCW -20917 + DCW 13998 + DCW -12555 + DCW 566 + DCW 1241 + DCW -9293 + DCW 21731 + DCW -17290 + DCW 9033 + DCW -8106 + DCW -1065 + DCW 8458 + DCW -20229 + DCW 13398 + DCW -3208 + DCW -3518 + DCW 5456 + DCW -1208 + DCW -11159 + DCW 11289 + DCW 6303 + DCW -20586 + DCW 31736 + DCW -17302 + DCW -9909 + DCW 27702 + DCW -15419 + DCW 2311 + DCW -4344 + DCW -1103 + DCW -12170 + DCW 11348 + DCW 3317 + DCW -17634 + DCW 19781 + DCW -3745 + DCW -4064 + DCW -1774 + DCW 130 + DCW -6504 + DCW 3313 + DCW 2717 + DCW -7599 + DCW 14459 + DCW -3984 + DCW -1807 + DCW 1635 + DCW -2533 + DCW 2495 + DCW -6928 + DCW 2093 + DCW 1887 + DCW -2873 + DCW 12186 + DCW -13369 + DCW 2944 + DCW 13570 + DCW -16267 + DCW -872 + DCW -1522 + DCW -3451 + DCW -4495 + DCW 16216 + DCW 2449 + DCW 994 + DCW 10337 + DCW -17017 + DCW 356 + DCW -315 + DCW -2185 + DCW -4927 + DCW 2776 + DCW -1577 + DCW -4990 + DCW 12102 + DCW -9045 + DCW 4047 + DCW 4152 + DCW -23710 + DCW 4516 + DCW 9410 + DCW -12329 + DCW 3502 + DCW 11037 + DCW -8840 + DCW -2252 + DCW 15260 + DCW -19709 + DCW 3321 + DCW 16199 + DCW -20921 + DCW 3741 + DCW 9159 + DCW -2504 + DCW -3753 + DCW 10626 + DCW -2969 + DCW -5661 + DCW 4890 + DCW -11423 + DCW 11180 + DCW 4487 + DCW -11947 + DCW 4894 + DCW 3476 + DCW -6517 + DCW 10257 + DCW 5724 + DCW -14216 + DCW 10270 + DCW -2264 + DCW -14933 + DCW 18489 + DCW 990 + DCW -13281 + DCW 4906 + DCW 5200 + DCW -2814 + DCW -1669 + DCW 5632 + DCW -2306 + DCW -3753 + DCW -8655 + DCW 2088 + DCW 2659 + DCW -2537 + DCW 12392 + DCW -5414 + DCW 981 + DCW -2462 + DCW -3539 + DCW 2114 + DCW -2315 + DCW 8618 + DCW -17256 + DCW -1598 + DCW 7381 + DCW 92 + DCW 1631 + DCW -6722 + DCW 11696 + DCW -12874 + DCW -5758 + DCW 12132 + DCW -3892 + DCW 2273 + DCW 6596 + DCW -705 + DCW -8052 + DCW 15294 + DCW -11197 + DCW -8031 + DCW 18594 + DCW -14581 + DCW 2487 + DCW -1254 + DCW 4948 + DCW 11306 + DCW -7297 + DCW 1661 + DCW -1912 + DCW 5267 + DCW -9251 + DCW 3640 + DCW 7909 + DCW -14832 + DCW 4613 + DCW 2374 + DCW -8286 + DCW 4508 + DCW 7796 + DCW -14887 + DCW 4726 + DCW 5619 + DCW -16283 + DCW 14912 + DCW -2881 + DCW -117 + DCW 4579 + DCW -14514 + DCW 15029 + DCW -6127 + DCW 3774 + DCW 12446 + DCW -12933 + DCW 4051 + DCW -7079 + DCW 1254 + DCW 3980 + DCW -3233 + DCW 11561 + DCW 948 + DCW -13914 + DCW 5590 + DCW 7511 + DCW -13797 + DCW 15415 + DCW -5401 + DCW -14736 + DCW 12346 + DCW -5301 + DCW 7854 + DCW -2751 + DCW -1971 + DCW -440 + DCW -7838 + DCW 8240 + DCW -6026 + DCW 5548 + DCW 2554 + DCW 2738 + DCW 4110 + DCW -15986 + DCW 5246 + DCW 7330 + DCW -14941 + DCW 210 + DCW 10215 + DCW -15663 + DCW 12220 + DCW 8110 + DCW -10714 + DCW 13734 + DCW -14954 + DCW 3183 + DCW 4240 + DCW -8144 + DCW 16866 + DCW -9809 + DCW -4323 + DCW 13302 + DCW -4793 + DCW -4982 + DCW 9876 + DCW -4399 + DCW -4911 + DCW 3338 + DCW -403 + DCW 5162 + DCW -9532 + DCW 2613 + DCW 3749 + DCW -6458 + DCW 2684 + DCW -1916 + DCW 1736 + DCW 256 + DCW 7569 + DCW -1103 + DCW -17982 + DCW 9272 + DCW 6164 + DCW -15084 + DCW 14929 + DCW 3233 + DCW -19080 + DCW 10501 + DCW -3451 + DCW -2663 + DCW 8026 + DCW -11431 + DCW 7364 + DCW -4034 + DCW -5347 + DCW 16317 + DCW -7984 + DCW -243 + DCW 2914 + DCW -11406 + DCW -1124 + DCW 2344 + DCW 8215 + DCW 2449 + DCW -3611 + DCW 11650 + DCW -6504 + DCW -11532 + DCW 20330 + DCW -5766 + DCW -8307 + DCW 8211 + DCW -8198 + DCW 6458 + DCW 2361 + DCW 6185 + DCW 3640 + DCW -15990 + DCW 3577 + DCW -2495 + DCW -5443 + DCW 10647 + DCW -3434 + DCW -4189 + DCW 4118 + DCW -3237 + DCW 3535 + DCW -5087 + DCW -193 + DCW 11004 + DCW -21886 + DCW 449 + DCW 3791 + DCW -16258 + DCW 18149 + DCW 2021 + DCW -8291 + DCW -231 + DCW -8244 + DCW 7225 + DCW 4382 + DCW -809 + DCW 6546 + DCW -7376 + DCW -4512 + DCW 5766 + DCW -4122 + DCW -281 + DCW 1547 + DCW 910 + DCW -2680 + DCW -7108 + DCW 10131 + DCW 3174 + DCW -10408 + DCW 10823 + DCW -5611 + DCW -10467 + DCW 16074 + DCW -956 + DCW 1866 + DCW 1589 + DCW -4789 + DCW -348 + DCW -2743 + DCW 15575 + DCW 2847 + DCW -7116 + DCW 9553 + DCW -5015 + DCW -4223 + DCW 10706 + DCW -6752 + DCW 1459 + DCW -377 + DCW -15130 + DCW 12920 + DCW 2483 + DCW 46 + DCW 15126 + DCW -12639 + DCW -10446 + DCW 3233 + DCW -2386 + DCW 1942 + DCW 9687 + DCW 4235 + DCW -12564 + DCW -2185 + DCW 12442 + DCW -4592 + DCW -730 + DCW 4051 + DCW -14120 + DCW 2382 + DCW 6424 + DCW -3946 + DCW 7460 + DCW -2814 + DCW -2768 + DCW -1757 + DCW -4726 + DCW 5343 + DCW -5137 + DCW -1837 + DCW -407 + DCW -3606 + DCW 8303 + DCW -5217 + DCW 3548 + DCW 9880 + DCW -20695 + DCW 1925 + DCW 9632 + DCW -12597 + DCW 12677 + DCW 4848 + DCW -13797 + DCW 6588 + DCW 2059 + DCW -6869 + DCW 6324 + DCW 2088 + DCW -1614 + DCW 742 + DCW -2382 + DCW 4210 + DCW 71 + DCW -210 + DCW 3443 + DCW -1078 + DCW -3934 + DCW -3594 + DCW 8005 + DCW -319 + DCW -5493 + DCW 7682 + DCW -9066 + DCW -6169 + DCW 10241 + DCW -3921 + DCW -164 + DCW 5171 + DCW 897 + DCW -373 + DCW -4659 + DCW 151 + DCW 650 + DCW -3757 + DCW 9863 + DCW 7678 + DCW -5879 + DCW 5158 + DCW -4433 + DCW -5275 + DCW -264 + DCW -4680 + DCW 2696 + DCW -1724 + DCW 7309 + DCW 5946 + DCW -5821 + DCW -1975 + DCW 910 + DCW -482 + DCW -1677 + DCW 3070 + DCW 717 + DCW -4793 + DCW 1744 + DCW 3791 + DCW -1866 + DCW 2826 + DCW 1220 + DCW -3783 + DCW -776 + DCW -4495 + DCW -751 + DCW 2873 + DCW -2734 + DCW 8936 + DCW -2160 + DCW -9507 + DCW 9297 + DCW -4843 + DCW -4537 + DCW 6248 + DCW -176 + DCW -3757 + DCW 2864 + DCW 5175 + DCW -4017 + DCW 1044 + DCW -1090 + DCW -3166 + DCW -143 + DCW 1568 + DCW 1170 + DCW 8 + DCW 4177 + DCW -2944 + DCW -3133 + DCW -3028 + DCW 5187 + DCW 5200 + DCW -8697 + DCW 5883 + DCW -1166 + DCW -7053 + DCW 692 + DCW 2709 + DCW 7351 + DCW -7984 + DCW 88 + DCW 3636 + DCW -923 + DCW 5393 + DCW 2365 + DCW -7733 + DCW -4244 + DCW 6043 + DCW -8827 + DCW 3699 + DCW 5552 + DCW -1598 + DCW -5045 + DCW -3183 + DCW 8253 + DCW -5833 + DCW 470 + DCW 6328 + DCW 3434 + DCW -9142 + DCW 730 + DCW 583 + DCW -1447 + DCW 12027 + DCW -5833 + DCW 1786 + DCW -11029 + DCW -2147 + DCW 7909 + DCW -8253 + DCW 8995 + DCW -805 + DCW -3174 + DCW 3074 + DCW -55 + DCW -1355 + DCW -1967 + DCW 3636 + DCW -2491 + DCW 5401 + DCW -1556 + DCW -3904 + DCW 6542 + DCW -3279 + DCW 3229 + DCW -6047 + DCW -2420 + DCW 4114 + DCW 927 + DCW 1468 + DCW -2181 + DCW 3573 + DCW -9649 + DCW 2134 + DCW 4621 + DCW -956 + DCW 1623 + DCW -7351 + DCW 3900 + DCW 310 + DCW 1979 + DCW 2776 + DCW -3707 + DCW 1136 + DCW -566 + DCW 2080 + DCW -2558 + DCW 4563 + DCW 814 + DCW -7506 + DCW 4286 + DCW -2688 + DCW 1401 + DCW 1082 + DCW 3212 + DCW 2244 + DCW -1925 + DCW -814 + DCW -2340 + DCW 4986 + DCW -7825 + DCW 7183 + DCW 1996 + DCW -6055 + DCW 7938 + DCW -6798 + DCW 709 + DCW 1451 + DCW -1879 + DCW -1308 + DCW -159 + DCW 1002 + DCW -2550 + DCW 4843 + DCW 2294 + DCW 2231 + DCW -7997 + DCW -5066 + DCW 4827 + DCW -2466 + DCW 6462 + DCW -4315 + DCW -671 + DCW -277 + DCW 1162 + DCW 10194 + DCW -9226 + DCW 3154 + DCW -7414 + DCW -4043 + DCW 8223 + DCW 2575 + DCW 6349 + DCW -7636 + DCW 268 + DCW -113 + DCW -2671 + DCW -2239 + DCW 6362 + DCW 117 + DCW -5137 + DCW 8270 + DCW -8718 + DCW 4894 + DCW 1162 + DCW -4835 + DCW 7158 + DCW -9477 + DCW 558 + DCW -134 + DCW 1581 + DCW 7611 + DCW -876 + DCW -5053 + DCW -5254 + DCW 6127 + DCW -2562 + DCW 4286 + DCW 1342 + DCW -1036 + DCW 646 + DCW -6055 + DCW 6013 + DCW -3992 + DCW 6718 + DCW -2608 + DCW -4697 + DCW 5078 + DCW -5808 + DCW 9834 + DCW -2290 + DCW -260 + DCW 210 + DCW -13713 + DCW 4483 + DCW 8337 + DCW 2151 + DCW -457 + DCW -268 + DCW -4621 + DCW 1212 + DCW 839 + DCW -3099 + DCW 6533 + DCW -10823 + DCW 5691 + DCW 2621 + DCW -2889 + DCW 11616 + DCW -12325 + DCW 956 + DCW -1493 + DCW -138 + DCW 667 + DCW -348 + DCW 8228 + DCW -164 + DCW 369 + DCW -5473 + DCW 2126 + DCW -4667 + DCW 1942 + DCW 2432 + DCW -2634 + DCW 3263 + DCW -7322 + DCW 8924 + DCW 2285 + DCW -2206 + DCW 3149 + DCW -15306 + DCW 7829 + DCW -1640 + DCW -8 + DCW 8836 + DCW -7896 + DCW 9574 + DCW -13818 + DCW 5603 + DCW -331 + DCW 6315 + DCW 3409 + DCW -18900 + DCW 16606 + DCW -12648 + DCW 16820 + DCW -2038 + DCW -3154 + DCW 11826 + DCW -24704 + DCW 5749 + DCW -445 + DCW 8400 + DCW 4500 + DCW -461 + DCW -5883 + DCW -8207 + DCW 4990 + DCW 176 + DCW 15151 + DCW -1543 + DCW -7926 + DCW -5045 + DCW -4084 + DCW 3518 + DCW 6747 + DCW 8718 + DCW -4064 + DCW -344 + DCW -14421 + DCW -1476 + DCW 7540 + DCW 2592 + DCW 15700 + DCW -10761 + DCW -5561 + DCW -2923 + DCW 2478 + DCW 9721 + DCW 5242 + DCW -277 + DCW -11209 + DCW -1120 + DCW -9469 + DCW 6030 + DCW 5821 + DCW 2969 + DCW 3497 + DCW -10140 + DCW -159 + DCW -5615 + DCW 4701 + DCW 8060 + DCW 2139 + DCW 289 + DCW -12010 + DCW -2856 + DCW -1631 + DCW 7192 + DCW 7796 + DCW -2885 + DCW 3275 + DCW -12434 + DCW 575 + DCW 4374 + DCW 1652 + DCW 7615 + DCW -1526 + DCW -1833 + DCW -9733 + DCW 4357 + DCW -6471 + DCW 6500 + DCW 14300 + DCW -10987 + DCW 1535 + DCW -7863 + DCW -2696 + DCW 5556 + DCW 6840 + DCW 5359 + DCW -6034 + DCW -667 + DCW -8156 + DCW 3028 + DCW 4957 + DCW 2634 + DCW 5984 + DCW -7217 + DCW 1053 + DCW -7972 + DCW 1526 + DCW 7435 + DCW 2826 + DCW 5883 + DCW -9289 + DCW -3619 + DCW -5305 + DCW 5057 + DCW 6907 + DCW 4588 + DCW -327 + DCW -11725 + DCW 319 + DCW -4252 + DCW 5514 + DCW 9997 + DCW -465 + DCW -1778 + DCW -6957 + DCW -5053 + DCW -1015 + DCW 7670 + DCW 5347 + DCW 1111 + DCW -2940 + DCW -12430 + DCW 579 + DCW 4227 + DCW 8110 + DCW 5460 + DCW -5808 + DCW -7938 + DCW -7511 + DCW 5133 + DCW 3980 + DCW 10853 + DCW 612 + DCW -7846 + DCW -4885 + DCW -7242 + DCW 7167 + DCW 3338 + DCW 7804 + DCW -1283 + DCW -8584 + DCW -3795 + DCW -2944 + DCW 9146 + DCW 3380 + DCW 5946 + DCW -7662 + DCW -10773 + DCW 1422 + DCW 38 + DCW 12996 + DCW 3481 + DCW -721 + DCW -8249 + DCW -6907 + DCW 4806 + DCW 1132 + DCW 10165 + DCW -549 + DCW -2210 + DCW -5850 + DCW -4755 + DCW 5548 + DCW 1153 + DCW 9410 + DCW -1988 + DCW -5615 + DCW -4839 + DCW -3887 + DCW 6978 + DCW 3577 + DCW 6907 + DCW -4118 + DCW -4827 + DCW -4412 + DCW -1824 + DCW 10773 + DCW -428 + DCW 3292 + DCW -3091 + DCW -5124 + DCW -1883 + DCW 1174 + DCW 4751 + DCW 168 + DCW 7343 + DCW -7817 + DCW -3057 + DCW 1258 + DCW -3422 + DCW 7049 + DCW 3808 + DCW -549 + DCW -5363 + DCW -2814 + DCW -1069 + DCW 4269 + DCW 5351 + DCW -1833 + DCW 772 + DCW -5452 + DCW -1535 + DCW 1984 + DCW 96 + DCW 6546 + DCW -3187 + DCW -143 + DCW -3275 + DCW -2772 + DCW 2659 + DCW 604 + DCW 5309 + DCW -3443 + DCW -2629 + DCW -2625 + DCW 3485 + DCW -935 + DCW 369 + DCW 4403 + DCW -1040 + DCW 1816 + DCW -5359 + DCW 1069 + DCW -1245 + DCW 3552 + DCW 2227 + DCW -7037 + DCW 3770 + DCW -2420 + DCW -3112 + DCW 7162 + DCW 663 + DCW -3451 + DCW -159 + DCW -1338 + DCW -1258 + DCW 4277 + DCW 377 + DCW -549 + DCW 2394 + DCW -4751 + DCW 1266 + DCW -88 + DCW 3795 + DCW 2541 + DCW -34 + DCW -264 + DCW -5389 + DCW 2432 + DCW -407 + DCW 5934 + DCW 117 + DCW -2004 + DCW -2348 + DCW -4877 + DCW 3573 + DCW 1128 + DCW 4227 + DCW 1099 + DCW -5481 + DCW -5162 + DCW 507 + DCW 3200 + DCW 4575 + DCW 3711 + DCW -5556 + DCW -4424 + DCW 1178 + DCW -1501 + DCW 6131 + DCW 1401 + DCW -2768 + DCW -600 + DCW -3388 + DCW 226 + DCW 923 + DCW 5959 + DCW -2004 + DCW 1673 + DCW -3024 + DCW -5800 + DCW 4298 + DCW -348 + DCW 4483 + DCW 1107 + DCW -3053 + DCW -3141 + DCW -1476 + DCW 2516 + DCW 3711 + DCW 335 + DCW -2634 + DCW -3179 + DCW -1820 + DCW 2009 + DCW 5103 + DCW 214 + DCW -642 + DCW 17 + DCW -2994 + DCW 939 + DCW -960 + DCW 3351 + DCW 1950 + DCW 1208 + DCW -2818 + DCW -3011 + DCW 2151 + DCW -470 + DCW 2592 + DCW 382 + DCW -1392 + DCW -2608 + DCW -541 + DCW -763 + DCW 3439 + DCW 2151 + DCW -843 + DCW -952 + DCW -1975 + DCW 432 + DCW -252 + DCW 1329 + DCW 1132 + DCW 830 + DCW -1786 + DCW -784 + DCW -1757 + DCW 1652 + DCW 2973 + DCW 533 + DCW -486 + DCW -1115 + DCW -2717 + DCW -4 + DCW 3124 + DCW -1069 + DCW 2239 + DCW -1396 + DCW -927 + DCW -985 + DCW 1162 + DCW 159 + DCW 562 + DCW 2613 + DCW -3401 + DCW 8 + DCW -2080 + DCW 218 + DCW 3552 + DCW 1329 + DCW 252 + DCW -923 + DCW -3770 + DCW -386 + DCW 2420 + DCW 2013 + DCW 1879 + DCW -839 + DCW -1963 + DCW -579 + DCW -1254 + DCW 147 + DCW 4152 + DCW -700 + DCW 445 + DCW -1573 + DCW -2046 + DCW 1346 + DCW 3128 + DCW 1799 + DCW -197 + DCW -2956 + DCW -4781 + DCW 1837 + DCW 1996 + DCW 3938 + DCW 1153 + DCW -3489 + DCW -2692 + DCW 1371 + DCW -495 + DCW 2227 + DCW 3611 + DCW -3170 + DCW 151 + DCW -1401 + DCW -2139 + DCW 2424 + DCW 3133 + DCW 122 + DCW 201 + DCW -3191 + DCW -3682 + DCW 1195 + DCW 3346 + DCW 2675 + DCW 734 + DCW -2990 + DCW -1535 + DCW 960 + DCW -298 + DCW 2856 + DCW -1015 + DCW -411 + DCW -1115 + DCW -151 + DCW 1346 + DCW 361 + DCW 1166 + DCW 369 + DCW 721 + DCW -3812 + DCW -1732 + DCW 688 + DCW 2634 + DCW 4126 + DCW -348 + DCW -3325 + DCW -1120 + DCW -1434 + DCW 1225 + DCW 3325 + DCW -746 + DCW -1786 + DCW -1053 + DCW -633 + DCW 797 + DCW 2109 + DCW 189 + DCW 1610 + DCW -478 + DCW -1304 + DCW -1241 + DCW -315 + DCW 654 + DCW 2558 + DCW 1367 + DCW -2378 + DCW -1589 + DCW -2441 + DCW 3590 + DCW 2856 + DCW -92 + DCW -2084 + DCW -1061 + DCW 415 + DCW 1011 + DCW 432 + DCW -2290 + DCW -143 + DCW -4592 + DCW -4789 + DCW -130 + DCW 1552 + DCW 4164 + DCW 14208 + DCW 12434 + DCW 7733 + DCW 1728 + DCW -10396 + DCW -6307 + DCW -7259 + DCW -8437 + DCW -4420 + DCW -2680 + DCW 1854 + DCW 2688 + DCW 6911 + DCW 7611 + DCW -3304 + DCW -3128 + DCW 0 + DCW -2474 + DCW -25 + DCW 5204 + DCW -3837 + DCW -6596 + DCW 4495 + DCW -1703 + DCW 2000 + DCW 3384 + DCW -1774 + DCW 2269 + DCW 4131 + DCW -2625 + DCW -6022 + DCW 1178 + DCW -3309 + DCW 2281 + DCW 4013 + DCW -2789 + DCW 1006 + DCW 298 + DCW 1954 + DCW 881 + DCW -839 + DCW -2114 + DCW -4852 + DCW -2709 + DCW 1061 + DCW 2034 + DCW 3585 + DCW 5774 + DCW -1971 + DCW 4 + DCW -1078 + DCW -512 + DCW -2600 + DCW -1006 + DCW -2613 + DCW -4252 + DCW 8458 + DCW -7074 + DCW 15009 + DCW -327 + DCW -11809 + DCW 7846 + DCW -9213 + DCW 134 + DCW -1325 + DCW 1770 + DCW -839 + DCW 7498 + DCW 6466 + DCW -2231 + DCW -646 + DCW -8291 + DCW 1874 + DCW 9666 + DCW -11956 + DCW -5049 + DCW 3103 + DCW -6253 + DCW 18829 + DCW -415 + DCW -1623 + DCW 1803 + DCW -4315 + DCW -6974 + DCW -3590 + DCW -587 + DCW -1900 + DCW 12396 + DCW -4365 + DCW 8312 + DCW 2332 + DCW -3929 + DCW -2206 + DCW -3724 + DCW -2168 + DCW -1455 + DCW -717 + DCW -4470 + DCW 13654 + DCW 4072 + DCW -80 + DCW 587 + DCW -7733 + DCW -3158 + DCW 4651 + DCW -3346 + DCW 696 + DCW 2332 + DCW -2197 + DCW 4164 + DCW 570 + DCW -2042 + DCW 1619 + DCW 0 + DCW -3975 + DCW 2554 + DCW -6068 + DCW 2864 + DCW 5347 + DCW 2239 + DCW 3137 + DCW -2348 + DCW -6819 + DCW -2445 + DCW 5967 + DCW -2545 + DCW 5816 + DCW -474 + DCW -1812 + DCW 3917 + DCW 528 + DCW -2868 + DCW 1082 + DCW -918 + DCW -1501 + DCW 1719 + DCW -4458 + DCW 1413 + DCW 1338 + DCW 1954 + DCW -1040 + DCW 2499 + DCW -3581 + DCW 226 + DCW 1895 + DCW -969 + DCW 2420 + DCW -2202 + DCW 231 + DCW -1057 + DCW 1128 + DCW -2344 + DCW 1006 + DCW -1698 + DCW 4583 + DCW 147 + DCW -1979 + DCW 1916 + DCW -4365 + DCW 3166 + DCW 1027 + DCW -2315 + DCW -3460 + DCW 2592 + DCW 4097 + DCW 3325 + DCW -2365 + DCW -3007 + DCW -3154 + DCW -394 + DCW 315 + DCW -2428 + DCW 4122 + DCW 2617 + DCW 2483 + DCW 2147 + DCW -4793 + DCW -4596 + DCW 3246 + DCW -2055 + DCW 3996 + DCW -180 + DCW -4198 + DCW 2093 + DCW 1841 + DCW 2923 + DCW 608 + DCW -1329 + DCW -4630 + DCW -3317 + DCW -1095 + DCW 3497 + DCW 1908 + DCW 3216 + DCW 1308 + DCW 671 + DCW -3694 + DCW -1975 + DCW -2751 + DCW -1199 + DCW 7280 + DCW -1778 + DCW 923 + DCW -906 + DCW 424 + DCW 2839 + DCW 1594 + DCW -3103 + DCW -5322 + DCW -382 + DCW 1145 + DCW 2009 + DCW 5099 + DCW 2017 + DCW -2004 + DCW 168 + DCW -4462 + DCW -2227 + DCW -2780 + DCW 256 + DCW 545 + DCW 3887 + DCW 1673 + DCW -684 + DCW 2407 + DCW -168 + DCW 1199 + DCW -5062 + DCW -2508 + DCW -1229 + DCW 361 + DCW 5213 + DCW 2076 + DCW -1690 + DCW 3774 + DCW -3510 + DCW -784 + DCW 1078 + DCW -6957 + DCW 1841 + DCW 2432 + DCW 2218 + DCW -1199 + DCW 143 + DCW -960 + DCW 3552 + DCW -545 + DCW -3720 + DCW 1132 + DCW -893 + DCW 1334 + DCW 3795 + DCW 1635 + DCW -5355 + DCW 2566 + DCW -3233 + DCW -814 + DCW 2973 + DCW -3426 + DCW -621 + DCW 2160 + DCW -445 + DCW 449 + DCW 1212 + DCW -3510 + DCW 4764 + DCW -2449 + DCW 1216 + DCW 4168 + DCW -4927 + DCW -566 + DCW 4143 + DCW -1581 + DCW -1874 + DCW 4705 + DCW -7129 + DCW -302 + DCW 6844 + DCW -2025 + DCW -1338 + DCW 1724 + DCW 2059 + DCW -1099 + DCW -6219 + DCW 243 + DCW 4089 + DCW -3036 + DCW 2562 + DCW 5200 + DCW -5015 + DCW -3254 + DCW 7112 + DCW -2743 + DCW -1552 + DCW 1623 + DCW -4613 + DCW 562 + DCW 3384 + DCW 5175 + DCW -512 + DCW -4223 + DCW -3711 + DCW 5145 + DCW -4621 + DCW -4177 + DCW 9721 + DCW -5363 + DCW 1296 + DCW 7766 + DCW -2889 + DCW -4428 + DCW 252 + DCW -491 + DCW 2583 + DCW -3124 + DCW -1027 + DCW 5091 + DCW -5200 + DCW 4235 + DCW 6663 + DCW -3598 + DCW -8093 + DCW 2017 + DCW 1187 + DCW -3967 + DCW 2273 + DCW -92 + DCW 7091 + DCW -386 + DCW -4122 + DCW 4630 + DCW -7750 + DCW 1958 + DCW 3707 + DCW -3757 + DCW -667 + DCW -1191 + DCW 6513 + DCW -1807 + DCW 2927 + DCW -4206 + DCW -2956 + DCW -709 + DCW 445 + DCW 7993 + DCW -9758 + DCW 4286 + DCW 1942 + DCW 705 + DCW 2264 + DCW -3200 + DCW -1132 + DCW -2067 + DCW 3174 + DCW -3254 + DCW 1552 + DCW -2025 + DCW 923 + DCW 6500 + DCW -4386 + DCW -2197 + DCW -2189 + DCW 4827 + DCW 2021 + DCW -1245 + DCW 3430 + DCW -9318 + DCW 1233 + DCW 1363 + DCW 3099 + DCW -881 + DCW -7561 + DCW 6395 + DCW 1040 + DCW 4005 + DCW -2692 + DCW -1552 + DCW -3284 + DCW 1874 + DCW 5301 + DCW -6055 + DCW -1237 + DCW -4147 + DCW 6911 + DCW 2722 + DCW -499 + DCW 2235 + DCW -8387 + DCW 1518 + DCW 4915 + DCW -1761 + DCW -3426 + DCW 38 + DCW 2164 + DCW 2877 + DCW 4185 + DCW -8324 + DCW 1862 + DCW -1816 + DCW -512 + DCW 8710 + DCW -7737 + DCW 5506 + DCW -3770 + DCW 5238 + DCW -2160 + DCW -6198 + DCW 5020 + DCW -5233 + DCW 6118 + DCW -11721 + DCW 14245 + DCW -1522 + DCW -4936 + DCW 12715 + DCW -13189 + DCW 7691 + DCW -11637 + DCW 306 + DCW 6731 + DCW -524 + DCW 92 + DCW -3099 + DCW 15080 + DCW -5640 + DCW 2051 + DCW -16275 + DCW 2445 + DCW 9414 + DCW -12400 + DCW 20192 + DCW -13646 + DCW 6332 + DCW -1329 + DCW -4722 + DCW 6441 + DCW -16321 + DCW 16028 + DCW -13323 + DCW 14929 + DCW -80 + DCW -9431 + DCW 9037 + DCW -12270 + DCW 15013 + DCW -11742 + DCW 7263 + DCW -8538 + DCW 4416 + DCW 3015 + DCW -9171 + DCW 15814 + DCW -19336 + DCW 20716 + DCW -5414 + DCW -4441 + DCW -965 + DCW -8249 + DCW 13495 + DCW -12975 + DCW 7628 + DCW -13046 + DCW 6185 + DCW 8056 + DCW 9381 + DCW 19479 + DCW -28570 + DCW -1694 + DCW -12920 + DCW 1682 + DCW 15713 + DCW 2835 + DCW 12371 + DCW -17810 + DCW 3481 + DCW -13851 + DCW 4906 + DCW 9280 + DCW -7272 + DCW 13369 + DCW -18036 + DCW 10345 + DCW -1233 + DCW 474 + DCW 1577 + DCW -4382 + DCW -3070 + DCW -8194 + DCW 19378 + DCW -17214 + DCW 9628 + DCW -3007 + DCW -1996 + DCW 20313 + DCW -22305 + DCW 10291 + DCW -9934 + DCW -5196 + DCW 13855 + DCW 2940 + DCW 4638 + DCW -16153 + DCW 2948 + DCW -3195 + DCW 15466 + DCW 1711 + DCW -8014 + DCW 5213 + DCW -22305 + DCW 11700 + DCW -1044 + DCW 6584 + DCW -1610 + DCW -5074 + DCW 11205 + DCW -4433 + DCW 9075 + DCW -16166 + DCW 6202 + DCW -5477 + DCW 851 + DCW 9398 + DCW -18309 + DCW 9352 + DCW 2118 + DCW 13570 + DCW 2566 + DCW -10899 + DCW -8731 + DCW -13654 + DCW 11985 + DCW 3044 + DCW 4231 + DCW 1053 + DCW -3376 + DCW 12509 + DCW -5913 + DCW 1724 + DCW -5565 + DCW -8630 + DCW 927 + DCW 1707 + DCW 2537 + DCW -1879 + DCW 14677 + DCW 755 + DCW 4269 + DCW -13734 + DCW -8257 + DCW 4290 + DCW -6873 + DCW 11855 + DCW -4563 + DCW 239 + DCW -2319 + DCW 8555 + DCW 7112 + DCW -9733 + DCW -17 + DCW -8685 + DCW 4231 + DCW -3359 + DCW 386 + DCW 9628 + DCW -2776 + DCW 10786 + DCW -2143 + DCW -4361 + DCW -8379 + DCW -6479 + DCW 9347 + DCW -2738 + DCW 7200 + DCW -4391 + DCW 2122 + DCW 6026 + DCW -2919 + DCW -4131 + DCW -6563 + DCW 3824 + DCW -5192 + DCW 6789 + DCW -5384 + DCW 7313 + DCW 1749 + DCW -5892 + DCW 19135 + DCW -16959 + DCW -5510 + DCW 2302 + DCW -5737 + DCW 11385 + DCW -1573 + DCW -2164 + DCW 6429 + DCW -2675 + DCW -985 + DCW 4265 + DCW -7959 + DCW -6018 + DCW 9066 + DCW -8060 + DCW 10597 + DCW 3355 + DCW -19718 + DCW 17835 + DCW -2671 + DCW 700 + DCW 3871 + DCW -9695 + DCW -4407 + DCW -17 + DCW 872 + DCW 5464 + DCW 9574 + DCW -16841 + DCW 9192 + DCW 75 + DCW -9293 + DCW 8702 + DCW -2285 + DCW -5301 + DCW 7460 + DCW -1518 + DCW -9922 + DCW 15097 + DCW -5896 + DCW -2294 + DCW 10790 + DCW -12266 + DCW -474 + DCW 8110 + DCW -8748 + DCW 12337 + DCW -3690 + DCW -14430 + DCW 12643 + DCW -5309 + DCW -952 + DCW 14585 + DCW -8685 + DCW -5921 + DCW 9779 + DCW -15629 + DCW 6991 + DCW 5871 + DCW -7972 + DCW 8026 + DCW 92 + DCW -5221 + DCW 3590 + DCW 734 + DCW -7267 + DCW 10287 + DCW -11838 + DCW -2654 + DCW 13671 + DCW -7804 + DCW 3787 + DCW 14581 + DCW -15621 + DCW -5036 + DCW 8802 + DCW -14556 + DCW 10022 + DCW 4579 + DCW -6739 + DCW 7842 + DCW -4890 + DCW -4282 + DCW 13738 + DCW -9037 + DCW -1648 + DCW 7246 + DCW -15206 + DCW 4118 + DCW 11834 + DCW -7339 + DCW 5590 + DCW 6580 + DCW -19445 + DCW 8328 + DCW -4399 + DCW -1124 + DCW 9020 + DCW -12375 + DCW 6349 + DCW 3636 + DCW -2143 + DCW 2462 + DCW 10123 + DCW -14652 + DCW 1048 + DCW 7267 + DCW -18418 + DCW 11847 + DCW 2994 + DCW -3564 + DCW 13461 + DCW -6991 + DCW -6223 + DCW 2852 + DCW -6726 + DCW 6890 + DCW 4227 + DCW -12090 + DCW 2185 + DCW 8584 + DCW -10190 + DCW 11272 + DCW 2722 + DCW -16896 + DCW 9867 + DCW -923 + DCW 1044 + DCW 3908 + DCW -6596 + DCW -696 + DCW 5242 + DCW -5259 + DCW 2059 + DCW 5456 + DCW -11436 + DCW 10786 + DCW 340 + DCW -12367 + DCW 11209 + DCW -906 + DCW -7100 + DCW 10660 + DCW -4906 + DCW -8177 + DCW 8236 + DCW -2722 + DCW 5540 + DCW 2583 + DCW -15776 + DCW 8106 + DCW 2483 + DCW -3632 + DCW 13419 + DCW -7603 + DCW -8295 + DCW 4772 + DCW -595 + DCW -2852 + DCW 6970 + DCW -3355 + DCW -4697 + DCW 8651 + DCW -9758 + DCW 2227 + DCW 6701 + DCW -7691 + DCW 9670 + DCW -5682 + DCW -11318 + DCW 12954 + DCW -4588 + DCW 2214 + DCW 10794 + DCW -13558 + DCW -6429 + DCW 5623 + DCW 1614 + DCW 1187 + DCW 7435 + DCW -8517 + DCW -1635 + DCW 4399 + DCW -8664 + DCW 10421 + DCW -2856 + DCW -3711 + DCW 11285 + DCW -9851 + DCW -6655 + DCW 9305 + DCW -1296 + DCW 1799 + DCW 7116 + DCW -13629 + DCW -1535 + DCW 7381 + DCW -1786 + DCW 7137 + DCW -5137 + DCW -8005 + DCW 8391 + DCW -2550 + DCW 1602 + DCW 8349 + DCW -11566 + DCW -3338 + DCW 7586 + DCW -3476 + DCW 449 + DCW 4940 + DCW -10282 + DCW 6039 + DCW 6588 + DCW -13260 + DCW 4755 + DCW -3598 + DCW -1698 + DCW 7590 + DCW -4311 + DCW -2646 + DCW 6726 + DCW 11377 + DCW 2868 + DCW -3170 + DCW -10601 + DCW 667 + DCW -3657 + DCW -5347 + DCW 13453 + DCW -6550 + DCW -4235 + DCW 2512 + DCW -876 + DCW 6475 + DCW 1313 + DCW -3539 + DCW -55 + DCW 2759 + DCW -12539 + DCW 7221 + DCW 3858 + DCW -8685 + DCW 18896 + DCW -8517 + DCW -10102 + DCW 11423 + DCW -7125 + DCW -1854 + DCW 9913 + DCW -9800 + DCW -3460 + DCW 9897 + DCW -5309 + DCW 7997 + DCW 1002 + DCW -13977 + DCW 9846 + DCW 1086 + DCW -14451 + DCW 8140 + DCW 1195 + DCW -4877 + DCW 11612 + DCW -6257 + DCW -205 + DCW 12903 + DCW -13080 + DCW -3149 + DCW 5863 + DCW -10387 + DCW 5070 + DCW 4064 + DCW -3019 + DCW 11398 + DCW -2994 + DCW -18292 + DCW 12899 + DCW 4303 + DCW -12534 + DCW 11712 + DCW -8081 + DCW -59 + DCW 12572 + DCW -9536 + DCW 3996 + DCW 4500 + DCW -10203 + DCW 2164 + DCW 428 + DCW -9100 + DCW 9310 + DCW 5179 + DCW -6894 + DCW 8190 + DCW -5267 + DCW -8806 + DCW 11461 + DCW -5598 + DCW -608 + DCW 6567 + DCW -9242 + DCW 3552 + DCW 6923 + DCW -3237 + DCW 3388 + DCW -5238 + DCW -7611 + DCW 6970 + DCW -3065 + DCW 2118 + DCW 6970 + DCW -3711 + DCW -1128 + DCW 1950 + DCW -4470 + DCW -1443 + DCW 4533 + DCW -2160 + DCW 579 + DCW -96 + DCW -4412 + DCW 1933 + DCW 7821 + DCW 1505 + DCW -2692 + DCW -6894 + DCW -1929 + DCW 2176 + DCW -3049 + DCW 7066 + DCW 88 + DCW -6806 + DCW 6332 + DCW -2256 + DCW -2642 + DCW 8127 + DCW -6206 + DCW -1749 + DCW 3422 + DCW -3267 + DCW -977 + DCW 2575 + DCW -650 + DCW 1002 + DCW 3154 + DCW -8781 + DCW 5619 + DCW 2642 + DCW -7095 + DCW 6437 + DCW -3804 + DCW -5284 + DCW 6320 + DCW -394 + DCW 583 + DCW 1304 + DCW -2382 + DCW 734 + DCW -658 + DCW -1518 + DCW 319 + DCW 1614 + DCW -4617 + DCW 6060 + DCW -273 + DCW -5439 + DCW 6995 + DCW -4466 + DCW 746 + DCW 4273 + DCW -9024 + DCW -130 + DCW 9737 + DCW -5204 + DCW 126 + DCW 3816 + DCW -6999 + DCW 5015 + DCW 4843 + DCW -7825 + DCW 4340 + DCW -2701 + DCW -8890 + DCW 10945 + DCW -331 + DCW 952 + DCW 3242 + DCW -6173 + DCW 612 + DCW 1652 + DCW -4651 + DCW 1317 + DCW 3359 + DCW -3862 + DCW 2692 + DCW -503 + DCW 503 + DCW 5024 + DCW -1749 + DCW -3254 + DCW -524 + DCW -7125 + DCW 1287 + DCW 9301 + DCW -1032 + DCW 205 + DCW -201 + DCW -6714 + DCW 927 + DCW 4932 + DCW -4953 + DCW 4214 + DCW -1036 + DCW -5070 + DCW 5963 + DCW -1032 + DCW -864 + DCW 3137 + DCW -3325 + DCW -977 + DCW -914 + DCW -3866 + DCW 5816 + DCW 1816 + DCW -1489 + DCW -319 + DCW 273 + DCW -2889 + DCW 977 + DCW 1749 + DCW -96 + DCW 1321 + DCW -7142 + DCW 3036 + DCW 1371 + DCW -1560 + DCW 4785 + DCW 159 + DCW -1744 + DCW 1166 + DCW -5883 + DCW -4483 + DCW 9624 + DCW 1602 + DCW -3711 + DCW 2801 + DCW -2369 + DCW -2051 + DCW 4529 + DCW -1879 + DCW -4 + DCW -1522 + DCW -3632 + DCW 2621 + DCW 3497 + DCW -688 + DCW -285 + DCW -608 + DCW -3439 + DCW 2839 + DCW -2919 + DCW 1640 + DCW 3443 + DCW -3820 + DCW 1233 + DCW -1820 + DCW -2499 + DCW 6131 + DCW -419 + DCW -3443 + DCW 5108 + DCW -4315 + DCW -3804 + DCW 7871 + DCW -839 + DCW -5049 + DCW 4927 + DCW -7225 + DCW -512 + DCW 8769 + DCW -4835 + DCW 2143 + DCW 738 + DCW -3854 + DCW 2000 + DCW 1220 + DCW -4391 + DCW 1799 + DCW 2013 + DCW -1967 + DCW 1384 + DCW -985 + DCW -168 + DCW 3749 + DCW -650 + DCW -2826 + DCW 1199 + DCW -3606 + DCW 2348 + DCW 1359 + DCW -1858 + DCW 2705 + DCW -1740 + DCW 671 + DCW 3120 + DCW -4684 + DCW -3204 + DCW 4286 + DCW -2860 + DCW 1589 + DCW 5192 + DCW -3728 + DCW 1090 + DCW 1531 + DCW -6810 + DCW 2407 + DCW 3028 + DCW -3925 + DCW 3003 + DCW 1313 + DCW -2948 + DCW -210 + DCW 147 + DCW 3133 + DCW 3736 + DCW -4437 + DCW -2847 + DCW -2671 + DCW -625 + DCW 1279 + DCW 3187 + DCW 1283 + DCW -1132 + DCW 277 + DCW -1287 + DCW 4730 + DCW -2613 + DCW 600 + DCW 1199 + DCW -3082 + DCW -3766 + DCW -4399 + DCW 4458 + DCW 6756 + DCW 4529 + DCW -1082 + DCW 59 + DCW -6626 + DCW -8194 + DCW 3929 + DCW 4508 + DCW -3200 + DCW 554 + DCW 1367 + DCW 1170 + DCW 3892 + DCW 990 + DCW -1774 + DCW -5942 + DCW -4038 + DCW -1799 + DCW 5468 + DCW 4600 + DCW 3229 + DCW 1355 + DCW -985 + DCW -948 + DCW -7041 + DCW -2088 + DCW 860 + DCW -3770 + DCW 2223 + DCW 5548 + DCW -818 + DCW 6651 + DCW -495 + DCW -6647 + DCW 524 + DCW -5368 + DCW -2399 + DCW 5745 + DCW 122 + DCW -218 + DCW 6303 + DCW 679 + DCW -29 + DCW -1183 + DCW -6156 + DCW -3619 + DCW 1027 + DCW -600 + DCW 2801 + DCW 2877 + DCW 969 + DCW 6403 + DCW -985 + DCW -4223 + DCW -3896 + DCW -5246 + DCW 491 + DCW 3904 + DCW 453 + DCW 1099 + DCW 2852 + DCW 746 + DCW 1526 + DCW -201 + DCW -5770 + DCW -2143 + DCW -1426 + DCW -1245 + DCW 7599 + DCW -2600 + DCW -1690 + DCW 6517 + DCW -2696 + DCW 2088 + DCW 2554 + DCW -8953 + DCW 2692 + DCW 465 + DCW -9578 + DCW 6680 + DCW 5804 + DCW -1212 + DCW 2118 + DCW 2533 + DCW -7024 + DCW -1782 + DCW 3342 + DCW -3728 + DCW -168 + DCW -2466 + DCW 889 + DCW 1204 + DCW 2843 + DCW 7284 + DCW -1443 + DCW -5313 + DCW -608 + DCW -3875 + DCW -2927 + DCW 5896 + DCW 1174 + DCW -797 + DCW 2587 + DCW -1577 + DCW -1858 + DCW 1744 + DCW 1715 + DCW 1250 + DCW -3355 + DCW -5510 + DCW -818 + DCW 2365 + DCW 1413 + DCW 7393 + DCW 1279 + DCW -9981 + DCW 1002 + DCW 595 + DCW -4630 + DCW 2705 + DCW 3258 + DCW -1132 + DCW 4785 + DCW 4667 + DCW -2034 + DCW -2478 + DCW -2390 + DCW -1287 + DCW -5678 + DCW -6383 + DCW 4881 + DCW 5036 + DCW 717 + DCW 8207 + DCW -285 + DCW -6110 + DCW -1778 + DCW -2290 + DCW -738 + DCW -369 + DCW 977 + DCW 939 + DCW -520 + DCW 1468 + DCW 7355 + DCW -990 + DCW -4013 + DCW -197 + DCW -6957 + DCW -2638 + DCW 4168 + DCW 2638 + DCW 164 + DCW 3174 + DCW 2650 + DCW -2730 + DCW -155 + DCW -356 + DCW -981 + DCW -3300 + DCW -3128 + DCW 2940 + DCW -2650 + DCW 3137 + DCW 8282 + DCW 1216 + DCW -2994 + DCW -4462 + DCW -3296 + DCW -1103 + DCW 554 + DCW 55 + DCW 3107 + DCW -2717 + DCW 507 + DCW 2822 + DCW 2235 + DCW 3451 + DCW -3195 + DCW -2772 + DCW -2914 + DCW 411 + DCW -113 + DCW 1879 + DCW -927 + DCW -2504 + DCW 5301 + DCW 1958 + DCW -3145 + DCW -1929 + DCW -3422 + DCW -1526 + DCW 3984 + DCW -361 + DCW 742 + DCW 1325 + DCW -42 + DCW -8 + DCW 1480 + DCW -1757 + DCW -3263 + DCW 2218 + DCW -621 + DCW 994 + DCW 1933 + DCW -3418 + DCW -235 + DCW 3267 + DCW -3468 + DCW 147 + DCW -138 + DCW 256 + DCW -889 + DCW -3409 + DCW 6869 + DCW -4101 + DCW -3254 + DCW 7984 + DCW -2852 + DCW 185 + DCW 3242 + DCW -3208 + DCW -1703 + DCW -1933 + DCW 3489 + DCW -71 + DCW -1099 + DCW 3548 + DCW 1065 + DCW -4722 + DCW -1535 + DCW 4843 + DCW -1929 + DCW -1396 + DCW -1157 + DCW -994 + DCW -2126 + DCW 6257 + DCW 3271 + DCW -3162 + DCW 499 + DCW -1434 + DCW -1715 + DCW -38 + DCW 2315 + DCW -3258 + DCW 1002 + DCW -784 + DCW 2696 + DCW -453 + DCW -2545 + DCW 3745 + DCW -721 + DCW -1325 + DCW -2839 + DCW -2617 + DCW -2046 + DCW 5842 + DCW 5183 + DCW -717 + DCW -3036 + DCW 554 + DCW -1292 + DCW 1732 + DCW 1371 + DCW -2973 + DCW -2017 + DCW -2025 + DCW 7041 + DCW -415 + DCW -126 + DCW -59 + DCW 411 + DCW -1430 + DCW -3254 + DCW 1128 + DCW -2181 + DCW 1602 + DCW 3212 + DCW 1581 + DCW -3162 + DCW 2332 + DCW -512 + DCW 356 + DCW -1346 + DCW -5774 + DCW 386 + DCW 2407 + DCW 6131 + DCW 1812 + DCW 633 + DCW -3070 + DCW -2776 + DCW -3778 + DCW -1334 + DCW -717 + DCW 411 + DCW 4428 + DCW -361 + DCW 3887 + DCW -751 + DCW -2302 + DCW -1568 + DCW -1904 + DCW -1958 + DCW -860 + DCW 7414 + DCW 5292 + DCW -486 + DCW -675 + DCW -3657 + DCW -5657 + DCW -1770 + DCW -130 + DCW 3091 + DCW -1338 + DCW 2193 + DCW 6651 + DCW -1128 + DCW -2348 + DCW -3762 + DCW -461 + DCW -1044 + DCW -2365 + DCW 2361 + DCW 2881 + DCW 872 + DCW 2357 + DCW 876 + DCW -1652 + DCW -604 + DCW -7410 + DCW -2302 + DCW 4806 + DCW 2906 + DCW 486 + DCW 365 + DCW 4105 + DCW -352 + DCW -2034 + DCW -4013 + DCW -2281 + DCW -1577 + DCW -432 + DCW 4453 + DCW 1816 + DCW 2776 + DCW -1497 + DCW -1019 + DCW 193 + DCW -4399 + DCW 264 + DCW 579 + DCW -264 + DCW 2797 + DCW -742 + DCW 1560 + DCW 2910 + DCW -1426 + DCW -377 + DCW -3602 + DCW -2277 + DCW 138 + DCW -25 + DCW 1874 + DCW 1984 + DCW -881 + DCW 520 + DCW 1522 + DCW -1539 + DCW -797 + DCW -4269 + DCW 2663 + DCW 1598 + DCW -4139 + DCW -113 + DCW 2868 + DCW 3372 + DCW -1631 + DCW 1346 + DCW -3644 + DCW -3493 + DCW 2013 + DCW 3003 + DCW -2931 + DCW -5804 + DCW 10756 + DCW 7867 + DCW -9918 + DCW -11847 + DCW 11561 + DCW 11998 + DCW -9326 + DCW -6689 + DCW -2130 + DCW 4533 + DCW 5103 + DCW -3485 + DCW -1967 + DCW 1619 + DCW 1598 + DCW -3661 + DCW -3837 + DCW 7628 + DCW 2747 + DCW -3304 + DCW -1170 + DCW -4005 + DCW 1682 + DCW 5418 + DCW 633 + DCW -5531 + DCW -675 + DCW 419 + DCW 541 + DCW 2583 + DCW -3091 + DCW 3497 + DCW 2130 + DCW -1468 + DCW -4588 + DCW -5171 + DCW 8068 + DCW 2537 + DCW -2004 + DCW 1258 + DCW -3560 + DCW -4156 + DCW 2529 + DCW 6248 + DCW -201 + DCW 575 + DCW -4609 + DCW -306 + DCW -11905 + DCW -18430 + DCW 32767 + DCW 20728 + DCW -32768 + DCW -20229 + DCW 32767 + DCW 32767 + DCW -32768 + DCW -32768 + DCW 24939 + DCW 32767 + DCW 2868 + DCW -32768 + DCW 2332 + DCW 27904 + DCW -3300 + DCW 1992 + DCW -28763 + DCW -814 + DCW 32767 + DCW -7783 + DCW -13818 + DCW -9687 + DCW 5577 + DCW 21085 + DCW 16497 + DCW -28214 + DCW -32768 + DCW 32767 + DCW 13461 + DCW -28419 + DCW 4680 + DCW -11377 + DCW 15801 + DCW 9599 + DCW -7498 + DCW -19806 + DCW 8630 + DCW 24482 + DCW -32768 + DCW 10480 + DCW 12832 + DCW -17944 + DCW 13901 + DCW -2432 + DCW -1770 + DCW -8442 + DCW 13033 + DCW -2365 + DCW -20338 + DCW 32767 + DCW -13822 + DCW -16325 + DCW 11914 + DCW -10350 + DCW 12300 + DCW -340 + DCW 0 + DCW -13163 + DCW 7502 + DCW 10727 + DCW -19743 + DCW 24033 + DCW -11251 + DCW -16602 + DCW 18133 + DCW -2696 + DCW -1229 + DCW -7305 + DCW 8169 + DCW 2826 + DCW -780 + DCW 1308 + DCW -18565 + DCW 10362 + DCW 7502 + DCW -3112 + DCW 2495 + DCW -8001 + DCW -923 + DCW 2332 + DCW 12736 + DCW -4064 + DCW -11415 + DCW 9477 + DCW -8307 + DCW 67 + DCW 7418 + DCW -2575 + DCW 1111 + DCW -654 + DCW 2285 + DCW -11792 + DCW 9645 + DCW 6890 + DCW -16833 + DCW 16204 + DCW -7028 + DCW -10844 + DCW 11427 + DCW -2298 + DCW 3694 + DCW -851 + DCW 3917 + DCW -11528 + DCW -143 + DCW 16699 + DCW -17671 + DCW 9817 + DCW 1677 + DCW -12291 + DCW 9867 + DCW -3258 + DCW 3409 + DCW -2961 + DCW 3753 + DCW -3606 + DCW -5686 + DCW 7519 + DCW -9435 + DCW 12069 + DCW 3103 + DCW -10249 + DCW 1241 + DCW 2818 + DCW 507 + DCW -5254 + DCW 7301 + DCW -9549 + DCW 226 + DCW 10303 + DCW -7255 + DCW 5464 + DCW -520 + DCW -2415 + DCW -210 + DCW 994 + DCW -5716 + DCW -2747 + DCW 16208 + DCW -8362 + DCW -4093 + DCW 12476 + DCW -9712 + DCW -5053 + DCW 5066 + DCW -2508 + DCW 3183 + DCW 1799 + DCW -3946 + DCW -3187 + DCW 8156 + DCW 4890 + DCW -12107 + DCW 7573 + DCW -8454 + DCW -2873 + DCW 16183 + DCW -7712 + DCW 3279 + DCW -7267 + DCW 3200 + DCW 3493 + DCW -4751 + DCW 10433 + DCW -17671 + DCW 3409 + DCW 9003 + DCW -4625 + DCW 5665 + DCW -5368 + DCW 2269 + DCW -3393 + DCW 2558 + DCW 75 + DCW -6974 + DCW 8567 + DCW -5137 + DCW 579 + DCW 5795 + DCW -4047 + DCW -491 + DCW 2998 + DCW -3221 + DCW -3590 + DCW 6693 + DCW -5007 + DCW -3963 + DCW 8140 + DCW 2080 + DCW -5561 + DCW 2214 + DCW 730 + DCW -6898 + DCW 8722 + DCW 164 + DCW -5598 + DCW 5963 + DCW -3082 + DCW -4856 + DCW 3409 + DCW 2881 + DCW -1925 + DCW -323 + DCW -1497 + DCW -1858 + DCW 235 + DCW 4525 + DCW 264 + DCW -2831 + DCW 1929 + DCW -6831 + DCW 5867 + DCW 3304 + DCW -2822 + DCW 3535 + DCW -7204 + DCW 3162 + DCW -1552 + DCW 524 + DCW 1124 + DCW -4206 + DCW 8454 + DCW -4336 + DCW -1355 + DCW -159 + DCW -2831 + DCW 3980 + DCW 415 + DCW 1673 + DCW -5330 + DCW 2218 + DCW 1891 + DCW -3309 + DCW 6198 + DCW -4114 + DCW -2273 + DCW 3145 + DCW -6529 + DCW 4424 + DCW 12178 + DCW -13168 + DCW -5108 + DCW 13901 + DCW -6974 + DCW -612 + DCW -193 + DCW -7318 + DCW 9721 + DCW 1610 + DCW -8068 + DCW 445 + DCW 8387 + DCW -2910 + DCW -7272 + DCW 6622 + DCW -1598 + DCW -424 + DCW 3057 + DCW -7494 + DCW 1208 + DCW 8026 + DCW -1568 + DCW -3414 + DCW 2885 + DCW -4235 + DCW -3443 + DCW 6261 + DCW 981 + DCW -4336 + DCW 3732 + DCW 4453 + DCW -7104 + DCW 164 + DCW 3430 + DCW -3770 + DCW 4114 + DCW 3992 + DCW -8462 + DCW -1493 + DCW 3824 + DCW -5691 + DCW 6311 + DCW 1237 + DCW -10249 + DCW 3145 + DCW 4827 + DCW 3099 + DCW -2223 + DCW 3296 + DCW 1199 + DCW -6445 + DCW 4168 + DCW -5875 + DCW 663 + DCW 7351 + DCW -6156 + DCW 205 + DCW 3837 + DCW -4307 + DCW -7414 + DCW 7171 + DCW 3363 + DCW -6848 + DCW 5200 + DCW -2114 + DCW -2504 + DCW 6055 + DCW -2130 + DCW -2046 + DCW 2940 + DCW 587 + DCW -3606 + DCW 1484 + DCW 528 + DCW -516 + DCW 2478 + DCW -973 + DCW -1241 + DCW -2789 + DCW -918 + DCW -247 + DCW 5095 + DCW 1690 + DCW -7624 + DCW 956 + DCW 4013 + DCW -2273 + DCW 176 + DCW 3632 + DCW -2537 + DCW 1942 + DCW -1233 + DCW -3858 + DCW 4546 + DCW -361 + DCW -1455 + DCW -256 + DCW 1174 + DCW -2759 + DCW -2168 + DCW 6089 + DCW 994 + DCW -1795 + DCW -839 + DCW -3544 + DCW -1078 + DCW 6169 + DCW 1036 + DCW -4286 + DCW 2537 + DCW -256 + DCW 470 + DCW 3179 + DCW -2894 + DCW -3866 + DCW 688 + DCW 876 + DCW -923 + DCW 3221 + DCW -335 + DCW -1141 + DCW 1845 + DCW -243 + DCW -2407 + DCW -3263 + DCW 763 + DCW 470 + DCW 3439 + DCW 2453 + DCW -4617 + DCW 2705 + DCW 2206 + DCW -2797 + DCW 403 + DCW -3904 + DCW 168 + DCW 1086 + DCW 2160 + DCW 2118 + DCW -6093 + DCW 3107 + DCW -1002 + DCW -155 + DCW 5171 + DCW -5997 + DCW -2914 + DCW 2499 + DCW 4575 + DCW 13 + DCW 2285 + DCW -5041 + DCW -5196 + DCW 10111 + DCW -3061 + DCW -1648 + DCW -1300 + DCW 3967 + DCW 3690 + DCW -9406 + DCW 1300 + DCW 281 + DCW 7439 + DCW -4105 + DCW -4399 + DCW 1887 + DCW -3359 + DCW 6483 + DCW -6194 + DCW 8068 + DCW -2088 + DCW -4311 + DCW 4068 + DCW -10182 + DCW 9482 + DCW -830 + DCW -1770 + DCW 2487 + DCW 512 + DCW -3216 + DCW 474 + DCW 7590 + DCW -7913 + DCW 5137 + DCW -4139 + DCW -4860 + DCW 5183 + DCW 2013 + DCW -981 + DCW -1522 + DCW 5171 + DCW -7573 + DCW 4898 + DCW -13 + DCW -2466 + DCW -969 + DCW -1271 + DCW 6911 + DCW -5883 + DCW 5477 + DCW -4395 + DCW 1963 + DCW -356 + DCW -1791 + DCW -134 + DCW -7687 + DCW 14149 + DCW -8819 + DCW 8026 + DCW -348 + DCW -8546 + DCW 7561 + DCW -6986 + DCW 4474 + DCW -7045 + DCW 10513 + DCW -4831 + DCW -2923 + DCW 10643 + DCW -12929 + DCW 10001 + DCW -5703 + DCW -751 + DCW 4298 + DCW -5259 + DCW 2017 + DCW -6110 + DCW 11582 + DCW -3661 + DCW 84 + DCW 3284 + DCW -7884 + DCW 3862 + DCW -6936 + DCW 9171 + DCW -2520 + DCW 855 + DCW 3749 + DCW -7511 + DCW 5372 + DCW -5628 + DCW 4399 + DCW -2579 + DCW 3263 + DCW -1891 + DCW -3996 + DCW 4982 + DCW -7020 + DCW 8072 + DCW -2273 + DCW -2193 + DCW 1011 + DCW 461 + DCW 788 + DCW -2986 + DCW 5686 + DCW -2562 + DCW 164 + DCW -3812 + DCW 692 + DCW 6152 + DCW -4558 + DCW 4043 + DCW -2789 + DCW -2604 + DCW -1887 + DCW 2013 + DCW 3317 + DCW -4235 + DCW 8400 + DCW -6315 + DCW -3225 + DCW 205 + DCW 4277 + DCW 5514 + DCW -6336 + DCW 5774 + DCW -10211 + DCW 700 + DCW 4969 + DCW -3141 + DCW 4567 + DCW 4 + DCW 2998 + DCW -8148 + DCW 1355 + DCW 197 + DCW -948 + DCW 5900 + DCW -4353 + DCW 2894 + DCW -4445 + DCW -474 + DCW 315 + DCW 6039 + DCW -1858 + DCW -10618 + DCW 15231 + DCW -10131 + DCW -2294 + DCW 9913 + DCW -3502 + DCW 428 + DCW -3564 + DCW 4999 + DCW -4349 + DCW -277 + DCW 3388 + DCW -914 + DCW 155 + DCW 323 + DCW 315 + DCW -5984 + DCW 5984 + DCW 113 + DCW -1598 + DCW 4064 + DCW -7729 + DCW 705 + DCW 3745 + DCW -2629 + DCW 2340 + DCW 3237 + DCW -5896 + DCW -1631 + DCW 6680 + DCW -7251 + DCW 3036 + DCW 9507 + DCW -797 + DCW -10790 + DCW -6181 + DCW 14258 + DCW -11985 + DCW 3984 + DCW 15206 + DCW -15042 + DCW 629 + DCW -394 + DCW -3007 + DCW 10706 + DCW -1032 + DCW -5770 + DCW 7771 + DCW -12237 + DCW 243 + DCW 9762 + DCW -7322 + DCW 12723 + DCW -10756 + DCW -4248 + DCW 8026 + DCW -7297 + DCW 9310 + DCW -3757 + DCW -2030 + DCW 4776 + DCW -6643 + DCW -3024 + DCW 11901 + DCW -939 + DCW -9557 + DCW 7905 + DCW -7901 + DCW 6110 + DCW 1732 + DCW -7561 + DCW 8567 + DCW -9435 + DCW 3594 + DCW 5108 + DCW -3355 + DCW 2185 + DCW -3367 + DCW -3128 + DCW 5519 + DCW 105 + DCW -3544 + DCW 6827 + DCW -9813 + DCW 2948 + DCW 7674 + DCW -10136 + DCW 7871 + DCW 340 + DCW -9062 + DCW 2680 + DCW 3892 + DCW -960 + DCW 2873 + DCW 143 + DCW -5171 + DCW 2353 + DCW -4860 + DCW 3866 + DCW 3460 + DCW -2906 + DCW 1812 + DCW -8345 + DCW 6492 + DCW 2680 + DCW -1631 + DCW 3753 + DCW -7330 + DCW -1078 + DCW 5590 + DCW -2181 + DCW -4441 + DCW 7523 + DCW -4919 + DCW 96 + DCW 6177 + DCW -3787 + DCW 2223 + DCW -5951 + DCW 2877 + DCW 2038 + DCW -3787 + DCW 3984 + DCW -2504 + DCW 352 + DCW 2025 + DCW -4944 + DCW 2969 + DCW 3824 + DCW -7942 + DCW 3007 + DCW 147 + DCW -4357 + DCW 9754 + DCW -46 + DCW -5456 + DCW 2231 + DCW -4089 + DCW -440 + DCW 8844 + DCW -4378 + DCW -1640 + DCW -1262 + DCW -3850 + DCW 10320 + DCW -5435 + DCW -1388 + DCW 5393 + DCW -11218 + DCW 6777 + DCW 7532 + DCW -9385 + DCW 2881 + DCW 2743 + DCW -6529 + DCW 3309 + DCW 1904 + DCW -688 + DCW 533 + DCW -4047 + DCW 2290 + DCW -2399 + DCW 3418 + DCW 985 + DCW -4479 + DCW 8806 + DCW -11662 + DCW -1329 + DCW 10907 + DCW -5733 + DCW 155 + DCW 1724 + DCW -1069 + DCW -4298 + DCW 8177 + DCW -767 + DCW -7112 + DCW 8026 + DCW -4349 + DCW -562 + DCW 2843 + DCW -1124 + DCW -654 + DCW -2231 + DCW 4365 + DCW -746 + DCW -1296 + DCW 1833 + DCW -5305 + DCW 4416 + DCW 4126 + DCW -7611 + DCW 4583 + DCW 415 + DCW -5649 + DCW 4001 + DCW -138 + DCW -1791 + DCW 3028 + DCW -1614 + DCW -1728 + DCW 3200 + DCW -218 + DCW 881 + DCW -671 + DCW -1027 + DCW -973 + DCW -2449 + DCW 4994 + DCW -356 + DCW -4256 + DCW 4932 + DCW -2759 + DCW -1623 + DCW 4437 + DCW -5103 + DCW 2625 + DCW 3116 + DCW -4739 + DCW 1535 + DCW 3946 + DCW -4932 + DCW -2164 + DCW 5292 + DCW -1157 + DCW 2239 + DCW -2239 + DCW -2462 + DCW 2193 + DCW -3032 + DCW 3485 + DCW -3036 + DCW 2671 + DCW 2088 + DCW -9645 + DCW 9477 + DCW -92 + DCW -4760 + DCW 6039 + DCW -4856 + DCW -2365 + DCW 4424 + DCW 595 + DCW -3917 + DCW 6320 + DCW -2000 + DCW -7758 + DCW 7649 + DCW -1120 + DCW -2713 + DCW 3028 + DCW 256 + DCW -1749 + DCW -2059 + DCW 2885 + DCW -1074 + DCW -1103 + DCW 3778 + DCW -2248 + DCW 742 + DCW 449 + DCW -3351 + DCW 2839 + DCW 1107 + DCW -2768 + DCW -818 + DCW 3061 + DCW -3351 + DCW -1023 + DCW 4563 + DCW -2302 + DCW 457 + DCW -218 + DCW -1313 + DCW 939 + DCW 1178 + DCW 700 + DCW -2831 + DCW 2743 + DCW -432 + DCW -4655 + DCW 6722 + DCW -902 + DCW -3632 + DCW 4139 + DCW -2344 + DCW -1543 + DCW 1409 + DCW 331 + DCW -835 + DCW 2290 + DCW -2441 + DCW -2789 + DCW 5510 + DCW -1187 + DCW -927 + DCW 562 + DCW 952 + DCW 495 + DCW -3313 + DCW 4915 + DCW -2378 + DCW -2504 + DCW 3728 + DCW -4835 + DCW 5967 + DCW -436 + DCW -5653 + DCW 3682 + DCW -1455 + DCW 256 + DCW -377 + DCW 2680 + DCW -730 + DCW -3590 + DCW 2759 + DCW 554 + DCW 17 + DCW 294 + DCW -545 + DCW -1744 + DCW 1279 + DCW 340 + DCW -1300 + DCW 4441 + DCW -3095 + DCW -4902 + DCW 4604 + DCW -398 + DCW -671 + DCW 1627 + DCW -2046 + DCW -29 + DCW 608 + DCW -587 + DCW 2843 + DCW 1329 + DCW -2353 + DCW 457 + DCW 449 + DCW 1975 + DCW -4072 + DCW -5510 + DCW 3602 + DCW -637 + DCW 2663 + DCW 3661 + DCW -4101 + DCW 3866 + DCW 80 + DCW -5636 + DCW 3007 + DCW -1610 + DCW -3380 + DCW 914 + DCW 1602 + DCW 3158 + DCW 1036 + DCW 130 + DCW -2747 + DCW -1782 + DCW 2931 + DCW -2302 + DCW -3225 + DCW 5179 + DCW 1262 + DCW -5095 + DCW 5888 + DCW -637 + DCW -3183 + DCW 4621 + DCW -8387 + DCW 5795 + DCW 2084 + DCW -9964 + DCW 7125 + DCW 759 + DCW -1019 + DCW 839 + DCW 419 + DCW -352 + DCW -2646 + DCW -851 + DCW -75 + DCW 9880 + DCW -3363 + DCW -12191 + DCW 6395 + DCW 8391 + DCW -2688 + DCW -5238 + DCW 2759 + DCW -1484 + DCW -1023 + DCW 231 + DCW -5363 + DCW 11046 + DCW 1778 + DCW -10635 + DCW 6047 + DCW 847 + DCW -3615 + DCW 2042 + DCW -2684 + DCW 969 + DCW 3883 + DCW -7364 + DCW 1090 + DCW 10924 + DCW -8244 + DCW -1015 + DCW 6550 + DCW -7812 + DCW 3749 + DCW -4 + DCW -5594 + DCW 8777 + DCW -1111 + DCW -6475 + DCW 5674 + DCW 1011 + DCW -6223 + DCW 3082 + DCW 1904 + DCW -3653 + DCW 2214 + DCW -1812 + DCW -2323 + DCW 6437 + DCW -503 + DCW -4663 + DCW 6940 + DCW -1614 + DCW -8697 + DCW 7523 + DCW 1241 + DCW -3946 + DCW 4416 + DCW -4256 + DCW 143 + DCW 4449 + DCW -4906 + DCW 3556 + DCW 1967 + DCW -7666 + DCW 1187 + DCW 1359 + DCW 516 + DCW 3544 + DCW -3900 + DCW 143 + DCW 4034 + DCW -4709 + DCW -1405 + DCW 6370 + DCW -1048 + DCW -5233 + DCW 2302 + DCW 600 + DCW -759 + DCW -470 + DCW -2818 + DCW 4047 + DCW 2185 + DCW -5225 + DCW 1656 + DCW 4177 + DCW -5556 + DCW 952 + DCW 5825 + DCW -2814 + DCW 2722 + DCW -1535 + DCW -5493 + DCW 5200 + DCW -2407 + DCW -4571 + DCW 6181 + DCW -868 + DCW -4521 + DCW 3736 + DCW 1283 + DCW 449 + DCW 1837 + DCW -5011 + DCW -1770 + DCW 3879 + DCW -2952 + DCW 587 + DCW 6697 + DCW -3330 + DCW -2541 + DCW 3137 + DCW -1958 + DCW -629 + DCW 872 + DCW -1795 + DCW 1967 + DCW 2462 + DCW -3154 + DCW 1002 + DCW 1887 + DCW -4579 + DCW -558 + DCW 1300 + DCW 126 + DCW 893 + DCW -1124 + DCW 1573 + DCW 3837 + DCW -1434 + DCW -1929 + DCW 2097 + DCW -4525 + DCW -3154 + DCW 3632 + DCW -365 + DCW 3674 + DCW 176 + DCW -4936 + DCW 4173 + DCW 621 + DCW -5108 + DCW 738 + DCW 1292 + DCW -2432 + DCW 3007 + DCW 3212 + DCW -1095 + DCW 1078 + DCW -3351 + DCW -3095 + DCW 2810 + DCW -247 + DCW -3019 + DCW 2470 + DCW 2319 + DCW -1086 + DCW 2671 + DCW -545 + DCW -2860 + DCW -533 + DCW -2931 + DCW 2478 + DCW 4344 + DCW -3703 + DCW 700 + DCW 2445 + DCW -2738 + DCW 1975 + DCW 256 + DCW -2394 + DCW 1334 + DCW -3422 + DCW -763 + DCW 7389 + DCW -973 + DCW -4424 + DCW 2302 + DCW -470 + DCW -725 + DCW 1048 + DCW -1744 + DCW 1522 + DCW 1325 + DCW -3317 + DCW 784 + DCW 3636 + DCW -3296 + DCW -797 + DCW 3988 + DCW -2269 + DCW -1229 + DCW 533 + DCW -247 + DCW 1988 + DCW 239 + DCW -1229 + DCW 1132 + DCW -566 + DCW -3040 + DCW 1652 + DCW 1153 + DCW -562 + DCW 801 + DCW -1430 + DCW -17 + DCW 1069 + DCW -1581 + DCW 1518 + DCW 2097 + DCW -4877 + DCW 365 + DCW 3674 + DCW -3871 + DCW 2424 + DCW 2701 + DCW -4198 + DCW 1342 + DCW -365 + DCW -839 + DCW 4047 + DCW -315 + DCW -2914 + DCW 839 + DCW 302 + DCW -1505 + DCW 1296 + DCW -956 + DCW 1095 + DCW 956 + DCW -3573 + DCW 3715 + DCW 1963 + DCW -4915 + DCW 55 + DCW 2550 + DCW -361 + DCW 1023 + DCW 277 + DCW -2764 + DCW 1048 + DCW 67 + DCW -2277 + DCW 2575 + DCW 432 + DCW -2214 + DCW 935 + DCW 1078 + DCW 591 + DCW 931 + DCW -2051 + DCW -2545 + DCW 1740 + DCW -134 + DCW -63 + DCW 1849 + DCW -889 + DCW -50 + DCW 1220 + DCW 394 + DCW -935 + DCW -2407 + DCW -352 + DCW 2864 + DCW -868 + DCW -1409 + DCW 2264 + DCW -663 + DCW -1405 + DCW 1082 + DCW 843 + DCW 13 + DCW -1002 + DCW -2260 + DCW 876 + DCW 3443 + DCW -1988 + DCW 784 + DCW 3405 + DCW -6202 + DCW 17 + DCW 4508 + DCW -897 + DCW -1539 + DCW -5326 + DCW 4332 + DCW 8202 + DCW -6546 + DCW -6546 + DCW 8232 + DCW 2722 + DCW -9133 + DCW 218 + DCW 6705 + DCW 3430 + DCW -7125 + DCW -4760 + DCW 8974 + DCW 1728 + DCW -8756 + DCW 298 + DCW 8421 + DCW -2696 + DCW -6311 + DCW 1262 + DCW 8198 + DCW 1514 + DCW -14044 + DCW 1686 + DCW 11629 + DCW -5586 + DCW -5133 + DCW 5934 + DCW 2281 + DCW -4558 + DCW -721 + DCW 814 + DCW 4240 + DCW -2596 + DCW -8869 + DCW 9314 + DCW 3233 + DCW -5301 + DCW 3720 + DCW -2998 + DCW -2524 + DCW 5288 + DCW -1996 + DCW -6399 + DCW 7754 + DCW 3896 + DCW -11062 + DCW -147 + DCW 9129 + DCW 411 + DCW -8366 + DCW -1732 + DCW 9519 + DCW 1329 + DCW -10706 + DCW 2206 + DCW 10576 + DCW -5967 + DCW -7901 + DCW 5527 + DCW 8257 + DCW -5875 + DCW -11293 + DCW 7301 + DCW 13830 + DCW -5691 + DCW -13721 + DCW 9804 + DCW 6299 + DCW -13285 + DCW 889 + DCW 9712 + DCW 3057 + DCW -10052 + DCW -8538 + DCW 14304 + DCW 6072 + DCW -15168 + DCW 1648 + DCW 10446 + DCW -5259 + DCW -7716 + DCW 1275 + DCW 12547 + DCW -713 + DCW -14879 + DCW 3892 + DCW 10626 + DCW -3187 + DCW -7028 + DCW 2948 + DCW 6932 + DCW -6886 + DCW -8052 + DCW 9364 + DCW 7871 + DCW -8240 + DCW -6445 + DCW 6684 + DCW 5301 + DCW -5967 + DCW -4290 + DCW 7330 + DCW 755 + DCW -8832 + DCW 1459 + DCW 7984 + DCW 2134 + DCW -7871 + DCW -2931 + DCW 9473 + DCW -2038 + DCW -7137 + DCW 5204 + DCW 2466 + DCW -3489 + DCW -2789 + DCW 864 + DCW 8655 + DCW -1447 + DCW -11595 + DCW 6273 + DCW 5997 + DCW -8588 + DCW 382 + DCW 5573 + DCW -755 + DCW -5590 + DCW -1069 + DCW 7787 + DCW 1438 + DCW -6789 + DCW -990 + DCW 5447 + DCW 1199 + DCW -6085 + DCW -361 + DCW 6584 + DCW -2139 + DCW -4705 + DCW 3883 + DCW 2550 + DCW -3107 + DCW -3405 + DCW 1489 + DCW 6626 + DCW -4001 + DCW -5535 + DCW 6718 + DCW 1556 + DCW -3221 + DCW -1942 + DCW 2273 + DCW 4760 + DCW -6034 + DCW -4760 + DCW 8379 + DCW 1380 + DCW -6731 + DCW 2583 + DCW 2160 + DCW -1468 + DCW -1300 + DCW -952 + DCW 4932 + DCW -751 + DCW -7347 + DCW 2210 + DCW 7498 + DCW -1048 + DCW -6487 + DCW 176 + DCW 5858 + DCW -1820 + DCW -4076 + DCW 3460 + DCW 2185 + DCW -4051 + DCW -4269 + DCW 6148 + DCW 5959 + DCW -5774 + DCW -4340 + DCW 4282 + DCW 914 + DCW -3304 + DCW 612 + DCW 1254 + DCW 2420 + DCW -5561 + DCW -1103 + DCW 7884 + DCW -1833 + DCW -3065 + DCW -835 + DCW 1111 + DCW 1061 + DCW -1585 + DCW -193 + DCW 4495 + DCW -2545 + DCW -4948 + DCW 5489 + DCW 1929 + DCW -2424 + DCW -1988 + DCW 239 + DCW 3082 + DCW -814 + DCW -2608 + DCW 4240 + DCW -1082 + DCW -4403 + DCW 2596 + DCW 1895 + DCW 948 + DCW -3523 + DCW -1719 + DCW 4198 + DCW 17 + DCW -1313 + DCW 1493 + DCW 361 + DCW -1417 + DCW -4017 + DCW 2273 + DCW 5271 + DCW -3233 + DCW -3921 + DCW 1912 + DCW 2487 + DCW -931 + DCW -2164 + DCW 1614 + DCW 2885 + DCW -5477 + DCW -734 + DCW 5917 + DCW -973 + DCW -3837 + DCW 554 + DCW 1631 + DCW 2000 + DCW -2235 + DCW -1908 + DCW 4772 + DCW -2231 + DCW -2847 + DCW 931 + DCW 3166 + DCW 541 + DCW -3984 + DCW 935 + DCW 3187 + DCW -2768 + DCW -1556 + DCW 2625 + DCW 1199 + DCW -1929 + DCW -3036 + DCW 3472 + DCW 818 + DCW -3913 + DCW -189 + DCW 12081 + DCW 969 + DCW -13855 + DCW -3988 + DCW 7976 + DCW 9410 + DCW -8924 + DCW -4705 + DCW 4051 + DCW 3476 + DCW 1069 + DCW -9494 + DCW 2701 + DCW 9557 + DCW -8588 + DCW -2235 + DCW 7947 + DCW -5359 + DCW 608 + DCW 2034 + DCW -2290 + DCW 3405 + DCW -4940 + DCW 751 + DCW 6932 + DCW -4688 + DCW -3980 + DCW 486 + DCW 4458 + DCW 1011 + DCW -3527 + DCW 843 + DCW 130 + DCW -2919 + DCW 1782 + DCW 4009 + DCW -956 + DCW 130 + DCW -4701 + DCW 1539 + DCW 4856 + DCW -3107 + DCW 2139 + DCW -2046 + DCW -2864 + DCW 1497 + DCW -893 + DCW 6118 + DCW -1598 + DCW -6932 + DCW 5808 + DCW 260 + DCW -1237 + DCW 2600 + DCW -2923 + DCW -285 + DCW 1568 + DCW -4294 + DCW 5208 + DCW 2139 + DCW -6554 + DCW 1736 + DCW -80 + DCW 1023 + DCW 579 + DCW -231 + DCW 231 + DCW -998 + DCW -902 + DCW 2692 + DCW 340 + DCW -2319 + DCW -549 + DCW -1707 + DCW 3980 + DCW 377 + DCW -2260 + DCW 1698 + DCW -25 + DCW -3011 + DCW 1107 + DCW 3632 + DCW 524 + DCW -3372 + DCW -3082 + DCW 3741 + DCW 327 + DCW -159 + DCW 1518 + DCW -2646 + DCW 1510 + DCW -2109 + DCW 168 + DCW 6504 + DCW -4571 + DCW -4143 + DCW 2239 + DCW 2080 + DCW -147 + DCW 155 + DCW -453 + DCW -222 + DCW -566 + DCW -3485 + DCW 4869 + DCW 2873 + DCW -4583 + DCW -1245 + DCW 595 + DCW 2411 + DCW 273 + DCW -1770 + DCW 1946 + DCW -1765 + DCW -2105 + DCW 1325 + DCW 1547 + DCW 1531 + DCW -2772 + DCW -2210 + DCW 3485 + DCW 675 + DCW -3162 + DCW 2248 + DCW 1635 + DCW -2629 + DCW -684 + DCW 2176 + DCW 1870 + DCW -1744 + DCW -2575 + DCW 2512 + DCW -575 + DCW -1602 + DCW 1166 + DCW -663 + DCW 2940 + DCW -2873 + DCW -2097 + DCW 5623 + DCW -2374 + DCW -3564 + DCW 3154 + DCW 981 + DCW 226 + DCW -830 + DCW -1011 + DCW 2919 + DCW -1115 + DCW -2449 + DCW 2910 + DCW 872 + DCW -1967 + DCW -1464 + DCW 1040 + DCW 3892 + DCW -3644 + DCW -1698 + DCW 2504 + DCW -1061 + DCW 281 + DCW -122 + DCW 1422 + DCW 201 + DCW -3074 + DCW 407 + DCW 4244 + DCW -1241 + DCW -2944 + DCW 1715 + DCW 155 + DCW -84 + DCW -1141 + DCW 432 + DCW 3330 + DCW -3971 + DCW -1715 + DCW 3401 + DCW 1539 + DCW -386 + DCW -3824 + DCW 1753 + DCW 1422 + DCW -2969 + DCW 1640 + DCW 2420 + DCW -2747 + DCW -1883 + DCW 1921 + DCW 1895 + DCW 889 + DCW -2764 + DCW -1199 + DCW 3485 + DCW -1489 + DCW -1686 + DCW 3506 + DCW -910 + DCW -1740 + DCW -1518 + DCW 2390 + DCW 2495 + DCW -3560 + DCW -1128 + DCW 1086 + DCW 2202 + DCW -583 + DCW -826 + DCW 1325 + DCW -172 + DCW -3363 + DCW 1153 + DCW 4915 + DCW -1606 + DCW -3544 + DCW 180 + DCW 2508 + DCW -377 + DCW -637 + DCW 1296 + DCW 369 + DCW -3120 + DCW -637 + DCW 3963 + DCW 985 + DCW -1912 + DCW -4131 + DCW 2323 + DCW 3292 + DCW -1988 + DCW 1409 + DCW -814 + DCW -851 + DCW -725 + DCW 688 + DCW 2453 + DCW -981 + DCW -1069 + DCW -1728 + DCW 2516 + DCW 776 + DCW -2667 + DCW 734 + DCW 2172 + DCW -1086 + DCW -4315 + DCW 3355 + DCW 2810 + DCW -2738 + DCW 289 + DCW -1547 + DCW 1245 + DCW 2109 + DCW -2256 + DCW 1417 + DCW -218 + DCW -2252 + DCW 835 + DCW 2445 + DCW -1006 + DCW -2592 + DCW 1334 + DCW 1191 + DCW -164 + DCW -1560 + DCW 155 + DCW 1434 + DCW -1132 + DCW -13 + DCW -38 + DCW 2030 + DCW 436 + DCW -5087 + DCW 3711 + DCW 2101 + DCW -2717 + DCW 889 + DCW -709 + DCW 1472 + DCW -1053 + DCW -1438 + DCW 1690 + DCW 1916 + DCW -1937 + DCW -2415 + DCW 3086 + DCW -533 + DCW -1195 + DCW 1245 + DCW 382 + DCW -377 + DCW -1388 + DCW 1204 + DCW 247 + DCW -595 + DCW 470 + DCW -403 + DCW 1313 + DCW -1300 + DCW -1283 + DCW 2290 + DCW -893 + DCW -1556 + DCW 2063 + DCW 2520 + DCW -2189 + DCW -3309 + DCW 1845 + DCW 977 + DCW -486 + DCW 1396 + DCW 88 + DCW -1254 + DCW -872 + DCW -306 + DCW 1728 + DCW 1942 + DCW -2076 + DCW -1556 + DCW 566 + DCW 1166 + DCW 684 + DCW -1095 + DCW -50 + DCW -348 + DCW -1455 + DCW 1698 + DCW 1635 + DCW -1149 + DCW -491 + DCW -730 + DCW 2067 + DCW 973 + DCW -2654 + DCW 835 + DCW 1740 + DCW -2982 + DCW -1992 + DCW 3556 + DCW 2822 + DCW -1942 + DCW -4441 + DCW 931 + DCW 2621 + DCW 742 + DCW 516 + DCW -3028 + DCW -549 + DCW 1174 + DCW 470 + DCW 2558 + DCW -1371 + DCW -3699 + DCW 923 + DCW 2353 + DCW 281 + DCW -415 + DCW -1984 + DCW 2000 + DCW 3380 + DCW -7305 + DCW -126 + DCW 8513 + DCW -3380 + DCW -5762 + DCW 2491 + DCW 2952 + DCW -667 + DCW -130 + DCW -1837 + DCW -315 + DCW 1862 + DCW -1367 + DCW 1417 + DCW 2453 + DCW -3711 + DCW -1812 + DCW 1992 + DCW 956 + DCW 2344 + DCW -1858 + DCW -3942 + DCW 2533 + DCW 1564 + DCW -990 + DCW 2399 + DCW -2327 + DCW -3221 + DCW 2751 + DCW 528 + DCW 1526 + DCW -281 + DCW -4344 + DCW 2260 + DCW 2449 + DCW -2327 + DCW 1199 + DCW 1749 + DCW -3200 + DCW -759 + DCW 1522 + DCW 415 + DCW 3598 + DCW -2789 + DCW -4428 + DCW 3778 + DCW 923 + DCW -2675 + DCW 1992 + DCW 1145 + DCW -4554 + DCW 1677 + DCW 2084 + DCW -1136 + DCW 1225 + DCW -2738 + DCW 721 + DCW 3502 + DCW -2042 + DCW -264 + DCW 1665 + DCW -2273 + DCW -361 + DCW 1396 + DCW 482 + DCW 1355 + DCW -3137 + DCW -1401 + DCW 3678 + DCW -512 + DCW -650 + DCW 1032 + DCW -2571 + DCW -214 + DCW 1921 + DCW -474 + DCW 2512 + DCW -1040 + DCW -5057 + DCW 2256 + DCW 4957 + DCW -2466 + DCW -1837 + DCW 2524 + DCW -1690 + DCW 1107 + DCW -977 + DCW 549 + DCW 4164 + DCW -5057 + DCW -2474 + DCW 2185 + DCW 1765 + DCW -185 + DCW -906 + DCW -222 + DCW -1178 + DCW 1539 + DCW 1464 + DCW 1568 + DCW -1359 + DCW -6114 + DCW 2457 + DCW 9343 + DCW -876 + DCW -6601 + DCW -1157 + DCW 1355 + DCW 1568 + DCW -344 + DCW 327 + DCW 721 + DCW -4282 + DCW -864 + DCW 4529 + DCW 1187 + DCW -3137 + DCW -1124 + DCW 2529 + DCW -977 + DCW -281 + DCW 373 + DCW 449 + DCW 2634 + DCW -5644 + DCW 155 + DCW 6479 + DCW -3787 + DCW -923 + DCW 2235 + DCW -1141 + DCW -985 + DCW 4 + DCW 1480 + DCW 902 + DCW -2709 + DCW -1870 + DCW 3883 + DCW -92 + DCW -1220 + DCW 424 + DCW -675 + DCW 1883 + DCW -1493 + DCW -138 + DCW 1375 + DCW -1736 + DCW 1334 + DCW 1279 + DCW -2399 + DCW -306 + DCW 398 + DCW 654 + DCW 1900 + DCW -3116 + DCW -1422 + DCW 2877 + DCW 658 + DCW -793 + DCW -2202 + DCW 725 + DCW 3095 + DCW -1602 + DCW -461 + DCW 369 + DCW -516 + DCW 1518 + DCW -944 + DCW -67 + DCW 1170 + DCW -1208 + DCW -512 + DCW 1321 + DCW -822 + DCW -189 + DCW 449 + DCW -1166 + DCW 2105 + DCW -1296 + DCW -1547 + DCW 3409 + DCW -1661 + DCW -1346 + DCW 1430 + DCW -205 + DCW 1677 + DCW -994 + DCW -1510 + DCW 1929 + DCW 277 + DCW -969 + DCW -8 + DCW 1178 + DCW -465 + DCW -1417 + DCW 17 + DCW 935 + DCW 784 + DCW -1640 + DCW -822 + DCW 2847 + DCW 2151 + DCW -4965 + DCW -2327 + DCW 6185 + DCW 847 + DCW -3468 + DCW -1208 + DCW 1535 + DCW 1375 + DCW -1036 + DCW 25 + DCW 1237 + DCW -654 + DCW -1384 + DCW -80 + DCW 767 + DCW 327 + DCW -1170 + DCW 1912 + DCW -92 + DCW -3078 + DCW -218 + DCW 5284 + DCW 491 + DCW -8366 + DCW 4294 + DCW 6269 + DCW -6986 + DCW -3044 + DCW 9297 + DCW -767 + DCW -8760 + DCW 4181 + DCW 4189 + DCW -470 + DCW -5334 + DCW -1820 + DCW 9947 + DCW -3875 + DCW -9762 + DCW 9788 + DCW 4567 + DCW -9586 + DCW -516 + DCW 5573 + DCW 1476 + DCW -277 + DCW -5976 + DCW 3313 + DCW 3942 + DCW -8278 + DCW 6294 + DCW 1044 + DCW -5032 + DCW 2202 + DCW -621 + DCW 0 + DCW 1296 + DCW 583 + DCW -3674 + DCW 2688 + DCW -1099 + DCW -1552 + DCW 5959 + DCW -2097 + DCW -2793 + DCW 285 + DCW -122 + DCW 1996 + DCW 2294 + DCW -3409 + DCW -1803 + DCW 3363 + DCW -1115 + DCW 801 + DCW 755 + DCW -4512 + DCW 5028 + DCW 876 + DCW -7603 + DCW 4986 + DCW 2768 + DCW -3992 + DCW 2009 + DCW -814 + DCW -2269 + DCW 4915 + DCW -2764 + DCW -2696 + DCW 5724 + DCW -3795 + DCW -214 + DCW 1438 + DCW -1816 + DCW 2193 + DCW -1359 + DCW -101 + DCW 1392 + DCW -185 + DCW -2990 + DCW 3443 + DCW 1392 + DCW -4114 + DCW 2143 + DCW -1078 + DCW 1552 + DCW -612 + DCW -1065 + DCW 2642 + DCW -1292 + DCW -415 + DCW -461 + DCW 1589 + DCW -2348 + DCW 742 + DCW 3703 + DCW -4709 + DCW 591 + DCW 2462 + DCW -1317 + DCW -885 + DCW -315 + DCW 1719 + DCW 587 + DCW -1954 + DCW -1019 + DCW 4235 + DCW -1484 + DCW -5192 + DCW 5561 + DCW 784 + DCW -4013 + DCW 864 + DCW -801 + DCW 2814 + DCW 205 + DCW -2818 + DCW 1308 + DCW 1761 + DCW -575 + DCW -3036 + DCW 6114 + DCW -159 + DCW -8882 + DCW 2516 + DCW 5116 + DCW 1325 + DCW -2986 + DCW -2692 + DCW -243 + DCW 2730 + DCW -516 + DCW 331 + DCW 3661 + DCW -5959 + DCW -1099 + DCW 3112 + DCW 1635 + DCW 1497 + DCW -4885 + DCW -1061 + DCW 4282 + DCW -1669 + DCW 461 + DCW 4802 + DCW -4420 + DCW -4420 + DCW 1854 + DCW 3250 + DCW 3242 + DCW -2587 + DCW -4034 + DCW 1531 + DCW -247 + DCW 1854 + DCW 965 + DCW 1635 + DCW -1728 + DCW -9322 + DCW 9498 + DCW 2797 + DCW -3913 + DCW 1770 + DCW -3913 + DCW 2353 + DCW -1866 + DCW 2709 + DCW 1296 + DCW -1019 + DCW -956 + DCW -5766 + DCW 7636 + DCW 231 + DCW -2696 + DCW 277 + DCW -1329 + DCW 2982 + DCW -3573 + DCW 5447 + DCW -1895 + DCW -5368 + DCW 5229 + DCW -3854 + DCW 5095 + DCW 2776 + DCW -7896 + DCW -637 + DCW 2768 + DCW 2105 + DCW -558 + DCW 2030 + DCW -3757 + DCW -4781 + DCW 6261 + DCW 428 + DCW 2348 + DCW -2139 + DCW -6265 + DCW 4386 + DCW 323 + DCW 3057 + DCW -2998 + DCW 814 + DCW 2382 + DCW -7578 + DCW 6055 + DCW -445 + DCW -713 + DCW 398 + DCW -4068 + DCW 4089 + DCW -1807 + DCW 1258 + DCW 633 + DCW -323 + DCW 990 + DCW -4252 + DCW 4286 + DCW 1388 + DCW -2491 + DCW -629 + DCW -1916 + DCW 3879 + DCW -784 + DCW 2428 + DCW -2332 + DCW -5443 + DCW 6848 + DCW -3862 + DCW 3611 + DCW 1375 + DCW -6869 + DCW 3493 + DCW -323 + DCW 2139 + DCW -1296 + DCW 1111 + DCW -1824 + DCW -2231 + DCW 4734 + DCW -2025 + DCW 3187 + DCW -3560 + DCW -2411 + DCW 3866 + DCW -554 + DCW 1002 + DCW -1677 + DCW 2772 + DCW -3070 + DCW -1866 + DCW 3833 + DCW -1497 + DCW 2894 + DCW -3632 + DCW -1313 + DCW 3850 + DCW -1401 + DCW 218 + DCW -927 + DCW 2021 + DCW -1568 + DCW -1111 + DCW 3971 + DCW -1128 + DCW -1539 + DCW -1816 + DCW 2369 + DCW 742 + DCW -801 + DCW 1874 + DCW -4521 + DCW 839 + DCW 1447 + DCW -407 + DCW 3938 + DCW -3678 + DCW -1984 + DCW 688 + DCW 164 + DCW 2348 + DCW -273 + DCW 1199 + DCW -3690 + DCW -629 + DCW 3309 + DCW 138 + DCW 1048 + DCW -3246 + DCW 340 + DCW 164 + DCW 575 + DCW 1191 + DCW -1774 + DCW 1338 + DCW -2759 + DCW 2126 + DCW 2118 + DCW -3980 + DCW 2277 + DCW -600 + DCW -176 + DCW 2587 + DCW -1728 + DCW 533 + DCW -1258 + DCW -910 + DCW 1074 + DCW 830 + DCW 1703 + DCW -1996 + DCW -1984 + DCW -751 + DCW 2592 + DCW 302 + DCW 88 + DCW 608 + DCW -4621 + DCW 2843 + DCW 595 + DCW -235 + DCW 2759 + DCW -3879 + DCW -92 + DCW 1099 + DCW 1375 + DCW 403 + DCW -1979 + DCW 1065 + DCW -1006 + DCW 486 + DCW 1036 + DCW -1199 + DCW -38 + DCW 109 + DCW -491 + DCW -348 + DCW 1908 + DCW -1338 + DCW -952 + DCW 1434 + DCW -2415 + DCW 1879 + DCW 1464 + DCW -1703 + DCW 1157 + DCW -1694 + DCW 826 + DCW 717 + DCW 143 + DCW 1233 + DCW -3871 + DCW 2231 + DCW 1027 + DCW -1694 + DCW 2202 + DCW -285 + DCW -2990 + DCW -793 + DCW 4630 + DCW -1510 + DCW 264 + DCW -654 + DCW -3774 + DCW 4948 + DCW -893 + DCW -906 + DCW 2139 + DCW -1556 + DCW -1543 + DCW 516 + DCW 3887 + DCW -2629 + DCW -1841 + DCW 2143 + DCW -1279 + DCW 2017 + DCW -424 + DCW -1375 + DCW 843 + DCW -474 + DCW -570 + DCW 650 + DCW 2755 + DCW -3493 + DCW -713 + DCW 2294 + DCW -981 + DCW 1841 + DCW -985 + DCW -310 + DCW -1074 + DCW -59 + DCW 2202 + DCW -1371 + DCW 1459 + DCW 50 + DCW -3384 + DCW 1090 + DCW 2491 + DCW -1531 + DCW 478 + DCW 725 + DCW -2948 + DCW 1698 + DCW 1715 + DCW -2445 + DCW 1619 + DCW -583 + DCW -2025 + DCW 3237 + DCW -109 + DCW -1627 + DCW -478 + DCW 566 + DCW 1099 + DCW -382 + DCW 495 + DCW -1656 + DCW -226 + DCW 1220 + DCW -507 + DCW 1589 + DCW 38 + DCW -2139 + DCW -453 + DCW 2097 + DCW 457 + DCW -1510 + DCW 1103 + DCW -705 + DCW -474 + DCW 604 + DCW 520 + DCW 902 + DCW -1631 + DCW 55 + DCW -1241 + DCW 1187 + DCW 1359 + DCW -2449 + DCW 2378 + DCW -621 + DCW -2474 + DCW 801 + DCW 1895 + DCW -252 + DCW -470 + DCW -155 + DCW -2634 + DCW 1971 + DCW 1128 + DCW 1782 + DCW 63 + DCW -4760 + DCW 1053 + DCW 1967 + DCW -126 + DCW -419 + DCW -415 + DCW -75 + DCW -931 + DCW 1178 + DCW 2424 + DCW -2558 + DCW -1350 + DCW 1564 + DCW -197 + DCW 805 + DCW -872 + DCW -478 + DCW 1430 + DCW -818 + DCW -1204 + DCW 1984 + DCW 486 + DCW -1686 + DCW -134 + DCW 499 + DCW 1568 + DCW -1455 + DCW -1208 + DCW 1250 + DCW 327 + DCW -80 + DCW 143 + DCW -621 + DCW -1967 + DCW 2709 + DCW 2097 + DCW -671 + DCW -327 + DCW -4080 + DCW -889 + DCW 5217 + DCW 1250 + DCW 499 + DCW -3191 + DCW -6341 + DCW 6215 + DCW 1627 + DCW -700 + DCW 3854 + DCW -5296 + DCW -3669 + DCW 2441 + DCW 3128 + DCW 2210 + DCW 688 + DCW -6114 + DCW -1111 + DCW 2986 + DCW -595 + DCW 5024 + DCW -1820 + DCW -3133 + DCW -1489 + DCW -822 + DCW 6408 + DCW 88 + DCW -2831 + DCW -2298 + END + \ No newline at end of file diff --git a/PjtKEIL_Final/Src/principal.c b/PjtKEIL_Final/Src/principal.c new file mode 100644 index 0000000..880a83c --- /dev/null +++ b/PjtKEIL_Final/Src/principal.c @@ -0,0 +1,104 @@ + + +#include "DriverJeuLaser.h" +#include "stdio.h" +#include "Affichage_Valise.h" + + +# define PERIODE 6552 +# define PERIODE_PWM 720 +# define F1 17 +# define F2 18 +# define F3 19 +# define F4 20 +# define F5 23 +# define F6 24 + +extern int DFT_ModuleAuCarre(short int* , char); +extern int DFT_reel(short int* , char); +extern int DFT_imag(short int* , char); +extern void CallbackSon(void); +extern short int TabCos[]; +extern short int TabSin[]; +int resultat_module_carre [64]; + +short int dma_buf [64]; + +//void DFT_ModuleAuCarre( short int * Signal64ech, char k, long int * resultat){ +// int acumReel = 0; +// int acumImag = 0; +// for (int i= 0; i< 64; i++){ +// acumReel += Signal64ech[i]*TabCos[(i*k)%64]; +// acumImag += Signal64ech[i]*TabSin[(i*k)%64]; +// } +// *resultat = acumReel*acumReel + acumImag*acumImag; +//} + +void callback_SysTick(){ + Start_DMA1(64); + Wait_On_End_Of_DMA1(); + Stop_DMA1; +} + + +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(); + + +// ------------------------ Config DFT ------------------------------ + +// Config Timer (Interruptions toutes les 5ms) +int periode_ticks = 360000; // pour avoir une interruption toutes les 5ms +char prio = 0; // Eventuellement à changer quand fusion avec le son +Systick_Period_ff(periode_ticks); +Systick_Prio_IT(prio, callback_SysTick); +SysTick_On; +SysTick_Enable_IT; + + + +// Config ADC (mesure pendant 200 ”s) + +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); + + + +// ------------------------ Config Son ------------------------------ + +Timer_1234_Init_ff(TIM4,PERIODE); +Active_IT_Debordement_Timer(TIM4, 2, CallbackSon); + +//Timer_1234_Init_ff(TIM3,PERIODE_PWM); + +PWM_Init_ff( TIM3, 3, 720); + + +GPIO_Configure(GPIOB, 0, OUTPUT, ALT_PPULL); + + + + + + +while (1) + { + + for(int k = 0; k < 64; k++){ + + resultat_module_carre[k] = DFT_ModuleAuCarre(dma_buf,k); + } + } +} + diff --git a/PjtKEIL_Final/Src/startup-rvds.s b/PjtKEIL_Final/Src/startup-rvds.s new file mode 100644 index 0000000..a7b631a --- /dev/null +++ b/PjtKEIL_Final/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/PjtKEIL_Final/StepDFT.uvprojx b/PjtKEIL_Final/StepDFT.uvprojx new file mode 100644 index 0000000..245f978 --- /dev/null +++ b/PjtKEIL_Final/StepDFT.uvprojx @@ -0,0 +1,1437 @@ + + + + 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 + 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;.\ModuleAffichage + + + + 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 + + + Signal.asm + 2 + .\Obj\Signal.asm + + + DFT.s + 2 + .\Src\DFT.s + + + bruitverre.asm + 2 + .\Src\bruitverre.asm + + + GestionSon.s + 2 + .\Src\GestionSon.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + DriverJeuLaser.inc + 5 + .\Driver\DriverJeuLaser.inc + + + DriverJeuLaser_1.inc + 5 + .\Driver\DriverJeuLaser_1.inc + + + DriverJeuLaser_1.lib + 4 + .\Driver\DriverJeuLaser_1.lib + + + + + ::CMSIS + + + + + CibleSondeKEIL + 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 + + + Signal.asm + 2 + .\Obj\Signal.asm + + + DFT.s + 2 + .\Src\DFT.s + + + bruitverre.asm + 2 + .\Src\bruitverre.asm + + + GestionSon.s + 2 + .\Src\GestionSon.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + DriverJeuLaser.inc + 5 + .\Driver\DriverJeuLaser.inc + + + DriverJeuLaser_1.inc + 5 + .\Driver\DriverJeuLaser_1.inc + + + DriverJeuLaser_1.lib + 4 + .\Driver\DriverJeuLaser_1.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 + + + Signal.asm + 2 + .\Obj\Signal.asm + + + DFT.s + 2 + .\Src\DFT.s + + + bruitverre.asm + 2 + .\Src\bruitverre.asm + + + GestionSon.s + 2 + .\Src\GestionSon.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + DriverJeuLaser.inc + 5 + .\Driver\DriverJeuLaser.inc + + + DriverJeuLaser_1.inc + 5 + .\Driver\DriverJeuLaser_1.inc + + + DriverJeuLaser_1.lib + 4 + .\Driver\DriverJeuLaser_1.lib + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + + + <Project Info> + 0 + 1 + + + + +
diff --git a/PjtKEIL_Final/rep_questions.md b/PjtKEIL_Final/rep_questions.md new file mode 100644 index 0000000..84c5166 --- /dev/null +++ b/PjtKEIL_Final/rep_questions.md @@ -0,0 +1,38 @@ +1. DĂ©terminer les 6 valeurs de k (k1 Ă  k6) correspondant aux 6 frĂ©quences des pistolets ( voir votre +rapport intermĂ©diaire ou le sujet signal de la partie I, sur Moodle) + +Les valeurs de k qui nous interessent sont : + +FrĂ©quence (en kHz) | 85 | 90 | 95 | 100 | 115| 120 | +|---|---|---|---|---|---|---| +| K | 17 | 18 | 19 | 20 | 23 | 24 | + +La graduation des frĂ©quence est donnĂ©e par +$$ +\delta \omega = \frac{1}{T} = 5000 kHz +$$ + +ainsi: + +$$ +k_n = \frac{f_n}{5000 kHz} +$$ + +2. Le codage fonctionne de la mĂȘme maniĂ©re que le complĂ©ment Ă  deux avec des valeur fractionnaire. +ConsidĂ©rons un codage A.B sur x bits +Les nombre de ce codage Ă©tant reprĂ©sentĂ©s par : +$b_{x-1}b_{x-2} \dots b_2b_1b_0$ + +Si le nombre est compris entre 00000...0 et 0111...1 +La valeur dĂ©cimale du nombre est donnĂ©e par : +$$\sum_{i=0}^{x-1} b_i \times 2^{i-B}$$ +Et si le nombre est compris entre 100..00 et 11...111 + +La valeur dĂ©cimale du nombre est donnĂ©e par : +$$-\sum_{i=0}^{x-1} (b_i-1) \times 2^{i-B}$$ + +$$0x02C1 \to 0b 0000 0010 1100 0001 \to 2^{-3}+2^{-5}+2^{-6}+2^{-12}= 0.172119140625$$ + +$$0xFE01 \to 0b 1111 1110 0000 0001 \to \sum^{-4}_{i=-11} 2^{i} \text{car nombre nĂ©gatif} = -0.124755859375$$ + + diff --git a/PjtKEIL_Final/rep_questions.txt b/PjtKEIL_Final/rep_questions.txt new file mode 100644 index 0000000..e69de29