Compare commits

...

5 commits

Author SHA1 Message Date
El-Khatiri Walid
641ddf4276 Version Lanard 24/05 2023-05-24 19:28:15 +02:00
1ba02718a1 Son 2023-04-18 17:18:50 +02:00
c50692746d 4.4 part 2023-04-18 16:21:17 +02:00
ae92c45251 fin 11-04 2023-04-11 18:17:17 +02:00
73e9252cfe seance du 11 avril 2023-04-11 16:42:58 +02:00
46 changed files with 23397 additions and 16137 deletions

220
.gitignore vendored
View file

@ -1,110 +1,110 @@
# ---> Matlab # ---> Matlab
##--------------------------------------------------- ##---------------------------------------------------
## Remove autosaves generated by the Matlab editor ## Remove autosaves generated by the Matlab editor
## We have git for backups! ## We have git for backups!
##--------------------------------------------------- ##---------------------------------------------------
# Windows default autosave extension # Windows default autosave extension
*.asv *.asv
# OSX / *nix default autosave extension # OSX / *nix default autosave extension
*.m~ *.m~
# Compiled MEX binaries (all platforms) # Compiled MEX binaries (all platforms)
*.mex* *.mex*
# Simulink Code Generation # Simulink Code Generation
slprj/ slprj/
# Session info # Session info
octave-workspace octave-workspace
# Simulink autosave extension # Simulink autosave extension
*.autosave *.autosave
*.slxc *.slxc
#spice #spice
*.raw *.raw
*.log *.log
# A .gitignore for Keil projects. # A .gitignore for Keil projects.
# Taken mostly from http://www.keil.com/support/man/docs/uv4/uv4_b_filetypes.htm # Taken mostly from http://www.keil.com/support/man/docs/uv4/uv4_b_filetypes.htm
# User-specific uVision files # User-specific uVision files
*.opt *.opt
*.uvopt *.uvopt
*.uvoptx *.uvoptx
*.uvgui *.uvgui
*.uvgui.* *.uvgui.*
*.uvguix.* *.uvguix.*
# Listing files # Listing files
*.cod *.cod
*.htm *.htm
*.i *.i
*.lst *.lst
*.map *.map
*.m51 *.m51
*.m66 *.m66
# define exception below if needed # define exception below if needed
*.scr *.scr
# Object and HEX files # Object and HEX files
*.axf *.axf
*.b[0-3][0-9] *.b[0-3][0-9]
*.hex *.hex
*.d *.d
*.crf *.crf
*.elf *.elf
*.hex *.hex
*.h86 *.h86
*.lib *.lib
*.obj *.obj
*.o *.o
*.sbr *.sbr
# Build files # Build files
# define exception below if needed # define exception below if needed
*.bat *.bat
*._ia *._ia
*.__i *.__i
*._ii *._ii
*.scvd *.scvd
# Generated output files # Generated output files
/Listings/* /Listings/*
/Objects/* /Objects/*
DebugConfig DebugConfig
RTE RTE
# Debugger files # Debugger files
# define exception below if needed # define exception below if needed
*.ini *.ini
# Other files # Other files
*.build_log.htm *.build_log.htm
*.cdb *.cdb
*.dep *.dep
*.ic *.ic
*.lin *.lin
*.lnp *.lnp
*.orc *.orc
# define exception below if needed # define exception below if needed
*.pack *.pack
# define exception below if needed # define exception below if needed
*.pdsc *.pdsc
*.plg *.plg
# define exception below if needed # define exception below if needed
*.sct *.sct
*.sfd *.sfd
*.sfr *.sfr
# Miscellaneous # Miscellaneous
*.tra *.tra
*.bin *.bin
*.fed *.fed
*.l1p *.l1p
*.l2p *.l2p
*.iex *.iex
# To explicitly override the above, define any exceptions here; e.g.: # To explicitly override the above, define any exceptions here; e.g.:
# !my_customized_scatter_file.sct # !my_customized_scatter_file.sct

10
LICENSE
View file

@ -1,5 +1,5 @@
Copyright 1989, 1991, 1992 by Carnegie Mellon University Copyright 1989, 1991, 1992 by Carnegie Mellon University
Derivative Work - 1996, 1998-2000 Copyright 1996, 1998-2000 The Regents of the University of California Derivative Work - 1996, 1998-2000 Copyright 1996, 1998-2000 The Regents of the University of California
All Rights Reserved All Rights Reserved
Permission to use, copy, modify and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of CMU and The Regents of the University of California not be used in advertising or publicity pertaining to distribution of the software without specific written permission. Permission to use, copy, modify and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appears in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of CMU and The Regents of the University of California not be used in advertising or publicity pertaining to distribution of the software without specific written permission.
CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CMU OR THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CMU OR THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

140
README.md
View file

@ -1,70 +1,70 @@
# chti23 # chti23
**Si vous ouvrez ce fichier README.md avec `Visual Code Studio`, faites CTRL+K,V pour visualiser le contenu.** **Si vous ouvrez ce fichier README.md avec `Visual Code Studio`, faites CTRL+K,V pour visualiser le contenu.**
Dépôt commun pour le BE chti : Dépôt commun pour le BE chti :
Chaque binome travaille sur ça branche de type grpE_NOM1_NOM2. Chaque binome travaille sur ça branche de type grpE_NOM1_NOM2.
## Guide de travail Git ## Guide de travail Git
--- ---
Une fois l'[installation](#installation) et la branche faite voilà le *workflow* conseillé en TP chez soi à chaque séance de travail. Une fois l'[installation](#installation) et la branche faite voilà le *workflow* conseillé en TP chez soi à chaque séance de travail.
1) Vérifier que l'on est bien sur sa branche grpX_NOM1_NOM2 (sinon faire git checkout NOMDEBREANCHE) et récuppérer tout ce qu'il y a de nouveau sur le dépôt : 1) Vérifier que l'on est bien sur sa branche grpX_NOM1_NOM2 (sinon faire git checkout NOMDEBREANCHE) et récuppérer tout ce qu'il y a de nouveau sur le dépôt :
<code sh> <code sh>
git status git status
git pull git pull
</code> </code>
Là normalement il n'y a pas de conflit... Sinon il faudra les régler et faire un commit (demander à chatGPT ou au prof) Là normalement il n'y a pas de conflit... Sinon il faudra les régler et faire un commit (demander à chatGPT ou au prof)
2) Vous travaillez et modifiez vos fichiers en local. 2) Vous travaillez et modifiez vos fichiers en local.
3) A la fin d'une séance de travail ou d'une étape il faut enregistrer une version nouvelle de son travail (faire un "commit") et pour cela ajouter les nouveautés à enregistrer (faire des "add"). Un git status permet de voir ou on en est et faire ses add. On peut aveuglément tout ajouter. 3) A la fin d'une séance de travail ou d'une étape il faut enregistrer une version nouvelle de son travail (faire un "commit") et pour cela ajouter les nouveautés à enregistrer (faire des "add"). Un git status permet de voir ou on en est et faire ses add. On peut aveuglément tout ajouter.
<code shell> <code shell>
git pull git pull
git status git status
git add * --dry-run git add * --dry-run
</code> </code>
Là vérifier ce que dit le `dry-run` (essai à vide) et que tout ira bien. N'ajouter que du code source pas de fichiers générés parasites etc. Là vérifier ce que dit le `dry-run` (essai à vide) et que tout ira bien. N'ajouter que du code source pas de fichiers générés parasites etc.
<code shell> <code shell>
git add * git add *
git commit -am "TP1 pas fini de rien comprendre" git commit -am "TP1 pas fini de rien comprendre"
git push git push
</code> </code>
## Installation ## Installation
___ ___
Pour celles qui conaisse git voilà le résumé : Pour celles qui conaisse git voilà le résumé :
<code bash> <code bash>
git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git
</code> </code>
### Clone ### Clone
--- ---
* Lancez git bash : "menu windows tapez Git et sélectionnez Git Bash" pour vérifier qu'il est bien installé * Lancez git bash : "menu windows tapez Git et sélectionnez Git Bash" pour vérifier qu'il est bien installé
* Placez vous où bon vous semble et faites un clic droit puis `Git Bash Here`, puis faite un clone du dépot git (hébergé par l'INSA grâce aux étudiantes du club Info) avec la ligne de commande : * Placez vous où bon vous semble et faites un clic droit puis `Git Bash Here`, puis faite un clone du dépot git (hébergé par l'INSA grâce aux étudiantes du club Info) avec la ligne de commande :
<code bash> <code bash>
git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git
</code> </code>
* Pour vérifier, naviguer dans le répertoire `chti23`, faites un clic droit et `Git Bash Here` et tentez de faire la fameuse commande : * Pour vérifier, naviguer dans le répertoire `chti23`, faites un clic droit et `Git Bash Here` et tentez de faire la fameuse commande :
<code bash> <code bash>
git status git status
</code> </code>
> Il se peut qu'un message parlant de **répertoire non secure** s'affiche et propose une ligne de commande dans le message qui doit resembler à : > Il se peut qu'un message parlant de **répertoire non secure** s'affiche et propose une ligne de commande dans le message qui doit resembler à :
> git config --global --add safe.directory '%(prefix)///netapp1/GNIAGNIAGNIA...' > git config --global --add safe.directory '%(prefix)///netapp1/GNIAGNIAGNIA...'
> Faites un copier-coller de cette commande et exécutez-la. > Faites un copier-coller de cette commande et exécutez-la.
> La commande git status doit enfin fonctionner > La commande git status doit enfin fonctionner
Les fichiers sont visibles et partagés ! Les fichiers sont visibles et partagés !

View file

@ -1,68 +1,68 @@
Version 4 Version 4
SHEET 1 1084 820 SHEET 1 1084 820
WIRE 208 16 96 16 WIRE 208 16 96 16
WIRE 784 16 208 16 WIRE 784 16 208 16
WIRE 944 16 864 16 WIRE 944 16 864 16
WIRE 1008 16 944 16 WIRE 1008 16 944 16
WIRE -368 80 -512 80 WIRE -368 80 -512 80
WIRE 96 96 96 16 WIRE 96 96 96 16
WIRE 944 144 944 16 WIRE 944 144 944 16
WIRE -512 176 -512 80 WIRE -512 176 -512 80
WIRE 96 224 96 176 WIRE 96 224 96 176
WIRE 944 256 944 208 WIRE 944 256 944 208
WIRE -512 304 -512 256 WIRE -512 304 -512 256
WIRE 96 384 -48 384 WIRE 96 384 -48 384
WIRE -48 480 -48 384 WIRE -48 480 -48 384
WIRE -48 608 -48 560 WIRE -48 608 -48 560
FLAG -512 304 0 FLAG -512 304 0
FLAG -368 80 Compteur FLAG -368 80 Compteur
FLAG 944 256 0 FLAG 944 256 0
FLAG 1008 16 Filtre FLAG 1008 16 Filtre
FLAG -48 608 0 FLAG -48 608 0
FLAG 96 384 CompValue FLAG 96 384 CompValue
FLAG 208 16 PWM FLAG 208 16 PWM
FLAG 96 224 0 FLAG 96 224 0
SYMBOL voltage -512 160 R0 SYMBOL voltage -512 160 R0
WINDOW 3 -372 78 Left 2 WINDOW 3 -372 78 Left 2
WINDOW 123 0 0 Left 0 WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0 WINDOW 39 0 0 Left 0
SYMATTR Value PULSE(0 3.3 0 5u 0 0 5u) SYMATTR Value PULSE(0 3.3 0 5u 0 0 5u)
SYMATTR InstName V1 SYMATTR InstName V1
SYMBOL cap 928 144 R0 SYMBOL cap 928 144 R0
SYMATTR InstName C1 SYMATTR InstName C1
SYMATTR Value 10n SYMATTR Value 10n
SYMBOL res 880 0 R90 SYMBOL res 880 0 R90
WINDOW 0 0 56 VBottom 2 WINDOW 0 0 56 VBottom 2
WINDOW 3 32 56 VTop 2 WINDOW 3 32 56 VTop 2
SYMATTR InstName R1 SYMATTR InstName R1
SYMATTR Value 3.9k SYMATTR Value 3.9k
SYMBOL voltage -48 464 R0 SYMBOL voltage -48 464 R0
WINDOW 3 49 61 Left 2 WINDOW 3 49 61 Left 2
WINDOW 123 0 0 Left 0 WINDOW 123 0 0 Left 0
WINDOW 39 0 0 Left 0 WINDOW 39 0 0 Left 0
SYMATTR Value SINE(1.65 1 2k) SYMATTR Value SINE(1.65 1 2k)
SYMATTR InstName V2 SYMATTR InstName V2
SYMBOL bv 96 80 R0 SYMBOL bv 96 80 R0
SYMATTR InstName B1 SYMATTR InstName B1
SYMATTR Value V=if(V(CompValue)>V(Compteur),3.3,0) SYMATTR Value V=if(V(CompValue)>V(Compteur),3.3,0)
TEXT 272 256 Left 2 !;ac dec 100 1 10meg TEXT 272 256 Left 2 !;ac dec 100 1 10meg
TEXT 272 296 Left 2 !.tran 0 1.5m 0 0.01u TEXT 272 296 Left 2 !.tran 0 1.5m 0 0.01u
TEXT -880 40 Left 2 ;Compteur de l'unité Timer TEXT -880 40 Left 2 ;Compteur de l'unité Timer
TEXT -96 -24 Left 2 ;Partie PWM de l'unité Timer TEXT -96 -24 Left 2 ;Partie PWM de l'unité Timer
TEXT -904 -56 Left 4 ;TIMER3 TEXT -904 -56 Left 4 ;TIMER3
TEXT 688 80 Left 4 ;PB0 TEXT 688 80 Left 4 ;PB0
TEXT 480 0 Left 2 ;Chanel 3 TEXT 480 0 Left 2 ;Chanel 3
TEXT 384 -168 Left 5 ;STM32F103 TEXT 384 -168 Left 5 ;STM32F103
LINE Normal 688 48 752 -16 LINE Normal 688 48 752 -16
LINE Normal 688 -16 688 48 LINE Normal 688 -16 688 48
LINE Normal 752 48 688 -16 LINE Normal 752 48 688 -16
LINE Normal 752 48 752 48 LINE Normal 752 48 752 48
LINE Normal 720 -208 720 -16 LINE Normal 720 -208 720 -16
LINE Normal 256 -208 720 -208 LINE Normal 256 -208 720 -208
LINE Normal 720 784 720 48 LINE Normal 720 784 720 48
LINE Normal 720 784 720 784 LINE Normal 720 784 720 784
LINE Normal 720 816 720 784 LINE Normal 720 816 720 784
RECTANGLE Normal -192 352 -912 16 2 RECTANGLE Normal -192 352 -912 16 2
RECTANGLE Normal 592 656 -128 -48 2 RECTANGLE Normal 592 656 -128 -48 2
RECTANGLE Normal 640 736 -976 -96 RECTANGLE Normal 640 736 -976 -96
RECTANGLE Normal 752 48 688 -16 RECTANGLE Normal 752 48 688 -16

16
elec/spice/pwm/PWM.net Normal file
View file

@ -0,0 +1,16 @@
* U:\Bureau\grpD_Lanard_ElKhatiri\elec\spice\pwm\PWM.asc
V1 Compteur 0 PULSE(0 3.3 0 5u 0 0 5u)
C1 Filtre 0 10n
R1 Filtre PWM 3.9k
V2 CompValue 0 SINE(1.65 1 2k)
B1 PWM 0 V=if(V(CompValue)>V(Compteur),3.3,0)
;ac dec 100 1 10meg
.tran 0 1.5m 0 0.01u
* Compteur de l'unité Timer
* Partie PWM de l'unité Timer
* TIMER3
* PB0
* Chanel 3
* STM32F103
.backanno
.end

View file

@ -1,31 +1,31 @@
clear all; clear all;
close all; close all;
%% Paramètres %% Paramètres
T = 0.25; % Fenêtre d'observation T = 0.25; % Fenêtre d'observation
M=32; % Nombre d'échantillons dans la fenêtre M=32; % Nombre d'échantillons dans la fenêtre
%% Paramètres déduits %% Paramètres déduits
Te = T/M; % Période d'échantillonnage Te = T/M; % Période d'échantillonnage
Tsim = T-Te; % Instant final de simulation Tsim = T-Te; % Instant final de simulation
Fsin = 4 ; Fsin = 4 ;
%% Calculs préliminaires %% Calculs préliminaires
%% Lancement de simulink %% Lancement de simulink
out=sim("simDFT") out=sim("simDFT")
%% Visualisations temporelle %% Visualisations temporelle
plot(out.sin_continu,'.-'); plot(out.sin_continu,'.-');
hold on; hold on;
plot(out.sin_echanti,'o'); plot(out.sin_echanti,'o');
grid on; grid on;
%% Calcul DFT %% Calcul DFT
%% visualisation DFT %% visualisation DFT
figure(); figure();

View file

@ -1,78 +1,78 @@
/* Fichier devant contenir l'ensemble de fichiers utiles pour le projet LaserQuest /* Fichier devant contenir l'ensemble de fichiers utiles pour le projet LaserQuest
et qui concenent l'affichage sur la valise */ et qui concenent l'affichage sur la valise */
/* mais non disponible en version source pour les étudiants. */ /* mais non disponible en version source pour les étudiants. */
#ifndef _AFFICHAGE_VALISE_H__ #ifndef _AFFICHAGE_VALISE_H__
#define _AFFICHAGE_VALISE_H__ #define _AFFICHAGE_VALISE_H__
#include "stm32f10x.h" #include "stm32f10x.h"
/** /**
* @brief Initialise les périphériques nécessaires à l'affichage sur la Mallette * @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) * 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é * @note Utilise TIM1, PA5, PA6 pour les cibles, PC7 à PC9 pour SPI émulé
* utilise aussi une interruption sut TIM1, prio 8. * utilise aussi une interruption sut TIM1, prio 8.
* @param none * @param none
* @retval None * @retval None
*/ */
void Init_Affichage(void); void Init_Affichage(void);
/** /**
* @brief Prépare l'affichage 2 digit sur l'afficheur demandé * @brief Prépare l'affichage 2 digit sur l'afficheur demandé
* @note Exemple : Prepare_Afficheur(2, 99); * @note Exemple : Prepare_Afficheur(2, 99);
* prépare l'affichage de la valeur 99 sur l'afficheur n°2 * 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() * 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 * @param char Aff : de 1 à 4 ; char Valeur de 0 à 99
* @retval None * @retval None
*/ */
void Prepare_Afficheur(char Aff, char Valeur); void Prepare_Afficheur(char Aff, char Valeur);
void Prepare_Set_Point_Unite(char Aff); void Prepare_Set_Point_Unite(char Aff);
void Prepare_Clear_Point_Unite(char Aff); void Prepare_Clear_Point_Unite(char Aff);
/** /**
* @brief Prépare l'allumage de la LED demandée * @brief Prépare l'allumage de la LED demandée
* @note Exemple : Prepare_Set_LED(LED_Cible_2); * @note Exemple : Prepare_Set_LED(LED_Cible_2);
* prépare l'allumage de la LED correspondant à la cible n°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() * L'action est différée à l'exécution de Mise_A_Jour_Afficheurs_LED()
* @param voir #define ci-dessous * @param voir #define ci-dessous
* @retval None * @retval None
*/ */
void Prepare_Set_LED(char LED); void Prepare_Set_LED(char LED);
void Prepare_Clear_LED(char LED); void Prepare_Clear_LED(char LED);
/** /**
* @brief Effectue l'action d'écriture dans le module d'affichage * @brief Effectue l'action d'écriture dans le module d'affichage
* à partir de tout ce qui a é préparé auparavant. * à partir de tout ce qui a é préparé auparavant.
* @note * @note
* @param None * @param None
* @retval None * @retval None
*/ */
void Mise_A_Jour_Afficheurs_LED(void); void Mise_A_Jour_Afficheurs_LED(void);
/** /**
* @brief Spécifie le capteut actif, à savoir celui effectivement relié * @brief Spécifie le capteut actif, à savoir celui effectivement relié
* aux sorties disponibles sur la malette * aux sorties disponibles sur la malette
* @note Exemple : Choix_Capteur(1) * @note Exemple : Choix_Capteur(1)
* @param 1 à 4 * @param 1 à 4
* @retval None * @retval None
*/ */
void Choix_Capteur(char Capteur); void Choix_Capteur(char Capteur);
// define utile pour la fonction Prepare_Set_LED et Prepare_Clear_LED // define utile pour la fonction Prepare_Set_LED et Prepare_Clear_LED
#define LED_LCD_R 5 #define LED_LCD_R 5
#define LED_LCD_V 4 #define LED_LCD_V 4
#define LED_Cible_4 3 #define LED_Cible_4 3
#define LED_Cible_3 2 #define LED_Cible_3 2
#define LED_Cible_2 1 #define LED_Cible_2 1
#define LED_Cible_1 0 #define LED_Cible_1 0
#endif #endif

View file

