diff --git a/Etape_3.uvoptx b/Etape_3.uvoptx index fb6a59e..b173c8c 100644 --- a/Etape_3.uvoptx +++ b/Etape_3.uvoptx @@ -219,12 +219,44 @@ \\Simu_Etape0\FonctionEtape3.asm\51 + + 5 + 0 + 58 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\FonctionEtape3.asm + + +
+ + 6 + 0 + 68 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + .\FonctionEtape3.asm + + +
1 0 - 0xE000ED08 + 0x20000200 0 diff --git a/FonctionEtape.asm b/FonctionEtape.asm index d85c3c9..6717f3a 100644 --- a/FonctionEtape.asm +++ b/FonctionEtape.asm @@ -92,12 +92,11 @@ Allume_LED PROC ; On inverse la LED (besoin de R0) ;******************************************************************************* Inverse_LED PROC - PUSH {R12,R0} ;On stocke R12 dans R0 + PUSH {R12,R5} ;R12 et R5 sont mis dans la pile LDR R12,=GPIOBASEB ;On recupère l'adresse de base + LDR R1,=isLedOn ;On recupère l'adresse de isLedOn MOV R5,#(0x01 << 10) ;1 décalé de 10 dans R5 CMP R0,#0 ;Si R3=0 (default) alors on allume, sinon on eteint - ;BEQ Allume - ;B Eteint BNE Eteint Allume STRH R5,[R12,#OffsetSet] ;On stocke la variable R5 à l'adresse 0x0X40010C10 (set) @@ -110,8 +109,8 @@ Eteint Fin - POP {R12,R0} ;On restitue R12 dans R0 - BX LR ;Retour + POP {R12,R5} ;On restitue R12 + BX LR ;Retour ENDP diff --git a/FonctionEtape3.asm b/FonctionEtape3.asm index 59c207b..9f38818 100644 --- a/FonctionEtape3.asm +++ b/FonctionEtape3.asm @@ -30,8 +30,8 @@ AREA MesDonnees, data, readwrite ;************************************************************************** -Timer_Up_Reg EQU 25 -Timer_Cc_Reg EQU 27 +Timer_Up_Reg EQU 25+0x40 +Timer_Cc_Reg EQU 27+0x40 MAX_Interrupt EQU 256 TVI_Flash EQU 0x0 TVI_Pile EQU 0x20000200 ;9 bits de poids faible = 0 @@ -44,26 +44,34 @@ TVI_Pile EQU 0x20000200 ;9 bits de poids faible = 0 AREA moncode, code, readonly ;************************************************************************** +scbvector_link PROC + LDR R1,=TVI_Pile ;On relit l'adresse de TVIPile + LDR R0,=SCB_VTOR ;ON lit l'adresse de SCB_VTOR + STR R1,[R0] ;On met l'adresse de TVI_Pile dans le SCB_VTOR + BX LR + ENDP + +Timer1_IRQHandler PROC + + +;On copie toute la TVI dans la RAM (0x2....) +;On modifie les interruptions Up et CC pour pointer sur nos fonctions rien qu'à nous +;On fait pointer à SCB_VTOR l'adresse de la TVI que nous avons copié Init_TVI PROC - ;On copie toute la TVI dans la RAM (0x2....) - ;On modifie les interruptions Up et CC pour pointer sur nos fonctions rien qu'à nous - ;On fait pointer à SCB_VTOR l'adresse de la TVI que nous avons copié - LDR R0,=TVI_Flash ;On Lit le premier TVI - LDR R1,=TVI_Pile ;Nouvelle TVI - MOV R2,#0 ;i + LDR R0,=TVI_Flash ;On Lit le premier TVI + LDR R1,=TVI_Pile ;Nouvelle TVI + MOV R2,#0 ;i for_tvi ;for(int i=0;i