fin séance 18/04

This commit is contained in:
Artus13 2023-04-19 12:32:40 +02:00
parent 5eb4a91b33
commit af0a9df926
37 changed files with 15583 additions and 15529 deletions

220
.gitignore vendored
View file

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

10
LICENSE
View file

@ -1,5 +1,5 @@
Copyright 1989, 1991, 1992 by Carnegie Mellon University
Derivative Work - 1996, 1998-2000 Copyright 1996, 1998-2000 The Regents of the University of California
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.
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.
Copyright 1989, 1991, 1992 by Carnegie Mellon University
Derivative Work - 1996, 1998-2000 Copyright 1996, 1998-2000 The Regents of the University of California
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.
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
**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 :
Chaque binome travaille sur ça branche de type grpE_NOM1_NOM2.
## 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.
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>
git status
git pull
</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)
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.
<code shell>
git pull
git status
git add * --dry-run
</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.
<code shell>
git add *
git commit -am "TP1 pas fini de rien comprendre"
git push
</code>
## Installation
___
Pour celles qui conaisse git voilà le résumé :
<code bash>
git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git
</code>
### Clone
---
* 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 :
<code bash>
git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git
</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 :
<code bash>
git status
</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 à :
> git config --global --add safe.directory '%(prefix)///netapp1/GNIAGNIAGNIA...'
> Faites un copier-coller de cette commande et exécutez-la.
> La commande git status doit enfin fonctionner
Les fichiers sont visibles et partagés !
# chti23
**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 :
Chaque binome travaille sur ça branche de type grpE_NOM1_NOM2.
## 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.
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>
git status
git pull
</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)
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.
<code shell>
git pull
git status
git add * --dry-run
</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.
<code shell>
git add *
git commit -am "TP1 pas fini de rien comprendre"
git push
</code>
## Installation
___
Pour celles qui conaisse git voilà le résumé :
<code bash>
git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git
</code>
### Clone
---
* 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 :
<code bash>
git clone https://git.etud.insa-toulouse.fr/VOTRE_COMPTE/chti23.git
</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 :
<code bash>
git status
</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 à :
> git config --global --add safe.directory '%(prefix)///netapp1/GNIAGNIAGNIA...'
> Faites un copier-coller de cette commande et exécutez-la.
> La commande git status doit enfin fonctionner
Les fichiers sont visibles et partagés !

View file

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

View file

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

View file

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

View file