@ -1,345 +1,345 @@
/** /**
* Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
* *
* GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz
* Modifs : * Modifs :
* enlèvement de tout ce qui est inutile dans le .h * 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 : * 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_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
* - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(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) * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3)
* PWM_Set_Value_On_TIM3_C3( int Val) * PWM_Set_Value_On_TIM3_C3( int Val)
* permet en ASM ou en C de fixer la valeur de PWM * permet en ASM ou en C de fixer la valeur de PWM
* Ajout de commentaires * Ajout de commentaires
*/ */
#ifndef DRIVERJEULASER_H__ #ifndef DRIVERJEULASER_H__
#define DRIVERJEULASER_H__ #define DRIVERJEULASER_H__
#include "stm32f10x.h" #include "stm32f10x.h"
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- //--------------------- CONFIGURATION CLOCK DU STM32 --------------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure l'ensemble des horloges du uC * @brief Configure l'ensemble des horloges du uC
* @note horloge systeme (config statique a 72 MHz pour le STM32F103) * @note horloge systeme (config statique a 72 MHz pour le STM32F103)
* @param None * @param None
* @retval None * @retval None
*/ */
void CLOCK_Configure(void); void CLOCK_Configure(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ //--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée
* @note L' horloge des 4 timers a une fréquence de 72MHz * @note L' horloge des 4 timers a une fréquence de 72MHz
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks );
/** /**
* Macros de base pour utiliser les timers * Macros de base pour utiliser les timers
*/ */
// bloque le timer // bloque le timer
#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) #define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0)
// Lance timer // Lance timer
#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) #define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0)
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) );
//********************************************************************************************************* //*********************************************************************************************************
//--------------------- PWM TIM1 to TIM 4 ------------------------------ //--------------------- PWM TIM1 to TIM 4 ------------------------------
//********************************************************************************************************* //*********************************************************************************************************
/** /**
* @brief Configure un timer en PWM * @brief Configure un timer en PWM
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param voie : un des 4 canaux possibles 1 à 4. * @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 * @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 * 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é * @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 ); 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 * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
* est donc : rcy = Thaut_ticks / Periode_ticks * est donc : rcy = Thaut_ticks / Periode_ticks
* @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 * @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 * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
* @retval None * @retval None
*/ */
void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure le timer Systick avec une périodicité donnée * @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 * @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 n'est pas à proprement parler un périphérique, il fait partie du Cortex M3
* Ce timer est un 24 bits * Ce timer est un 24 bits
* @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Systick_Period_ff( unsigned int Periode_ticks ); void Systick_Period_ff( unsigned int Periode_ticks );
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement du Systick * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick
* @note * @note
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); void Systick_Prio_IT( char Prio, void (*Systick_function)(void) );
/** /**
* Macros de base pour utiliser le Systick * Macros de base pour utiliser le Systick
*/ */
#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) #define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0)
#define SysTick_Off ((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_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1)
#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) #define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1))
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- 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 * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps
* de fermeture du switch d'acquisition * de fermeture du switch d'acquisition
* @note * @note
* @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 * @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 * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU
* exemple pour 1µs on choisira 72. * exemple pour 1µs on choisira 72.
* @retval Nombre de Tick réellement pris en compte * @retval Nombre de Tick réellement pris en compte
*/ */
unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks );
/** /**
* @brief Sélectionne la voie à convertir * @brief Sélectionne la voie à convertir
* @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO * @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 ADC : précise de quel ADC il s'agit, ADC1 ou ADC2
* @param Voie_ADC : 1 à 15 * @param Voie_ADC : 1 à 15
* @retval None * @retval None
*/ */
void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); 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 * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également
* la période de débordement du timer * la période de débordement du timer
* @note pas besoin de régler le timer avec une autre fonction dédiée 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 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 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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
// param pour Source : // param pour Source :
#define TIM1_CC1 0 #define TIM1_CC1 0
#define TIM1_CC2 1 #define TIM1_CC2 1
#define TIM1_CC3 2 #define TIM1_CC3 2
#define TIM2_CC2 3 #define TIM2_CC2 3
#define TIM4_CC4 5 #define TIM4_CC4 5
void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks );
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- ANALOG INPUT ADC & DMA ------------------------------ //--------------------- ANALOG INPUT ADC & DMA ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Permer de lier l'ADC à un tableau en RAM pour une DMA * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA
* @note * @note
* @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé * @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. * si '1' le ptr d'@ se recale à celle du début.
* @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire
* @retval None * @retval None
*/ */
void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); 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 * @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 * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1
* @note * @note
* @param NbEchDMA est le nombre d'échantillons à stocker. * @param NbEchDMA est le nombre d'échantillons à stocker.
* @retval None * @retval None
*/ */
void Start_DMA1( u16 NbEchDMA ); void Start_DMA1( u16 NbEchDMA );
// arret DMA // arret DMA
#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; #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 * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition
* et du nombre d'echantillons * et du nombre d'echantillons
* @note fonction d'attente (bloquante) * @note fonction d'attente (bloquante)
* @param None * @param None
* @retval None * @retval None
*/ */
void Wait_On_End_Of_DMA1(void); void Wait_On_End_Of_DMA1(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- GPIO ------------------------------ //--------------------- GPIO ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Initialisation d'un GPIO (A à C), pin x. * @brief Initialisation d'un GPIO (A à C), pin x.
* peut être configuré : * peut être configuré :
* -> Input ou output * -> Input ou output
* -> architecture technologique (push-pull, open drain...) * -> architecture technologique (push-pull, open drain...)
* @note * @note
* @param Port : GPIOA, GPIOB, GPIOC * @param Port : GPIOA, GPIOB, GPIOC
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @param Sens : INPUT ou OUTPUT * @param Sens : INPUT ou OUTPUT
* @param Techno : voir define ci dessous * @param Techno : voir define ci dessous
* @retval 1 erreur, 0 si OK * @retval 1 erreur, 0 si OK
*/ */
// Sens // Sens
#define INPUT 'i' #define INPUT 'i'
#define OUTPUT 'o' #define OUTPUT 'o'
// Techno pour pin en entrée (INPUT) // Techno pour pin en entrée (INPUT)
#define ANALOG 0 #define ANALOG 0
#define INPUT_FLOATING 1 #define INPUT_FLOATING 1
#define INPUT_PULL_DOWN_UP 2 #define INPUT_PULL_DOWN_UP 2
// Techno pour pin en sortie (OUTPUT) // Techno pour pin en sortie (OUTPUT)
#define OUTPUT_PPULL 0 #define OUTPUT_PPULL 0
#define OUTPUT_OPDRAIN 1 #define OUTPUT_OPDRAIN 1
#define ALT_PPULL 2 #define ALT_PPULL 2
#define ALT_OPDRAIN 3 #define ALT_OPDRAIN 3
// Exemple : // Exemple :
// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); // Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL);
// Place le bit 8 du port B en sortie Push-pull // Place le bit 8 du port B en sortie Push-pull
char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno);
/** /**
* @brief Mise à 1 d'une broche GPIO * @brief Mise à 1 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Set(char Broche); void GPIOA_Set(char Broche);
void GPIOB_Set(char Broche); void GPIOB_Set(char Broche);
void GPIOC_Set(char Broche); void GPIOC_Set(char Broche);
/** /**
* @brief Mise à 0 d'une broche GPIO * @brief Mise à 0 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Clear(char Broche); void GPIOA_Clear(char Broche);
void GPIOB_Clear(char Broche); void GPIOB_Clear(char Broche);
void GPIOC_Clear(char Broche); void GPIOC_Clear(char Broche);
#endif #endif

View file

@ -1,56 +1,56 @@
; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) ; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
; Accès en aux fonctions suivantes : ; Accès en aux fonctions suivantes :
; GPIO : ; GPIO :
; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) ; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) ; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche)
; PWM : ; PWM :
;/** ;/**
; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif ; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
; * est donc : rcy = Thaut_ticks / Periode_ticks ; * est donc : rcy = Thaut_ticks / Periode_ticks
; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 ; * @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 ; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
; * @retval None ; * @retval None
; */ ; */
;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); ;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
import PWM_Set_Value_TIM3_Ch3 import PWM_Set_Value_TIM3_Ch3
;/** ;/**
; * @brief Mise à 1 d'une broche GPIO ; * @brief Mise à 1 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Set(char Broche); ;void GPIOA_Set(char Broche);
import GPIOA_Set import GPIOA_Set
;void GPIOB_Set(char Broche); ;void GPIOB_Set(char Broche);
import GPIOB_Set import GPIOB_Set
;void GPIOC_Set(char Broche); ;void GPIOC_Set(char Broche);
import GPIOC_Set import GPIOC_Set
;/** ;/**
; * @brief Mise à 0 d'une broche GPIO ; * @brief Mise à 0 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Clear(char Broche); ;void GPIOA_Clear(char Broche);
import GPIOA_Clear import GPIOA_Clear
;void GPIOB_Clear(char Broche); ;void GPIOB_Clear(char Broche);
import GPIOB_Clear import GPIOB_Clear
;void GPIOC_Clear(char Broche); ;void GPIOC_Clear(char Broche);
import GPIOC_Clear import GPIOC_Clear
end end

View file

@ -1,166 +1,211 @@
PRESERVE8 PRESERVE8
THUMB THUMB
; ====================== zone de réservation de données, ====================================== ; ====================== zone de réservation de données, ======================================
;Section RAM (read only) : ;Section RAM (read only) :
area mesdata,data,readonly area mesdata,data,readonly
;Section RAM (read write): ;Section RAM (read write):
area maram,data,readwrite area maram,data,readwrite
; =============================================================================================== ; ===============================================================================================
Index DCD 0
Somme DCD 0
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici ;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
DTF_ModuleAuCarre proc
;Section ROM code (read only) : push{r4}
AREA Trigo, DATA, READONLY push{r5}
; codage fractionnaire 1.15 push{r6}
push{r7}
TabCos push{r8}
DCW 32767 ; 0 0x7fff 0.99997 push{r9}
DCW 32610 ; 1 0x7f62 0.99518
DCW 32138 ; 2 0x7d8a 0.98077 ldr r2, =Index
DCW 31357 ; 3 0x7a7d 0.95694 ldr r3,[r2]
DCW 30274 ; 4 0x7642 0.92389 ldr r4, =TabCos
DCW 28899 ; 5 0x70e3 0.88193 ldr r7, =Somme
DCW 27246 ; 6 0x6a6e 0.83148 ldr r8,[r7]
DCW 25330 ; 7 0x62f2 0.77301
DCW 23170 ; 8 0x5a82 0.70709
DCW 20788 ; 9 0x5134 0.63440 cmp r3 , #63
DCW 18205 ; 10 0x471d 0.55557
DCW 15447 ; 11 0x3c57 0.47141 bne notEqual
DCW 12540 ; 12 0x30fc 0.38269
DCW 9512 ; 13 0x2528 0.29028 pop{r9}
DCW 6393 ; 14 0x18f9 0.19510 pop{r8}
DCW 3212 ; 15 0x0c8c 0.09802 pop{r7}
DCW 0 ; 16 0x0000 0.00000 pop{r6}
DCW -3212 ; 17 0xf374 -0.09802 pop{r5}
DCW -6393 ; 18 0xe707 -0.19510 pop{r4}
DCW -9512 ; 19 0xdad8 -0.29028
DCW -12540 ; 20 0xcf04 -0.38269 bx lr
DCW -15447 ; 21 0xc3a9 -0.47141
DCW -18205 ; 22 0xb8e3 -0.55557 notEqual
DCW -20788 ; 23 0xaecc -0.63440 ldrsh r6,[r0,r3] ;on charge le signal[index]
DCW -23170 ; 24 0xa57e -0.70709 mul r1 , r3 ;k*index
DCW -25330 ; 25 0x9d0e -0.77301 and r1, #32 ; %64
DCW -27246 ; 26 0x9592 -0.83148 ldrsh r5,[r4,r3] ;on charge le TabCos[(k*index%64)]
DCW -28899 ; 27 0x8f1d -0.88193 mul r5,r6 ; on multiplie le signal[index] et le cosinus
DCW -30274 ; 28 0x89be -0.92389 add r7, r5 ; somme = somme + signal*cosinus
DCW -31357 ; 29 0x8583 -0.95694 mov r9, #1
DCW -32138 ; 30 0x8276 -0.98077 add r3, r9 ;index ++
DCW -32610 ; 31 0x809e -0.99518 strh r0,[r3] ;on stocke le résultat dans le registre de retour
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 ENDFUNC
DCW -28899 ; 37 0x8f1d -0.88193
DCW -27246 ; 38 0x9592 -0.83148
DCW -25330 ; 39 0x9d0e -0.77301
DCW -23170 ; 40 0xa57e -0.70709 ;Section ROM code (read only) :
DCW -20788 ; 41 0xaecc -0.63440 AREA Trigo, DATA, READONLY
DCW -18205 ; 42 0xb8e3 -0.55557 ; codage fractionnaire 1.15
DCW -15447 ; 43 0xc3a9 -0.47141
DCW -12540 ; 44 0xcf04 -0.38269 TabCos
DCW -9512 ; 45 0xdad8 -0.29028 DCW 32767 ; 0 0x7fff 0.99997
DCW -6393 ; 46 0xe707 -0.19510 DCW 32610 ; 1 0x7f62 0.99518
DCW -3212 ; 47 0xf374 -0.09802 DCW 32138 ; 2 0x7d8a 0.98077
DCW 0 ; 48 0x0000 0.00000 DCW 31357 ; 3 0x7a7d 0.95694
DCW 3212 ; 49 0x0c8c 0.09802 DCW 30274 ; 4 0x7642 0.92389
DCW 6393 ; 50 0x18f9 0.19510 DCW 28899 ; 5 0x70e3 0.88193
DCW 9512 ; 51 0x2528 0.29028 DCW 27246 ; 6 0x6a6e 0.83148
DCW 12540 ; 52 0x30fc 0.38269 DCW 25330 ; 7 0x62f2 0.77301
DCW 15447 ; 53 0x3c57 0.47141 DCW 23170 ; 8 0x5a82 0.70709
DCW 18205 ; 54 0x471d 0.55557 DCW 20788 ; 9 0x5134 0.63440
DCW 20788 ; 55 0x5134 0.63440 DCW 18205 ; 10 0x471d 0.55557
DCW 23170 ; 56 0x5a82 0.70709 DCW 15447 ; 11 0x3c57 0.47141
DCW 25330 ; 57 0x62f2 0.77301 DCW 12540 ; 12 0x30fc 0.38269
DCW 27246 ; 58 0x6a6e 0.83148 DCW 9512 ; 13 0x2528 0.29028
DCW 28899 ; 59 0x70e3 0.88193 DCW 6393 ; 14 0x18f9 0.19510
DCW 30274 ; 60 0x7642 0.92389 DCW 3212 ; 15 0x0c8c 0.09802
DCW 31357 ; 61 0x7a7d 0.95694 DCW 0 ; 16 0x0000 0.00000
DCW 32138 ; 62 0x7d8a 0.98077 DCW -3212 ; 17 0xf374 -0.09802
DCW 32610 ; 63 0x7f62 0.99518 DCW -6393 ; 18 0xe707 -0.19510
TabSin DCW -9512 ; 19 0xdad8 -0.29028
DCW 0 ; 0 0x0000 0.00000 DCW -12540 ; 20 0xcf04 -0.38269
DCW 3212 ; 1 0x0c8c 0.09802 DCW -15447 ; 21 0xc3a9 -0.47141
DCW 6393 ; 2 0x18f9 0.19510 DCW -18205 ; 22 0xb8e3 -0.55557
DCW 9512 ; 3 0x2528 0.29028 DCW -20788 ; 23 0xaecc -0.63440
DCW 12540 ; 4 0x30fc 0.38269 DCW -23170 ; 24 0xa57e -0.70709
DCW 15447 ; 5 0x3c57 0.47141 DCW -25330 ; 25 0x9d0e -0.77301
DCW 18205 ; 6 0x471d 0.55557 DCW -27246 ; 26 0x9592 -0.83148
DCW 20788 ; 7 0x5134 0.63440 DCW -28899 ; 27 0x8f1d -0.88193
DCW 23170 ; 8 0x5a82 0.70709 DCW -30274 ; 28 0x89be -0.92389
DCW 25330 ; 9 0x62f2 0.77301 DCW -31357 ; 29 0x8583 -0.95694
DCW 27246 ; 10 0x6a6e 0.83148 DCW -32138 ; 30 0x8276 -0.98077
DCW 28899 ; 11 0x70e3 0.88193 DCW -32610 ; 31 0x809e -0.99518
DCW 30274 ; 12 0x7642 0.92389 DCW -32768 ; 32 0x8000 -1.00000
DCW 31357 ; 13 0x7a7d 0.95694 DCW -32610 ; 33 0x809e -0.99518
DCW 32138 ; 14 0x7d8a 0.98077 DCW -32138 ; 34 0x8276 -0.98077
DCW 32610 ; 15 0x7f62 0.99518 DCW -31357 ; 35 0x8583 -0.95694
DCW 32767 ; 16 0x7fff 0.99997 DCW -30274 ; 36 0x89be -0.92389
DCW 32610 ; 17 0x7f62 0.99518 DCW -28899 ; 37 0x8f1d -0.88193
DCW 32138 ; 18 0x7d8a 0.98077 DCW -27246 ; 38 0x9592 -0.83148
DCW 31357 ; 19 0x7a7d 0.95694 DCW -25330 ; 39 0x9d0e -0.77301
DCW 30274 ; 20 0x7642 0.92389 DCW -23170 ; 40 0xa57e -0.70709
DCW 28899 ; 21 0x70e3 0.88193 DCW -20788 ; 41 0xaecc -0.63440
DCW 27246 ; 22 0x6a6e 0.83148 DCW -18205 ; 42 0xb8e3 -0.55557
DCW 25330 ; 23 0x62f2 0.77301 DCW -15447 ; 43 0xc3a9 -0.47141
DCW 23170 ; 24 0x5a82 0.70709 DCW -12540 ; 44 0xcf04 -0.38269
DCW 20788 ; 25 0x5134 0.63440 DCW -9512 ; 45 0xdad8 -0.29028
DCW 18205 ; 26 0x471d 0.55557 DCW -6393 ; 46 0xe707 -0.19510
DCW 15447 ; 27 0x3c57 0.47141 DCW -3212 ; 47 0xf374 -0.09802
DCW 12540 ; 28 0x30fc 0.38269 DCW 0 ; 48 0x0000 0.00000
DCW 9512 ; 29 0x2528 0.29028 DCW 3212 ; 49 0x0c8c 0.09802
DCW 6393 ; 30 0x18f9 0.19510 DCW 6393 ; 50 0x18f9 0.19510
DCW 3212 ; 31 0x0c8c 0.09802 DCW 9512 ; 51 0x2528 0.29028
DCW 0 ; 32 0x0000 0.00000 DCW 12540 ; 52 0x30fc 0.38269
DCW -3212 ; 33 0xf374 -0.09802 DCW 15447 ; 53 0x3c57 0.47141
DCW -6393 ; 34 0xe707 -0.19510 DCW 18205 ; 54 0x471d 0.55557
DCW -9512 ; 35 0xdad8 -0.29028 DCW 20788 ; 55 0x5134 0.63440
DCW -12540 ; 36 0xcf04 -0.38269 DCW 23170 ; 56 0x5a82 0.70709
DCW -15447 ; 37 0xc3a9 -0.47141 DCW 25330 ; 57 0x62f2 0.77301
DCW -18205 ; 38 0xb8e3 -0.55557 DCW 27246 ; 58 0x6a6e 0.83148
DCW -20788 ; 39 0xaecc -0.63440 DCW 28899 ; 59 0x70e3 0.88193
DCW -23170 ; 40 0xa57e -0.70709 DCW 30274 ; 60 0x7642 0.92389
DCW -25330 ; 41 0x9d0e -0.77301 DCW 31357 ; 61 0x7a7d 0.95694
DCW -27246 ; 42 0x9592 -0.83148 DCW 32138 ; 62 0x7d8a 0.98077
DCW -28899 ; 43 0x8f1d -0.88193 DCW 32610 ; 63 0x7f62 0.99518
DCW -30274 ; 44 0x89be -0.92389 TabSin
DCW -31357 ; 45 0x8583 -0.95694 DCW 0 ; 0 0x0000 0.00000
DCW -32138 ; 46 0x8276 -0.98077 DCW 3212 ; 1 0x0c8c 0.09802
DCW -32610 ; 47 0x809e -0.99518 DCW 6393 ; 2 0x18f9 0.19510
DCW -32768 ; 48 0x8000 -1.00000 DCW 9512 ; 3 0x2528 0.29028
DCW -32610 ; 49 0x809e -0.99518 DCW 12540 ; 4 0x30fc 0.38269
DCW -32138 ; 50 0x8276 -0.98077 DCW 15447 ; 5 0x3c57 0.47141
DCW -31357 ; 51 0x8583 -0.95694 DCW 18205 ; 6 0x471d 0.55557
DCW -30274 ; 52 0x89be -0.92389 DCW 20788 ; 7 0x5134 0.63440
DCW -28899 ; 53 0x8f1d -0.88193 DCW 23170 ; 8 0x5a82 0.70709
DCW -27246 ; 54 0x9592 -0.83148 DCW 25330 ; 9 0x62f2 0.77301
DCW -25330 ; 55 0x9d0e -0.77301 DCW 27246 ; 10 0x6a6e 0.83148
DCW -23170 ; 56 0xa57e -0.70709 DCW 28899 ; 11 0x70e3 0.88193
DCW -20788 ; 57 0xaecc -0.63440 DCW 30274 ; 12 0x7642 0.92389
DCW -18205 ; 58 0xb8e3 -0.55557 DCW 31357 ; 13 0x7a7d 0.95694
DCW -15447 ; 59 0xc3a9 -0.47141 DCW 32138 ; 14 0x7d8a 0.98077
DCW -12540 ; 60 0xcf04 -0.38269 DCW 32610 ; 15 0x7f62 0.99518
DCW -9512 ; 61 0xdad8 -0.29028 DCW 32767 ; 16 0x7fff 0.99997
DCW -6393 ; 62 0xe707 -0.19510 DCW 32610 ; 17 0x7f62 0.99518
DCW -3212 ; 63 0xf374 -0.09802 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 END

View file

@ -1,68 +1,69 @@
AREA Signal, DATA, READONLY AREA Signal, DATA, READONLY
export LeSignal export LeSignal
LeSignal
DCW 0x0fff ; 0 4095 0.99976 LeSignal
DCW 0x0ff6 ; 1 4086 0.99756 DCW 0x0fff ; 0 4095 0.99976
DCW 0x0fd9 ; 2 4057 0.99048 DCW 0x0ff6 ; 1 4086 0.99756
DCW 0x0fa8 ; 3 4008 0.97852 DCW 0x0fd9 ; 2 4057 0.99048
DCW 0x0f64 ; 4 3940 0.96191 DCW 0x0fa8 ; 3 4008 0.97852
DCW 0x0f0e ; 5 3854 0.94092 DCW 0x0f64 ; 4 3940 0.96191
DCW 0x0ea7 ; 6 3751 0.91577 DCW 0x0f0e ; 5 3854 0.94092
DCW 0x0e2f ; 7 3631 0.88647 DCW 0x0ea7 ; 6 3751 0.91577
DCW 0x0da8 ; 8 3496 0.85352 DCW 0x0e2f ; 7 3631 0.88647
DCW 0x0d13 ; 9 3347 0.81714 DCW 0x0da8 ; 8 3496 0.85352
DCW 0x0c72 ; 10 3186 0.77783 DCW 0x0d13 ; 9 3347 0.81714
DCW 0x0bc5 ; 11 3013 0.73560 DCW 0x0c72 ; 10 3186 0.77783
DCW 0x0b10 ; 12 2832 0.69141 DCW 0x0bc5 ; 11 3013 0.73560
DCW 0x0a53 ; 13 2643 0.64526 DCW 0x0b10 ; 12 2832 0.69141
DCW 0x0990 ; 14 2448 0.59766 DCW 0x0a53 ; 13 2643 0.64526
DCW 0x08c9 ; 15 2249 0.54907 DCW 0x0990 ; 14 2448 0.59766
DCW 0x0800 ; 16 2048 0.50000 DCW 0x08c9 ; 15 2249 0.54907
DCW 0x0737 ; 17 1847 0.45093 DCW 0x0800 ; 16 2048 0.50000
DCW 0x0670 ; 18 1648 0.40234 DCW 0x0737 ; 17 1847 0.45093
DCW 0x05ad ; 19 1453 0.35474 DCW 0x0670 ; 18 1648 0.40234
DCW 0x04f0 ; 20 1264 0.30859 DCW 0x05ad ; 19 1453 0.35474
DCW 0x043b ; 21 1083 0.26440 DCW 0x04f0 ; 20 1264 0.30859
DCW 0x038e ; 22 910 0.22217 DCW 0x043b ; 21 1083 0.26440
DCW 0x02ed ; 23 749 0.18286 DCW 0x038e ; 22 910 0.22217
DCW 0x0258 ; 24 600 0.14648 DCW 0x02ed ; 23 749 0.18286
DCW 0x01d1 ; 25 465 0.11353 DCW 0x0258 ; 24 600 0.14648
DCW 0x0159 ; 26 345 0.08423 DCW 0x01d1 ; 25 465 0.11353
DCW 0x00f2 ; 27 242 0.05908 DCW 0x0159 ; 26 345 0.08423
DCW 0x009c ; 28 156 0.03809 DCW 0x00f2 ; 27 242 0.05908
DCW 0x0058 ; 29 88 0.02148 DCW 0x009c ; 28 156 0.03809
DCW 0x0027 ; 30 39 0.00952 DCW 0x0058 ; 29 88 0.02148
DCW 0x000a ; 31 10 0.00244 DCW 0x0027 ; 30 39 0.00952
DCW 0x0000 ; 32 0 0.00000 DCW 0x000a ; 31 10 0.00244
DCW 0x000a ; 33 10 0.00244 DCW 0x0000 ; 32 0 0.00000
DCW 0x0027 ; 34 39 0.00952 DCW 0x000a ; 33 10 0.00244
DCW 0x0058 ; 35 88 0.02148 DCW 0x0027 ; 34 39 0.00952
DCW 0x009c ; 36 156 0.03809 DCW 0x0058 ; 35 88 0.02148
DCW 0x00f2 ; 37 242 0.05908 DCW 0x009c ; 36 156 0.03809
DCW 0x0159 ; 38 345 0.08423 DCW 0x00f2 ; 37 242 0.05908
DCW 0x01d1 ; 39 465 0.11353 DCW 0x0159 ; 38 345 0.08423
DCW 0x0258 ; 40 600 0.14648 DCW 0x01d1 ; 39 465 0.11353
DCW 0x02ed ; 41 749 0.18286 DCW 0x0258 ; 40 600 0.14648
DCW 0x038e ; 42 910 0.22217 DCW 0x02ed ; 41 749 0.18286
DCW 0x043b ; 43 1083 0.26440 DCW 0x038e ; 42 910 0.22217
DCW 0x04f0 ; 44 1264 0.30859 DCW 0x043b ; 43 1083 0.26440
DCW 0x05ad ; 45 1453 0.35474 DCW 0x04f0 ; 44 1264 0.30859
DCW 0x0670 ; 46 1648 0.40234 DCW 0x05ad ; 45 1453 0.35474
DCW 0x0737 ; 47 1847 0.45093 DCW 0x0670 ; 46 1648 0.40234
DCW 0x0800 ; 48 2048 0.50000 DCW 0x0737 ; 47 1847 0.45093
DCW 0x08c9 ; 49 2249 0.54907 DCW 0x0800 ; 48 2048 0.50000
DCW 0x0990 ; 50 2448 0.59766 DCW 0x08c9 ; 49 2249 0.54907
DCW 0x0a53 ; 51 2643 0.64526 DCW 0x0990 ; 50 2448 0.59766
DCW 0x0b10 ; 52 2832 0.69141 DCW 0x0a53 ; 51 2643 0.64526
DCW 0x0bc5 ; 53 3013 0.73560 DCW 0x0b10 ; 52 2832 0.69141
DCW 0x0c72 ; 54 3186 0.77783 DCW 0x0bc5 ; 53 3013 0.73560
DCW 0x0d13 ; 55 3347 0.81714 DCW 0x0c72 ; 54 3186 0.77783
DCW 0x0da8 ; 56 3496 0.85352 DCW 0x0d13 ; 55 3347 0.81714
DCW 0x0e2f ; 57 3631 0.88647 DCW 0x0da8 ; 56 3496 0.85352
DCW 0x0ea7 ; 58 3751 0.91577 DCW 0x0e2f ; 57 3631 0.88647
DCW 0x0f0e ; 59 3854 0.94092 DCW 0x0ea7 ; 58 3751 0.91577
DCW 0x0f64 ; 60 3940 0.96191 DCW 0x0f0e ; 59 3854 0.94092
DCW 0x0fa8 ; 61 4008 0.97852 DCW 0x0f64 ; 60 3940 0.96191
DCW 0x0fd9 ; 62 4057 0.99048 DCW 0x0fa8 ; 61 4008 0.97852
DCW 0x0ff6 ; 63 4086 0.99756 DCW 0x0fd9 ; 62 4057 0.99048
END DCW 0x0ff6 ; 63 4086 0.99756
END

View file

@ -1,28 +1,27 @@
#include "DriverJeuLaser.h" #include "DriverJeuLaser.h"
extern int DFT_ModuleAuCarre( short int * Signal64ech, char k) ;
int main(void)
int main(void) {
{
// ===========================================================================
// =========================================================================== // ============= INIT PERIPH (faites qu'une seule fois) =====================
// ============= INIT PERIPH (faites qu'une seule fois) ===================== // ===========================================================================
// ===========================================================================
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers CLOCK_Configure();
CLOCK_Configure();
//============================================================================
//============================================================================
while (1)
while (1) {
{ }
} }
}

View file

@ -1,335 +1,335 @@
;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* File Name : startup_stm32f10x_md.s ;* File Name : startup_stm32f10x_md.s
;* Author : MCD Application Team ;* Author : MCD Application Team
;* Version : V3.5.0 ;* Version : V3.5.0
;* Date : 11-March-2011 ;* Date : 11-March-2011
;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM ;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM
;* toolchain. ;* toolchain.
;* This module performs: ;* This module performs:
;* - Set the initial SP ;* - Set the initial SP
;* - Set the initial PC == Reset_Handler ;* - Set the initial PC == Reset_Handler
;* - Set the vector table entries with the exceptions ISR address ;* - Set the vector table entries with the exceptions ISR address
;* - Configure the clock system ;* - Configure the clock system
;* - Branches to __main in the C library (which eventually ;* - Branches to __main in the C library (which eventually
;* calls main()). ;* calls main()).
;* After Reset the CortexM3 processor is in Thread mode, ;* After Reset the CortexM3 processor is in Thread mode,
;* priority is Privileged, and the Stack is set to Main. ;* priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>> ;* <<< Use Configuration Wizard in Context Menu >>>
;******************************************************************************* ;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; 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. ; 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, ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; 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 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;******************************************************************************* ;*******************************************************************************
; Amount of memory (in bytes) allocated for Stack ; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs ; Tailor this value to your application needs
; <h> Stack Configuration ; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Stack_Size EQU 0x00000400 Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3 AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size Stack_Mem SPACE Stack_Size
__initial_sp __initial_sp
; <h> Heap Configuration ; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Heap_Size EQU 0x00000200 Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3 AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base __heap_base
Heap_Mem SPACE Heap_Size Heap_Mem SPACE Heap_Size
__heap_limit __heap_limit
PRESERVE8 PRESERVE8
THUMB THUMB
; Vector Table Mapped to Address 0 at Reset ; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY AREA RESET, DATA, READONLY
EXPORT __Vectors EXPORT __Vectors
EXPORT __Vectors_End EXPORT __Vectors_End
EXPORT __Vectors_Size EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack __Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler DCD SysTick_Handler ; SysTick Handler
; External Interrupts ; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog DCD WWDG_IRQHandler ; Window Watchdog
DCD PVD_IRQHandler ; PVD through EXTI Line detect DCD PVD_IRQHandler ; PVD through EXTI Line detect
DCD TAMPER_IRQHandler ; Tamper DCD TAMPER_IRQHandler ; Tamper
DCD RTC_IRQHandler ; RTC DCD RTC_IRQHandler ; RTC
DCD FLASH_IRQHandler ; Flash DCD FLASH_IRQHandler ; Flash
DCD RCC_IRQHandler ; RCC DCD RCC_IRQHandler ; RCC
DCD EXTI0_IRQHandler ; EXTI Line 0 DCD EXTI0_IRQHandler ; EXTI Line 0
DCD EXTI1_IRQHandler ; EXTI Line 1 DCD EXTI1_IRQHandler ; EXTI Line 1
DCD EXTI2_IRQHandler ; EXTI Line 2 DCD EXTI2_IRQHandler ; EXTI Line 2
DCD EXTI3_IRQHandler ; EXTI Line 3 DCD EXTI3_IRQHandler ; EXTI Line 3
DCD EXTI4_IRQHandler ; EXTI Line 4 DCD EXTI4_IRQHandler ; EXTI Line 4
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7
DCD ADC1_2_IRQHandler ; ADC1_2 DCD ADC1_2_IRQHandler ; ADC1_2
DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX 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 USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0
DCD CAN1_RX1_IRQHandler ; CAN1 RX1 DCD CAN1_RX1_IRQHandler ; CAN1 RX1
DCD CAN1_SCE_IRQHandler ; CAN1 SCE DCD CAN1_SCE_IRQHandler ; CAN1 SCE
DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 DCD EXTI9_5_IRQHandler ; EXTI Line 9..5
DCD TIM1_BRK_IRQHandler ; TIM1 Break DCD TIM1_BRK_IRQHandler ; TIM1 Break
DCD TIM1_UP_IRQHandler ; TIM1 Update DCD TIM1_UP_IRQHandler ; TIM1 Update
DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM2_IRQHandler ; TIM2 DCD TIM2_IRQHandler ; TIM2
DCD TIM3_IRQHandler ; TIM3 DCD TIM3_IRQHandler ; TIM3
DCD TIM4_IRQHandler ; TIM4 DCD TIM4_IRQHandler ; TIM4
DCD I2C1_EV_IRQHandler ; I2C1 Event DCD I2C1_EV_IRQHandler ; I2C1 Event
DCD I2C1_ER_IRQHandler ; I2C1 Error DCD I2C1_ER_IRQHandler ; I2C1 Error
DCD I2C2_EV_IRQHandler ; I2C2 Event DCD I2C2_EV_IRQHandler ; I2C2 Event
DCD I2C2_ER_IRQHandler ; I2C2 Error DCD I2C2_ER_IRQHandler ; I2C2 Error
DCD SPI1_IRQHandler ; SPI1 DCD SPI1_IRQHandler ; SPI1
DCD SPI2_IRQHandler ; SPI2 DCD SPI2_IRQHandler ; SPI2
DCD USART1_IRQHandler ; USART1 DCD USART1_IRQHandler ; USART1
DCD USART2_IRQHandler ; USART2 DCD USART2_IRQHandler ; USART2
DCD USART3_IRQHandler ; USART3 DCD USART3_IRQHandler ; USART3
DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line
DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend
__Vectors_End __Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors __Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY
; Reset handler ; Reset handler
Reset_Handler PROC Reset_Handler PROC
EXPORT Reset_Handler [WEAK] EXPORT Reset_Handler [WEAK]
IMPORT __main IMPORT __main
LDR R0, =SystemInit LDR R0, =SystemInit
BLX R0 BLX R0
; ;
; Enable UsageFault, MemFault and Busfault interrupts ; Enable UsageFault, MemFault and Busfault interrupts
; ;
_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 _SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24
LDR.W R0, =_SHCSR LDR.W R0, =_SHCSR
LDR R1, [R0] ; Read CPACR LDR R1, [R0] ; Read CPACR
ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts 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 STR R1, [R0] ; Write back the modified value to the CPACR
DSB ; Wait for store to complete DSB ; Wait for store to complete
; ;
; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) ; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority)
; ;
_AIRCR EQU 0xE000ED0C _AIRCR EQU 0xE000ED0C
_AIRCR_VAL EQU 0x05FA0300 _AIRCR_VAL EQU 0x05FA0300
LDR.W R0, =_AIRCR LDR.W R0, =_AIRCR
LDR.W R1, =_AIRCR_VAL LDR.W R1, =_AIRCR_VAL
STR R1,[R0] STR R1,[R0]
; ;
; Finaly, jump to main function (void main (void)) ; Finaly, jump to main function (void main (void))
; ;
LDR R0, =__main LDR R0, =__main
BX R0 BX R0
ENDP ENDP
SystemInit PROC SystemInit PROC
EXPORT SystemInit [WEAK] EXPORT SystemInit [WEAK]
BX LR BX LR
ENDP ENDP
; Dummy Exception Handlers (infinite loops which can be modified) ; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC NMI_Handler PROC
EXPORT NMI_Handler [WEAK] EXPORT NMI_Handler [WEAK]
B . B .
ENDP ENDP
HardFault_Handler\ HardFault_Handler\
PROC PROC
EXPORT HardFault_Handler [WEAK] EXPORT HardFault_Handler [WEAK]
B . B .
ENDP ENDP
MemManage_Handler\ MemManage_Handler\
PROC PROC
EXPORT MemManage_Handler [WEAK] EXPORT MemManage_Handler [WEAK]
B . B .
ENDP ENDP
BusFault_Handler\ BusFault_Handler\
PROC PROC
EXPORT BusFault_Handler [WEAK] EXPORT BusFault_Handler [WEAK]
B . B .
ENDP ENDP
UsageFault_Handler\ UsageFault_Handler\
PROC PROC
EXPORT UsageFault_Handler [WEAK] EXPORT UsageFault_Handler [WEAK]
B . B .
ENDP ENDP
SVC_Handler PROC SVC_Handler PROC
EXPORT SVC_Handler [WEAK] EXPORT SVC_Handler [WEAK]
B . B .
ENDP ENDP
DebugMon_Handler\ DebugMon_Handler\
PROC PROC
EXPORT DebugMon_Handler [WEAK] EXPORT DebugMon_Handler [WEAK]
B . B .
ENDP ENDP
PendSV_Handler PROC PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK] EXPORT PendSV_Handler [WEAK]
B . B .
ENDP ENDP
SysTick_Handler PROC SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK] EXPORT SysTick_Handler [WEAK]
B . B .
ENDP ENDP
Default_Handler PROC Default_Handler PROC
EXPORT WWDG_IRQHandler [WEAK] EXPORT WWDG_IRQHandler [WEAK]
EXPORT PVD_IRQHandler [WEAK] EXPORT PVD_IRQHandler [WEAK]
EXPORT TAMPER_IRQHandler [WEAK] EXPORT TAMPER_IRQHandler [WEAK]
EXPORT RTC_IRQHandler [WEAK] EXPORT RTC_IRQHandler [WEAK]
EXPORT FLASH_IRQHandler [WEAK] EXPORT FLASH_IRQHandler [WEAK]
EXPORT RCC_IRQHandler [WEAK] EXPORT RCC_IRQHandler [WEAK]
EXPORT EXTI0_IRQHandler [WEAK] EXPORT EXTI0_IRQHandler [WEAK]
EXPORT EXTI1_IRQHandler [WEAK] EXPORT EXTI1_IRQHandler [WEAK]
EXPORT EXTI2_IRQHandler [WEAK] EXPORT EXTI2_IRQHandler [WEAK]
EXPORT EXTI3_IRQHandler [WEAK] EXPORT EXTI3_IRQHandler [WEAK]
EXPORT EXTI4_IRQHandler [WEAK] EXPORT EXTI4_IRQHandler [WEAK]
EXPORT DMA1_Channel1_IRQHandler [WEAK] EXPORT DMA1_Channel1_IRQHandler [WEAK]
EXPORT DMA1_Channel2_IRQHandler [WEAK] EXPORT DMA1_Channel2_IRQHandler [WEAK]
EXPORT DMA1_Channel3_IRQHandler [WEAK] EXPORT DMA1_Channel3_IRQHandler [WEAK]
EXPORT DMA1_Channel4_IRQHandler [WEAK] EXPORT DMA1_Channel4_IRQHandler [WEAK]
EXPORT DMA1_Channel5_IRQHandler [WEAK] EXPORT DMA1_Channel5_IRQHandler [WEAK]
EXPORT DMA1_Channel6_IRQHandler [WEAK] EXPORT DMA1_Channel6_IRQHandler [WEAK]
EXPORT DMA1_Channel7_IRQHandler [WEAK] EXPORT DMA1_Channel7_IRQHandler [WEAK]
EXPORT ADC1_2_IRQHandler [WEAK] EXPORT ADC1_2_IRQHandler [WEAK]
EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK]
EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK]
EXPORT CAN1_RX1_IRQHandler [WEAK] EXPORT CAN1_RX1_IRQHandler [WEAK]
EXPORT CAN1_SCE_IRQHandler [WEAK] EXPORT CAN1_SCE_IRQHandler [WEAK]
EXPORT EXTI9_5_IRQHandler [WEAK] EXPORT EXTI9_5_IRQHandler [WEAK]
EXPORT TIM1_BRK_IRQHandler [WEAK] EXPORT TIM1_BRK_IRQHandler [WEAK]
EXPORT TIM1_UP_IRQHandler [WEAK] EXPORT TIM1_UP_IRQHandler [WEAK]
EXPORT TIM1_TRG_COM_IRQHandler [WEAK] EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
EXPORT TIM1_CC_IRQHandler [WEAK] EXPORT TIM1_CC_IRQHandler [WEAK]
EXPORT TIM2_IRQHandler [WEAK] EXPORT TIM2_IRQHandler [WEAK]
EXPORT TIM3_IRQHandler [WEAK] EXPORT TIM3_IRQHandler [WEAK]
EXPORT TIM4_IRQHandler [WEAK] EXPORT TIM4_IRQHandler [WEAK]
EXPORT I2C1_EV_IRQHandler [WEAK] EXPORT I2C1_EV_IRQHandler [WEAK]
EXPORT I2C1_ER_IRQHandler [WEAK] EXPORT I2C1_ER_IRQHandler [WEAK]
EXPORT I2C2_EV_IRQHandler [WEAK] EXPORT I2C2_EV_IRQHandler [WEAK]
EXPORT I2C2_ER_IRQHandler [WEAK] EXPORT I2C2_ER_IRQHandler [WEAK]
EXPORT SPI1_IRQHandler [WEAK] EXPORT SPI1_IRQHandler [WEAK]
EXPORT SPI2_IRQHandler [WEAK] EXPORT SPI2_IRQHandler [WEAK]
EXPORT USART1_IRQHandler [WEAK] EXPORT USART1_IRQHandler [WEAK]
EXPORT USART2_IRQHandler [WEAK] EXPORT USART2_IRQHandler [WEAK]
EXPORT USART3_IRQHandler [WEAK] EXPORT USART3_IRQHandler [WEAK]
EXPORT EXTI15_10_IRQHandler [WEAK] EXPORT EXTI15_10_IRQHandler [WEAK]
EXPORT RTCAlarm_IRQHandler [WEAK] EXPORT RTCAlarm_IRQHandler [WEAK]
EXPORT USBWakeUp_IRQHandler [WEAK] EXPORT USBWakeUp_IRQHandler [WEAK]
WWDG_IRQHandler WWDG_IRQHandler
PVD_IRQHandler PVD_IRQHandler
TAMPER_IRQHandler TAMPER_IRQHandler
RTC_IRQHandler RTC_IRQHandler
FLASH_IRQHandler FLASH_IRQHandler
RCC_IRQHandler RCC_IRQHandler
EXTI0_IRQHandler EXTI0_IRQHandler
EXTI1_IRQHandler EXTI1_IRQHandler
EXTI2_IRQHandler EXTI2_IRQHandler
EXTI3_IRQHandler EXTI3_IRQHandler
EXTI4_IRQHandler EXTI4_IRQHandler
DMA1_Channel1_IRQHandler DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler TIM1_CC_IRQHandler
TIM2_IRQHandler TIM2_IRQHandler
TIM3_IRQHandler TIM3_IRQHandler
TIM4_IRQHandler TIM4_IRQHandler
I2C1_EV_IRQHandler I2C1_EV_IRQHandler
I2C1_ER_IRQHandler I2C1_ER_IRQHandler
I2C2_EV_IRQHandler I2C2_EV_IRQHandler
I2C2_ER_IRQHandler I2C2_ER_IRQHandler
SPI1_IRQHandler SPI1_IRQHandler
SPI2_IRQHandler SPI2_IRQHandler
USART1_IRQHandler USART1_IRQHandler
USART2_IRQHandler USART2_IRQHandler
USART3_IRQHandler USART3_IRQHandler
EXTI15_10_IRQHandler EXTI15_10_IRQHandler
RTCAlarm_IRQHandler RTCAlarm_IRQHandler
USBWakeUp_IRQHandler USBWakeUp_IRQHandler
B . B .
ENDP ENDP
ALIGN ALIGN
;******************************************************************************* ;*******************************************************************************
; User Stack and Heap initialization ; User Stack and Heap initialization
;******************************************************************************* ;*******************************************************************************
IF :DEF:__MICROLIB IF :DEF:__MICROLIB
EXPORT __initial_sp EXPORT __initial_sp
EXPORT __heap_base EXPORT __heap_base
EXPORT __heap_limit EXPORT __heap_limit
ELSE ELSE
IMPORT __use_two_region_memory IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap EXPORT __user_initial_stackheap
__user_initial_stackheap __user_initial_stackheap
LDR R0, = Heap_Mem LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size) LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size) LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem LDR R3, = Stack_Mem
BX LR BX LR
ALIGN ALIGN
ENDIF ENDIF
END END
;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** ;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,345 +1,345 @@
/** /**
* Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
* *
* GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz
* Modifs : * Modifs :
* enlèvement de tout ce qui est inutile dans le .h * 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 : * 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_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
* - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(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) * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3)
* PWM_Set_Value_On_TIM3_C3( int Val) * PWM_Set_Value_On_TIM3_C3( int Val)
* permet en ASM ou en C de fixer la valeur de PWM * permet en ASM ou en C de fixer la valeur de PWM
* Ajout de commentaires * Ajout de commentaires
*/ */
#ifndef DRIVERJEULASER_H__ #ifndef DRIVERJEULASER_H__
#define DRIVERJEULASER_H__ #define DRIVERJEULASER_H__
#include "stm32f10x.h" #include "stm32f10x.h"
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- //--------------------- CONFIGURATION CLOCK DU STM32 --------------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure l'ensemble des horloges du uC * @brief Configure l'ensemble des horloges du uC
* @note horloge systeme (config statique a 72 MHz pour le STM32F103) * @note horloge systeme (config statique a 72 MHz pour le STM32F103)
* @param None * @param None
* @retval None * @retval None
*/ */
void CLOCK_Configure(void); void CLOCK_Configure(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ //--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée
* @note L' horloge des 4 timers a une fréquence de 72MHz * @note L' horloge des 4 timers a une fréquence de 72MHz
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks );
/** /**
* Macros de base pour utiliser les timers * Macros de base pour utiliser les timers
*/ */
// bloque le timer // bloque le timer
#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) #define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0)
// Lance timer // Lance timer
#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) #define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0)
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) );
//********************************************************************************************************* //*********************************************************************************************************
//--------------------- PWM TIM1 to TIM 4 ------------------------------ //--------------------- PWM TIM1 to TIM 4 ------------------------------
//********************************************************************************************************* //*********************************************************************************************************
/** /**
* @brief Configure un timer en PWM * @brief Configure un timer en PWM
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param voie : un des 4 canaux possibles 1 à 4. * @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 * @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 * 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é * @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 ); 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 * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
* est donc : rcy = Thaut_ticks / Periode_ticks * est donc : rcy = Thaut_ticks / Periode_ticks
* @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 * @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 * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
* @retval None * @retval None
*/ */
void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure le timer Systick avec une périodicité donnée * @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 * @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 n'est pas à proprement parler un périphérique, il fait partie du Cortex M3
* Ce timer est un 24 bits * Ce timer est un 24 bits
* @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Systick_Period_ff( unsigned int Periode_ticks ); void Systick_Period_ff( unsigned int Periode_ticks );
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement du Systick * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick
* @note * @note
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); void Systick_Prio_IT( char Prio, void (*Systick_function)(void) );
/** /**
* Macros de base pour utiliser le Systick * Macros de base pour utiliser le Systick
*/ */
#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) #define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0)
#define SysTick_Off ((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_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1)
#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) #define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1))
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- 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 * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps
* de fermeture du switch d'acquisition * de fermeture du switch d'acquisition
* @note * @note
* @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 * @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 * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU
* exemple pour 1µs on choisira 72. * exemple pour 1µs on choisira 72.
* @retval Nombre de Tick réellement pris en compte * @retval Nombre de Tick réellement pris en compte
*/ */
unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks );
/** /**
* @brief Sélectionne la voie à convertir * @brief Sélectionne la voie à convertir
* @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO * @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 ADC : précise de quel ADC il s'agit, ADC1 ou ADC2
* @param Voie_ADC : 1 à 15 * @param Voie_ADC : 1 à 15
* @retval None * @retval None
*/ */
void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); 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 * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également
* la période de débordement du timer * la période de débordement du timer
* @note pas besoin de régler le timer avec une autre fonction dédiée 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 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 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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
// param pour Source : // param pour Source :
#define TIM1_CC1 0 #define TIM1_CC1 0
#define TIM1_CC2 1 #define TIM1_CC2 1
#define TIM1_CC3 2 #define TIM1_CC3 2
#define TIM2_CC2 3 #define TIM2_CC2 3
#define TIM4_CC4 5 #define TIM4_CC4 5
void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks );
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- ANALOG INPUT ADC & DMA ------------------------------ //--------------------- ANALOG INPUT ADC & DMA ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Permer de lier l'ADC à un tableau en RAM pour une DMA * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA
* @note * @note
* @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé * @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. * si '1' le ptr d'@ se recale à celle du début.
* @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire
* @retval None * @retval None
*/ */
void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); 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 * @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 * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1
* @note * @note
* @param NbEchDMA est le nombre d'échantillons à stocker. * @param NbEchDMA est le nombre d'échantillons à stocker.
* @retval None * @retval None
*/ */
void Start_DMA1( u16 NbEchDMA ); void Start_DMA1( u16 NbEchDMA );
// arret DMA // arret DMA
#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; #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 * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition
* et du nombre d'echantillons * et du nombre d'echantillons
* @note fonction d'attente (bloquante) * @note fonction d'attente (bloquante)
* @param None * @param None
* @retval None * @retval None
*/ */
void Wait_On_End_Of_DMA1(void); void Wait_On_End_Of_DMA1(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- GPIO ------------------------------ //--------------------- GPIO ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Initialisation d'un GPIO (A à C), pin x. * @brief Initialisation d'un GPIO (A à C), pin x.
* peut être configuré : * peut être configuré :
* -> Input ou output * -> Input ou output
* -> architecture technologique (push-pull, open drain...) * -> architecture technologique (push-pull, open drain...)
* @note * @note
* @param Port : GPIOA, GPIOB, GPIOC * @param Port : GPIOA, GPIOB, GPIOC
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @param Sens : INPUT ou OUTPUT * @param Sens : INPUT ou OUTPUT
* @param Techno : voir define ci dessous * @param Techno : voir define ci dessous
* @retval 1 erreur, 0 si OK * @retval 1 erreur, 0 si OK
*/ */
// Sens // Sens
#define INPUT 'i' #define INPUT 'i'
#define OUTPUT 'o' #define OUTPUT 'o'
// Techno pour pin en entrée (INPUT) // Techno pour pin en entrée (INPUT)
#define ANALOG 0 #define ANALOG 0
#define INPUT_FLOATING 1 #define INPUT_FLOATING 1
#define INPUT_PULL_DOWN_UP 2 #define INPUT_PULL_DOWN_UP 2
// Techno pour pin en sortie (OUTPUT) // Techno pour pin en sortie (OUTPUT)
#define OUTPUT_PPULL 0 #define OUTPUT_PPULL 0
#define OUTPUT_OPDRAIN 1 #define OUTPUT_OPDRAIN 1
#define ALT_PPULL 2 #define ALT_PPULL 2
#define ALT_OPDRAIN 3 #define ALT_OPDRAIN 3
// Exemple : // Exemple :
// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); // Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL);
// Place le bit 8 du port B en sortie Push-pull // Place le bit 8 du port B en sortie Push-pull
char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno);
/** /**
* @brief Mise à 1 d'une broche GPIO * @brief Mise à 1 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Set(char Broche); void GPIOA_Set(char Broche);
void GPIOB_Set(char Broche); void GPIOB_Set(char Broche);
void GPIOC_Set(char Broche); void GPIOC_Set(char Broche);
/** /**
* @brief Mise à 0 d'une broche GPIO * @brief Mise à 0 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Clear(char Broche); void GPIOA_Clear(char Broche);
void GPIOB_Clear(char Broche); void GPIOB_Clear(char Broche);
void GPIOC_Clear(char Broche); void GPIOC_Clear(char Broche);
#endif #endif

View file

@ -1,56 +1,56 @@
; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) ; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
; Accès en aux fonctions suivantes : ; Accès en aux fonctions suivantes :
; GPIO : ; GPIO :
; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) ; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) ; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche)
; PWM : ; PWM :
;/** ;/**
; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif ; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
; * est donc : rcy = Thaut_ticks / Periode_ticks ; * est donc : rcy = Thaut_ticks / Periode_ticks
; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 ; * @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 ; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
; * @retval None ; * @retval None
; */ ; */
;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); ;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
import PWM_Set_Value_TIM3_Ch3 import PWM_Set_Value_TIM3_Ch3
;/** ;/**
; * @brief Mise à 1 d'une broche GPIO ; * @brief Mise à 1 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Set(char Broche); ;void GPIOA_Set(char Broche);
import GPIOA_Set import GPIOA_Set
;void GPIOB_Set(char Broche); ;void GPIOB_Set(char Broche);
import GPIOB_Set import GPIOB_Set
;void GPIOC_Set(char Broche); ;void GPIOC_Set(char Broche);
import GPIOC_Set import GPIOC_Set
;/** ;/**
; * @brief Mise à 0 d'une broche GPIO ; * @brief Mise à 0 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Clear(char Broche); ;void GPIOA_Clear(char Broche);
import GPIOA_Clear import GPIOA_Clear
;void GPIOB_Clear(char Broche); ;void GPIOB_Clear(char Broche);
import GPIOB_Clear import GPIOB_Clear
;void GPIOC_Clear(char Broche); ;void GPIOC_Clear(char Broche);
import GPIOC_Clear import GPIOC_Clear
end end

View file

@ -1,60 +1,60 @@
PRESERVE8 PRESERVE8
THUMB THUMB
; ====================== zone de réservation de données, ====================================== ; ====================== zone de réservation de données, ======================================
;Section RAM (read only) : ;Section RAM (read only) :
area mesdata,data,readonly area mesdata,data,readonly
;Section RAM (read write): ;Section RAM (read write):
area maram,data,readwrite area maram,data,readwrite
VarTime dcd 0 VarTime dcd 0
; =============================================================================================== ; ===============================================================================================
;constantes (équivalent du #define en C) ;constantes (équivalent du #define en C)
TimeValue equ 900000 TimeValue equ 900000
EXPORT Delay_100ms ; la fonction Delay_100ms est rendue publique donc utilisable par d'autres modules. EXPORT Delay_100ms ; la fonction Delay_100ms est rendue publique donc utilisable par d'autres modules.
;Section ROM code (read only) : ;Section ROM code (read only) :
area moncode,code,readonly area moncode,code,readonly
; REMARQUE IMPORTANTE ; REMARQUE IMPORTANTE
; Cette manière de créer une temporisation n'est clairement pas la bonne manière de procéder : ; Cette manière de créer une temporisation n'est clairement pas la bonne manière de procéder :
; - elle est peu précise ; - elle est peu précise
; - la fonction prend tout le temps CPU pour... ne rien faire... ; - la fonction prend tout le temps CPU pour... ne rien faire...
; ;
; Pour autant, la fonction montre : ; Pour autant, la fonction montre :
; - les boucles en ASM ; - les boucles en ASM
; - l'accés écr/lec de variable en RAM ; - l'accés écr/lec de variable en RAM
; - le mécanisme d'appel / retour sous programme ; - le mécanisme d'appel / retour sous programme
; ;
; et donc possède un intérêt pour débuter en ASM pur ; et donc possède un intérêt pour débuter en ASM pur
Delay_100ms proc Delay_100ms proc
ldr r0,=VarTime ldr r0,=VarTime
ldr r1,=TimeValue ldr r1,=TimeValue
str r1,[r0] str r1,[r0]
BoucleTempo BoucleTempo
ldr r1,[r0] ldr r1,[r0]
subs r1,#1 subs r1,#1
str r1,[r0] str r1,[r0]
bne BoucleTempo bne BoucleTempo
bx lr bx lr
endp endp
END END

View file

@ -1,32 +1,32 @@
#include "DriverJeuLaser.h" #include "DriverJeuLaser.h"
extern void Delay_100ms(void); extern void Delay_100ms(void);
int main(void) int main(void)
{ {
// =========================================================================== // ===========================================================================
// ============= INIT PERIPH (faites qu'une seule fois) ===================== // ============= INIT PERIPH (faites qu'une seule fois) =====================
// =========================================================================== // ===========================================================================
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers // Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
CLOCK_Configure(); CLOCK_Configure();
// configuration de PortB.1 (PB1) en sortie push-pull // configuration de PortB.1 (PB1) en sortie push-pull
GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL); GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL);
//============================================================================ //============================================================================
while (1) while (1)
{ {
Delay_100ms(); Delay_100ms();
GPIOB_Set(1); GPIOB_Set(1);
Delay_100ms(); Delay_100ms();
GPIOB_Clear(1); GPIOB_Clear(1);
} }
} }

View file

@ -1,335 +1,335 @@
;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* File Name : startup_stm32f10x_md.s ;* File Name : startup_stm32f10x_md.s
;* Author : MCD Application Team ;* Author : MCD Application Team
;* Version : V3.5.0 ;* Version : V3.5.0
;* Date : 11-March-2011 ;* Date : 11-March-2011
;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM ;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM
;* toolchain. ;* toolchain.
;* This module performs: ;* This module performs:
;* - Set the initial SP ;* - Set the initial SP
;* - Set the initial PC == Reset_Handler ;* - Set the initial PC == Reset_Handler
;* - Set the vector table entries with the exceptions ISR address ;* - Set the vector table entries with the exceptions ISR address
;* - Configure the clock system ;* - Configure the clock system
;* - Branches to __main in the C library (which eventually ;* - Branches to __main in the C library (which eventually
;* calls main()). ;* calls main()).
;* After Reset the CortexM3 processor is in Thread mode, ;* After Reset the CortexM3 processor is in Thread mode,
;* priority is Privileged, and the Stack is set to Main. ;* priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>> ;* <<< Use Configuration Wizard in Context Menu >>>
;******************************************************************************* ;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; 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. ; 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, ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; 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 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;******************************************************************************* ;*******************************************************************************
; Amount of memory (in bytes) allocated for Stack ; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs ; Tailor this value to your application needs
; <h> Stack Configuration ; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Stack_Size EQU 0x00000400 Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3 AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size Stack_Mem SPACE Stack_Size
__initial_sp __initial_sp
; <h> Heap Configuration ; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Heap_Size EQU 0x00000200 Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3 AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base __heap_base
Heap_Mem SPACE Heap_Size Heap_Mem SPACE Heap_Size
__heap_limit __heap_limit
PRESERVE8 PRESERVE8
THUMB THUMB
; Vector Table Mapped to Address 0 at Reset ; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY AREA RESET, DATA, READONLY
EXPORT __Vectors EXPORT __Vectors
EXPORT __Vectors_End EXPORT __Vectors_End
EXPORT __Vectors_Size EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack __Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler DCD SysTick_Handler ; SysTick Handler
; External Interrupts ; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog DCD WWDG_IRQHandler ; Window Watchdog
DCD PVD_IRQHandler ; PVD through EXTI Line detect DCD PVD_IRQHandler ; PVD through EXTI Line detect
DCD TAMPER_IRQHandler ; Tamper DCD TAMPER_IRQHandler ; Tamper
DCD RTC_IRQHandler ; RTC DCD RTC_IRQHandler ; RTC
DCD FLASH_IRQHandler ; Flash DCD FLASH_IRQHandler ; Flash
DCD RCC_IRQHandler ; RCC DCD RCC_IRQHandler ; RCC
DCD EXTI0_IRQHandler ; EXTI Line 0 DCD EXTI0_IRQHandler ; EXTI Line 0
DCD EXTI1_IRQHandler ; EXTI Line 1 DCD EXTI1_IRQHandler ; EXTI Line 1
DCD EXTI2_IRQHandler ; EXTI Line 2 DCD EXTI2_IRQHandler ; EXTI Line 2
DCD EXTI3_IRQHandler ; EXTI Line 3 DCD EXTI3_IRQHandler ; EXTI Line 3
DCD EXTI4_IRQHandler ; EXTI Line 4 DCD EXTI4_IRQHandler ; EXTI Line 4
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7
DCD ADC1_2_IRQHandler ; ADC1_2 DCD ADC1_2_IRQHandler ; ADC1_2
DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX 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 USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0
DCD CAN1_RX1_IRQHandler ; CAN1 RX1 DCD CAN1_RX1_IRQHandler ; CAN1 RX1
DCD CAN1_SCE_IRQHandler ; CAN1 SCE DCD CAN1_SCE_IRQHandler ; CAN1 SCE
DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 DCD EXTI9_5_IRQHandler ; EXTI Line 9..5
DCD TIM1_BRK_IRQHandler ; TIM1 Break DCD TIM1_BRK_IRQHandler ; TIM1 Break
DCD TIM1_UP_IRQHandler ; TIM1 Update DCD TIM1_UP_IRQHandler ; TIM1 Update
DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM2_IRQHandler ; TIM2 DCD TIM2_IRQHandler ; TIM2
DCD TIM3_IRQHandler ; TIM3 DCD TIM3_IRQHandler ; TIM3
DCD TIM4_IRQHandler ; TIM4 DCD TIM4_IRQHandler ; TIM4
DCD I2C1_EV_IRQHandler ; I2C1 Event DCD I2C1_EV_IRQHandler ; I2C1 Event
DCD I2C1_ER_IRQHandler ; I2C1 Error DCD I2C1_ER_IRQHandler ; I2C1 Error
DCD I2C2_EV_IRQHandler ; I2C2 Event DCD I2C2_EV_IRQHandler ; I2C2 Event
DCD I2C2_ER_IRQHandler ; I2C2 Error DCD I2C2_ER_IRQHandler ; I2C2 Error
DCD SPI1_IRQHandler ; SPI1 DCD SPI1_IRQHandler ; SPI1
DCD SPI2_IRQHandler ; SPI2 DCD SPI2_IRQHandler ; SPI2
DCD USART1_IRQHandler ; USART1 DCD USART1_IRQHandler ; USART1
DCD USART2_IRQHandler ; USART2 DCD USART2_IRQHandler ; USART2
DCD USART3_IRQHandler ; USART3 DCD USART3_IRQHandler ; USART3
DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line
DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend
__Vectors_End __Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors __Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY
; Reset handler ; Reset handler
Reset_Handler PROC Reset_Handler PROC
EXPORT Reset_Handler [WEAK] EXPORT Reset_Handler [WEAK]
IMPORT __main IMPORT __main
LDR R0, =SystemInit LDR R0, =SystemInit
BLX R0 BLX R0
; ;
; Enable UsageFault, MemFault and Busfault interrupts ; Enable UsageFault, MemFault and Busfault interrupts
; ;
_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 _SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24
LDR.W R0, =_SHCSR LDR.W R0, =_SHCSR
LDR R1, [R0] ; Read CPACR LDR R1, [R0] ; Read CPACR
ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts 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 STR R1, [R0] ; Write back the modified value to the CPACR
DSB ; Wait for store to complete DSB ; Wait for store to complete
; ;
; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) ; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority)
; ;
_AIRCR EQU 0xE000ED0C _AIRCR EQU 0xE000ED0C
_AIRCR_VAL EQU 0x05FA0300 _AIRCR_VAL EQU 0x05FA0300
LDR.W R0, =_AIRCR LDR.W R0, =_AIRCR
LDR.W R1, =_AIRCR_VAL LDR.W R1, =_AIRCR_VAL
STR R1,[R0] STR R1,[R0]
; ;
; Finaly, jump to main function (void main (void)) ; Finaly, jump to main function (void main (void))
; ;
LDR R0, =__main LDR R0, =__main
BX R0 BX R0
ENDP ENDP
SystemInit PROC SystemInit PROC
EXPORT SystemInit [WEAK] EXPORT SystemInit [WEAK]
BX LR BX LR
ENDP ENDP
; Dummy Exception Handlers (infinite loops which can be modified) ; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC NMI_Handler PROC
EXPORT NMI_Handler [WEAK] EXPORT NMI_Handler [WEAK]
B . B .
ENDP ENDP
HardFault_Handler\ HardFault_Handler\
PROC PROC
EXPORT HardFault_Handler [WEAK] EXPORT HardFault_Handler [WEAK]
B . B .
ENDP ENDP
MemManage_Handler\ MemManage_Handler\
PROC PROC
EXPORT MemManage_Handler [WEAK] EXPORT MemManage_Handler [WEAK]
B . B .
ENDP ENDP
BusFault_Handler\ BusFault_Handler\
PROC PROC
EXPORT BusFault_Handler [WEAK] EXPORT BusFault_Handler [WEAK]
B . B .
ENDP ENDP
UsageFault_Handler\ UsageFault_Handler\
PROC PROC
EXPORT UsageFault_Handler [WEAK] EXPORT UsageFault_Handler [WEAK]
B . B .
ENDP ENDP
SVC_Handler PROC SVC_Handler PROC
EXPORT SVC_Handler [WEAK] EXPORT SVC_Handler [WEAK]
B . B .
ENDP ENDP
DebugMon_Handler\ DebugMon_Handler\
PROC PROC
EXPORT DebugMon_Handler [WEAK] EXPORT DebugMon_Handler [WEAK]
B . B .
ENDP ENDP
PendSV_Handler PROC PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK] EXPORT PendSV_Handler [WEAK]
B . B .
ENDP ENDP
SysTick_Handler PROC SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK] EXPORT SysTick_Handler [WEAK]
B . B .
ENDP ENDP
Default_Handler PROC Default_Handler PROC
EXPORT WWDG_IRQHandler [WEAK] EXPORT WWDG_IRQHandler [WEAK]
EXPORT PVD_IRQHandler [WEAK] EXPORT PVD_IRQHandler [WEAK]
EXPORT TAMPER_IRQHandler [WEAK] EXPORT TAMPER_IRQHandler [WEAK]
EXPORT RTC_IRQHandler [WEAK] EXPORT RTC_IRQHandler [WEAK]
EXPORT FLASH_IRQHandler [WEAK] EXPORT FLASH_IRQHandler [WEAK]
EXPORT RCC_IRQHandler [WEAK] EXPORT RCC_IRQHandler [WEAK]
EXPORT EXTI0_IRQHandler [WEAK] EXPORT EXTI0_IRQHandler [WEAK]
EXPORT EXTI1_IRQHandler [WEAK] EXPORT EXTI1_IRQHandler [WEAK]
EXPORT EXTI2_IRQHandler [WEAK] EXPORT EXTI2_IRQHandler [WEAK]
EXPORT EXTI3_IRQHandler [WEAK] EXPORT EXTI3_IRQHandler [WEAK]
EXPORT EXTI4_IRQHandler [WEAK] EXPORT EXTI4_IRQHandler [WEAK]
EXPORT DMA1_Channel1_IRQHandler [WEAK] EXPORT DMA1_Channel1_IRQHandler [WEAK]
EXPORT DMA1_Channel2_IRQHandler [WEAK] EXPORT DMA1_Channel2_IRQHandler [WEAK]
EXPORT DMA1_Channel3_IRQHandler [WEAK] EXPORT DMA1_Channel3_IRQHandler [WEAK]
EXPORT DMA1_Channel4_IRQHandler [WEAK] EXPORT DMA1_Channel4_IRQHandler [WEAK]
EXPORT DMA1_Channel5_IRQHandler [WEAK] EXPORT DMA1_Channel5_IRQHandler [WEAK]
EXPORT DMA1_Channel6_IRQHandler [WEAK] EXPORT DMA1_Channel6_IRQHandler [WEAK]
EXPORT DMA1_Channel7_IRQHandler [WEAK] EXPORT DMA1_Channel7_IRQHandler [WEAK]
EXPORT ADC1_2_IRQHandler [WEAK] EXPORT ADC1_2_IRQHandler [WEAK]
EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK]
EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK]
EXPORT CAN1_RX1_IRQHandler [WEAK] EXPORT CAN1_RX1_IRQHandler [WEAK]
EXPORT CAN1_SCE_IRQHandler [WEAK] EXPORT CAN1_SCE_IRQHandler [WEAK]
EXPORT EXTI9_5_IRQHandler [WEAK] EXPORT EXTI9_5_IRQHandler [WEAK]
EXPORT TIM1_BRK_IRQHandler [WEAK] EXPORT TIM1_BRK_IRQHandler [WEAK]
EXPORT TIM1_UP_IRQHandler [WEAK] EXPORT TIM1_UP_IRQHandler [WEAK]
EXPORT TIM1_TRG_COM_IRQHandler [WEAK] EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
EXPORT TIM1_CC_IRQHandler [WEAK] EXPORT TIM1_CC_IRQHandler [WEAK]
EXPORT TIM2_IRQHandler [WEAK] EXPORT TIM2_IRQHandler [WEAK]
EXPORT TIM3_IRQHandler [WEAK] EXPORT TIM3_IRQHandler [WEAK]
EXPORT TIM4_IRQHandler [WEAK] EXPORT TIM4_IRQHandler [WEAK]
EXPORT I2C1_EV_IRQHandler [WEAK] EXPORT I2C1_EV_IRQHandler [WEAK]
EXPORT I2C1_ER_IRQHandler [WEAK] EXPORT I2C1_ER_IRQHandler [WEAK]
EXPORT I2C2_EV_IRQHandler [WEAK] EXPORT I2C2_EV_IRQHandler [WEAK]
EXPORT I2C2_ER_IRQHandler [WEAK] EXPORT I2C2_ER_IRQHandler [WEAK]
EXPORT SPI1_IRQHandler [WEAK] EXPORT SPI1_IRQHandler [WEAK]
EXPORT SPI2_IRQHandler [WEAK] EXPORT SPI2_IRQHandler [WEAK]
EXPORT USART1_IRQHandler [WEAK] EXPORT USART1_IRQHandler [WEAK]
EXPORT USART2_IRQHandler [WEAK] EXPORT USART2_IRQHandler [WEAK]
EXPORT USART3_IRQHandler [WEAK] EXPORT USART3_IRQHandler [WEAK]
EXPORT EXTI15_10_IRQHandler [WEAK] EXPORT EXTI15_10_IRQHandler [WEAK]
EXPORT RTCAlarm_IRQHandler [WEAK] EXPORT RTCAlarm_IRQHandler [WEAK]
EXPORT USBWakeUp_IRQHandler [WEAK] EXPORT USBWakeUp_IRQHandler [WEAK]
WWDG_IRQHandler WWDG_IRQHandler
PVD_IRQHandler PVD_IRQHandler
TAMPER_IRQHandler TAMPER_IRQHandler
RTC_IRQHandler RTC_IRQHandler
FLASH_IRQHandler FLASH_IRQHandler
RCC_IRQHandler RCC_IRQHandler
EXTI0_IRQHandler EXTI0_IRQHandler
EXTI1_IRQHandler EXTI1_IRQHandler
EXTI2_IRQHandler EXTI2_IRQHandler
EXTI3_IRQHandler EXTI3_IRQHandler
EXTI4_IRQHandler EXTI4_IRQHandler
DMA1_Channel1_IRQHandler DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler TIM1_CC_IRQHandler
TIM2_IRQHandler TIM2_IRQHandler
TIM3_IRQHandler TIM3_IRQHandler
TIM4_IRQHandler TIM4_IRQHandler
I2C1_EV_IRQHandler I2C1_EV_IRQHandler
I2C1_ER_IRQHandler I2C1_ER_IRQHandler
I2C2_EV_IRQHandler I2C2_EV_IRQHandler
I2C2_ER_IRQHandler I2C2_ER_IRQHandler
SPI1_IRQHandler SPI1_IRQHandler
SPI2_IRQHandler SPI2_IRQHandler
USART1_IRQHandler USART1_IRQHandler
USART2_IRQHandler USART2_IRQHandler
USART3_IRQHandler USART3_IRQHandler
EXTI15_10_IRQHandler EXTI15_10_IRQHandler
RTCAlarm_IRQHandler RTCAlarm_IRQHandler
USBWakeUp_IRQHandler USBWakeUp_IRQHandler
B . B .
ENDP ENDP
ALIGN ALIGN
;******************************************************************************* ;*******************************************************************************
; User Stack and Heap initialization ; User Stack and Heap initialization
;******************************************************************************* ;*******************************************************************************
IF :DEF:__MICROLIB IF :DEF:__MICROLIB
EXPORT __initial_sp EXPORT __initial_sp
EXPORT __heap_base EXPORT __heap_base
EXPORT __heap_limit EXPORT __heap_limit
ELSE ELSE
IMPORT __use_two_region_memory IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap EXPORT __user_initial_stackheap
__user_initial_stackheap __user_initial_stackheap
LDR R0, = Heap_Mem LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size) LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size) LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem LDR R3, = Stack_Mem
BX LR BX LR
ALIGN ALIGN
ENDIF ENDIF
END END
;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** ;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,345 +1,345 @@
/** /**
* Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
* *
* GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz
* Modifs : * Modifs :
* enlèvement de tout ce qui est inutile dans le .h * 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 : * 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_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
* - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(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) * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3)
* PWM_Set_Value_On_TIM3_C3( int Val) * PWM_Set_Value_On_TIM3_C3( int Val)
* permet en ASM ou en C de fixer la valeur de PWM * permet en ASM ou en C de fixer la valeur de PWM
* Ajout de commentaires * Ajout de commentaires
*/ */
#ifndef DRIVERJEULASER_H__ #ifndef DRIVERJEULASER_H__
#define DRIVERJEULASER_H__ #define DRIVERJEULASER_H__
#include "stm32f10x.h" #include "stm32f10x.h"
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- //--------------------- CONFIGURATION CLOCK DU STM32 --------------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure l'ensemble des horloges du uC * @brief Configure l'ensemble des horloges du uC
* @note horloge systeme (config statique a 72 MHz pour le STM32F103) * @note horloge systeme (config statique a 72 MHz pour le STM32F103)
* @param None * @param None
* @retval None * @retval None
*/ */
void CLOCK_Configure(void); void CLOCK_Configure(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ //--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée
* @note L' horloge des 4 timers a une fréquence de 72MHz * @note L' horloge des 4 timers a une fréquence de 72MHz
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks );
/** /**
* Macros de base pour utiliser les timers * Macros de base pour utiliser les timers
*/ */
// bloque le timer // bloque le timer
#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) #define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0)
// Lance timer // Lance timer
#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) #define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0)
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) );
//********************************************************************************************************* //*********************************************************************************************************
//--------------------- PWM TIM1 to TIM 4 ------------------------------ //--------------------- PWM TIM1 to TIM 4 ------------------------------
//********************************************************************************************************* //*********************************************************************************************************
/** /**
* @brief Configure un timer en PWM * @brief Configure un timer en PWM
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param voie : un des 4 canaux possibles 1 à 4. * @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 * @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 * 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é * @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 ); 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 * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
* est donc : rcy = Thaut_ticks / Periode_ticks * est donc : rcy = Thaut_ticks / Periode_ticks
* @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 * @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 * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
* @retval None * @retval None
*/ */
void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure le timer Systick avec une périodicité donnée * @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 * @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 n'est pas à proprement parler un périphérique, il fait partie du Cortex M3
* Ce timer est un 24 bits * Ce timer est un 24 bits
* @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Systick_Period_ff( unsigned int Periode_ticks ); void Systick_Period_ff( unsigned int Periode_ticks );
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement du Systick * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick
* @note * @note
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); void Systick_Prio_IT( char Prio, void (*Systick_function)(void) );
/** /**
* Macros de base pour utiliser le Systick * Macros de base pour utiliser le Systick
*/ */
#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) #define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0)
#define SysTick_Off ((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_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1)
#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) #define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1))
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- 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 * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps
* de fermeture du switch d'acquisition * de fermeture du switch d'acquisition
* @note * @note
* @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 * @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 * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU
* exemple pour 1µs on choisira 72. * exemple pour 1µs on choisira 72.
* @retval Nombre de Tick réellement pris en compte * @retval Nombre de Tick réellement pris en compte
*/ */
unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks );
/** /**
* @brief Sélectionne la voie à convertir * @brief Sélectionne la voie à convertir
* @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO * @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 ADC : précise de quel ADC il s'agit, ADC1 ou ADC2
* @param Voie_ADC : 1 à 15 * @param Voie_ADC : 1 à 15
* @retval None * @retval None
*/ */
void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); 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 * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également
* la période de débordement du timer * la période de débordement du timer
* @note pas besoin de régler le timer avec une autre fonction dédiée 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 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 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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
// param pour Source : // param pour Source :
#define TIM1_CC1 0 #define TIM1_CC1 0
#define TIM1_CC2 1 #define TIM1_CC2 1
#define TIM1_CC3 2 #define TIM1_CC3 2
#define TIM2_CC2 3 #define TIM2_CC2 3
#define TIM4_CC4 5 #define TIM4_CC4 5
void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks );
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- ANALOG INPUT ADC & DMA ------------------------------ //--------------------- ANALOG INPUT ADC & DMA ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Permer de lier l'ADC à un tableau en RAM pour une DMA * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA
* @note * @note
* @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé * @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. * si '1' le ptr d'@ se recale à celle du début.
* @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire
* @retval None * @retval None
*/ */
void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); 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 * @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 * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1
* @note * @note
* @param NbEchDMA est le nombre d'échantillons à stocker. * @param NbEchDMA est le nombre d'échantillons à stocker.
* @retval None * @retval None
*/ */
void Start_DMA1( u16 NbEchDMA ); void Start_DMA1( u16 NbEchDMA );
// arret DMA // arret DMA
#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; #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 * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition
* et du nombre d'echantillons * et du nombre d'echantillons
* @note fonction d'attente (bloquante) * @note fonction d'attente (bloquante)
* @param None * @param None
* @retval None * @retval None
*/ */
void Wait_On_End_Of_DMA1(void); void Wait_On_End_Of_DMA1(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- GPIO ------------------------------ //--------------------- GPIO ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Initialisation d'un GPIO (A à C), pin x. * @brief Initialisation d'un GPIO (A à C), pin x.
* peut être configuré : * peut être configuré :
* -> Input ou output * -> Input ou output
* -> architecture technologique (push-pull, open drain...) * -> architecture technologique (push-pull, open drain...)
* @note * @note
* @param Port : GPIOA, GPIOB, GPIOC * @param Port : GPIOA, GPIOB, GPIOC
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @param Sens : INPUT ou OUTPUT * @param Sens : INPUT ou OUTPUT
* @param Techno : voir define ci dessous * @param Techno : voir define ci dessous
* @retval 1 erreur, 0 si OK * @retval 1 erreur, 0 si OK
*/ */
// Sens // Sens
#define INPUT 'i' #define INPUT 'i'
#define OUTPUT 'o' #define OUTPUT 'o'
// Techno pour pin en entrée (INPUT) // Techno pour pin en entrée (INPUT)
#define ANALOG 0 #define ANALOG 0
#define INPUT_FLOATING 1 #define INPUT_FLOATING 1
#define INPUT_PULL_DOWN_UP 2 #define INPUT_PULL_DOWN_UP 2
// Techno pour pin en sortie (OUTPUT) // Techno pour pin en sortie (OUTPUT)
#define OUTPUT_PPULL 0 #define OUTPUT_PPULL 0
#define OUTPUT_OPDRAIN 1 #define OUTPUT_OPDRAIN 1
#define ALT_PPULL 2 #define ALT_PPULL 2
#define ALT_OPDRAIN 3 #define ALT_OPDRAIN 3
// Exemple : // Exemple :
// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); // Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL);
// Place le bit 8 du port B en sortie Push-pull // Place le bit 8 du port B en sortie Push-pull
char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno);
/** /**
* @brief Mise à 1 d'une broche GPIO * @brief Mise à 1 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Set(char Broche); void GPIOA_Set(char Broche);
void GPIOB_Set(char Broche); void GPIOB_Set(char Broche);
void GPIOC_Set(char Broche); void GPIOC_Set(char Broche);
/** /**
* @brief Mise à 0 d'une broche GPIO * @brief Mise à 0 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Clear(char Broche); void GPIOA_Clear(char Broche);
void GPIOB_Clear(char Broche); void GPIOB_Clear(char Broche);
void GPIOC_Clear(char Broche); void GPIOC_Clear(char Broche);
#endif #endif

View file

@ -1,56 +1,56 @@
; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) ; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
; Accès en aux fonctions suivantes : ; Accès en aux fonctions suivantes :
; GPIO : ; GPIO :
; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) ; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) ; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche)
; PWM : ; PWM :
;/** ;/**
; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif ; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
; * est donc : rcy = Thaut_ticks / Periode_ticks ; * est donc : rcy = Thaut_ticks / Periode_ticks
; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 ; * @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 ; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
; * @retval None ; * @retval None
; */ ; */
;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); ;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
import PWM_Set_Value_TIM3_Ch3 import PWM_Set_Value_TIM3_Ch3
;/** ;/**
; * @brief Mise à 1 d'une broche GPIO ; * @brief Mise à 1 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Set(char Broche); ;void GPIOA_Set(char Broche);
import GPIOA_Set import GPIOA_Set
;void GPIOB_Set(char Broche); ;void GPIOB_Set(char Broche);
import GPIOB_Set import GPIOB_Set
;void GPIOC_Set(char Broche); ;void GPIOC_Set(char Broche);
import GPIOC_Set import GPIOC_Set
;/** ;/**
; * @brief Mise à 0 d'une broche GPIO ; * @brief Mise à 0 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Clear(char Broche); ;void GPIOA_Clear(char Broche);
import GPIOA_Clear import GPIOA_Clear
;void GPIOB_Clear(char Broche); ;void GPIOB_Clear(char Broche);
import GPIOB_Clear import GPIOB_Clear
;void GPIOC_Clear(char Broche); ;void GPIOC_Clear(char Broche);
import GPIOC_Clear import GPIOC_Clear
end end

View file

@ -1,30 +1,30 @@
PRESERVE8 PRESERVE8
THUMB THUMB
; ====================== zone de réservation de données, ====================================== ; ====================== zone de réservation de données, ======================================
;Section RAM (read only) : ;Section RAM (read only) :
area mesdata,data,readonly area mesdata,data,readonly
;Section RAM (read write): ;Section RAM (read write):
area maram,data,readwrite area maram,data,readwrite
; =============================================================================================== ; ===============================================================================================
;Section ROM code (read only) : ;Section ROM code (read only) :
area moncode,code,readonly area moncode,code,readonly
; écrire le code ici ; écrire le code ici
END END

View file

@ -1,61 +1,61 @@
#include "DriverJeuLaser.h" #include "DriverJeuLaser.h"
void timer_callback(void); void timer_callback(void);
int main(void) int main(void)
{ {
// =========================================================================== // ===========================================================================
// ============= INIT PERIPH (faites qu'une seule fois) ===================== // ============= INIT PERIPH (faites qu'une seule fois) =====================
// =========================================================================== // ===========================================================================
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers // Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
CLOCK_Configure(); CLOCK_Configure();
// configuration du Timer 4 en débordement 100ms // configuration du Timer 4 en débordement 100ms
//** Placez votre code là ** // //** Placez votre code là ** //
// Activation des interruptions issues du Timer 4 // Activation des interruptions issues du Timer 4
// Association de la fonction à exécuter lors de l'interruption : timer_callback // Association de la fonction à exécuter lors de l'interruption : timer_callback
// cette fonction (si écrite en ASM) doit être conforme à l'AAPCS // cette fonction (si écrite en ASM) doit être conforme à l'AAPCS
//** Placez votre code là ** // //** Placez votre code là ** //
// configuration de PortB.1 (PB1) en sortie push-pull // configuration de PortB.1 (PB1) en sortie push-pull
GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL); GPIO_Configure(GPIOB, 1, OUTPUT, OUTPUT_PPULL);
//============================================================================ //============================================================================
while (1) while (1)
{ {
} }
} }
char FlagCligno; char FlagCligno;
void timer_callback(void) void timer_callback(void)
{ {
if (FlagCligno==1) if (FlagCligno==1)
{ {
FlagCligno=0; FlagCligno=0;
GPIOB_Set(1); GPIOB_Set(1);
} }
else else
{ {
FlagCligno=1; FlagCligno=1;
GPIOB_Clear(1); GPIOB_Clear(1);
} }
} }

View file

@ -1,335 +1,335 @@
;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* File Name : startup_stm32f10x_md.s ;* File Name : startup_stm32f10x_md.s
;* Author : MCD Application Team ;* Author : MCD Application Team
;* Version : V3.5.0 ;* Version : V3.5.0
;* Date : 11-March-2011 ;* Date : 11-March-2011
;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM ;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM
;* toolchain. ;* toolchain.
;* This module performs: ;* This module performs:
;* - Set the initial SP ;* - Set the initial SP
;* - Set the initial PC == Reset_Handler ;* - Set the initial PC == Reset_Handler
;* - Set the vector table entries with the exceptions ISR address ;* - Set the vector table entries with the exceptions ISR address
;* - Configure the clock system ;* - Configure the clock system
;* - Branches to __main in the C library (which eventually ;* - Branches to __main in the C library (which eventually
;* calls main()). ;* calls main()).
;* After Reset the CortexM3 processor is in Thread mode, ;* After Reset the CortexM3 processor is in Thread mode,
;* priority is Privileged, and the Stack is set to Main. ;* priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>> ;* <<< Use Configuration Wizard in Context Menu >>>
;******************************************************************************* ;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; 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. ; 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, ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; 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 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;******************************************************************************* ;*******************************************************************************
; Amount of memory (in bytes) allocated for Stack ; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs ; Tailor this value to your application needs
; <h> Stack Configuration ; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Stack_Size EQU 0x00000400 Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3 AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size Stack_Mem SPACE Stack_Size
__initial_sp __initial_sp
; <h> Heap Configuration ; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Heap_Size EQU 0x00000200 Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3 AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base __heap_base
Heap_Mem SPACE Heap_Size Heap_Mem SPACE Heap_Size
__heap_limit __heap_limit
PRESERVE8 PRESERVE8
THUMB THUMB
; Vector Table Mapped to Address 0 at Reset ; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY AREA RESET, DATA, READONLY
EXPORT __Vectors EXPORT __Vectors
EXPORT __Vectors_End EXPORT __Vectors_End
EXPORT __Vectors_Size EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack __Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler DCD SysTick_Handler ; SysTick Handler
; External Interrupts ; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog DCD WWDG_IRQHandler ; Window Watchdog
DCD PVD_IRQHandler ; PVD through EXTI Line detect DCD PVD_IRQHandler ; PVD through EXTI Line detect
DCD TAMPER_IRQHandler ; Tamper DCD TAMPER_IRQHandler ; Tamper
DCD RTC_IRQHandler ; RTC DCD RTC_IRQHandler ; RTC
DCD FLASH_IRQHandler ; Flash DCD FLASH_IRQHandler ; Flash
DCD RCC_IRQHandler ; RCC DCD RCC_IRQHandler ; RCC
DCD EXTI0_IRQHandler ; EXTI Line 0 DCD EXTI0_IRQHandler ; EXTI Line 0
DCD EXTI1_IRQHandler ; EXTI Line 1 DCD EXTI1_IRQHandler ; EXTI Line 1
DCD EXTI2_IRQHandler ; EXTI Line 2 DCD EXTI2_IRQHandler ; EXTI Line 2
DCD EXTI3_IRQHandler ; EXTI Line 3 DCD EXTI3_IRQHandler ; EXTI Line 3
DCD EXTI4_IRQHandler ; EXTI Line 4 DCD EXTI4_IRQHandler ; EXTI Line 4
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7
DCD ADC1_2_IRQHandler ; ADC1_2 DCD ADC1_2_IRQHandler ; ADC1_2
DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX 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 USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0
DCD CAN1_RX1_IRQHandler ; CAN1 RX1 DCD CAN1_RX1_IRQHandler ; CAN1 RX1
DCD CAN1_SCE_IRQHandler ; CAN1 SCE DCD CAN1_SCE_IRQHandler ; CAN1 SCE
DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 DCD EXTI9_5_IRQHandler ; EXTI Line 9..5
DCD TIM1_BRK_IRQHandler ; TIM1 Break DCD TIM1_BRK_IRQHandler ; TIM1 Break
DCD TIM1_UP_IRQHandler ; TIM1 Update DCD TIM1_UP_IRQHandler ; TIM1 Update
DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM2_IRQHandler ; TIM2 DCD TIM2_IRQHandler ; TIM2
DCD TIM3_IRQHandler ; TIM3 DCD TIM3_IRQHandler ; TIM3
DCD TIM4_IRQHandler ; TIM4 DCD TIM4_IRQHandler ; TIM4
DCD I2C1_EV_IRQHandler ; I2C1 Event DCD I2C1_EV_IRQHandler ; I2C1 Event
DCD I2C1_ER_IRQHandler ; I2C1 Error DCD I2C1_ER_IRQHandler ; I2C1 Error
DCD I2C2_EV_IRQHandler ; I2C2 Event DCD I2C2_EV_IRQHandler ; I2C2 Event
DCD I2C2_ER_IRQHandler ; I2C2 Error DCD I2C2_ER_IRQHandler ; I2C2 Error
DCD SPI1_IRQHandler ; SPI1 DCD SPI1_IRQHandler ; SPI1
DCD SPI2_IRQHandler ; SPI2 DCD SPI2_IRQHandler ; SPI2
DCD USART1_IRQHandler ; USART1 DCD USART1_IRQHandler ; USART1
DCD USART2_IRQHandler ; USART2 DCD USART2_IRQHandler ; USART2
DCD USART3_IRQHandler ; USART3 DCD USART3_IRQHandler ; USART3
DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line
DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend
__Vectors_End __Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors __Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY
; Reset handler ; Reset handler
Reset_Handler PROC Reset_Handler PROC
EXPORT Reset_Handler [WEAK] EXPORT Reset_Handler [WEAK]
IMPORT __main IMPORT __main
LDR R0, =SystemInit LDR R0, =SystemInit
BLX R0 BLX R0
; ;
; Enable UsageFault, MemFault and Busfault interrupts ; Enable UsageFault, MemFault and Busfault interrupts
; ;
_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 _SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24
LDR.W R0, =_SHCSR LDR.W R0, =_SHCSR
LDR R1, [R0] ; Read CPACR LDR R1, [R0] ; Read CPACR
ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts 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 STR R1, [R0] ; Write back the modified value to the CPACR
DSB ; Wait for store to complete DSB ; Wait for store to complete
; ;
; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) ; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority)
; ;
_AIRCR EQU 0xE000ED0C _AIRCR EQU 0xE000ED0C
_AIRCR_VAL EQU 0x05FA0300 _AIRCR_VAL EQU 0x05FA0300
LDR.W R0, =_AIRCR LDR.W R0, =_AIRCR
LDR.W R1, =_AIRCR_VAL LDR.W R1, =_AIRCR_VAL
STR R1,[R0] STR R1,[R0]
; ;
; Finaly, jump to main function (void main (void)) ; Finaly, jump to main function (void main (void))
; ;
LDR R0, =__main LDR R0, =__main
BX R0 BX R0
ENDP ENDP
SystemInit PROC SystemInit PROC
EXPORT SystemInit [WEAK] EXPORT SystemInit [WEAK]
BX LR BX LR
ENDP ENDP
; Dummy Exception Handlers (infinite loops which can be modified) ; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC NMI_Handler PROC
EXPORT NMI_Handler [WEAK] EXPORT NMI_Handler [WEAK]
B . B .
ENDP ENDP
HardFault_Handler\ HardFault_Handler\
PROC PROC
EXPORT HardFault_Handler [WEAK] EXPORT HardFault_Handler [WEAK]
B . B .
ENDP ENDP
MemManage_Handler\ MemManage_Handler\
PROC PROC
EXPORT MemManage_Handler [WEAK] EXPORT MemManage_Handler [WEAK]
B . B .
ENDP ENDP
BusFault_Handler\ BusFault_Handler\
PROC PROC
EXPORT BusFault_Handler [WEAK] EXPORT BusFault_Handler [WEAK]
B . B .
ENDP ENDP
UsageFault_Handler\ UsageFault_Handler\
PROC PROC
EXPORT UsageFault_Handler [WEAK] EXPORT UsageFault_Handler [WEAK]
B . B .
ENDP ENDP
SVC_Handler PROC SVC_Handler PROC
EXPORT SVC_Handler [WEAK] EXPORT SVC_Handler [WEAK]
B . B .
ENDP ENDP
DebugMon_Handler\ DebugMon_Handler\
PROC PROC
EXPORT DebugMon_Handler [WEAK] EXPORT DebugMon_Handler [WEAK]
B . B .
ENDP ENDP
PendSV_Handler PROC PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK] EXPORT PendSV_Handler [WEAK]
B . B .
ENDP ENDP
SysTick_Handler PROC SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK] EXPORT SysTick_Handler [WEAK]
B . B .
ENDP ENDP
Default_Handler PROC Default_Handler PROC
EXPORT WWDG_IRQHandler [WEAK] EXPORT WWDG_IRQHandler [WEAK]
EXPORT PVD_IRQHandler [WEAK] EXPORT PVD_IRQHandler [WEAK]
EXPORT TAMPER_IRQHandler [WEAK] EXPORT TAMPER_IRQHandler [WEAK]
EXPORT RTC_IRQHandler [WEAK] EXPORT RTC_IRQHandler [WEAK]
EXPORT FLASH_IRQHandler [WEAK] EXPORT FLASH_IRQHandler [WEAK]
EXPORT RCC_IRQHandler [WEAK] EXPORT RCC_IRQHandler [WEAK]
EXPORT EXTI0_IRQHandler [WEAK] EXPORT EXTI0_IRQHandler [WEAK]
EXPORT EXTI1_IRQHandler [WEAK] EXPORT EXTI1_IRQHandler [WEAK]
EXPORT EXTI2_IRQHandler [WEAK] EXPORT EXTI2_IRQHandler [WEAK]
EXPORT EXTI3_IRQHandler [WEAK] EXPORT EXTI3_IRQHandler [WEAK]
EXPORT EXTI4_IRQHandler [WEAK] EXPORT EXTI4_IRQHandler [WEAK]
EXPORT DMA1_Channel1_IRQHandler [WEAK] EXPORT DMA1_Channel1_IRQHandler [WEAK]
EXPORT DMA1_Channel2_IRQHandler [WEAK] EXPORT DMA1_Channel2_IRQHandler [WEAK]
EXPORT DMA1_Channel3_IRQHandler [WEAK] EXPORT DMA1_Channel3_IRQHandler [WEAK]
EXPORT DMA1_Channel4_IRQHandler [WEAK] EXPORT DMA1_Channel4_IRQHandler [WEAK]
EXPORT DMA1_Channel5_IRQHandler [WEAK] EXPORT DMA1_Channel5_IRQHandler [WEAK]
EXPORT DMA1_Channel6_IRQHandler [WEAK] EXPORT DMA1_Channel6_IRQHandler [WEAK]
EXPORT DMA1_Channel7_IRQHandler [WEAK] EXPORT DMA1_Channel7_IRQHandler [WEAK]
EXPORT ADC1_2_IRQHandler [WEAK] EXPORT ADC1_2_IRQHandler [WEAK]
EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK]
EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK]
EXPORT CAN1_RX1_IRQHandler [WEAK] EXPORT CAN1_RX1_IRQHandler [WEAK]
EXPORT CAN1_SCE_IRQHandler [WEAK] EXPORT CAN1_SCE_IRQHandler [WEAK]
EXPORT EXTI9_5_IRQHandler [WEAK] EXPORT EXTI9_5_IRQHandler [WEAK]
EXPORT TIM1_BRK_IRQHandler [WEAK] EXPORT TIM1_BRK_IRQHandler [WEAK]
EXPORT TIM1_UP_IRQHandler [WEAK] EXPORT TIM1_UP_IRQHandler [WEAK]
EXPORT TIM1_TRG_COM_IRQHandler [WEAK] EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
EXPORT TIM1_CC_IRQHandler [WEAK] EXPORT TIM1_CC_IRQHandler [WEAK]
EXPORT TIM2_IRQHandler [WEAK] EXPORT TIM2_IRQHandler [WEAK]
EXPORT TIM3_IRQHandler [WEAK] EXPORT TIM3_IRQHandler [WEAK]
EXPORT TIM4_IRQHandler [WEAK] EXPORT TIM4_IRQHandler [WEAK]
EXPORT I2C1_EV_IRQHandler [WEAK] EXPORT I2C1_EV_IRQHandler [WEAK]
EXPORT I2C1_ER_IRQHandler [WEAK] EXPORT I2C1_ER_IRQHandler [WEAK]
EXPORT I2C2_EV_IRQHandler [WEAK] EXPORT I2C2_EV_IRQHandler [WEAK]
EXPORT I2C2_ER_IRQHandler [WEAK] EXPORT I2C2_ER_IRQHandler [WEAK]
EXPORT SPI1_IRQHandler [WEAK] EXPORT SPI1_IRQHandler [WEAK]
EXPORT SPI2_IRQHandler [WEAK] EXPORT SPI2_IRQHandler [WEAK]
EXPORT USART1_IRQHandler [WEAK] EXPORT USART1_IRQHandler [WEAK]
EXPORT USART2_IRQHandler [WEAK] EXPORT USART2_IRQHandler [WEAK]
EXPORT USART3_IRQHandler [WEAK] EXPORT USART3_IRQHandler [WEAK]
EXPORT EXTI15_10_IRQHandler [WEAK] EXPORT EXTI15_10_IRQHandler [WEAK]
EXPORT RTCAlarm_IRQHandler [WEAK] EXPORT RTCAlarm_IRQHandler [WEAK]
EXPORT USBWakeUp_IRQHandler [WEAK] EXPORT USBWakeUp_IRQHandler [WEAK]
WWDG_IRQHandler WWDG_IRQHandler
PVD_IRQHandler PVD_IRQHandler
TAMPER_IRQHandler TAMPER_IRQHandler
RTC_IRQHandler RTC_IRQHandler
FLASH_IRQHandler FLASH_IRQHandler
RCC_IRQHandler RCC_IRQHandler
EXTI0_IRQHandler EXTI0_IRQHandler
EXTI1_IRQHandler EXTI1_IRQHandler
EXTI2_IRQHandler EXTI2_IRQHandler
EXTI3_IRQHandler EXTI3_IRQHandler
EXTI4_IRQHandler EXTI4_IRQHandler
DMA1_Channel1_IRQHandler DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler TIM1_CC_IRQHandler
TIM2_IRQHandler TIM2_IRQHandler
TIM3_IRQHandler TIM3_IRQHandler
TIM4_IRQHandler TIM4_IRQHandler
I2C1_EV_IRQHandler I2C1_EV_IRQHandler
I2C1_ER_IRQHandler I2C1_ER_IRQHandler
I2C2_EV_IRQHandler I2C2_EV_IRQHandler
I2C2_ER_IRQHandler I2C2_ER_IRQHandler
SPI1_IRQHandler SPI1_IRQHandler
SPI2_IRQHandler SPI2_IRQHandler
USART1_IRQHandler USART1_IRQHandler
USART2_IRQHandler USART2_IRQHandler
USART3_IRQHandler USART3_IRQHandler
EXTI15_10_IRQHandler EXTI15_10_IRQHandler
RTCAlarm_IRQHandler RTCAlarm_IRQHandler
USBWakeUp_IRQHandler USBWakeUp_IRQHandler
B . B .
ENDP ENDP
ALIGN ALIGN
;******************************************************************************* ;*******************************************************************************
; User Stack and Heap initialization ; User Stack and Heap initialization
;******************************************************************************* ;*******************************************************************************
IF :DEF:__MICROLIB IF :DEF:__MICROLIB
EXPORT __initial_sp EXPORT __initial_sp
EXPORT __heap_base EXPORT __heap_base
EXPORT __heap_limit EXPORT __heap_limit
ELSE ELSE
IMPORT __use_two_region_memory IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap EXPORT __user_initial_stackheap
__user_initial_stackheap __user_initial_stackheap
LDR R0, = Heap_Mem LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size) LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size) LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem LDR R3, = Stack_Mem
BX LR BX LR
ALIGN ALIGN
ENDIF ENDIF
END END
;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** ;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****

View file

@ -1,345 +1,345 @@
/** /**
* Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) * Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
* *
* GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz * GPIO - ADC - Sequenceur - System Timer - PWM - 72 MHz
* Modifs : * Modifs :
* enlèvement de tout ce qui est inutile dans le .h * 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 : * 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_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
* - GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(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) * ajout d'une fonction qui impose une valeur de PWM (TIM3_CCR3)
* PWM_Set_Value_On_TIM3_C3( int Val) * PWM_Set_Value_On_TIM3_C3( int Val)
* permet en ASM ou en C de fixer la valeur de PWM * permet en ASM ou en C de fixer la valeur de PWM
* Ajout de commentaires * Ajout de commentaires
*/ */
#ifndef DRIVERJEULASER_H__ #ifndef DRIVERJEULASER_H__
#define DRIVERJEULASER_H__ #define DRIVERJEULASER_H__
#include "stm32f10x.h" #include "stm32f10x.h"
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- CONFIGURATION CLOCK DU STM32 -------------------------------------- //--------------------- CONFIGURATION CLOCK DU STM32 --------------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure l'ensemble des horloges du uC * @brief Configure l'ensemble des horloges du uC
* @note horloge systeme (config statique a 72 MHz pour le STM32F103) * @note horloge systeme (config statique a 72 MHz pour le STM32F103)
* @param None * @param None
* @retval None * @retval None
*/ */
void CLOCK_Configure(void); void CLOCK_Configure(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------ //--------------------- LES TIMERS GENERAL PURPOSE TIM1 à TIM 4 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée * @brief Configure un Timer TIM1 à TIM4 avec une périodicité donnée
* @note L' horloge des 4 timers a une fréquence de 72MHz * @note L' horloge des 4 timers a une fréquence de 72MHz
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks ); void Timer_1234_Init_ff( TIM_TypeDef *Timer, u32 Duree_ticks );
/** /**
* Macros de base pour utiliser les timers * Macros de base pour utiliser les timers
*/ */
// bloque le timer // bloque le timer
#define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0) #define Bloque_Timer(Timer) Timer->CR1=(Timer->CR1)&~(1<<0)
// Lance timer // Lance timer
#define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0) #define Run_Timer(Timer) Timer->CR1=(Timer->CR1)|(1<<0)
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer * @brief Associe une fonction d'interruption (callback) lors du débordement d'un timer
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) ); void Active_IT_Debordement_Timer( TIM_TypeDef *Timer, char Prio, void (*IT_function)(void) );
//********************************************************************************************************* //*********************************************************************************************************
//--------------------- PWM TIM1 to TIM 4 ------------------------------ //--------------------- PWM TIM1 to TIM 4 ------------------------------
//********************************************************************************************************* //*********************************************************************************************************
/** /**
* @brief Configure un timer en PWM * @brief Configure un timer en PWM
* @note * @note
* @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4 * @param *Timer = TIM1 ou TIM2 ou TIM3 ou TIM4
* @param voie : un des 4 canaux possibles 1 à 4. * @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 * @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 * 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é * @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 ); 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 * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
* est donc : rcy = Thaut_ticks / Periode_ticks * est donc : rcy = Thaut_ticks / Periode_ticks
* @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 * @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 * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
* @retval None * @retval None
*/ */
void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Configure le timer Systick avec une périodicité donnée * @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 * @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 n'est pas à proprement parler un périphérique, il fait partie du Cortex M3
* Ce timer est un 24 bits * Ce timer est un 24 bits
* @param Periode_ticks : nombre de pas (tick) comptés à 72 MHz pour établir la périodicité * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
void Systick_Period_ff( unsigned int Periode_ticks ); void Systick_Period_ff( unsigned int Periode_ticks );
/** /**
* @brief Associe une fonction d'interruption (callback) lors du débordement du Systick * @brief Associe une fonction d'interruption (callback) lors du débordement du Systick
* @note * @note
* @param Prio : niveau de priorité de l'interruption (0 -> priorité max, 15 -> priorité min) * @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 * @param IT_function : le nom de la fonction Callback à appeler lors de l'interruption
* @retval None * @retval None
*/ */
void Systick_Prio_IT( char Prio, void (*Systick_function)(void) ); void Systick_Prio_IT( char Prio, void (*Systick_function)(void) );
/** /**
* Macros de base pour utiliser le Systick * Macros de base pour utiliser le Systick
*/ */
#define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0) #define SysTick_On ((SysTick->CTRL)=(SysTick->CTRL)|1<<0)
#define SysTick_Off ((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_Enable_IT ((SysTick->CTRL)=(SysTick->CTRL)|1<<1)
#define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1)) #define SysTick_Disable_IT ((SysTick->CTRL)=(SysTick->CTRL)& ~(1<<1))
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- LE SYSTICK TIMER, Part of Cortex M3 ------------------------------ //--------------------- 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 * @brief Active l'ADC du STM32, configure la durée de prélèvement de l'échantillon (temps
* de fermeture du switch d'acquisition * de fermeture du switch d'acquisition
* @note * @note
* @param ADC : précise de quel ADC il s'agit, ADC1 ou ADC2 * @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 * @param Duree_Ech_ticks : dirée de fermeture du switch d'échantillonnage en Tick d'horloge CPU
* exemple pour 1µs on choisira 72. * exemple pour 1µs on choisira 72.
* @retval Nombre de Tick réellement pris en compte * @retval Nombre de Tick réellement pris en compte
*/ */
unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks ); unsigned int Init_TimingADC_ActiveADC_ff( ADC_TypeDef * ADC, u32 Duree_Ech_ticks );
/** /**
* @brief Sélectionne la voie à convertir * @brief Sélectionne la voie à convertir
* @note Attention, la voie va de 0 à 15 et n'est pas directement lié au n°de GPIO * @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 ADC : précise de quel ADC il s'agit, ADC1 ou ADC2
* @param Voie_ADC : 1 à 15 * @param Voie_ADC : 1 à 15
* @retval None * @retval None
*/ */
void Single_Channel_ADC( ADC_TypeDef * ADC, char Voie_ADC ); 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 * @brief Permet lier le déclenchement au débordement d'un timer, spécifie également
* la période de débordement du timer * la période de débordement du timer
* @note pas besoin de régler le timer avec une autre fonction dédiée 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 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 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 * @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 * La période de débordement du Timer est donc T = Durée_ticks * Tck, avec Tck = 1/72 000 000
* @retval None * @retval None
*/ */
// param pour Source : // param pour Source :
#define TIM1_CC1 0 #define TIM1_CC1 0
#define TIM1_CC2 1 #define TIM1_CC2 1
#define TIM1_CC3 2 #define TIM1_CC3 2
#define TIM2_CC2 3 #define TIM2_CC2 3
#define TIM4_CC4 5 #define TIM4_CC4 5
void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks ); void Init_Conversion_On_Trig_Timer_ff( ADC_TypeDef * ADC, char Source, u32 Periode_ticks );
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- ANALOG INPUT ADC & DMA ------------------------------ //--------------------- ANALOG INPUT ADC & DMA ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Permer de lier l'ADC à un tableau en RAM pour une DMA * @brief Permer de lier l'ADC à un tableau en RAM pour une DMA
* @note * @note
* @param Circ : circular. Si '0', en fin de DMA le ptr d'@ reste inchangé * @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. * si '1' le ptr d'@ se recale à celle du début.
* @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire * @param Ptr_Table_DMA : contient l'@ de début de zone RAM à écrire
* @retval None * @retval None
*/ */
void Init_ADC1_DMA1(char Circ, short int *Ptr_Table_DMA); 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 * @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 * dans la zone de RAM écrite est indiquée lors de l'appel de la fonction Init_ADC1_DMA1
* @note * @note
* @param NbEchDMA est le nombre d'échantillons à stocker. * @param NbEchDMA est le nombre d'échantillons à stocker.
* @retval None * @retval None
*/ */
void Start_DMA1( u16 NbEchDMA ); void Start_DMA1( u16 NbEchDMA );
// arret DMA // arret DMA
#define Stop_DMA1 DMA1_Channel1->CCR =(DMA1_Channel1->CCR) &~0x1; #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 * @brief Attend la fin d'un cycle de DMA. la duree depend de la periode d'acquisition
* et du nombre d'echantillons * et du nombre d'echantillons
* @note fonction d'attente (bloquante) * @note fonction d'attente (bloquante)
* @param None * @param None
* @retval None * @retval None
*/ */
void Wait_On_End_Of_DMA1(void); void Wait_On_End_Of_DMA1(void);
//********************************************************************************************************** //**********************************************************************************************************
//--------------------- GPIO ------------------------------ //--------------------- GPIO ------------------------------
//********************************************************************************************************** //**********************************************************************************************************
/** /**
* @brief Initialisation d'un GPIO (A à C), pin x. * @brief Initialisation d'un GPIO (A à C), pin x.
* peut être configuré : * peut être configuré :
* -> Input ou output * -> Input ou output
* -> architecture technologique (push-pull, open drain...) * -> architecture technologique (push-pull, open drain...)
* @note * @note
* @param Port : GPIOA, GPIOB, GPIOC * @param Port : GPIOA, GPIOB, GPIOC
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @param Sens : INPUT ou OUTPUT * @param Sens : INPUT ou OUTPUT
* @param Techno : voir define ci dessous * @param Techno : voir define ci dessous
* @retval 1 erreur, 0 si OK * @retval 1 erreur, 0 si OK
*/ */
// Sens // Sens
#define INPUT 'i' #define INPUT 'i'
#define OUTPUT 'o' #define OUTPUT 'o'
// Techno pour pin en entrée (INPUT) // Techno pour pin en entrée (INPUT)
#define ANALOG 0 #define ANALOG 0
#define INPUT_FLOATING 1 #define INPUT_FLOATING 1
#define INPUT_PULL_DOWN_UP 2 #define INPUT_PULL_DOWN_UP 2
// Techno pour pin en sortie (OUTPUT) // Techno pour pin en sortie (OUTPUT)
#define OUTPUT_PPULL 0 #define OUTPUT_PPULL 0
#define OUTPUT_OPDRAIN 1 #define OUTPUT_OPDRAIN 1
#define ALT_PPULL 2 #define ALT_PPULL 2
#define ALT_OPDRAIN 3 #define ALT_OPDRAIN 3
// Exemple : // Exemple :
// Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL); // Port_IO_Init(GPIOB, 8, OUTPUT, OUTPUT_PPULL);
// Place le bit 8 du port B en sortie Push-pull // Place le bit 8 du port B en sortie Push-pull
char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno); char GPIO_Configure(GPIO_TypeDef * Port, int Broche, int Sens, int Techno);
/** /**
* @brief Mise à 1 d'une broche GPIO * @brief Mise à 1 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Set(char Broche); void GPIOA_Set(char Broche);
void GPIOB_Set(char Broche); void GPIOB_Set(char Broche);
void GPIOC_Set(char Broche); void GPIOC_Set(char Broche);
/** /**
* @brief Mise à 0 d'une broche GPIO * @brief Mise à 0 d'une broche GPIO
* @note Une fonction par GPIO * @note Une fonction par GPIO
* @param Broche : 0 à 15 * @param Broche : 0 à 15
* @retval None * @retval None
*/ */
void GPIOA_Clear(char Broche); void GPIOA_Clear(char Broche);
void GPIOB_Clear(char Broche); void GPIOB_Clear(char Broche);
void GPIOC_Clear(char Broche); void GPIOC_Clear(char Broche);
#endif #endif

