From 742a3ac8ae1a2283c3f11ed225acfd0fecb74592 Mon Sep 17 00:00:00 2001 From: Pascal Acco Date: Tue, 14 Mar 2023 16:21:55 +0100 Subject: [PATCH] projets --- .gitignore | 3 + elec/spice/pwm/PWM.asc | 68 + soft/ModuleAffichage/Affichage_Valise.h | 78 + soft/ModuleAffichage/affichage_valise.o | Bin 0 -> 251212 bytes soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.h | 345 + .../PjtKEIL_StepDFT/Driver/DriverJeuLaser.inc | 56 + .../PjtKEIL_StepDFT/Driver/DriverJeuLaser.lib | Bin 0 -> 44472 bytes soft/PjtKEIL_StepDFT/Src/DFT.s | 166 + soft/PjtKEIL_StepDFT/Src/Signal.asm | 68 + soft/PjtKEIL_StepDFT/Src/principal.c | 28 + soft/PjtKEIL_StepDFT/Src/startup-rvds.s | 335 + soft/PjtKEIL_StepDFT/StepDFT.uvoptx | 677 ++ soft/PjtKEIL_StepDFT/StepDFT.uvprojx | 1337 ++++ soft/PjtKEIL_StepDeb_1/BacASable.uvoptx | 682 ++ soft/PjtKEIL_StepDeb_1/BacASable.uvprojx | 1352 ++++ .../PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.h | 345 + .../Driver/DriverJeuLaser.inc | 56 + .../Driver/DriverJeuLaser.lib | Bin 0 -> 44472 bytes soft/PjtKEIL_StepDeb_1/Src/Delay.s | 60 + soft/PjtKEIL_StepDeb_1/Src/principal.c | 32 + soft/PjtKEIL_StepDeb_1/Src/startup-rvds.s | 335 + soft/PjtKEIL_StepDeb_2/BacASable.uvoptx | 689 ++ soft/PjtKEIL_StepDeb_2/BacASable.uvprojx | 1352 ++++ .../PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.h | 345 + .../Driver/DriverJeuLaser.inc | 56 + .../Driver/DriverJeuLaser.lib | Bin 0 -> 44472 bytes soft/PjtKEIL_StepDeb_2/Src/Cligno.s | 30 + soft/PjtKEIL_StepDeb_2/Src/principal.c | 61 + soft/PjtKEIL_StepDeb_2/Src/startup-rvds.s | 335 + soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.h | 345 + .../PjtKEIL_StepSon/Driver/DriverJeuLaser.inc | 56 + .../PjtKEIL_StepSon/Driver/DriverJeuLaser.lib | Bin 0 -> 44472 bytes soft/PjtKEIL_StepSon/Src/GestionSon.s | 30 + soft/PjtKEIL_StepSon/Src/bruitverre.asm | 5527 +++++++++++++++++ soft/PjtKEIL_StepSon/Src/principal.c | 28 + soft/PjtKEIL_StepSon/Src/startup-rvds.s | 335 + soft/PjtKEIL_StepSon/StepSon.uvoptx | 677 ++ soft/PjtKEIL_StepSon/StepSon.uvprojx | 1337 ++++ soft/Signal.m | 38 + 39 files changed, 17264 insertions(+) create mode 100644 elec/spice/pwm/PWM.asc create mode 100644 soft/ModuleAffichage/Affichage_Valise.h create mode 100644 soft/ModuleAffichage/affichage_valise.o create mode 100644 soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.h create mode 100644 soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.inc create mode 100644 soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.lib create mode 100644 soft/PjtKEIL_StepDFT/Src/DFT.s create mode 100644 soft/PjtKEIL_StepDFT/Src/Signal.asm create mode 100644 soft/PjtKEIL_StepDFT/Src/principal.c create mode 100644 soft/PjtKEIL_StepDFT/Src/startup-rvds.s create mode 100644 soft/PjtKEIL_StepDFT/StepDFT.uvoptx create mode 100644 soft/PjtKEIL_StepDFT/StepDFT.uvprojx create mode 100644 soft/PjtKEIL_StepDeb_1/BacASable.uvoptx create mode 100644 soft/PjtKEIL_StepDeb_1/BacASable.uvprojx create mode 100644 soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.h create mode 100644 soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.inc create mode 100644 soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.lib create mode 100644 soft/PjtKEIL_StepDeb_1/Src/Delay.s create mode 100644 soft/PjtKEIL_StepDeb_1/Src/principal.c create mode 100644 soft/PjtKEIL_StepDeb_1/Src/startup-rvds.s create mode 100644 soft/PjtKEIL_StepDeb_2/BacASable.uvoptx create mode 100644 soft/PjtKEIL_StepDeb_2/BacASable.uvprojx create mode 100644 soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.h create mode 100644 soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.inc create mode 100644 soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.lib create mode 100644 soft/PjtKEIL_StepDeb_2/Src/Cligno.s create mode 100644 soft/PjtKEIL_StepDeb_2/Src/principal.c create mode 100644 soft/PjtKEIL_StepDeb_2/Src/startup-rvds.s create mode 100644 soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.h create mode 100644 soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.inc create mode 100644 soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.lib create mode 100644 soft/PjtKEIL_StepSon/Src/GestionSon.s create mode 100644 soft/PjtKEIL_StepSon/Src/bruitverre.asm create mode 100644 soft/PjtKEIL_StepSon/Src/principal.c create mode 100644 soft/PjtKEIL_StepSon/Src/startup-rvds.s create mode 100644 soft/PjtKEIL_StepSon/StepSon.uvoptx create mode 100644 soft/PjtKEIL_StepSon/StepSon.uvprojx create mode 100644 soft/Signal.m diff --git a/.gitignore b/.gitignore index ee603e5..d2ebd7b 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,6 @@ octave-workspace *.autosave *.slxc +#spice +*.raw +*.log \ No newline at end of file diff --git a/elec/spice/pwm/PWM.asc b/elec/spice/pwm/PWM.asc new file mode 100644 index 0000000..5cbcda5 --- /dev/null +++ b/elec/spice/pwm/PWM.asc @@ -0,0 +1,68 @@ +Version 4 +SHEET 1 1084 820 +WIRE 208 16 96 16 +WIRE 784 16 208 16 +WIRE 944 16 864 16 +WIRE 1008 16 944 16 +WIRE -368 80 -512 80 +WIRE 96 96 96 16 +WIRE 944 144 944 16 +WIRE -512 176 -512 80 +WIRE 96 224 96 176 +WIRE 944 256 944 208 +WIRE -512 304 -512 256 +WIRE 96 384 -48 384 +WIRE -48 480 -48 384 +WIRE -48 608 -48 560 +FLAG -512 304 0 +FLAG -368 80 Compteur +FLAG 944 256 0 +FLAG 1008 16 Filtre +FLAG -48 608 0 +FLAG 96 384 CompValue +FLAG 208 16 PWM +FLAG 96 224 0 +SYMBOL voltage -512 160 R0 +WINDOW 3 -372 78 Left 2 +WINDOW 123 0 0 Left 0 +WINDOW 39 0 0 Left 0 +SYMATTR Value PULSE(0 3.3 0 5u 0 0 5u) +SYMATTR InstName V1 +SYMBOL cap 928 144 R0 +SYMATTR InstName C1 +SYMATTR Value 10n +SYMBOL res 880 0 R90 +WINDOW 0 0 56 VBottom 2 +WINDOW 3 32 56 VTop 2 +SYMATTR InstName R1 +SYMATTR Value 3.9k +SYMBOL voltage -48 464 R0 +WINDOW 3 49 61 Left 2 +WINDOW 123 0 0 Left 0 +WINDOW 39 0 0 Left 0 +SYMATTR Value SINE(1.65 1 2k) +SYMATTR InstName V2 +SYMBOL bv 96 80 R0 +SYMATTR InstName B1 +SYMATTR Value V=if(V(CompValue)>V(Compteur),3.3,0) +TEXT 272 256 Left 2 !;ac dec 100 1 10meg +TEXT 272 296 Left 2 !.tran 0 1.5m 0 0.01u +TEXT -880 40 Left 2 ;Compteur de l'unité Timer +TEXT -96 -24 Left 2 ;Partie PWM de l'unité Timer +TEXT -904 -56 Left 4 ;TIMER3 +TEXT 688 80 Left 4 ;PB0 +TEXT 480 0 Left 2 ;Chanel 3 +TEXT 384 -168 Left 5 ;STM32F103 +LINE Normal 688 48 752 -16 +LINE Normal 688 -16 688 48 +LINE Normal 752 48 688 -16 +LINE Normal 752 48 752 48 +LINE Normal 720 -208 720 -16 +LINE Normal 256 -208 720 -208 +LINE Normal 720 784 720 48 +LINE Normal 720 784 720 784 +LINE Normal 720 816 720 784 +RECTANGLE Normal -192 352 -912 16 2 +RECTANGLE Normal 592 656 -128 -48 2 +RECTANGLE Normal 640 736 -976 -96 +RECTANGLE Normal 752 48 688 -16 diff --git a/soft/ModuleAffichage/Affichage_Valise.h b/soft/ModuleAffichage/Affichage_Valise.h new file mode 100644 index 0000000..990ced9 --- /dev/null +++ b/soft/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/soft/ModuleAffichage/affichage_valise.o b/soft/ModuleAffichage/affichage_valise.o new file mode 100644 index 0000000000000000000000000000000000000000..140ce962dc065751fe58934d03deca5364dd5675 GIT binary patch literal 251212 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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/soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.inc b/soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.inc new file mode 100644 index 0000000..48d5e50 --- /dev/null +++ b/soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.inc @@ -0,0 +1,56 @@ + +; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) +; Accès en aux fonctions suivantes : +; GPIO : +; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) +; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + +; PWM : +;/** +; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif +; * est donc : rcy = Thaut_ticks / Periode_ticks +; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 +; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks +; * @retval None +; */ + +;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + import PWM_Set_Value_TIM3_Ch3 + + + +;/** +; * @brief Mise à 1 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Set(char Broche); + import GPIOA_Set + +;void GPIOB_Set(char Broche); + import GPIOB_Set + +;void GPIOC_Set(char Broche); + import GPIOC_Set + + + +;/** +; * @brief Mise à 0 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Clear(char Broche); + import GPIOA_Clear + +;void GPIOB_Clear(char Broche); + import GPIOB_Clear + +;void GPIOC_Clear(char Broche); + import GPIOC_Clear + + end diff --git a/soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.lib b/soft/PjtKEIL_StepDFT/Driver/DriverJeuLaser.lib new file mode 100644 index 0000000000000000000000000000000000000000..b26c40df2f294e9fa6cd17e4d3440493c7223999 GIT binary patch literal 44472 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 Rn0md%VsR{Wl@KT|{69|st#AMU literal 0 HcmV?d00001 diff --git a/soft/PjtKEIL_StepDFT/Src/DFT.s b/soft/PjtKEIL_StepDFT/Src/DFT.s new file mode 100644 index 0000000..3f6b5d4 --- /dev/null +++ b/soft/PjtKEIL_StepDFT/Src/DFT.s @@ -0,0 +1,166 @@ + PRESERVE8 + THUMB + + +; ====================== 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 + + + + + +;Section ROM code (read only) : + AREA Trigo, DATA, READONLY +; codage fractionnaire 1.15 + +TabCos + DCW 32767 ; 0 0x7fff 0.99997 + DCW 32610 ; 1 0x7f62 0.99518 + DCW 32138 ; 2 0x7d8a 0.98077 + DCW 31357 ; 3 0x7a7d 0.95694 + DCW 30274 ; 4 0x7642 0.92389 + DCW 28899 ; 5 0x70e3 0.88193 + DCW 27246 ; 6 0x6a6e 0.83148 + DCW 25330 ; 7 0x62f2 0.77301 + DCW 23170 ; 8 0x5a82 0.70709 + DCW 20788 ; 9 0x5134 0.63440 + DCW 18205 ; 10 0x471d 0.55557 + DCW 15447 ; 11 0x3c57 0.47141 + DCW 12540 ; 12 0x30fc 0.38269 + DCW 9512 ; 13 0x2528 0.29028 + DCW 6393 ; 14 0x18f9 0.19510 + DCW 3212 ; 15 0x0c8c 0.09802 + DCW 0 ; 16 0x0000 0.00000 + DCW -3212 ; 17 0xf374 -0.09802 + DCW -6393 ; 18 0xe707 -0.19510 + DCW -9512 ; 19 0xdad8 -0.29028 + DCW -12540 ; 20 0xcf04 -0.38269 + DCW -15447 ; 21 0xc3a9 -0.47141 + DCW -18205 ; 22 0xb8e3 -0.55557 + DCW -20788 ; 23 0xaecc -0.63440 + DCW -23170 ; 24 0xa57e -0.70709 + DCW -25330 ; 25 0x9d0e -0.77301 + DCW -27246 ; 26 0x9592 -0.83148 + DCW -28899 ; 27 0x8f1d -0.88193 + DCW -30274 ; 28 0x89be -0.92389 + DCW -31357 ; 29 0x8583 -0.95694 + DCW -32138 ; 30 0x8276 -0.98077 + DCW -32610 ; 31 0x809e -0.99518 + DCW -32768 ; 32 0x8000 -1.00000 + DCW -32610 ; 33 0x809e -0.99518 + DCW -32138 ; 34 0x8276 -0.98077 + DCW -31357 ; 35 0x8583 -0.95694 + DCW -30274 ; 36 0x89be -0.92389 + DCW -28899 ; 37 0x8f1d -0.88193 + DCW -27246 ; 38 0x9592 -0.83148 + DCW -25330 ; 39 0x9d0e -0.77301 + DCW -23170 ; 40 0xa57e -0.70709 + DCW -20788 ; 41 0xaecc -0.63440 + DCW -18205 ; 42 0xb8e3 -0.55557 + DCW -15447 ; 43 0xc3a9 -0.47141 + DCW -12540 ; 44 0xcf04 -0.38269 + DCW -9512 ; 45 0xdad8 -0.29028 + DCW -6393 ; 46 0xe707 -0.19510 + DCW -3212 ; 47 0xf374 -0.09802 + DCW 0 ; 48 0x0000 0.00000 + DCW 3212 ; 49 0x0c8c 0.09802 + DCW 6393 ; 50 0x18f9 0.19510 + DCW 9512 ; 51 0x2528 0.29028 + DCW 12540 ; 52 0x30fc 0.38269 + DCW 15447 ; 53 0x3c57 0.47141 + DCW 18205 ; 54 0x471d 0.55557 + DCW 20788 ; 55 0x5134 0.63440 + DCW 23170 ; 56 0x5a82 0.70709 + DCW 25330 ; 57 0x62f2 0.77301 + DCW 27246 ; 58 0x6a6e 0.83148 + DCW 28899 ; 59 0x70e3 0.88193 + DCW 30274 ; 60 0x7642 0.92389 + DCW 31357 ; 61 0x7a7d 0.95694 + DCW 32138 ; 62 0x7d8a 0.98077 + DCW 32610 ; 63 0x7f62 0.99518 +TabSin + DCW 0 ; 0 0x0000 0.00000 + DCW 3212 ; 1 0x0c8c 0.09802 + DCW 6393 ; 2 0x18f9 0.19510 + DCW 9512 ; 3 0x2528 0.29028 + DCW 12540 ; 4 0x30fc 0.38269 + DCW 15447 ; 5 0x3c57 0.47141 + DCW 18205 ; 6 0x471d 0.55557 + DCW 20788 ; 7 0x5134 0.63440 + DCW 23170 ; 8 0x5a82 0.70709 + DCW 25330 ; 9 0x62f2 0.77301 + DCW 27246 ; 10 0x6a6e 0.83148 + DCW 28899 ; 11 0x70e3 0.88193 + DCW 30274 ; 12 0x7642 0.92389 + DCW 31357 ; 13 0x7a7d 0.95694 + DCW 32138 ; 14 0x7d8a 0.98077 + DCW 32610 ; 15 0x7f62 0.99518 + DCW 32767 ; 16 0x7fff 0.99997 + DCW 32610 ; 17 0x7f62 0.99518 + DCW 32138 ; 18 0x7d8a 0.98077 + DCW 31357 ; 19 0x7a7d 0.95694 + DCW 30274 ; 20 0x7642 0.92389 + DCW 28899 ; 21 0x70e3 0.88193 + DCW 27246 ; 22 0x6a6e 0.83148 + DCW 25330 ; 23 0x62f2 0.77301 + DCW 23170 ; 24 0x5a82 0.70709 + DCW 20788 ; 25 0x5134 0.63440 + DCW 18205 ; 26 0x471d 0.55557 + DCW 15447 ; 27 0x3c57 0.47141 + DCW 12540 ; 28 0x30fc 0.38269 + DCW 9512 ; 29 0x2528 0.29028 + DCW 6393 ; 30 0x18f9 0.19510 + DCW 3212 ; 31 0x0c8c 0.09802 + DCW 0 ; 32 0x0000 0.00000 + DCW -3212 ; 33 0xf374 -0.09802 + DCW -6393 ; 34 0xe707 -0.19510 + DCW -9512 ; 35 0xdad8 -0.29028 + DCW -12540 ; 36 0xcf04 -0.38269 + DCW -15447 ; 37 0xc3a9 -0.47141 + DCW -18205 ; 38 0xb8e3 -0.55557 + DCW -20788 ; 39 0xaecc -0.63440 + DCW -23170 ; 40 0xa57e -0.70709 + DCW -25330 ; 41 0x9d0e -0.77301 + DCW -27246 ; 42 0x9592 -0.83148 + DCW -28899 ; 43 0x8f1d -0.88193 + DCW -30274 ; 44 0x89be -0.92389 + DCW -31357 ; 45 0x8583 -0.95694 + DCW -32138 ; 46 0x8276 -0.98077 + DCW -32610 ; 47 0x809e -0.99518 + DCW -32768 ; 48 0x8000 -1.00000 + DCW -32610 ; 49 0x809e -0.99518 + DCW -32138 ; 50 0x8276 -0.98077 + DCW -31357 ; 51 0x8583 -0.95694 + DCW -30274 ; 52 0x89be -0.92389 + DCW -28899 ; 53 0x8f1d -0.88193 + DCW -27246 ; 54 0x9592 -0.83148 + DCW -25330 ; 55 0x9d0e -0.77301 + DCW -23170 ; 56 0xa57e -0.70709 + DCW -20788 ; 57 0xaecc -0.63440 + DCW -18205 ; 58 0xb8e3 -0.55557 + DCW -15447 ; 59 0xc3a9 -0.47141 + DCW -12540 ; 60 0xcf04 -0.38269 + DCW -9512 ; 61 0xdad8 -0.29028 + DCW -6393 ; 62 0xe707 -0.19510 + DCW -3212 ; 63 0xf374 -0.09802 + + + + + END \ No newline at end of file diff --git a/soft/PjtKEIL_StepDFT/Src/Signal.asm b/soft/PjtKEIL_StepDFT/Src/Signal.asm new file mode 100644 index 0000000..5a79596 --- /dev/null +++ b/soft/PjtKEIL_StepDFT/Src/Signal.asm @@ -0,0 +1,68 @@ + AREA Signal, DATA, READONLY + export LeSignal +LeSignal + DCW 0x0fff ; 0 4095 0.99976 + DCW 0x0ff6 ; 1 4086 0.99756 + DCW 0x0fd9 ; 2 4057 0.99048 + DCW 0x0fa8 ; 3 4008 0.97852 + DCW 0x0f64 ; 4 3940 0.96191 + DCW 0x0f0e ; 5 3854 0.94092 + DCW 0x0ea7 ; 6 3751 0.91577 + DCW 0x0e2f ; 7 3631 0.88647 + DCW 0x0da8 ; 8 3496 0.85352 + DCW 0x0d13 ; 9 3347 0.81714 + DCW 0x0c72 ; 10 3186 0.77783 + DCW 0x0bc5 ; 11 3013 0.73560 + DCW 0x0b10 ; 12 2832 0.69141 + DCW 0x0a53 ; 13 2643 0.64526 + DCW 0x0990 ; 14 2448 0.59766 + DCW 0x08c9 ; 15 2249 0.54907 + DCW 0x0800 ; 16 2048 0.50000 + DCW 0x0737 ; 17 1847 0.45093 + DCW 0x0670 ; 18 1648 0.40234 + DCW 0x05ad ; 19 1453 0.35474 + DCW 0x04f0 ; 20 1264 0.30859 + DCW 0x043b ; 21 1083 0.26440 + DCW 0x038e ; 22 910 0.22217 + DCW 0x02ed ; 23 749 0.18286 + DCW 0x0258 ; 24 600 0.14648 + DCW 0x01d1 ; 25 465 0.11353 + DCW 0x0159 ; 26 345 0.08423 + DCW 0x00f2 ; 27 242 0.05908 + DCW 0x009c ; 28 156 0.03809 + DCW 0x0058 ; 29 88 0.02148 + DCW 0x0027 ; 30 39 0.00952 + DCW 0x000a ; 31 10 0.00244 + DCW 0x0000 ; 32 0 0.00000 + DCW 0x000a ; 33 10 0.00244 + DCW 0x0027 ; 34 39 0.00952 + DCW 0x0058 ; 35 88 0.02148 + DCW 0x009c ; 36 156 0.03809 + DCW 0x00f2 ; 37 242 0.05908 + DCW 0x0159 ; 38 345 0.08423 + DCW 0x01d1 ; 39 465 0.11353 + DCW 0x0258 ; 40 600 0.14648 + DCW 0x02ed ; 41 749 0.18286 + DCW 0x038e ; 42 910 0.22217 + DCW 0x043b ; 43 1083 0.26440 + DCW 0x04f0 ; 44 1264 0.30859 + DCW 0x05ad ; 45 1453 0.35474 + DCW 0x0670 ; 46 1648 0.40234 + DCW 0x0737 ; 47 1847 0.45093 + DCW 0x0800 ; 48 2048 0.50000 + DCW 0x08c9 ; 49 2249 0.54907 + DCW 0x0990 ; 50 2448 0.59766 + DCW 0x0a53 ; 51 2643 0.64526 + DCW 0x0b10 ; 52 2832 0.69141 + DCW 0x0bc5 ; 53 3013 0.73560 + DCW 0x0c72 ; 54 3186 0.77783 + DCW 0x0d13 ; 55 3347 0.81714 + DCW 0x0da8 ; 56 3496 0.85352 + DCW 0x0e2f ; 57 3631 0.88647 + DCW 0x0ea7 ; 58 3751 0.91577 + DCW 0x0f0e ; 59 3854 0.94092 + DCW 0x0f64 ; 60 3940 0.96191 + DCW 0x0fa8 ; 61 4008 0.97852 + DCW 0x0fd9 ; 62 4057 0.99048 + DCW 0x0ff6 ; 63 4086 0.99756 + END diff --git a/soft/PjtKEIL_StepDFT/Src/principal.c b/soft/PjtKEIL_StepDFT/Src/principal.c new file mode 100644 index 0000000..d09be75 --- /dev/null +++ b/soft/PjtKEIL_StepDFT/Src/principal.c @@ -0,0 +1,28 @@ + + +#include "DriverJeuLaser.h" + + + +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(); + + + + + +//============================================================================ + + +while (1) + { + } +} + diff --git a/soft/PjtKEIL_StepDFT/Src/startup-rvds.s b/soft/PjtKEIL_StepDFT/Src/startup-rvds.s new file mode 100644 index 0000000..a7b631a --- /dev/null +++ b/soft/PjtKEIL_StepDFT/Src/startup-rvds.s @@ -0,0 +1,335 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. +; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + +; +; Enable UsageFault, MemFault and Busfault interrupts +; +_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 + LDR.W R0, =_SHCSR + LDR R1, [R0] ; Read CPACR + ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts + STR R1, [R0] ; Write back the modified value to the CPACR + DSB ; Wait for store to complete + +; +; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) +; +_AIRCR EQU 0xE000ED0C +_AIRCR_VAL EQU 0x05FA0300 + LDR.W R0, =_AIRCR + LDR.W R1, =_AIRCR_VAL + STR R1,[R0] + +; +; Finaly, jump to main function (void main (void)) +; + LDR R0, =__main + BX R0 + ENDP + +SystemInit PROC + EXPORT SystemInit [WEAK] + BX LR + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/soft/PjtKEIL_StepDFT/StepDFT.uvoptx b/soft/PjtKEIL_StepDFT/StepDFT.uvoptx new file mode 100644 index 0000000..d6b6cd3 --- /dev/null +++ b/soft/PjtKEIL_StepDFT/StepDFT.uvoptx @@ -0,0 +1,677 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Simu + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=614,0,1208,751,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + 0 + ((portb & 0x00000002) >> 1 & 0x2) >> 1 + FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F160000000000000000000000000000000000000096020008 + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeKEIL + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + -UAny -O206 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeST + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + 0 + ((portb & 0x00000002) >> 1 & 0x2) >> 1 + FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F100000000000000000000000000000000000000096020008 + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Sources + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\Src\principal.c + principal.c + 0 + 0 + + + + + Sys + 1 + 0 + 0 + 0 + + 2 + 2 + 2 + 0 + 0 + 0 + .\Src\startup-rvds.s + startup-rvds.s + 0 + 0 + + + + + Driver + 1 + 0 + 0 + 0 + + 3 + 3 + 4 + 0 + 0 + 0 + .\Driver\DriverJeuLaser.lib + DriverJeuLaser.lib + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/soft/PjtKEIL_StepDFT/StepDFT.uvprojx b/soft/PjtKEIL_StepDFT/StepDFT.uvprojx new file mode 100644 index 0000000..dd4f900 --- /dev/null +++ b/soft/PjtKEIL_StepDFT/StepDFT.uvprojx @@ -0,0 +1,1337 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Simu + 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 + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.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 + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + + + + + + + + + + + + + + CibleSondeST + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32F103RB + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + + + + + + + + + + + + + + $$Device:STM32F103RB$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Obj\ + StepDFT + 1 + 0 + 1 + 1 + 1 + + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 0 + + + SARMCM3.DLL + -REMAP + DARMSTM.DLL + -pSTM32F103RB + SARMCM3.DLL + + TCM.DLL + -pCM3 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4100 + + 1 + STLink\ST-LINKIII-KEIL_SWO.dll + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M3" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 1 + 0x8000000 + 0x20000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x8000000 + 0x20000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x5000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + + --C99 + STM32F103xB,USE_FULL_LL_DRIVER + + .\Driver + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 4 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x08000000 + 0x20000000 + + + + + + + + + + + + + Sources + + + principal.c + 1 + .\Src\principal.c + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/soft/PjtKEIL_StepDeb_1/BacASable.uvoptx b/soft/PjtKEIL_StepDeb_1/BacASable.uvoptx new file mode 100644 index 0000000..ed76561 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_1/BacASable.uvoptx @@ -0,0 +1,682 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Simu + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeKEIL + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + -UAny -O206 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeST + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + 0 + ((portb & 0x00000002) >> 1 & 0x2) >> 1 + FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F100000000000000000000000000000000000000096020008 + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Sources + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 1 + 0 + 0 + .\Src\principal.c + principal.c + 0 + 0 + + + 1 + 2 + 2 + 0 + 0 + 0 + .\Src\Delay.s + Delay.s + 0 + 0 + + + + + Sys + 1 + 0 + 0 + 0 + + 2 + 3 + 2 + 0 + 0 + 0 + .\Src\startup-rvds.s + startup-rvds.s + 0 + 0 + + + + + Driver + 1 + 0 + 0 + 0 + + 3 + 4 + 4 + 0 + 0 + 0 + .\Driver\DriverJeuLaser.lib + DriverJeuLaser.lib + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/soft/PjtKEIL_StepDeb_1/BacASable.uvprojx b/soft/PjtKEIL_StepDeb_1/BacASable.uvprojx new file mode 100644 index 0000000..9c192f5 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_1/BacASable.uvprojx @@ -0,0 +1,1352 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Simu + 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\ + BacASable + 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 + + + Delay.s + 2 + .\Src\Delay.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.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\ + BacASable + 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 + + + Delay.s + 2 + .\Src\Delay.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + + + + + + + + + + + + + + CibleSondeST + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32F103RB + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + + + + + + + + + + + + + + $$Device:STM32F103RB$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Obj\ + BacASable + 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 + + + Delay.s + 2 + .\Src\Delay.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.h b/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.h new file mode 100644 index 0000000..bc9b3bd --- /dev/null +++ b/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.h @@ -0,0 +1,345 @@ +/** + * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) + * + * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz + * Modifs : + * enlèvement de tout ce qui est inutile dans le .h + * ajout de fonctions GPIO dans le .c pour utilisation en ASM ou en C : + * - GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) + * - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + * + * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3) + * PWM_Set_Value_On_TIM3_C3( int Val) + * permet en ASM ou en C de fixer la valeur de PWM + + * Ajout de commentaires + + */ +#ifndef DRIVERJEULASER_H__ +#define DRIVERJEULASER_H__ + +#include "stm32f10x.h" + +//********************************************************************************************************** +//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- +//********************************************************************************************************** + +/** + * @brief Configure l'ensemble des horloges du uC + * @note horloge systeme (config statique a 72 MHz pour le STM32F103) + * @param None + * @retval None + */ +void CLOCK_Configure(void); + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée + * @note L' horloge des 4 timers a une fréquence de 72MHz + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Durée_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); + +/** + * Macros de base pour utiliser les timers + */ + // bloque le timer +#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) +// Lance timer +#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); + + + + + + + + + + + +//********************************************************************************************************* +//--------------------- PWM TIM1 to TIM 4 ------------------------------ +//********************************************************************************************************* + +/** + * @brief Configure un timer en PWM + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param voie : un des 4 canaux possibles 1 à 4. + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval Retourne la période en tick (normalement la même que le param d'entrée sauf si PSC utilisé + */ +unsigned short int PWM_Init_ff( TIM_TypeDef *Timer, char Voie, u32 Periode_ticks ); + + + +/** + * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif + * est donc : rcy = Thaut_ticks / Periode_ticks + * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 + * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks + * @retval None + */ +void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure le timer Systick avec une périodicité donnée + * @note Ce timer ne peut servir qu'à créer des temporisations ou générer des interruption + * ce n'est pas à proprement parler un périphérique, il fait partie du Cortex M3 + * Ce timer est un 24 bits + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Systick_Period_ff( unsigned int Periode_ticks ); + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick + * @note + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); + + +/** + * Macros de base pour utiliser le Systick + */ +#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) +#define SysTick_Off ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<0)) +#define SysTick_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1) +#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps + * de fermeture du switch d'acquisition + * @note + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU + * exemple pour 1µs on choisira 72. + * @retval Nombre de Tick réellement pris en compte + */ +unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); + + +/** + * @brief Sélectionne la voie à convertir + * @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Voie_ADC : 1 à 15 + * @retval None + */ +void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); + + + + + +/** + * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également + * la période de débordement du timer + * @note pas besoin de régler le timer avec une autre fonction dédiée timer + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Source : indique le timer qui déclenche l'ADC choix dans les define ci-dessous + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ + +// param pour Source : +#define TIM1_CC1 0 +#define TIM1_CC2 1 +#define TIM1_CC3 2 +#define TIM2_CC2 3 +#define TIM4_CC4 5 +void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); + + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- ANALOG INPUT ADC & DMA ------------------------------ +//********************************************************************************************************** + +/** + * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA + * @note + * @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé + * si '1' le ptr d'@ se recale à celle du début. + * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire + * @retval None + */ +void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); + + + + + +/** + * @brief Lance une DMA sur le nombre de points spécifie. Les resultats seront stockes + * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1 + * @note + * @param NbEchDMA est le nombre d'échantillons à stocker. + * @retval None + */ +void Start_DMA1( u16 NbEchDMA ); + +// arret DMA +#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; + + +/** + * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition + * et du nombre d'echantillons + * @note fonction d'attente (bloquante) + * @param None + * @retval None + */ +void Wait_On_End_Of_DMA1(void); + + + + + + + + +//********************************************************************************************************** +//--------------------- GPIO ------------------------------ +//********************************************************************************************************** + +/** + * @brief Initialisation d'un GPIO (A à C), pin x. + * peut être configuré : + * -> Input ou output + * -> architecture technologique (push-pull, open drain...) + + * @note + * @param Port : GPIOA, GPIOB, GPIOC + * @param Broche : 0 à 15 + * @param Sens : INPUT ou OUTPUT + * @param Techno : voir define ci dessous + * @retval 1 erreur, 0 si OK + */ + +// Sens +#define INPUT 'i' +#define OUTPUT 'o' + +// Techno pour pin en entrée (INPUT) +#define ANALOG 0 +#define INPUT_FLOATING 1 +#define INPUT_PULL_DOWN_UP 2 + +// Techno pour pin en sortie (OUTPUT) +#define OUTPUT_PPULL 0 +#define OUTPUT_OPDRAIN 1 +#define ALT_PPULL 2 +#define ALT_OPDRAIN 3 + +// Exemple : +// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); +// Place le bit 8 du port B en sortie Push-pull +char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); + + +/** + * @brief Mise à 1 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Set(char Broche); +void GPIOB_Set(char Broche); +void GPIOC_Set(char Broche); + + + +/** + * @brief Mise à 0 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Clear(char Broche); +void GPIOB_Clear(char Broche); +void GPIOC_Clear(char Broche); + + +#endif + + diff --git a/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.inc b/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.inc new file mode 100644 index 0000000..48d5e50 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.inc @@ -0,0 +1,56 @@ + +; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) +; Accès en aux fonctions suivantes : +; GPIO : +; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) +; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + +; PWM : +;/** +; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif +; * est donc : rcy = Thaut_ticks / Periode_ticks +; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 +; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks +; * @retval None +; */ + +;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + import PWM_Set_Value_TIM3_Ch3 + + + +;/** +; * @brief Mise à 1 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Set(char Broche); + import GPIOA_Set + +;void GPIOB_Set(char Broche); + import GPIOB_Set + +;void GPIOC_Set(char Broche); + import GPIOC_Set + + + +;/** +; * @brief Mise à 0 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Clear(char Broche); + import GPIOA_Clear + +;void GPIOB_Clear(char Broche); + import GPIOB_Clear + +;void GPIOC_Clear(char Broche); + import GPIOC_Clear + + end diff --git a/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.lib b/soft/PjtKEIL_StepDeb_1/Driver/DriverJeuLaser.lib new file mode 100644 index 0000000000000000000000000000000000000000..b26c40df2f294e9fa6cd17e4d3440493c7223999 GIT binary patch literal 44472 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 Rn0md%VsR{Wl@KT|{69|st#AMU literal 0 HcmV?d00001 diff --git a/soft/PjtKEIL_StepDeb_1/Src/Delay.s b/soft/PjtKEIL_StepDeb_1/Src/Delay.s new file mode 100644 index 0000000..bf49175 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_1/Src/Delay.s @@ -0,0 +1,60 @@ + PRESERVE8 + THUMB + + +; ====================== zone de réservation de données, ====================================== +;Section RAM (read only) : + area mesdata,data,readonly + + +;Section RAM (read write): + area maram,data,readwrite + +VarTime dcd 0 + + +; =============================================================================================== + +;constantes (équivalent du #define en C) +TimeValue equ 900000 + + + EXPORT Delay_100ms ; la fonction Delay_100ms est rendue publique donc utilisable par d'autres modules. + + +;Section ROM code (read only) : + area moncode,code,readonly + + + +; REMARQUE IMPORTANTE +; Cette manière de créer une temporisation n'est clairement pas la bonne manière de procéder : +; - elle est peu précise +; - la fonction prend tout le temps CPU pour... ne rien faire... +; +; Pour autant, la fonction montre : +; - les boucles en ASM +; - l'accés écr/lec de variable en RAM +; - le mécanisme d'appel / retour sous programme +; +; et donc possède un intérêt pour débuter en ASM pur + +Delay_100ms proc + + ldr r0,=VarTime + + ldr r1,=TimeValue + str r1,[r0] + +BoucleTempo + ldr r1,[r0] + + subs r1,#1 + str r1,[r0] + bne BoucleTempo + + bx lr + endp + + + END \ No newline at end of file diff --git a/soft/PjtKEIL_StepDeb_1/Src/principal.c b/soft/PjtKEIL_StepDeb_1/Src/principal.c new file mode 100644 index 0000000..a2e1f67 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_1/Src/principal.c @@ -0,0 +1,32 @@ +#include "DriverJeuLaser.h" + +extern void Delay_100ms(void); + + +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(); + +// configuration de PortB.1 (PB1) en sortie push-pull +GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL); + + + + +//============================================================================ + + +while (1) + { + Delay_100ms(); + GPIOB_Set(1); + Delay_100ms(); + GPIOB_Clear(1); + } +} diff --git a/soft/PjtKEIL_StepDeb_1/Src/startup-rvds.s b/soft/PjtKEIL_StepDeb_1/Src/startup-rvds.s new file mode 100644 index 0000000..a7b631a --- /dev/null +++ b/soft/PjtKEIL_StepDeb_1/Src/startup-rvds.s @@ -0,0 +1,335 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. +; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + +; +; Enable UsageFault, MemFault and Busfault interrupts +; +_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 + LDR.W R0, =_SHCSR + LDR R1, [R0] ; Read CPACR + ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts + STR R1, [R0] ; Write back the modified value to the CPACR + DSB ; Wait for store to complete + +; +; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) +; +_AIRCR EQU 0xE000ED0C +_AIRCR_VAL EQU 0x05FA0300 + LDR.W R0, =_AIRCR + LDR.W R1, =_AIRCR_VAL + STR R1,[R0] + +; +; Finaly, jump to main function (void main (void)) +; + LDR R0, =__main + BX R0 + ENDP + +SystemInit PROC + EXPORT SystemInit [WEAK] + BX LR + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/soft/PjtKEIL_StepDeb_2/BacASable.uvoptx b/soft/PjtKEIL_StepDeb_2/BacASable.uvoptx new file mode 100644 index 0000000..f1315bb --- /dev/null +++ b/soft/PjtKEIL_StepDeb_2/BacASable.uvoptx @@ -0,0 +1,689 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Simu + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=614,0,1208,751,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + 0 + ((portb & 0x00000002) >> 1 & 0x2) >> 1 + FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F160000000000000000000000000000000000000096020008 + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeKEIL + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + -UAny -O206 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeST + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + 0 + ((portb & 0x00000002) >> 1 & 0x2) >> 1 + FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F100000000000000000000000000000000000000096020008 + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Sources + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\Src\principal.c + principal.c + 0 + 0 + + + 1 + 2 + 2 + 0 + 0 + 0 + .\Src\Cligno.s + Cligno.s + 0 + 0 + + + + + Sys + 1 + 0 + 0 + 0 + + 2 + 3 + 2 + 0 + 0 + 0 + .\Src\startup-rvds.s + startup-rvds.s + 0 + 0 + + + + + Driver + 1 + 0 + 0 + 0 + + 3 + 4 + 4 + 0 + 0 + 0 + .\Driver\DriverJeuLaser.lib + DriverJeuLaser.lib + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/soft/PjtKEIL_StepDeb_2/BacASable.uvprojx b/soft/PjtKEIL_StepDeb_2/BacASable.uvprojx new file mode 100644 index 0000000..d99d0f0 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_2/BacASable.uvprojx @@ -0,0 +1,1352 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Simu + 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\ + BacASable + 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 + + + Cligno.s + 2 + .\Src\Cligno.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.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\ + BacASable + 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 + + + Cligno.s + 2 + .\Src\Cligno.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + + + + + + + + + + + + + + CibleSondeST + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32F103RB + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + + + + + + + + + + + + + + $$Device:STM32F103RB$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Obj\ + BacASable + 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 + + + Cligno.s + 2 + .\Src\Cligno.s + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.h b/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.h new file mode 100644 index 0000000..bc9b3bd --- /dev/null +++ b/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.h @@ -0,0 +1,345 @@ +/** + * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) + * + * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz + * Modifs : + * enlèvement de tout ce qui est inutile dans le .h + * ajout de fonctions GPIO dans le .c pour utilisation en ASM ou en C : + * - GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) + * - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + * + * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3) + * PWM_Set_Value_On_TIM3_C3( int Val) + * permet en ASM ou en C de fixer la valeur de PWM + + * Ajout de commentaires + + */ +#ifndef DRIVERJEULASER_H__ +#define DRIVERJEULASER_H__ + +#include "stm32f10x.h" + +//********************************************************************************************************** +//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- +//********************************************************************************************************** + +/** + * @brief Configure l'ensemble des horloges du uC + * @note horloge systeme (config statique a 72 MHz pour le STM32F103) + * @param None + * @retval None + */ +void CLOCK_Configure(void); + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée + * @note L' horloge des 4 timers a une fréquence de 72MHz + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Durée_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); + +/** + * Macros de base pour utiliser les timers + */ + // bloque le timer +#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) +// Lance timer +#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); + + + + + + + + + + + +//********************************************************************************************************* +//--------------------- PWM TIM1 to TIM 4 ------------------------------ +//********************************************************************************************************* + +/** + * @brief Configure un timer en PWM + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param voie : un des 4 canaux possibles 1 à 4. + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval Retourne la période en tick (normalement la même que le param d'entrée sauf si PSC utilisé + */ +unsigned short int PWM_Init_ff( TIM_TypeDef *Timer, char Voie, u32 Periode_ticks ); + + + +/** + * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif + * est donc : rcy = Thaut_ticks / Periode_ticks + * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 + * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks + * @retval None + */ +void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure le timer Systick avec une périodicité donnée + * @note Ce timer ne peut servir qu'à créer des temporisations ou générer des interruption + * ce n'est pas à proprement parler un périphérique, il fait partie du Cortex M3 + * Ce timer est un 24 bits + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Systick_Period_ff( unsigned int Periode_ticks ); + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick + * @note + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); + + +/** + * Macros de base pour utiliser le Systick + */ +#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) +#define SysTick_Off ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<0)) +#define SysTick_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1) +#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps + * de fermeture du switch d'acquisition + * @note + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU + * exemple pour 1µs on choisira 72. + * @retval Nombre de Tick réellement pris en compte + */ +unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); + + +/** + * @brief Sélectionne la voie à convertir + * @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Voie_ADC : 1 à 15 + * @retval None + */ +void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); + + + + + +/** + * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également + * la période de débordement du timer + * @note pas besoin de régler le timer avec une autre fonction dédiée timer + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Source : indique le timer qui déclenche l'ADC choix dans les define ci-dessous + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ + +// param pour Source : +#define TIM1_CC1 0 +#define TIM1_CC2 1 +#define TIM1_CC3 2 +#define TIM2_CC2 3 +#define TIM4_CC4 5 +void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); + + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- ANALOG INPUT ADC & DMA ------------------------------ +//********************************************************************************************************** + +/** + * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA + * @note + * @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé + * si '1' le ptr d'@ se recale à celle du début. + * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire + * @retval None + */ +void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); + + + + + +/** + * @brief Lance une DMA sur le nombre de points spécifie. Les resultats seront stockes + * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1 + * @note + * @param NbEchDMA est le nombre d'échantillons à stocker. + * @retval None + */ +void Start_DMA1( u16 NbEchDMA ); + +// arret DMA +#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; + + +/** + * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition + * et du nombre d'echantillons + * @note fonction d'attente (bloquante) + * @param None + * @retval None + */ +void Wait_On_End_Of_DMA1(void); + + + + + + + + +//********************************************************************************************************** +//--------------------- GPIO ------------------------------ +//********************************************************************************************************** + +/** + * @brief Initialisation d'un GPIO (A à C), pin x. + * peut être configuré : + * -> Input ou output + * -> architecture technologique (push-pull, open drain...) + + * @note + * @param Port : GPIOA, GPIOB, GPIOC + * @param Broche : 0 à 15 + * @param Sens : INPUT ou OUTPUT + * @param Techno : voir define ci dessous + * @retval 1 erreur, 0 si OK + */ + +// Sens +#define INPUT 'i' +#define OUTPUT 'o' + +// Techno pour pin en entrée (INPUT) +#define ANALOG 0 +#define INPUT_FLOATING 1 +#define INPUT_PULL_DOWN_UP 2 + +// Techno pour pin en sortie (OUTPUT) +#define OUTPUT_PPULL 0 +#define OUTPUT_OPDRAIN 1 +#define ALT_PPULL 2 +#define ALT_OPDRAIN 3 + +// Exemple : +// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); +// Place le bit 8 du port B en sortie Push-pull +char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); + + +/** + * @brief Mise à 1 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Set(char Broche); +void GPIOB_Set(char Broche); +void GPIOC_Set(char Broche); + + + +/** + * @brief Mise à 0 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Clear(char Broche); +void GPIOB_Clear(char Broche); +void GPIOC_Clear(char Broche); + + +#endif + + diff --git a/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.inc b/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.inc new file mode 100644 index 0000000..48d5e50 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.inc @@ -0,0 +1,56 @@ + +; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) +; Accès en aux fonctions suivantes : +; GPIO : +; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) +; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + +; PWM : +;/** +; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif +; * est donc : rcy = Thaut_ticks / Periode_ticks +; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 +; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks +; * @retval None +; */ + +;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + import PWM_Set_Value_TIM3_Ch3 + + + +;/** +; * @brief Mise à 1 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Set(char Broche); + import GPIOA_Set + +;void GPIOB_Set(char Broche); + import GPIOB_Set + +;void GPIOC_Set(char Broche); + import GPIOC_Set + + + +;/** +; * @brief Mise à 0 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Clear(char Broche); + import GPIOA_Clear + +;void GPIOB_Clear(char Broche); + import GPIOB_Clear + +;void GPIOC_Clear(char Broche); + import GPIOC_Clear + + end diff --git a/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.lib b/soft/PjtKEIL_StepDeb_2/Driver/DriverJeuLaser.lib new file mode 100644 index 0000000000000000000000000000000000000000..b26c40df2f294e9fa6cd17e4d3440493c7223999 GIT binary patch literal 44472 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 Rn0md%VsR{Wl@KT|{69|st#AMU literal 0 HcmV?d00001 diff --git a/soft/PjtKEIL_StepDeb_2/Src/Cligno.s b/soft/PjtKEIL_StepDeb_2/Src/Cligno.s new file mode 100644 index 0000000..8a75b7a --- /dev/null +++ b/soft/PjtKEIL_StepDeb_2/Src/Cligno.s @@ -0,0 +1,30 @@ + PRESERVE8 + THUMB + + +; ====================== 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 + + + + + + + + END \ No newline at end of file diff --git a/soft/PjtKEIL_StepDeb_2/Src/principal.c b/soft/PjtKEIL_StepDeb_2/Src/principal.c new file mode 100644 index 0000000..4d726a1 --- /dev/null +++ b/soft/PjtKEIL_StepDeb_2/Src/principal.c @@ -0,0 +1,61 @@ + + +#include "DriverJeuLaser.h" + +void timer_callback(void); + +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(); + +// configuration du Timer 4 en débordement 100ms + +//** Placez votre code là ** // + + + +// Activation des interruptions issues du Timer 4 +// Association de la fonction à exécuter lors de l'interruption : timer_callback +// cette fonction (si écrite en ASM) doit être conforme à l'AAPCS + +//** Placez votre code là ** // + + + +// configuration de PortB.1 (PB1) en sortie push-pull +GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL); + + + + +//============================================================================ + + +while (1) + { + } +} + +char FlagCligno; + +void timer_callback(void) +{ + if (FlagCligno==1) + { + FlagCligno=0; + GPIOB_Set(1); + } + else + { + FlagCligno=1; + GPIOB_Clear(1); + } + +} + diff --git a/soft/PjtKEIL_StepDeb_2/Src/startup-rvds.s b/soft/PjtKEIL_StepDeb_2/Src/startup-rvds.s new file mode 100644 index 0000000..a7b631a --- /dev/null +++ b/soft/PjtKEIL_StepDeb_2/Src/startup-rvds.s @@ -0,0 +1,335 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. +; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + +; +; Enable UsageFault, MemFault and Busfault interrupts +; +_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 + LDR.W R0, =_SHCSR + LDR R1, [R0] ; Read CPACR + ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts + STR R1, [R0] ; Write back the modified value to the CPACR + DSB ; Wait for store to complete + +; +; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) +; +_AIRCR EQU 0xE000ED0C +_AIRCR_VAL EQU 0x05FA0300 + LDR.W R0, =_AIRCR + LDR.W R1, =_AIRCR_VAL + STR R1,[R0] + +; +; Finaly, jump to main function (void main (void)) +; + LDR R0, =__main + BX R0 + ENDP + +SystemInit PROC + EXPORT SystemInit [WEAK] + BX LR + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.h b/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.h new file mode 100644 index 0000000..bc9b3bd --- /dev/null +++ b/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.h @@ -0,0 +1,345 @@ +/** + * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) + * + * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz + * Modifs : + * enlèvement de tout ce qui est inutile dans le .h + * ajout de fonctions GPIO dans le .c pour utilisation en ASM ou en C : + * - GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) + * - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + * + * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3) + * PWM_Set_Value_On_TIM3_C3( int Val) + * permet en ASM ou en C de fixer la valeur de PWM + + * Ajout de commentaires + + */ +#ifndef DRIVERJEULASER_H__ +#define DRIVERJEULASER_H__ + +#include "stm32f10x.h" + +//********************************************************************************************************** +//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- +//********************************************************************************************************** + +/** + * @brief Configure l'ensemble des horloges du uC + * @note horloge systeme (config statique a 72 MHz pour le STM32F103) + * @param None + * @retval None + */ +void CLOCK_Configure(void); + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée + * @note L' horloge des 4 timers a une fréquence de 72MHz + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Durée_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); + +/** + * Macros de base pour utiliser les timers + */ + // bloque le timer +#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) +// Lance timer +#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); + + + + + + + + + + + +//********************************************************************************************************* +//--------------------- PWM TIM1 to TIM 4 ------------------------------ +//********************************************************************************************************* + +/** + * @brief Configure un timer en PWM + * @note + * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 + * @param voie : un des 4 canaux possibles 1 à 4. + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval Retourne la période en tick (normalement la même que le param d'entrée sauf si PSC utilisé + */ +unsigned short int PWM_Init_ff( TIM_TypeDef *Timer, char Voie, u32 Periode_ticks ); + + + +/** + * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif + * est donc : rcy = Thaut_ticks / Periode_ticks + * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 + * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks + * @retval None + */ +void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Configure le timer Systick avec une périodicité donnée + * @note Ce timer ne peut servir qu'à créer des temporisations ou générer des interruption + * ce n'est pas à proprement parler un périphérique, il fait partie du Cortex M3 + * Ce timer est un 24 bits + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ +void Systick_Period_ff( unsigned int Periode_ticks ); + + + +/** + * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick + * @note + * @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) + * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption + * @retval None + */ +void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); + + +/** + * Macros de base pour utiliser le Systick + */ +#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) +#define SysTick_Off ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<0)) +#define SysTick_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1) +#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ +//********************************************************************************************************** + +/** + * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps + * de fermeture du switch d'acquisition + * @note + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU + * exemple pour 1µs on choisira 72. + * @retval Nombre de Tick réellement pris en compte + */ +unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); + + +/** + * @brief Sélectionne la voie à convertir + * @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Voie_ADC : 1 à 15 + * @retval None + */ +void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); + + + + + +/** + * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également + * la période de débordement du timer + * @note pas besoin de régler le timer avec une autre fonction dédiée timer + * @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 + * @param Source : indique le timer qui déclenche l'ADC choix dans les define ci-dessous + * @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour faire déborder le timer + * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000 + * @retval None + */ + +// param pour Source : +#define TIM1_CC1 0 +#define TIM1_CC2 1 +#define TIM1_CC3 2 +#define TIM2_CC2 3 +#define TIM4_CC4 5 +void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); + + + + + + + + + + + + + + + +//********************************************************************************************************** +//--------------------- ANALOG INPUT ADC & DMA ------------------------------ +//********************************************************************************************************** + +/** + * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA + * @note + * @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé + * si '1' le ptr d'@ se recale à celle du début. + * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire + * @retval None + */ +void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); + + + + + +/** + * @brief Lance une DMA sur le nombre de points spécifie. Les resultats seront stockes + * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1 + * @note + * @param NbEchDMA est le nombre d'échantillons à stocker. + * @retval None + */ +void Start_DMA1( u16 NbEchDMA ); + +// arret DMA +#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; + + +/** + * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition + * et du nombre d'echantillons + * @note fonction d'attente (bloquante) + * @param None + * @retval None + */ +void Wait_On_End_Of_DMA1(void); + + + + + + + + +//********************************************************************************************************** +//--------------------- GPIO ------------------------------ +//********************************************************************************************************** + +/** + * @brief Initialisation d'un GPIO (A à C), pin x. + * peut être configuré : + * -> Input ou output + * -> architecture technologique (push-pull, open drain...) + + * @note + * @param Port : GPIOA, GPIOB, GPIOC + * @param Broche : 0 à 15 + * @param Sens : INPUT ou OUTPUT + * @param Techno : voir define ci dessous + * @retval 1 erreur, 0 si OK + */ + +// Sens +#define INPUT 'i' +#define OUTPUT 'o' + +// Techno pour pin en entrée (INPUT) +#define ANALOG 0 +#define INPUT_FLOATING 1 +#define INPUT_PULL_DOWN_UP 2 + +// Techno pour pin en sortie (OUTPUT) +#define OUTPUT_PPULL 0 +#define OUTPUT_OPDRAIN 1 +#define ALT_PPULL 2 +#define ALT_OPDRAIN 3 + +// Exemple : +// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); +// Place le bit 8 du port B en sortie Push-pull +char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); + + +/** + * @brief Mise à 1 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Set(char Broche); +void GPIOB_Set(char Broche); +void GPIOC_Set(char Broche); + + + +/** + * @brief Mise à 0 d'une broche GPIO + * @note Une fonction par GPIO + * @param Broche : 0 à 15 + * @retval None + */ + +void GPIOA_Clear(char Broche); +void GPIOB_Clear(char Broche); +void GPIOC_Clear(char Broche); + + +#endif + + diff --git a/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.inc b/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.inc new file mode 100644 index 0000000..48d5e50 --- /dev/null +++ b/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.inc @@ -0,0 +1,56 @@ + +; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) +; Accès en aux fonctions suivantes : +; GPIO : +; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) +; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) + +; PWM : +;/** +; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif +; * est donc : rcy = Thaut_ticks / Periode_ticks +; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 +; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks +; * @retval None +; */ + +;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); + import PWM_Set_Value_TIM3_Ch3 + + + +;/** +; * @brief Mise à 1 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Set(char Broche); + import GPIOA_Set + +;void GPIOB_Set(char Broche); + import GPIOB_Set + +;void GPIOC_Set(char Broche); + import GPIOC_Set + + + +;/** +; * @brief Mise à 0 d'une broche GPIO +; * @note Une fonction par GPIO +; * @param Broche : 0 à 15 +; * @retval None +; */ + +;void GPIOA_Clear(char Broche); + import GPIOA_Clear + +;void GPIOB_Clear(char Broche); + import GPIOB_Clear + +;void GPIOC_Clear(char Broche); + import GPIOC_Clear + + end diff --git a/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.lib b/soft/PjtKEIL_StepSon/Driver/DriverJeuLaser.lib new file mode 100644 index 0000000000000000000000000000000000000000..b26c40df2f294e9fa6cd17e4d3440493c7223999 GIT binary patch literal 44472 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 Rn0md%VsR{Wl@KT|{69|st#AMU literal 0 HcmV?d00001 diff --git a/soft/PjtKEIL_StepSon/Src/GestionSon.s b/soft/PjtKEIL_StepSon/Src/GestionSon.s new file mode 100644 index 0000000..8a75b7a --- /dev/null +++ b/soft/PjtKEIL_StepSon/Src/GestionSon.s @@ -0,0 +1,30 @@ + PRESERVE8 + THUMB + + +; ====================== 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 + + + + + + + + END \ No newline at end of file diff --git a/soft/PjtKEIL_StepSon/Src/bruitverre.asm b/soft/PjtKEIL_StepSon/Src/bruitverre.asm new file mode 100644 index 0000000..bf5ba29 --- /dev/null +++ b/soft/PjtKEIL_StepSon/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/soft/PjtKEIL_StepSon/Src/principal.c b/soft/PjtKEIL_StepSon/Src/principal.c new file mode 100644 index 0000000..d09be75 --- /dev/null +++ b/soft/PjtKEIL_StepSon/Src/principal.c @@ -0,0 +1,28 @@ + + +#include "DriverJeuLaser.h" + + + +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(); + + + + + +//============================================================================ + + +while (1) + { + } +} + diff --git a/soft/PjtKEIL_StepSon/Src/startup-rvds.s b/soft/PjtKEIL_StepSon/Src/startup-rvds.s new file mode 100644 index 0000000..a7b631a --- /dev/null +++ b/soft/PjtKEIL_StepSon/Src/startup-rvds.s @@ -0,0 +1,335 @@ +;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** +;* File Name : startup_stm32f10x_md.s +;* Author : MCD Application Team +;* Version : V3.5.0 +;* Date : 11-March-2011 +;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM +;* toolchain. +;* This module performs: +;* - Set the initial SP +;* - Set the initial PC == Reset_Handler +;* - Set the vector table entries with the exceptions ISR address +;* - Configure the clock system +;* - Branches to __main in the C library (which eventually +;* calls main()). +;* After Reset the CortexM3 processor is in Thread mode, +;* priority is Privileged, and the Stack is set to Main. +;* <<< Use Configuration Wizard in Context Menu >>> +;******************************************************************************* +; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +; WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. +; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +;******************************************************************************* + +; Amount of memory (in bytes) allocated for Stack +; Tailor this value to your application needs +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD WWDG_IRQHandler ; Window Watchdog + DCD PVD_IRQHandler ; PVD through EXTI Line detect + DCD TAMPER_IRQHandler ; Tamper + DCD RTC_IRQHandler ; RTC + DCD FLASH_IRQHandler ; Flash + DCD RCC_IRQHandler ; RCC + DCD EXTI0_IRQHandler ; EXTI Line 0 + DCD EXTI1_IRQHandler ; EXTI Line 1 + DCD EXTI2_IRQHandler ; EXTI Line 2 + DCD EXTI3_IRQHandler ; EXTI Line 3 + DCD EXTI4_IRQHandler ; EXTI Line 4 + DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 + DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 + DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 + DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 + DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 + DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 + DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 + DCD ADC1_2_IRQHandler ; ADC1_2 + DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX + DCD USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0 + DCD CAN1_RX1_IRQHandler ; CAN1 RX1 + DCD CAN1_SCE_IRQHandler ; CAN1 SCE + DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 + DCD TIM1_BRK_IRQHandler ; TIM1 Break + DCD TIM1_UP_IRQHandler ; TIM1 Update + DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation + DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare + DCD TIM2_IRQHandler ; TIM2 + DCD TIM3_IRQHandler ; TIM3 + DCD TIM4_IRQHandler ; TIM4 + DCD I2C1_EV_IRQHandler ; I2C1 Event + DCD I2C1_ER_IRQHandler ; I2C1 Error + DCD I2C2_EV_IRQHandler ; I2C2 Event + DCD I2C2_ER_IRQHandler ; I2C2 Error + DCD SPI1_IRQHandler ; SPI1 + DCD SPI2_IRQHandler ; SPI2 + DCD USART1_IRQHandler ; USART1 + DCD USART2_IRQHandler ; USART2 + DCD USART3_IRQHandler ; USART3 + DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 + DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line + DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + AREA |.text|, CODE, READONLY + +; Reset handler +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + + LDR R0, =SystemInit + BLX R0 + +; +; Enable UsageFault, MemFault and Busfault interrupts +; +_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 + LDR.W R0, =_SHCSR + LDR R1, [R0] ; Read CPACR + ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts + STR R1, [R0] ; Write back the modified value to the CPACR + DSB ; Wait for store to complete + +; +; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) +; +_AIRCR EQU 0xE000ED0C +_AIRCR_VAL EQU 0x05FA0300 + LDR.W R0, =_AIRCR + LDR.W R1, =_AIRCR_VAL + STR R1,[R0] + +; +; Finaly, jump to main function (void main (void)) +; + LDR R0, =__main + BX R0 + ENDP + +SystemInit PROC + EXPORT SystemInit [WEAK] + BX LR + ENDP + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +MemManage_Handler\ + PROC + EXPORT MemManage_Handler [WEAK] + B . + ENDP +BusFault_Handler\ + PROC + EXPORT BusFault_Handler [WEAK] + B . + ENDP +UsageFault_Handler\ + PROC + EXPORT UsageFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +DebugMon_Handler\ + PROC + EXPORT DebugMon_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT WWDG_IRQHandler [WEAK] + EXPORT PVD_IRQHandler [WEAK] + EXPORT TAMPER_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT RCC_IRQHandler [WEAK] + EXPORT EXTI0_IRQHandler [WEAK] + EXPORT EXTI1_IRQHandler [WEAK] + EXPORT EXTI2_IRQHandler [WEAK] + EXPORT EXTI3_IRQHandler [WEAK] + EXPORT EXTI4_IRQHandler [WEAK] + EXPORT DMA1_Channel1_IRQHandler [WEAK] + EXPORT DMA1_Channel2_IRQHandler [WEAK] + EXPORT DMA1_Channel3_IRQHandler [WEAK] + EXPORT DMA1_Channel4_IRQHandler [WEAK] + EXPORT DMA1_Channel5_IRQHandler [WEAK] + EXPORT DMA1_Channel6_IRQHandler [WEAK] + EXPORT DMA1_Channel7_IRQHandler [WEAK] + EXPORT ADC1_2_IRQHandler [WEAK] + EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] + EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] + EXPORT CAN1_RX1_IRQHandler [WEAK] + EXPORT CAN1_SCE_IRQHandler [WEAK] + EXPORT EXTI9_5_IRQHandler [WEAK] + EXPORT TIM1_BRK_IRQHandler [WEAK] + EXPORT TIM1_UP_IRQHandler [WEAK] + EXPORT TIM1_TRG_COM_IRQHandler [WEAK] + EXPORT TIM1_CC_IRQHandler [WEAK] + EXPORT TIM2_IRQHandler [WEAK] + EXPORT TIM3_IRQHandler [WEAK] + EXPORT TIM4_IRQHandler [WEAK] + EXPORT I2C1_EV_IRQHandler [WEAK] + EXPORT I2C1_ER_IRQHandler [WEAK] + EXPORT I2C2_EV_IRQHandler [WEAK] + EXPORT I2C2_ER_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT USART1_IRQHandler [WEAK] + EXPORT USART2_IRQHandler [WEAK] + EXPORT USART3_IRQHandler [WEAK] + EXPORT EXTI15_10_IRQHandler [WEAK] + EXPORT RTCAlarm_IRQHandler [WEAK] + EXPORT USBWakeUp_IRQHandler [WEAK] + +WWDG_IRQHandler +PVD_IRQHandler +TAMPER_IRQHandler +RTC_IRQHandler +FLASH_IRQHandler +RCC_IRQHandler +EXTI0_IRQHandler +EXTI1_IRQHandler +EXTI2_IRQHandler +EXTI3_IRQHandler +EXTI4_IRQHandler +DMA1_Channel1_IRQHandler +DMA1_Channel2_IRQHandler +DMA1_Channel3_IRQHandler +DMA1_Channel4_IRQHandler +DMA1_Channel5_IRQHandler +DMA1_Channel6_IRQHandler +DMA1_Channel7_IRQHandler +ADC1_2_IRQHandler +USB_HP_CAN1_TX_IRQHandler +USB_LP_CAN1_RX0_IRQHandler +CAN1_RX1_IRQHandler +CAN1_SCE_IRQHandler +EXTI9_5_IRQHandler +TIM1_BRK_IRQHandler +TIM1_UP_IRQHandler +TIM1_TRG_COM_IRQHandler +TIM1_CC_IRQHandler +TIM2_IRQHandler +TIM3_IRQHandler +TIM4_IRQHandler +I2C1_EV_IRQHandler +I2C1_ER_IRQHandler +I2C2_EV_IRQHandler +I2C2_ER_IRQHandler +SPI1_IRQHandler +SPI2_IRQHandler +USART1_IRQHandler +USART2_IRQHandler +USART3_IRQHandler +EXTI15_10_IRQHandler +RTCAlarm_IRQHandler +USBWakeUp_IRQHandler + + B . + + ENDP + + ALIGN + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + + ALIGN + + ENDIF + + END + +;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** diff --git a/soft/PjtKEIL_StepSon/StepSon.uvoptx b/soft/PjtKEIL_StepSon/StepSon.uvoptx new file mode 100644 index 0000000..a13d7da --- /dev/null +++ b/soft/PjtKEIL_StepSon/StepSon.uvoptx @@ -0,0 +1,677 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + Simu + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=614,0,1208,751,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + 0 + ((portb & 0x00000002) >> 1 & 0x2) >> 1 + FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F160000000000000000000000000000000000000096020008 + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeKEIL + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 0 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + + + + + + + + + + + BIN\UL2CM3.DLL + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + -UAny -O206 -S8 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + CibleSondeST + 0x4 + ARM-ADS + + 8000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 18 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 6 + + + + + + + + + + + STLink\ST-LINKIII-KEIL_SWO.dll + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-1,-1,-1,-1,0)(110=-1,-1,-1,-1,0)(111=-1,-1,-1,-1,0)(1011=-1,-1,-1,-1,0)(180=-1,-1,-1,-1,0)(120=75,104,496,531,0)(121=859,154,1280,581,0)(122=-1,-1,-1,-1,0)(123=-1,-1,-1,-1,0)(140=-1,-1,-1,-1,0)(240=-1,-1,-1,-1,0)(190=-1,-1,-1,-1,0)(200=-1,-1,-1,-1,0)(170=-1,-1,-1,-1,0)(130=-1,-1,-1,-1,0)(131=-1,-1,-1,-1,0)(132=-1,-1,-1,-1,0)(133=-1,-1,-1,-1,0)(160=-1,-1,-1,-1,0)(161=-1,-1,-1,-1,0)(162=-1,-1,-1,-1,0)(210=-1,-1,-1,-1,0)(211=-1,-1,-1,-1,0)(220=-1,-1,-1,-1,0)(221=-1,-1,-1,-1,0)(230=-1,-1,-1,-1,0)(234=-1,-1,-1,-1,0)(231=-1,-1,-1,-1,0)(232=-1,-1,-1,-1,0)(233=-1,-1,-1,-1,0)(150=-1,-1,-1,-1,0)(151=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + 0 + DLGUARM + (105=-1,-1,-1,-1,0) + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM)) + + + 0 + ST-LINKIII-KEIL_SWO + -U066CFF574857847167074929 -O2254 -S0 -C0 -A0 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC800 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM) + + + + + + 1 + 257 + r0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + 0 + ((portb & 0x00000002) >> 1 & 0x2) >> 1 + FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F100000000000000000000000000000000000000096020008 + + + + 1 + 0 + 0 + 2 + 10000000 + + + + + + Sources + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + .\Src\principal.c + principal.c + 0 + 0 + + + + + Sys + 1 + 0 + 0 + 0 + + 2 + 2 + 2 + 0 + 0 + 0 + .\Src\startup-rvds.s + startup-rvds.s + 0 + 0 + + + + + Driver + 1 + 0 + 0 + 0 + + 3 + 3 + 4 + 0 + 0 + 0 + .\Driver\DriverJeuLaser.lib + DriverJeuLaser.lib + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/soft/PjtKEIL_StepSon/StepSon.uvprojx b/soft/PjtKEIL_StepSon/StepSon.uvprojx new file mode 100644 index 0000000..d0b5c10 --- /dev/null +++ b/soft/PjtKEIL_StepSon/StepSon.uvprojx @@ -0,0 +1,1337 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + Simu + 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\ + StepSon + 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 + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.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\ + StepSon + 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 + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + 0 + 0 + 0 + 0 + 0 + 1 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + + + + + + + + + + + + + + CibleSondeST + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::.\ARMCC + 0 + + + STM32F103RB + STMicroelectronics + Keil.STM32F1xx_DFP.2.3.0 + http://www.keil.com/pack/ + IRAM(0x20000000-0x20004FFF) IROM(0x8000000-0x801FFFF) CLOCK(8000000) CPUTYPE("Cortex-M3") + + + + + + + + + + + + + + + $$Device:STM32F103RB$SVD\STM32F103xx.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Obj\ + StepSon + 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 + + + + + Sys + + + startup-rvds.s + 2 + .\Src\startup-rvds.s + + + + + Driver + + + DriverJeuLaser.lib + 4 + .\Driver\DriverJeuLaser.lib + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + + + + + + + <Project Info> + + + + + + 0 + 1 + + + + +
diff --git a/soft/Signal.m b/soft/Signal.m new file mode 100644 index 0000000..b88fee7 --- /dev/null +++ b/soft/Signal.m @@ -0,0 +1,38 @@ +clc +clear + +N = 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(['Signal.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