assembly_project/FonctionEtape2.asm
2023-03-16 12:12:06 +01:00

93 lines
No EOL
2.5 KiB
NASM

;***************************************************************************
THUMB
REQUIRE8
PRESERVE8
;**************************************************************************
; Fichier Vierge.asm
; Auteur : V.MAHOUT
; Date : 12/11/2013
;**************************************************************************
;***************IMPORT/EXPORT**********************************************
EXPORT Set_SCLK
EXPORT Reset_SCLK
EXPORT DriverGlobal
;**************************************************************************
;***************CONSTANTES*************************************************
include REG_UTILES.inc
;**************************************************************************
;***************VARIABLES**************************************************
AREA MesDonnees, data, readwrite
;**************************************************************************
Barette1 DCB 0,1,0
DCB 0,1,0
DCB 0,1,0
DCB 0,1,0
DCB 0,1,0
DCB 0,1,0
DCB 0,1,0
;**************************************************************************
;***************CODE*******************************************************
AREA moncode, code, readonly
;**************************************************************************
Set_SCLK PROC
PUSH {R12,R0} ;On stocke R12 dans R0
LDR R12,=GPIOBASEA ;On recupère l'adresse de base
LDR R5,[R12,#MaskSclk] ;Valeur à l'adresse de l'output
ORR R5, R5,#(0x01 << 5) ;OU LOGIQUE pour calculer la valeur a mettre dans l'output
STRH R5,[R12,#0x0C] ;Etat du port B (R5) stocké dans l'output
BX LR ;Retour
ENDP
Reset_SCLK PROC
PUSH {R12,R0} ;On stocke R12 dans R0
LDR R12,=GPIOBASEB ;On recupère l'adresse de base
LDR R5,[R12,#MaskSclk] ;Valeur à l'adresse de l'SCLK
AND R5, R5,#~(0x01 << 5) ;OU LOGIQUE pour calculer la valeur a mettre dans l'output
STRH R5,[R12,#0x0C] ;Etat du port B (R5) stocké dans l'output
BX LR ;Retour
ENDP
;****************************************************************************
;R6 = NBLed
;R7 = *ValCourante
;R8 = ValCourante[NBLed]
;****************************************************************************
DriverGlobal PROC
BL Set_SCLK;
MOV R6, #0;
WHILE_NBLED
;Pour NbLed = 1 à 48
LDR R7,=Barette1 ;On recupère l'adresse de base
LDRB R8,[R7,R6] ;R8 = ValCourante[...NBLed]
LSL R8,#24 ;ValCourante[NBLed]<<24
ADD R6, R6, #1 ;On incrémente R6
CMP R6, #47 ; SI R6==47 alors on arrête la boucle
BNE WHILE_NBLED
ENDP
;**************************************************************************
END