View file

@ -1,56 +1,56 @@
; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR) ; Bibliotheque DriverJeuLaser (ancienne gassp72 adaptée 2021 - TR)
; Accès en aux fonctions suivantes : ; Accès en aux fonctions suivantes :
; GPIO : ; GPIO :
; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche) ; GPIOA_Set(char Broche), GPIOB_Set(char Broche), GPIOC_Set(char Broche)
; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche) ; GPIOA_Clear(char Broche), GPIOB_Clear(char Broche), GPIOC_Clear(char Broche)
; PWM : ; PWM :
;/** ;/**
; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif ; * @brief Fixe une valeur de PWM, Val, en tick horloge. La rapport cyclique effectif
; * est donc : rcy = Thaut_ticks / Periode_ticks ; * est donc : rcy = Thaut_ticks / Periode_ticks
; * @note spécifique Jeu Laser, PWM liée exclusivement au TIM3, chan3 ; * @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 ; * @param Thaut_ticks : durée de l'état haut d'une impulsion en Ticks
; * @retval None ; * @retval None
; */ ; */
;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks); ;void PWM_Set_Value_TIM3_Ch3( unsigned short int Thaut_ticks);
import PWM_Set_Value_TIM3_Ch3 import PWM_Set_Value_TIM3_Ch3
;/** ;/**
; * @brief Mise à 1 d'une broche GPIO ; * @brief Mise à 1 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Set(char Broche); ;void GPIOA_Set(char Broche);
import GPIOA_Set import GPIOA_Set
;void GPIOB_Set(char Broche); ;void GPIOB_Set(char Broche);
import GPIOB_Set import GPIOB_Set
;void GPIOC_Set(char Broche); ;void GPIOC_Set(char Broche);
import GPIOC_Set import GPIOC_Set
;/** ;/**
; * @brief Mise à 0 d'une broche GPIO ; * @brief Mise à 0 d'une broche GPIO
; * @note Une fonction par GPIO ; * @note Une fonction par GPIO
; * @param Broche : 0 à 15 ; * @param Broche : 0 à 15
; * @retval None ; * @retval None
; */ ; */
;void GPIOA_Clear(char Broche); ;void GPIOA_Clear(char Broche);
import GPIOA_Clear import GPIOA_Clear
;void GPIOB_Clear(char Broche); ;void GPIOB_Clear(char Broche);
import GPIOB_Clear import GPIOB_Clear
;void GPIOC_Clear(char Broche); ;void GPIOC_Clear(char Broche);
import GPIOC_Clear import GPIOC_Clear
end end

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,77 @@
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
; ===============================================================================================
include ../Driver/DriverJeuLaser.inc
export CallbackSon
export SortieSon
extern LongueurSon
extern Son
Index DCD 0
SortieSon DCW 0
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
CallbackSon proc
ldr r0,=Index
ldr r1,[r0]
ldr r2,=Son
ldr r3,LongueurSon
cmp r1,r3
ble notEqual
notEqual
push {r4}
push {r5}
ldrsh r5,[r2,r1]
mov r4,#32768
add r5,r5,r4
mov r4,#719
mul r5,r4
mov r4,#65535
udiv r5,r4
push {r6}
ldr r6,=SortieSon
strh r5,[r6]
add r1, #2
str r1,[r0]
pop{r6}
pop {r4}
pop {r5}
bx lr
ENDFUNC
END

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,31 @@
#include "DriverJeuLaser.h"
extern void CallbackSon(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();
Timer_1234_Init_ff( TIM4, 6552);
Timer_1234_Init_ff( TIM3,720);
Active_IT_Debordement_Timer( TIM4, 2, CallbackSon);
GPIO_Configure(GPIOB, 0, OUTPUT, ALT_PPULL);
PWM_Init_ff( TIM3, 3, 720);
//============================================================================
while (1)
{
}
}