@ -1,345 +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
/**
* 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

@ -1,56 +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
; 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

@ -1,166 +1,166 @@
PRESERVE8
THUMB
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly
;Section RAM (read write):
area maram,data,readwrite
; ===============================================================================================
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
;Section ROM code (read only) :
AREA Trigo, DATA, READONLY
; codage fractionnaire 1.15
TabCos
DCW 32767 ; 0 0x7fff 0.99997
DCW 32610 ; 1 0x7f62 0.99518
DCW 32138 ; 2 0x7d8a 0.98077
DCW 31357 ; 3 0x7a7d 0.95694
DCW 30274 ; 4 0x7642 0.92389
DCW 28899 ; 5 0x70e3 0.88193
DCW 27246 ; 6 0x6a6e 0.83148
DCW 25330 ; 7 0x62f2 0.77301
DCW 23170 ; 8 0x5a82 0.70709
DCW 20788 ; 9 0x5134 0.63440
DCW 18205 ; 10 0x471d 0.55557
DCW 15447 ; 11 0x3c57 0.47141
DCW 12540 ; 12 0x30fc 0.38269
DCW 9512 ; 13 0x2528 0.29028
DCW 6393 ; 14 0x18f9 0.19510
DCW 3212 ; 15 0x0c8c 0.09802
DCW 0 ; 16 0x0000 0.00000
DCW -3212 ; 17 0xf374 -0.09802
DCW -6393 ; 18 0xe707 -0.19510
DCW -9512 ; 19 0xdad8 -0.29028
DCW -12540 ; 20 0xcf04 -0.38269
DCW -15447 ; 21 0xc3a9 -0.47141
DCW -18205 ; 22 0xb8e3 -0.55557
DCW -20788 ; 23 0xaecc -0.63440
DCW -23170 ; 24 0xa57e -0.70709
DCW -25330 ; 25 0x9d0e -0.77301
DCW -27246 ; 26 0x9592 -0.83148
DCW -28899 ; 27 0x8f1d -0.88193
DCW -30274 ; 28 0x89be -0.92389
DCW -31357 ; 29 0x8583 -0.95694
DCW -32138 ; 30 0x8276 -0.98077
DCW -32610 ; 31 0x809e -0.99518
DCW -32768 ; 32 0x8000 -1.00000
DCW -32610 ; 33 0x809e -0.99518
DCW -32138 ; 34 0x8276 -0.98077
DCW -31357 ; 35 0x8583 -0.95694
DCW -30274 ; 36 0x89be -0.92389
DCW -28899 ; 37 0x8f1d -0.88193
DCW -27246 ; 38 0x9592 -0.83148
DCW -25330 ; 39 0x9d0e -0.77301
DCW -23170 ; 40 0xa57e -0.70709
DCW -20788 ; 41 0xaecc -0.63440
DCW -18205 ; 42 0xb8e3 -0.55557
DCW -15447 ; 43 0xc3a9 -0.47141
DCW -12540 ; 44 0xcf04 -0.38269
DCW -9512 ; 45 0xdad8 -0.29028
DCW -6393 ; 46 0xe707 -0.19510
DCW -3212 ; 47 0xf374 -0.09802
DCW 0 ; 48 0x0000 0.00000
DCW 3212 ; 49 0x0c8c 0.09802
DCW 6393 ; 50 0x18f9 0.19510
DCW 9512 ; 51 0x2528 0.29028
DCW 12540 ; 52 0x30fc 0.38269
DCW 15447 ; 53 0x3c57 0.47141
DCW 18205 ; 54 0x471d 0.55557
DCW 20788 ; 55 0x5134 0.63440
DCW 23170 ; 56 0x5a82 0.70709
DCW 25330 ; 57 0x62f2 0.77301
DCW 27246 ; 58 0x6a6e 0.83148
DCW 28899 ; 59 0x70e3 0.88193
DCW 30274 ; 60 0x7642 0.92389
DCW 31357 ; 61 0x7a7d 0.95694
DCW 32138 ; 62 0x7d8a 0.98077
DCW 32610 ; 63 0x7f62 0.99518
TabSin
DCW 0 ; 0 0x0000 0.00000
DCW 3212 ; 1 0x0c8c 0.09802
DCW 6393 ; 2 0x18f9 0.19510
DCW 9512 ; 3 0x2528 0.29028
DCW 12540 ; 4 0x30fc 0.38269
DCW 15447 ; 5 0x3c57 0.47141
DCW 18205 ; 6 0x471d 0.55557
DCW 20788 ; 7 0x5134 0.63440
DCW 23170 ; 8 0x5a82 0.70709
DCW 25330 ; 9 0x62f2 0.77301
DCW 27246 ; 10 0x6a6e 0.83148
DCW 28899 ; 11 0x70e3 0.88193
DCW 30274 ; 12 0x7642 0.92389
DCW 31357 ; 13 0x7a7d 0.95694
DCW 32138 ; 14 0x7d8a 0.98077
DCW 32610 ; 15 0x7f62 0.99518
DCW 32767 ; 16 0x7fff 0.99997
DCW 32610 ; 17 0x7f62 0.99518
DCW 32138 ; 18 0x7d8a 0.98077
DCW 31357 ; 19 0x7a7d 0.95694
DCW 30274 ; 20 0x7642 0.92389
DCW 28899 ; 21 0x70e3 0.88193
DCW 27246 ; 22 0x6a6e 0.83148
DCW 25330 ; 23 0x62f2 0.77301
DCW 23170 ; 24 0x5a82 0.70709
DCW 20788 ; 25 0x5134 0.63440
DCW 18205 ; 26 0x471d 0.55557
DCW 15447 ; 27 0x3c57 0.47141
DCW 12540 ; 28 0x30fc 0.38269
DCW 9512 ; 29 0x2528 0.29028
DCW 6393 ; 30 0x18f9 0.19510
DCW 3212 ; 31 0x0c8c 0.09802
DCW 0 ; 32 0x0000 0.00000
DCW -3212 ; 33 0xf374 -0.09802
DCW -6393 ; 34 0xe707 -0.19510
DCW -9512 ; 35 0xdad8 -0.29028
DCW -12540 ; 36 0xcf04 -0.38269
DCW -15447 ; 37 0xc3a9 -0.47141
DCW -18205 ; 38 0xb8e3 -0.55557
DCW -20788 ; 39 0xaecc -0.63440
DCW -23170 ; 40 0xa57e -0.70709
DCW -25330 ; 41 0x9d0e -0.77301
DCW -27246 ; 42 0x9592 -0.83148
DCW -28899 ; 43 0x8f1d -0.88193
DCW -30274 ; 44 0x89be -0.92389
DCW -31357 ; 45 0x8583 -0.95694
DCW -32138 ; 46 0x8276 -0.98077
DCW -32610 ; 47 0x809e -0.99518
DCW -32768 ; 48 0x8000 -1.00000
DCW -32610 ; 49 0x809e -0.99518
DCW -32138 ; 50 0x8276 -0.98077
DCW -31357 ; 51 0x8583 -0.95694
DCW -30274 ; 52 0x89be -0.92389
DCW -28899 ; 53 0x8f1d -0.88193
DCW -27246 ; 54 0x9592 -0.83148
DCW -25330 ; 55 0x9d0e -0.77301
DCW -23170 ; 56 0xa57e -0.70709
DCW -20788 ; 57 0xaecc -0.63440
DCW -18205 ; 58 0xb8e3 -0.55557
DCW -15447 ; 59 0xc3a9 -0.47141
DCW -12540 ; 60 0xcf04 -0.38269
DCW -9512 ; 61 0xdad8 -0.29028
DCW -6393 ; 62 0xe707 -0.19510
DCW -3212 ; 63 0xf374 -0.09802
PRESERVE8
THUMB
; ====================== zone de réservation de données, ======================================
;Section RAM (read only) :
area mesdata,data,readonly
;Section RAM (read write):
area maram,data,readwrite
; ===============================================================================================
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
;Section ROM code (read only) :
AREA Trigo, DATA, READONLY
; codage fractionnaire 1.15
TabCos
DCW 32767 ; 0 0x7fff 0.99997
DCW 32610 ; 1 0x7f62 0.99518
DCW 32138 ; 2 0x7d8a 0.98077
DCW 31357 ; 3 0x7a7d 0.95694
DCW 30274 ; 4 0x7642 0.92389
DCW 28899 ; 5 0x70e3 0.88193
DCW 27246 ; 6 0x6a6e 0.83148
DCW 25330 ; 7 0x62f2 0.77301
DCW 23170 ; 8 0x5a82 0.70709
DCW 20788 ; 9 0x5134 0.63440
DCW 18205 ; 10 0x471d 0.55557
DCW 15447 ; 11 0x3c57 0.47141
DCW 12540 ; 12 0x30fc 0.38269
DCW 9512 ; 13 0x2528 0.29028
DCW 6393 ; 14 0x18f9 0.19510
DCW 3212 ; 15 0x0c8c 0.09802
DCW 0 ; 16 0x0000 0.00000
DCW -3212 ; 17 0xf374 -0.09802
DCW -6393 ; 18 0xe707 -0.19510
DCW -9512 ; 19 0xdad8 -0.29028
DCW -12540 ; 20 0xcf04 -0.38269
DCW -15447 ; 21 0xc3a9 -0.47141
DCW -18205 ; 22 0xb8e3 -0.55557
DCW -20788 ; 23 0xaecc -0.63440
DCW -23170 ; 24 0xa57e -0.70709
DCW -25330 ; 25 0x9d0e -0.77301
DCW -27246 ; 26 0x9592 -0.83148
DCW -28899 ; 27 0x8f1d -0.88193
DCW -30274 ; 28 0x89be -0.92389
DCW -31357 ; 29 0x8583 -0.95694
DCW -32138 ; 30 0x8276 -0.98077
DCW -32610 ; 31 0x809e -0.99518
DCW -32768 ; 32 0x8000 -1.00000
DCW -32610 ; 33 0x809e -0.99518
DCW -32138 ; 34 0x8276 -0.98077
DCW -31357 ; 35 0x8583 -0.95694
DCW -30274 ; 36 0x89be -0.92389
DCW -28899 ; 37 0x8f1d -0.88193
DCW -27246 ; 38 0x9592 -0.83148
DCW -25330 ; 39 0x9d0e -0.77301
DCW -23170 ; 40 0xa57e -0.70709
DCW -20788 ; 41 0xaecc -0.63440
DCW -18205 ; 42 0xb8e3 -0.55557
DCW -15447 ; 43 0xc3a9 -0.47141
DCW -12540 ; 44 0xcf04 -0.38269
DCW -9512 ; 45 0xdad8 -0.29028
DCW -6393 ; 46 0xe707 -0.19510
DCW -3212 ; 47 0xf374 -0.09802
DCW 0 ; 48 0x0000 0.00000
DCW 3212 ; 49 0x0c8c 0.09802
DCW 6393 ; 50 0x18f9 0.19510
DCW 9512 ; 51 0x2528 0.29028
DCW 12540 ; 52 0x30fc 0.38269
DCW 15447 ; 53 0x3c57 0.47141
DCW 18205 ; 54 0x471d 0.55557
DCW 20788 ; 55 0x5134 0.63440
DCW 23170 ; 56 0x5a82 0.70709
DCW 25330 ; 57 0x62f2 0.77301
DCW 27246 ; 58 0x6a6e 0.83148
DCW 28899 ; 59 0x70e3 0.88193
DCW 30274 ; 60 0x7642 0.92389
DCW 31357 ; 61 0x7a7d 0.95694
DCW 32138 ; 62 0x7d8a 0.98077
DCW 32610 ; 63 0x7f62 0.99518
TabSin
DCW 0 ; 0 0x0000 0.00000
DCW 3212 ; 1 0x0c8c 0.09802
DCW 6393 ; 2 0x18f9 0.19510
DCW 9512 ; 3 0x2528 0.29028
DCW 12540 ; 4 0x30fc 0.38269
DCW 15447 ; 5 0x3c57 0.47141
DCW 18205 ; 6 0x471d 0.55557
DCW 20788 ; 7 0x5134 0.63440
DCW 23170 ; 8 0x5a82 0.70709
DCW 25330 ; 9 0x62f2 0.77301
DCW 27246 ; 10 0x6a6e 0.83148
DCW 28899 ; 11 0x70e3 0.88193
DCW 30274 ; 12 0x7642 0.92389
DCW 31357 ; 13 0x7a7d 0.95694
DCW 32138 ; 14 0x7d8a 0.98077
DCW 32610 ; 15 0x7f62 0.99518
DCW 32767 ; 16 0x7fff 0.99997
DCW 32610 ; 17 0x7f62 0.99518
DCW 32138 ; 18 0x7d8a 0.98077
DCW 31357 ; 19 0x7a7d 0.95694
DCW 30274 ; 20 0x7642 0.92389
DCW 28899 ; 21 0x70e3 0.88193
DCW 27246 ; 22 0x6a6e 0.83148
DCW 25330 ; 23 0x62f2 0.77301
DCW 23170 ; 24 0x5a82 0.70709
DCW 20788 ; 25 0x5134 0.63440
DCW 18205 ; 26 0x471d 0.55557
DCW 15447 ; 27 0x3c57 0.47141
DCW 12540 ; 28 0x30fc 0.38269
DCW 9512 ; 29 0x2528 0.29028
DCW 6393 ; 30 0x18f9 0.19510
DCW 3212 ; 31 0x0c8c 0.09802
DCW 0 ; 32 0x0000 0.00000
DCW -3212 ; 33 0xf374 -0.09802
DCW -6393 ; 34 0xe707 -0.19510
DCW -9512 ; 35 0xdad8 -0.29028
DCW -12540 ; 36 0xcf04 -0.38269
DCW -15447 ; 37 0xc3a9 -0.47141
DCW -18205 ; 38 0xb8e3 -0.55557
DCW -20788 ; 39 0xaecc -0.63440
DCW -23170 ; 40 0xa57e -0.70709
DCW -25330 ; 41 0x9d0e -0.77301
DCW -27246 ; 42 0x9592 -0.83148
DCW -28899 ; 43 0x8f1d -0.88193
DCW -30274 ; 44 0x89be -0.92389
DCW -31357 ; 45 0x8583 -0.95694
DCW -32138 ; 46 0x8276 -0.98077
DCW -32610 ; 47 0x809e -0.99518
DCW -32768 ; 48 0x8000 -1.00000
DCW -32610 ; 49 0x809e -0.99518
DCW -32138 ; 50 0x8276 -0.98077
DCW -31357 ; 51 0x8583 -0.95694
DCW -30274 ; 52 0x89be -0.92389
DCW -28899 ; 53 0x8f1d -0.88193
DCW -27246 ; 54 0x9592 -0.83148
DCW -25330 ; 55 0x9d0e -0.77301
DCW -23170 ; 56 0xa57e -0.70709
DCW -20788 ; 57 0xaecc -0.63440
DCW -18205 ; 58 0xb8e3 -0.55557
DCW -15447 ; 59 0xc3a9 -0.47141
DCW -12540 ; 60 0xcf04 -0.38269
DCW -9512 ; 61 0xdad8 -0.29028
DCW -6393 ; 62 0xe707 -0.19510
DCW -3212 ; 63 0xf374 -0.09802
END

View file

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

View file

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

View file

@ -1,335 +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*****
;******************** (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

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)
*
* 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
/**
* 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

@ -1,56 +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
; 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

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

View file

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

View file

@ -1,335 +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*****
;******************** (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

File diff suppressed because it is too large Load diff

View file

@ -1,345 +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
/**
* 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

@ -1,56 +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
; 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

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

View file

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

View file

@ -1,335 +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*****
;******************** (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*****

View file

@ -1,345 +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
/**
* 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

@ -1,56 +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
; 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

@ -1,65 +1,91 @@
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
SortieSon dcw 0
index dcd 0
; ===============================================================================================
EXPORT CallbackSon ;
EXTERN bruitverre ;
EXTERN Son ;
EXTERN LongueurSon ;
EXPORT SortieSon ; //pour evaluer la variable lors des tests
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
CallbackSon
ldr r1, =index
ldr r2, [r1]
ldr r3, =Son
ldr r0, LongueurSon
cmp r2, r0
ble notEqual
bx lr
notEqual
mov r0, #2
mul r0, r2
ldrsh r0, [r3, r0]
add r0, #32768
push {r4}
mov r4, #719
mul r0, r4
mov r4, #65535
udiv r0, r4
pop {r4}
push {r7}
ldr r7, =SortieSon
str r0, [r7]
pop {r7}
add r2, #1
push {r5}
ldr r5, =index
str r2, [r5]
pop {r5}
bx lr
END
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
SortieSon dcw 0
index dcd 0
; ===============================================================================================
EXPORT CallbackSon ;
EXTERN bruitverre ;
EXTERN Son ;
EXTERN LongueurSon ;
EXPORT SortieSon ; //pour evaluer la variable lors des tests
EXPORT StartSon ;
include ../Driver/DriverJeuLaser.inc;
EXPORT index ; //pour evaluer la variable lors des tests
;Section ROM code (read only) :
area moncode,code,readonly
; écrire le code ici
CallbackSon proc
ldr r1, =index
ldr r2, [r1]
ldr r3, =Son
ldr r0, LongueurSon
cmp r2, r0
ble notEqual
push {R8}
push {R5}
ldr R8, =SortieSon
mov R5,#-1
strh R5,[R8]
pop {R5}
pop{R8}
bx lr
notEqual
mov r0, #2
mul r0, r2
ldrsh r0, [r3, r0]
add r0, #32768
push {r4}
mov r4, #719
mul r0, r4
mov r4, #65535
udiv r0, r4
pop {r4}
push {r7}
ldr r7, =SortieSon
strh r0, [r7]
pop {r7}
push{r2}
push {lr}
bl PWM_Set_Value_TIM3_Ch3
pop {lr}
pop{r2}
add r2, #1
push {r5}
ldr r5, =index
str r2, [r5]
pop {r5}
bx lr
endp
StartSon proc
ldr R1, =index
mov R2,#0
str R2, [R1]
bx lr
endp
END

File diff suppressed because it is too large Load diff

View file

@ -1,30 +1,41 @@
#include "DriverJeuLaser.h"
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();
//** Notre code là ** //
Active_IT_Debordement_Timer( TIM4, 2, CallbackSon );
Timer_1234_Init_ff( TIM4, 6552);
//============================================================================
while (1)
{
}
}
#include "DriverJeuLaser.h"
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();
//** Notre code là ** //
Active_IT_Debordement_Timer( TIM4, 2, CallbackSon );
Timer_1234_Init_ff( TIM4, 6552);
PWM_Init_ff(TIM3, 3, 720 ); //fréquence de la PWM 10e5 Hz
GPIO_Configure(GPIOB, 0, OUTPUT, ALT_PPULL); //plus le PWM est en haut longtemps plus la alpha (valeur sur 1 bit)
extern void StartSon();
extern short SortieSon;
//============================================================================
while (1)
{
if(SortieSon==-1)
{
StartSon();
}
}
}

View file

@ -1,335 +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*****
;******************** (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*****

View file

@ -153,40 +153,7 @@
<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>
<Bp>
<Number>0</Number>
<Type>0</Type>
<LineNumber>30</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>134219960</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>1</BreakIfRCount>
<Filename>.\Src\GestionSon.s</Filename>
<ExecCommand></ExecCommand>
<Expression>\\StepSon\Src/GestionSon.s\30</Expression>
</Bp>
<Bp>
<Number>1</Number>
<Type>0</Type>
<LineNumber>64</LineNumber>
<EnabledFlag>1</EnabledFlag>
<Address>0</Address>
<ByteObject>0</ByteObject>
<HtxType>0</HtxType>
<ManyObjects>0</ManyObjects>
<SizeOfObject>0</SizeOfObject>
<BreakByAccess>0</BreakByAccess>
<BreakIfRCount>0</BreakIfRCount>
<Filename>.\Src\GestionSon.s</Filename>
<ExecCommand></ExecCommand>
<Expression></Expression>
</Bp>
</Breakpoint>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
@ -208,7 +175,35 @@
<WinNumber>1</WinNumber>
<ItemText>r0,0x0A</ItemText>
</Ww>
<Ww>
<count>4</count>
<WinNumber>1</WinNumber>
<ItemText>portb</ItemText>
</Ww>
<Ww>
<count>5</count>
<WinNumber>1</WinNumber>
<ItemText>index,0x0A</ItemText>
</Ww>
<Ww>
<count>6</count>
<WinNumber>1</WinNumber>
<ItemText>r7</ItemText>
</Ww>
<Ww>
<count>7</count>
<WinNumber>1</WinNumber>
<ItemText>R5</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
<SubType>257</SubType>
<ItemText>r0</ItemText>
<AccSizeX>0</AccSizeX>
</Mm>
</MemoryWindow1>
<Tracepoint>
<THDelay>0</THDelay>
</Tracepoint>
@ -229,7 +224,7 @@
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aLa>1</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>
@ -254,8 +249,13 @@
<LogicAnalyzers>
<Wi>
<IntNumber>0</IntNumber>
<FirstString>((portb &amp; 0x00000002) &gt;&gt; 1 &amp; 0x2) &gt;&gt; 1</FirstString>
<SecondString>FF000000000000000000000000000000E0FFEF400100000000000000000000000000000028706F7274622026203078303030303030303229203E3E2031000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000F03F160000000000000000000000000000000000000096020008</SecondString>
<FirstString>`SortieSon</FirstString>
<SecondString>0080000000000000000000000000000000408F4000000000000000000000000000000000536F72746965536F6E00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000500000001000000000000000000E03F180000000000000000000000000000000000000094080008</SecondString>
</Wi>
<Wi>
<IntNumber>1</IntNumber>
<FirstString>`portb</FirstString>
<SecondString>00008000000000000000000000000000E0FFEF4001000000000000000000000000000000706F7274620000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000002000000000000000000E03F1800000000000000000000000000000000000000E60A0008</SecondString>
</Wi>
</LogicAnalyzers>
<DebugDescription>
@ -401,6 +401,23 @@
</SetRegEntry>
</TargetDriverDllRegistry>
<Breakpoint/>
<WatchWindow1>
<Ww>
<count>0</count>
<WinNumber>1</WinNumber>
<ItemText>SortieSon,0x0A</ItemText>
</Ww>
<Ww>
<count>1</count>
<WinNumber>1</WinNumber>
<ItemText>index,0x0A</ItemText>
</Ww>
<Ww>
<count>2</count>
<WinNumber>1</WinNumber>
<ItemText>R1,0x0A</ItemText>
</Ww>
</WatchWindow1>
<MemoryWindow1>
<Mm>
<WinNumber>1</WinNumber>
@ -429,7 +446,7 @@
<AscS3>0</AscS3>
<aSer3>0</aSer3>
<eProf>0</eProf>
<aLa>0</aLa>
<aLa>1</aLa>
<aPa1>0</aPa1>
<AscS4>0</AscS4>
<aSer4>0</aSer4>

View file

@ -434,7 +434,7 @@
<TargetName>CibleSondeKEIL</TargetName>
<ToolsetNumber>0x4</ToolsetNumber>
<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>
<TargetOption>
<TargetCommonOption>

View file

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