assembly_project/FonctionEtape2.asm

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 {R0-R2} ;On stocke R0 à R2
LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA
LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR
ORR R2, R2,#(0x01 << 5) ;similaire à GPIOA->ODR |= (1<<5)
STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR
BX LR ;Retour
ENDP
Reset_SCLK PROC
PUSH {R0-R2} ;On stocke R0 à R2
LDR R1,=GPIOBASEA ;R1 -> Adresse de GPIOA
LDRH R2,[R1,#OffsetOutput] ;Valeur à l'adresse d'ODR : R2 = GPIOA->ODR
AND R2, R2,#~(0x01 << 5) ;similaire à GPIOA->ODR &= ~(1<<5)
STRH R2,[R1,#OffsetOutput] ;Etat du port B (R5) stocké dans ODR
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