View file

@ -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
; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size
__initial_sp
; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h>
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*****

File diff suppressed because it is too large Load diff

View file

@ -1,30 +1,121 @@
PRESERVE8 PRESERVE8
THUMB THUMB
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly ; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly
;Section RAM (read write):
area maram,data,readwrite
;Section RAM (read write):
area maram,data,readwrite
; ===============================================================================================
; ===============================================================================================
include ../Driver/DriverJeuLaser.inc
;Section ROM code (read only) : export CallbackSon
area moncode,code,readonly export SortieSon
; écrire le code ici extern LongueurSon
extern Son
export StartSon
Index DCD 0
export Index
SortieSon DCW 0
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
CallbackSon proc
ldr r0,=Index
ldr r1,[r0]
ldr r2,=Son
ldr r3,LongueurSon
push {r4}
push {r5}
push {r6}
push {r7}
mov r4, #2
mul r3,r4
ldr r7,[r0] ; comparaison de la valeur de l'index pour savoir si c'est la fin
cmp r3,r7
beq FinIndex
cmp r1,r3
ble notEqual
notEqual
ldrsh r5,[r2,r1]
mov r4,#32768
add r5,r5,r4
mov r4,#719
mul r5,r4
mov r4,#65535
udiv r5,r4
ldr r6,=SortieSon
strh r5,[r6]
push {r1}
push {lr}
push {r0}
mov r0,r5
bl PWM_Set_Value_TIM3_Ch3
pop {r0}
pop {lr}
pop {r1}
add r1, #2
str r1,[r0]
pop {r7}
pop {r6}
pop {r5}
pop {r4}
bx lr
ENDFUNC
StartSon proc
ldr r0, =Index
mov r2,#0
str r2,[r0]
bx lr
endp
FinIndex
push {r8}
mov r8,#-1
str r8,[r0]
pop {r8}
pop {r7}
pop {r6}
pop {r5}
pop {r4}
bx lr
endp
END END

File diff suppressed because it is too large Load diff

View file

@ -1,28 +1,40 @@
#include "DriverJeuLaser.h" #include "DriverJeuLaser.h"
extern void CallbackSon(void);
extern short SortieSon ;
int main(void) extern void StartSon(void) ;
{ extern short Index ;
int main(void)
// =========================================================================== {
// ============= INIT PERIPH (faites qu'une seule fois) =====================
// =========================================================================== // ===========================================================================
// ============= INIT PERIPH (faites qu'une seule fois) =====================
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers // ===========================================================================
CLOCK_Configure();
// Après exécution : le coeur CPU est clocké à 72MHz ainsi que tous les timers
CLOCK_Configure();
Timer_1234_Init_ff( TIM4, 6552);
//Timer_1234_Init_ff( TIM3,720);
//============================================================================
GPIO_Configure(GPIOB, 0, OUTPUT, ALT_PPULL);
PWM_Init_ff( TIM3, 3, 720);
while (1) Active_IT_Debordement_Timer( TIM4, 2, CallbackSon);
{
} //============================================================================
}
//Pour la prochaine fois, on doit afficher le signal sur l'oscillo et coder la fonction start
while (1)
{
if (Index==-1){
StartSon() ;
}
}
}

View file

@ -1,335 +1,335 @@
;******************** (C) COPYRIGHT 2011 STMicroelectronics ******************** ;******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
;* File Name : startup_stm32f10x_md.s ;* File Name : startup_stm32f10x_md.s
;* Author : MCD Application Team ;* Author : MCD Application Team
;* Version : V3.5.0 ;* Version : V3.5.0
;* Date : 11-March-2011 ;* Date : 11-March-2011
;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM ;* Description : STM32F10x Medium Density Devices vector table for MDK-ARM
;* toolchain. ;* toolchain.
;* This module performs: ;* This module performs:
;* - Set the initial SP ;* - Set the initial SP
;* - Set the initial PC == Reset_Handler ;* - Set the initial PC == Reset_Handler
;* - Set the vector table entries with the exceptions ISR address ;* - Set the vector table entries with the exceptions ISR address
;* - Configure the clock system ;* - Configure the clock system
;* - Branches to __main in the C library (which eventually ;* - Branches to __main in the C library (which eventually
;* calls main()). ;* calls main()).
;* After Reset the CortexM3 processor is in Thread mode, ;* After Reset the CortexM3 processor is in Thread mode,
;* priority is Privileged, and the Stack is set to Main. ;* priority is Privileged, and the Stack is set to Main.
;* <<< Use Configuration Wizard in Context Menu >>> ;* <<< Use Configuration Wizard in Context Menu >>>
;******************************************************************************* ;*******************************************************************************
; THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS ; 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. ; 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, ; AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
; INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE ; 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 ; CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. ; INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
;******************************************************************************* ;*******************************************************************************
; Amount of memory (in bytes) allocated for Stack ; Amount of memory (in bytes) allocated for Stack
; Tailor this value to your application needs ; Tailor this value to your application needs
; <h> Stack Configuration ; <h> Stack Configuration
; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Stack Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Stack_Size EQU 0x00000400 Stack_Size EQU 0x00000400
AREA STACK, NOINIT, READWRITE, ALIGN=3 AREA STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem SPACE Stack_Size Stack_Mem SPACE Stack_Size
__initial_sp __initial_sp
; <h> Heap Configuration ; <h> Heap Configuration
; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> ; <o> Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
; </h> ; </h>
Heap_Size EQU 0x00000200 Heap_Size EQU 0x00000200
AREA HEAP, NOINIT, READWRITE, ALIGN=3 AREA HEAP, NOINIT, READWRITE, ALIGN=3
__heap_base __heap_base
Heap_Mem SPACE Heap_Size Heap_Mem SPACE Heap_Size
__heap_limit __heap_limit
PRESERVE8 PRESERVE8
THUMB THUMB
; Vector Table Mapped to Address 0 at Reset ; Vector Table Mapped to Address 0 at Reset
AREA RESET, DATA, READONLY AREA RESET, DATA, READONLY
EXPORT __Vectors EXPORT __Vectors
EXPORT __Vectors_End EXPORT __Vectors_End
EXPORT __Vectors_Size EXPORT __Vectors_Size
__Vectors DCD __initial_sp ; Top of Stack __Vectors DCD __initial_sp ; Top of Stack
DCD Reset_Handler ; Reset Handler DCD Reset_Handler ; Reset Handler
DCD NMI_Handler ; NMI Handler DCD NMI_Handler ; NMI Handler
DCD HardFault_Handler ; Hard Fault Handler DCD HardFault_Handler ; Hard Fault Handler
DCD MemManage_Handler ; MPU Fault Handler DCD MemManage_Handler ; MPU Fault Handler
DCD BusFault_Handler ; Bus Fault Handler DCD BusFault_Handler ; Bus Fault Handler
DCD UsageFault_Handler ; Usage Fault Handler DCD UsageFault_Handler ; Usage Fault Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD 0 ; Reserved DCD 0 ; Reserved
DCD SVC_Handler ; SVCall Handler DCD SVC_Handler ; SVCall Handler
DCD DebugMon_Handler ; Debug Monitor Handler DCD DebugMon_Handler ; Debug Monitor Handler
DCD 0 ; Reserved DCD 0 ; Reserved
DCD PendSV_Handler ; PendSV Handler DCD PendSV_Handler ; PendSV Handler
DCD SysTick_Handler ; SysTick Handler DCD SysTick_Handler ; SysTick Handler
; External Interrupts ; External Interrupts
DCD WWDG_IRQHandler ; Window Watchdog DCD WWDG_IRQHandler ; Window Watchdog
DCD PVD_IRQHandler ; PVD through EXTI Line detect DCD PVD_IRQHandler ; PVD through EXTI Line detect
DCD TAMPER_IRQHandler ; Tamper DCD TAMPER_IRQHandler ; Tamper
DCD RTC_IRQHandler ; RTC DCD RTC_IRQHandler ; RTC
DCD FLASH_IRQHandler ; Flash DCD FLASH_IRQHandler ; Flash
DCD RCC_IRQHandler ; RCC DCD RCC_IRQHandler ; RCC
DCD EXTI0_IRQHandler ; EXTI Line 0 DCD EXTI0_IRQHandler ; EXTI Line 0
DCD EXTI1_IRQHandler ; EXTI Line 1 DCD EXTI1_IRQHandler ; EXTI Line 1
DCD EXTI2_IRQHandler ; EXTI Line 2 DCD EXTI2_IRQHandler ; EXTI Line 2
DCD EXTI3_IRQHandler ; EXTI Line 3 DCD EXTI3_IRQHandler ; EXTI Line 3
DCD EXTI4_IRQHandler ; EXTI Line 4 DCD EXTI4_IRQHandler ; EXTI Line 4
DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1 DCD DMA1_Channel1_IRQHandler ; DMA1 Channel 1
DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2 DCD DMA1_Channel2_IRQHandler ; DMA1 Channel 2
DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3 DCD DMA1_Channel3_IRQHandler ; DMA1 Channel 3
DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4 DCD DMA1_Channel4_IRQHandler ; DMA1 Channel 4
DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5 DCD DMA1_Channel5_IRQHandler ; DMA1 Channel 5
DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6 DCD DMA1_Channel6_IRQHandler ; DMA1 Channel 6
DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7 DCD DMA1_Channel7_IRQHandler ; DMA1 Channel 7
DCD ADC1_2_IRQHandler ; ADC1_2 DCD ADC1_2_IRQHandler ; ADC1_2
DCD USB_HP_CAN1_TX_IRQHandler ; USB High Priority or CAN1 TX 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 USB_LP_CAN1_RX0_IRQHandler ; USB Low Priority or CAN1 RX0
DCD CAN1_RX1_IRQHandler ; CAN1 RX1 DCD CAN1_RX1_IRQHandler ; CAN1 RX1
DCD CAN1_SCE_IRQHandler ; CAN1 SCE DCD CAN1_SCE_IRQHandler ; CAN1 SCE
DCD EXTI9_5_IRQHandler ; EXTI Line 9..5 DCD EXTI9_5_IRQHandler ; EXTI Line 9..5
DCD TIM1_BRK_IRQHandler ; TIM1 Break DCD TIM1_BRK_IRQHandler ; TIM1 Break
DCD TIM1_UP_IRQHandler ; TIM1 Update DCD TIM1_UP_IRQHandler ; TIM1 Update
DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation DCD TIM1_TRG_COM_IRQHandler ; TIM1 Trigger and Commutation
DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare DCD TIM1_CC_IRQHandler ; TIM1 Capture Compare
DCD TIM2_IRQHandler ; TIM2 DCD TIM2_IRQHandler ; TIM2
DCD TIM3_IRQHandler ; TIM3 DCD TIM3_IRQHandler ; TIM3
DCD TIM4_IRQHandler ; TIM4 DCD TIM4_IRQHandler ; TIM4
DCD I2C1_EV_IRQHandler ; I2C1 Event DCD I2C1_EV_IRQHandler ; I2C1 Event
DCD I2C1_ER_IRQHandler ; I2C1 Error DCD I2C1_ER_IRQHandler ; I2C1 Error
DCD I2C2_EV_IRQHandler ; I2C2 Event DCD I2C2_EV_IRQHandler ; I2C2 Event
DCD I2C2_ER_IRQHandler ; I2C2 Error DCD I2C2_ER_IRQHandler ; I2C2 Error
DCD SPI1_IRQHandler ; SPI1 DCD SPI1_IRQHandler ; SPI1
DCD SPI2_IRQHandler ; SPI2 DCD SPI2_IRQHandler ; SPI2
DCD USART1_IRQHandler ; USART1 DCD USART1_IRQHandler ; USART1
DCD USART2_IRQHandler ; USART2 DCD USART2_IRQHandler ; USART2
DCD USART3_IRQHandler ; USART3 DCD USART3_IRQHandler ; USART3
DCD EXTI15_10_IRQHandler ; EXTI Line 15..10 DCD EXTI15_10_IRQHandler ; EXTI Line 15..10
DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line DCD RTCAlarm_IRQHandler ; RTC Alarm through EXTI Line
DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend DCD USBWakeUp_IRQHandler ; USB Wakeup from suspend
__Vectors_End __Vectors_End
__Vectors_Size EQU __Vectors_End - __Vectors __Vectors_Size EQU __Vectors_End - __Vectors
AREA |.text|, CODE, READONLY AREA |.text|, CODE, READONLY
; Reset handler ; Reset handler
Reset_Handler PROC Reset_Handler PROC
EXPORT Reset_Handler [WEAK] EXPORT Reset_Handler [WEAK]
IMPORT __main IMPORT __main
LDR R0, =SystemInit LDR R0, =SystemInit
BLX R0 BLX R0
; ;
; Enable UsageFault, MemFault and Busfault interrupts ; Enable UsageFault, MemFault and Busfault interrupts
; ;
_SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24 _SHCSR EQU 0xE000ED24 ; SHCSR is located at address 0xE000ED24
LDR.W R0, =_SHCSR LDR.W R0, =_SHCSR
LDR R1, [R0] ; Read CPACR LDR R1, [R0] ; Read CPACR
ORR R1, R1, #(0x7 << 16) ; Set bits 16,17,18 to enable usagefault, busfault, memfault interrupts 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 STR R1, [R0] ; Write back the modified value to the CPACR
DSB ; Wait for store to complete DSB ; Wait for store to complete
; ;
; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority) ; Set priority grouping (PRIGROUP) in AIRCR to 3 (16 levels for group priority and 0 for subpriority)
; ;
_AIRCR EQU 0xE000ED0C _AIRCR EQU 0xE000ED0C
_AIRCR_VAL EQU 0x05FA0300 _AIRCR_VAL EQU 0x05FA0300
LDR.W R0, =_AIRCR LDR.W R0, =_AIRCR
LDR.W R1, =_AIRCR_VAL LDR.W R1, =_AIRCR_VAL
STR R1,[R0] STR R1,[R0]
; ;
; Finaly, jump to main function (void main (void)) ; Finaly, jump to main function (void main (void))
; ;
LDR R0, =__main LDR R0, =__main
BX R0 BX R0
ENDP ENDP
SystemInit PROC SystemInit PROC
EXPORT SystemInit [WEAK] EXPORT SystemInit [WEAK]
BX LR BX LR
ENDP ENDP
; Dummy Exception Handlers (infinite loops which can be modified) ; Dummy Exception Handlers (infinite loops which can be modified)
NMI_Handler PROC NMI_Handler PROC
EXPORT NMI_Handler [WEAK] EXPORT NMI_Handler [WEAK]
B . B .
ENDP ENDP
HardFault_Handler\ HardFault_Handler\
PROC PROC
EXPORT HardFault_Handler [WEAK] EXPORT HardFault_Handler [WEAK]
B . B .
ENDP ENDP
MemManage_Handler\ MemManage_Handler\
PROC PROC
EXPORT MemManage_Handler [WEAK] EXPORT MemManage_Handler [WEAK]
B . B .
ENDP ENDP
BusFault_Handler\ BusFault_Handler\
PROC PROC
EXPORT BusFault_Handler [WEAK] EXPORT BusFault_Handler [WEAK]
B . B .
ENDP ENDP
UsageFault_Handler\ UsageFault_Handler\
PROC PROC
EXPORT UsageFault_Handler [WEAK] EXPORT UsageFault_Handler [WEAK]
B . B .
ENDP ENDP
SVC_Handler PROC SVC_Handler PROC
EXPORT SVC_Handler [WEAK] EXPORT SVC_Handler [WEAK]
B . B .
ENDP ENDP
DebugMon_Handler\ DebugMon_Handler\
PROC PROC
EXPORT DebugMon_Handler [WEAK] EXPORT DebugMon_Handler [WEAK]
B . B .
ENDP ENDP
PendSV_Handler PROC PendSV_Handler PROC
EXPORT PendSV_Handler [WEAK] EXPORT PendSV_Handler [WEAK]
B . B .
ENDP ENDP
SysTick_Handler PROC SysTick_Handler PROC
EXPORT SysTick_Handler [WEAK] EXPORT SysTick_Handler [WEAK]
B . B .
ENDP ENDP
Default_Handler PROC Default_Handler PROC
EXPORT WWDG_IRQHandler [WEAK] EXPORT WWDG_IRQHandler [WEAK]
EXPORT PVD_IRQHandler [WEAK] EXPORT PVD_IRQHandler [WEAK]
EXPORT TAMPER_IRQHandler [WEAK] EXPORT TAMPER_IRQHandler [WEAK]
EXPORT RTC_IRQHandler [WEAK] EXPORT RTC_IRQHandler [WEAK]
EXPORT FLASH_IRQHandler [WEAK] EXPORT FLASH_IRQHandler [WEAK]
EXPORT RCC_IRQHandler [WEAK] EXPORT RCC_IRQHandler [WEAK]
EXPORT EXTI0_IRQHandler [WEAK] EXPORT EXTI0_IRQHandler [WEAK]
EXPORT EXTI1_IRQHandler [WEAK] EXPORT EXTI1_IRQHandler [WEAK]
EXPORT EXTI2_IRQHandler [WEAK] EXPORT EXTI2_IRQHandler [WEAK]
EXPORT EXTI3_IRQHandler [WEAK] EXPORT EXTI3_IRQHandler [WEAK]
EXPORT EXTI4_IRQHandler [WEAK] EXPORT EXTI4_IRQHandler [WEAK]
EXPORT DMA1_Channel1_IRQHandler [WEAK] EXPORT DMA1_Channel1_IRQHandler [WEAK]
EXPORT DMA1_Channel2_IRQHandler [WEAK] EXPORT DMA1_Channel2_IRQHandler [WEAK]
EXPORT DMA1_Channel3_IRQHandler [WEAK] EXPORT DMA1_Channel3_IRQHandler [WEAK]
EXPORT DMA1_Channel4_IRQHandler [WEAK] EXPORT DMA1_Channel4_IRQHandler [WEAK]
EXPORT DMA1_Channel5_IRQHandler [WEAK] EXPORT DMA1_Channel5_IRQHandler [WEAK]
EXPORT DMA1_Channel6_IRQHandler [WEAK] EXPORT DMA1_Channel6_IRQHandler [WEAK]
EXPORT DMA1_Channel7_IRQHandler [WEAK] EXPORT DMA1_Channel7_IRQHandler [WEAK]
EXPORT ADC1_2_IRQHandler [WEAK] EXPORT ADC1_2_IRQHandler [WEAK]
EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK] EXPORT USB_HP_CAN1_TX_IRQHandler [WEAK]
EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK] EXPORT USB_LP_CAN1_RX0_IRQHandler [WEAK]
EXPORT CAN1_RX1_IRQHandler [WEAK] EXPORT CAN1_RX1_IRQHandler [WEAK]
EXPORT CAN1_SCE_IRQHandler [WEAK] EXPORT CAN1_SCE_IRQHandler [WEAK]
EXPORT EXTI9_5_IRQHandler [WEAK] EXPORT EXTI9_5_IRQHandler [WEAK]
EXPORT TIM1_BRK_IRQHandler [WEAK] EXPORT TIM1_BRK_IRQHandler [WEAK]
EXPORT TIM1_UP_IRQHandler [WEAK] EXPORT TIM1_UP_IRQHandler [WEAK]
EXPORT TIM1_TRG_COM_IRQHandler [WEAK] EXPORT TIM1_TRG_COM_IRQHandler [WEAK]
EXPORT TIM1_CC_IRQHandler [WEAK] EXPORT TIM1_CC_IRQHandler [WEAK]
EXPORT TIM2_IRQHandler [WEAK] EXPORT TIM2_IRQHandler [WEAK]
EXPORT TIM3_IRQHandler [WEAK] EXPORT TIM3_IRQHandler [WEAK]
EXPORT TIM4_IRQHandler [WEAK] EXPORT TIM4_IRQHandler [WEAK]
EXPORT I2C1_EV_IRQHandler [WEAK] EXPORT I2C1_EV_IRQHandler [WEAK]
EXPORT I2C1_ER_IRQHandler [WEAK] EXPORT I2C1_ER_IRQHandler [WEAK]
EXPORT I2C2_EV_IRQHandler [WEAK] EXPORT I2C2_EV_IRQHandler [WEAK]
EXPORT I2C2_ER_IRQHandler [WEAK] EXPORT I2C2_ER_IRQHandler [WEAK]
EXPORT SPI1_IRQHandler [WEAK] EXPORT SPI1_IRQHandler [WEAK]
EXPORT SPI2_IRQHandler [WEAK] EXPORT SPI2_IRQHandler [WEAK]
EXPORT USART1_IRQHandler [WEAK] EXPORT USART1_IRQHandler [WEAK]
EXPORT USART2_IRQHandler [WEAK] EXPORT USART2_IRQHandler [WEAK]
EXPORT USART3_IRQHandler [WEAK] EXPORT USART3_IRQHandler [WEAK]
EXPORT EXTI15_10_IRQHandler [WEAK] EXPORT EXTI15_10_IRQHandler [WEAK]
EXPORT RTCAlarm_IRQHandler [WEAK] EXPORT RTCAlarm_IRQHandler [WEAK]
EXPORT USBWakeUp_IRQHandler [WEAK] EXPORT USBWakeUp_IRQHandler [WEAK]
WWDG_IRQHandler WWDG_IRQHandler
PVD_IRQHandler PVD_IRQHandler
TAMPER_IRQHandler TAMPER_IRQHandler
RTC_IRQHandler RTC_IRQHandler
FLASH_IRQHandler FLASH_IRQHandler
RCC_IRQHandler RCC_IRQHandler
EXTI0_IRQHandler EXTI0_IRQHandler
EXTI1_IRQHandler EXTI1_IRQHandler
EXTI2_IRQHandler EXTI2_IRQHandler
EXTI3_IRQHandler EXTI3_IRQHandler
EXTI4_IRQHandler EXTI4_IRQHandler
DMA1_Channel1_IRQHandler DMA1_Channel1_IRQHandler
DMA1_Channel2_IRQHandler DMA1_Channel2_IRQHandler
DMA1_Channel3_IRQHandler DMA1_Channel3_IRQHandler
DMA1_Channel4_IRQHandler DMA1_Channel4_IRQHandler
DMA1_Channel5_IRQHandler DMA1_Channel5_IRQHandler
DMA1_Channel6_IRQHandler DMA1_Channel6_IRQHandler
DMA1_Channel7_IRQHandler DMA1_Channel7_IRQHandler
ADC1_2_IRQHandler ADC1_2_IRQHandler
USB_HP_CAN1_TX_IRQHandler USB_HP_CAN1_TX_IRQHandler
USB_LP_CAN1_RX0_IRQHandler USB_LP_CAN1_RX0_IRQHandler
CAN1_RX1_IRQHandler CAN1_RX1_IRQHandler
CAN1_SCE_IRQHandler CAN1_SCE_IRQHandler
EXTI9_5_IRQHandler EXTI9_5_IRQHandler
TIM1_BRK_IRQHandler TIM1_BRK_IRQHandler
TIM1_UP_IRQHandler TIM1_UP_IRQHandler
TIM1_TRG_COM_IRQHandler TIM1_TRG_COM_IRQHandler
TIM1_CC_IRQHandler TIM1_CC_IRQHandler
TIM2_IRQHandler TIM2_IRQHandler
TIM3_IRQHandler TIM3_IRQHandler
TIM4_IRQHandler TIM4_IRQHandler
I2C1_EV_IRQHandler I2C1_EV_IRQHandler
I2C1_ER_IRQHandler I2C1_ER_IRQHandler
I2C2_EV_IRQHandler I2C2_EV_IRQHandler
I2C2_ER_IRQHandler I2C2_ER_IRQHandler
SPI1_IRQHandler SPI1_IRQHandler
SPI2_IRQHandler SPI2_IRQHandler
USART1_IRQHandler USART1_IRQHandler
USART2_IRQHandler USART2_IRQHandler
USART3_IRQHandler USART3_IRQHandler
EXTI15_10_IRQHandler EXTI15_10_IRQHandler
RTCAlarm_IRQHandler RTCAlarm_IRQHandler
USBWakeUp_IRQHandler USBWakeUp_IRQHandler
B . B .
ENDP ENDP
ALIGN ALIGN
;******************************************************************************* ;*******************************************************************************
; User Stack and Heap initialization ; User Stack and Heap initialization
;******************************************************************************* ;*******************************************************************************
IF :DEF:__MICROLIB IF :DEF:__MICROLIB
EXPORT __initial_sp EXPORT __initial_sp
EXPORT __heap_base EXPORT __heap_base
EXPORT __heap_limit EXPORT __heap_limit
ELSE ELSE
IMPORT __use_two_region_memory IMPORT __use_two_region_memory
EXPORT __user_initial_stackheap EXPORT __user_initial_stackheap
__user_initial_stackheap __user_initial_stackheap
LDR R0, = Heap_Mem LDR R0, = Heap_Mem
LDR R1, =(Stack_Mem + Stack_Size) LDR R1, =(Stack_Mem + Stack_Size)
LDR R2, = (Heap_Mem + Heap_Size) LDR R2, = (Heap_Mem + Heap_Size)
LDR R3, = Stack_Mem LDR R3, = Stack_Mem
BX LR BX LR
ALIGN ALIGN
ENDIF ENDIF
END END
;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE***** ;******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE*****

View file

@ -1,677 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_optx.xsd">
<SchemaVersion>1.0</SchemaVersion>
<Header>### uVision Project, (C) Keil Software</Header>
<Extensions>
<cExt>*.c</cExt>
<aExt>*.s*; *.src; *.a*</aExt>
<oExt>*.obj; *.o</oExt>
<lExt>*.lib</lExt>
<tExt>*.txt; *.h; *.inc</tExt>
<pExt>*.plm</pExt>
<CppX>*.cpp</CppX>
<nMigrate>0</nMigrate>
</Extensions>
<DaveTm>
<dwLowDateTime>0</dwLowDateTime>
<dwHighDateTime>0</dwHighDateTime>
</DaveTm>
<Target>
<TargetName>Simu</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>8000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath></ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>1</uSim>
<uTrg>0</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>1</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name>-T0</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM))</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-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)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<LogicAnalyzers>
<Wi>
<IntNumber>0</IntNumber>
<FirstString>((portb &amp; 0x00000002) &gt;&gt; 1 &amp; 0x2) &gt;&gt; 1</FirstString>
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F160000000000000000000000000000000000000096020008</SecondString>
</Wi>
</LogicAnalyzers>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Target>
<TargetName>CibleSondeKEIL</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>8000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath></ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>0</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>1</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>0</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>BIN\UL2CM3.DLL</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name>-T0</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>-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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-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)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>257</SubType>
<ItemText>r0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Target>
<TargetName>CibleSondeST</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName>
<TargetOption>
<CLKADS>8000000</CLKADS>
<OPTTT>
<gFlags>1</gFlags>
<BeepAtEnd>1</BeepAtEnd>
<RunSim>0</RunSim>
<RunTarget>1</RunTarget>
<RunAbUc>0</RunAbUc>
</OPTTT>
<OPTHX>
<HexSelection>1</HexSelection>
<FlashByte>65535</FlashByte>
<HexRangeLowAddress>0</HexRangeLowAddress>
<HexRangeHighAddress>0</HexRangeHighAddress>
<HexOffset>0</HexOffset>
</OPTHX>
<OPTLEX>
<PageWidth>79</PageWidth>
<PageLength>66</PageLength>
<TabStop>8</TabStop>
<ListingPath></ListingPath>
</OPTLEX>
<ListingPage>
<CreateCListing>1</CreateCListing>
<CreateAListing>1</CreateAListing>
<CreateLListing>1</CreateLListing>
<CreateIListing>0</CreateIListing>
<AsmCond>1</AsmCond>
<AsmSymb>1</AsmSymb>
<AsmXref>0</AsmXref>
<CCond>1</CCond>
<CCode>0</CCode>
<CListInc>0</CListInc>
<CSymb>0</CSymb>
<LinkerCodeListing>0</LinkerCodeListing>
</ListingPage>
<OPTXL>
<LMap>1</LMap>
<LComments>1</LComments>
<LGenerateSymbols>1</LGenerateSymbols>
<LLibSym>1</LLibSym>
<LLines>1</LLines>
<LLocSym>1</LLocSym>
<LPubSym>1</LPubSym>
<LXref>0</LXref>
<LExpSel>0</LExpSel>
</OPTXL>
<OPTFL>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<IsCurrentTarget>1</IsCurrentTarget>
</OPTFL>
<CpuCode>18</CpuCode>
<DebugOpt>
<uSim>0</uSim>
<uTrg>1</uTrg>
<sLdApp>1</sLdApp>
<sGomain>1</sGomain>
<sRbreak>1</sRbreak>
<sRwatch>1</sRwatch>
<sRmem>1</sRmem>
<sRfunc>1</sRfunc>
<sRbox>1</sRbox>
<tLdApp>1</tLdApp>
<tGomain>1</tGomain>
<tRbreak>1</tRbreak>
<tRwatch>1</tRwatch>
<tRmem>1</tRmem>
<tRfunc>1</tRfunc>
<tRbox>1</tRbox>
<tRtrace>1</tRtrace>
<sRSysVw>1</sRSysVw>
<tRSysVw>1</tRSysVw>
<sRunDeb>0</sRunDeb>
<sLrtime>0</sLrtime>
<bEvRecOn>1</bEvRecOn>
<bSchkAxf>0</bSchkAxf>
<bTchkAxf>0</bTchkAxf>
<nTsel>6</nTsel>
<sDll></sDll>
<sDllPa></sDllPa>
<sDlgDll></sDlgDll>
<sDlgPa></sDlgPa>
<sIfile></sIfile>
<tDll></tDll>
<tDllPa></tDllPa>
<tDlgDll></tDlgDll>
<tDlgPa></tDlgPa>
<tIfile></tIfile>
<pMon>STLink\ST-LINKIII-KEIL_SWO.dll</pMon>
</DebugOpt>
<TargetDriverDllRegistry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGDARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)(100=-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)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMRTXEVENTFLAGS</Key>
<Name>-L70 -Z18 -C0 -M0 -T1</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGTARM</Key>
<Name>(1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0)(1009=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ARMDBGFLAGS</Key>
<Name>-T0</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>DLGUARM</Key>
<Name>(105=-1,-1,-1,-1,0)</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>UL2CM3</Key>
<Name>UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128 -FS08000000 -FL020000 -FP0($$Device:STM32F103RB$Flash\STM32F10x_128.FLM))</Name>
</SetRegEntry>
<SetRegEntry>
<Number>0</Number>
<Key>ST-LINKIII-KEIL_SWO</Key>
<Name>-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)</Name>
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>257</SubType>
<ItemText>r0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
<DebugFlag>
<trace>0</trace>
<periodic>1</periodic>
<aLwin>1</aLwin>
<aCover>0</aCover>
<aSer1>0</aSer1>
<aSer2>0</aSer2>
<aPa>0</aPa>
<viewmode>1</viewmode>
<vrSel>0</vrSel>
<aSym>0</aSym>
<aTbox>0</aTbox>
<AscS1>0</AscS1>
<AscS2>0</AscS2>
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>1</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
<StkLoc>0</StkLoc>
<TrcWin>0</TrcWin>
<newCpu>0</newCpu>
<uProt>0</uProt>
</DebugFlag>
<LintExecutable></LintExecutable>
<LintConfigFile></LintConfigFile>
<bLintAuto>0</bLintAuto>
<bAutoGenD>0</bAutoGenD>
<LntExFlags>0</LntExFlags>
<pMisraName></pMisraName>
<pszMrule></pszMrule>
<pSingCmds></pSingCmds>
<pMultCmds></pMultCmds>
<pMisraNamep></pMisraNamep>
<pszMrulep></pszMrulep>
<pSingCmdsp></pSingCmdsp>
<pMultCmdsp></pMultCmdsp>
<LogicAnalyzers>
<Wi>
<IntNumber>0</IntNumber>
<FirstString>((portb &amp; 0x00000002) &gt;&gt; 1 &amp; 0x2) &gt;&gt; 1</FirstString>
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F100000000000000000000000000000000000000096020008</SecondString>
</Wi>
</LogicAnalyzers>
<DebugDescription>
<Enable>1</Enable>
<EnableFlashSeq>0</EnableFlashSeq>
<EnableLog>0</EnableLog>
<Protocol>2</Protocol>
<DbgClock>10000000</DbgClock>
</DebugDescription>
</TargetOption>
</Target>
<Group>
<GroupName>Sources</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>1</GroupNumber>
<FileNumber>1</FileNumber>
<FileType>1</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Src\principal.c</PathWithFileName>
<FilenameWithoutPath>principal.c</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Sys</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>2</GroupNumber>
<FileNumber>2</FileNumber>
<FileType>2</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Src\startup-rvds.s</PathWithFileName>
<FilenameWithoutPath>startup-rvds.s</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>Driver</GroupName>
<tvExp>1</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>0</RteFlg>
<File>
<GroupNumber>3</GroupNumber>
<FileNumber>3</FileNumber>
<FileType>4</FileType>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<bDave2>0</bDave2>
<PathWithFileName>.\Driver\DriverJeuLaser.lib</PathWithFileName>
<FilenameWithoutPath>DriverJeuLaser.lib</FilenameWithoutPath>
<RteFlg>0</RteFlg>
<bShared>0</bShared>
</File>
</Group>
<Group>
<GroupName>::CMSIS</GroupName>
<tvExp>0</tvExp>
<tvExpOptDlg>0</tvExpOptDlg>
<cbSel>0</cbSel>
<RteFlg>1</RteFlg>
</Group>
</ProjectOpt>

View file

@ -10,7 +10,7 @@
<TargetName>Simu</TargetName> <TargetName>Simu</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed> <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6> <uAC6>0</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
@ -388,6 +388,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Src\principal.c</FilePath> <FilePath>.\Src\principal.c</FilePath>
</File> </File>
<File>
<FileName>GestionSon.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\GestionSon.s</FilePath>
</File>
<File>
<FileName>bruitverre.asm</FileName>
<FileType>2</FileType>
<FilePath>.\Src\bruitverre.asm</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -419,7 +429,7 @@
<TargetName>CibleSondeKEIL</TargetName> <TargetName>CibleSondeKEIL</TargetName>
<ToolsetNumber>0x4</ToolsetNumber> <ToolsetNumber>0x4</ToolsetNumber>
<ToolsetName>ARM-ADS</ToolsetName> <ToolsetName>ARM-ADS</ToolsetName>
<pCCUsed>5060750::V5.06 update 6 (build 750)::.\ARMCC</pCCUsed> <pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARMCC</pCCUsed>
<uAC6>0</uAC6> <uAC6>0</uAC6>
<TargetOption> <TargetOption>
<TargetCommonOption> <TargetCommonOption>
@ -797,6 +807,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Src\principal.c</FilePath> <FilePath>.\Src\principal.c</FilePath>
</File> </File>
<File>
<FileName>GestionSon.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\GestionSon.s</FilePath>
</File>
<File>
<FileName>bruitverre.asm</FileName>
<FileType>2</FileType>
<FilePath>.\Src\bruitverre.asm</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -1275,6 +1295,16 @@
<FileType>1</FileType> <FileType>1</FileType>
<FilePath>.\Src\principal.c</FilePath> <FilePath>.\Src\principal.c</FilePath>
</File> </File>
<File>
<FileName>GestionSon.s</FileName>
<FileType>2</FileType>
<FilePath>.\Src\GestionSon.s</FilePath>
</File>
<File>
<FileName>bruitverre.asm</FileName>
<FileType>2</FileType>
<FilePath>.\Src\bruitverre.asm</FilePath>
</File>
</Files> </Files>
</Group> </Group>
<Group> <Group>
@ -1322,12 +1352,7 @@
<LayerInfo> <LayerInfo>
<Layers> <Layers>
<Layer> <Layer>
<LayName>&lt;Project Info&gt;</LayName> <LayName>StepSon</LayName>
<LayDesc></LayDesc>
<LayUrl></LayUrl>
<LayKeys></LayKeys>
<LayCat></LayCat>
<LayLic></LayLic>
<LayTarg>0</LayTarg> <LayTarg>0</LayTarg>
<LayPrjMark>1</LayPrjMark> <LayPrjMark>1</LayPrjMark>
</Layer> </Layer>

View file

@ -1,38 +1,38 @@
clc clc
clear clear
N = input('Nombre d''échantilllons pour ce signal : '); N = input('Nombre d''échantilllons pour ce signal : ');
Frel = input('Fréquence normalisée (nombre de périodes dans la durée totale) : '); 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 = input('Phase a l''origine (en degrés) : ');
Ph0 = Ph0 * pi / 180.0; % a present en radian Ph0 = Ph0 * pi / 180.0; % a present en radian
Ampl = 2048; Ampl = 2048;
Offset = 2048; Offset = 2048;
%% Création du fichier .asm %% Création du fichier .asm
fileID = fopen(['Signal.asm'], 'w'); fileID = fopen(['Signal.asm'], 'w');
fprintf(fileID,'\tAREA Signal, DATA, READONLY\n'); fprintf(fileID,'\tAREA Signal, DATA, READONLY\n');
fprintf(fileID,'\texport LeSignal\n'); fprintf(fileID,'\texport LeSignal\n');
fprintf(fileID,'LeSignal\n'); fprintf(fileID,'LeSignal\n');
for i = 1: N for i = 1: N
% fonction a modifier en fonction des besoins % fonction a modifier en fonction des besoins
Sig(i) = Offset + Ampl * cos( 2*pi*Frel*(i-1)/N + Ph0 ); Sig(i) = Offset + Ampl * cos( 2*pi*Frel*(i-1)/N + Ph0 );
% arrondi % arrondi
iSig = int16(Sig(i)); iSig = int16(Sig(i));
% bornage du signal similaire a la sortie brute de l'ADC 12 bits % bornage du signal similaire a la sortie brute de l'ADC 12 bits
if ( iSig < 0 ) if ( iSig < 0 )
iSig = 0; iSig = 0;
end end
if ( iSig > 4095 ) if ( iSig > 4095 )
iSig = 4095; iSig = 4095;
end end
fprintf(fileID,'\tDCW\t0x%04x\t; %2d %4d %7.5f\n',iSig, i-1, iSig, double(iSig) / 4096.0 ); fprintf(fileID,'\tDCW\t0x%04x\t; %2d %4d %7.5f\n',iSig, i-1, iSig, double(iSig) / 4096.0 );
end end
fprintf(fileID,'\tEND\n'); fprintf(fileID,'\tEND\n');
fclose(fileID); fclose(fileID);
plot(Sig); plot(Sig);