forked from acco/chti23
78 lines
No EOL
1.5 KiB
ArmAsm
78 lines
No EOL
1.5 KiB
ArmAsm
PRESERVE8
|
|
THUMB
|
|
extern Son
|
|
extern LongueurSon
|
|
export CallbackSon
|
|
export SortieSon
|
|
export Index
|
|
include ../Driver/DriverJeuLaser.inc
|
|
|
|
; ====================== zone de réservation de données, ======================================
|
|
;Section RAM (read only) :
|
|
area mesdata,data,readonly
|
|
|
|
|
|
;Section RAM (read write):
|
|
area maram,data,readwrite
|
|
|
|
SortieSon dcd 0x0000
|
|
Index dcd 0x0000
|
|
; ===============================================================================================
|
|
|
|
|
|
;Si Indice<LongueurSon
|
|
;{
|
|
;R0<-Son[Index]
|
|
;R0=R0+32768
|
|
;R0=R0/92
|
|
;Sortir la valeur PWM en fonction de R0
|
|
;Indice++
|
|
;}
|
|
|
|
|
|
|
|
;On place l'adresse de Son dans un registre
|
|
;On place la valeur à cette adresse dans un deuxième registre
|
|
;On lui ajoute 32768 pour se placer dans l'intervalle [0,65535]
|
|
;On divise par 92 pour se placer dans l'intervalle [0,712]
|
|
;On place le résultat dans SortieSon
|
|
;On incrémente l'indice du tableau Son de 16 bits
|
|
|
|
;Section ROM code (read only) :
|
|
area moncode,code,readonly
|
|
; écrire le code ici
|
|
|
|
CallbackSon proc
|
|
;
|
|
;Si Indice<LongueurSon
|
|
;{
|
|
push {lr}
|
|
ldr r0, =LongueurSon
|
|
ldr r1, [r0]
|
|
ldr r3,=Index
|
|
ldr r4,[r3]
|
|
cmp r4,r1
|
|
bge Depassement
|
|
;R1<-Son[Index]
|
|
ldr r2,=Son ;on place l'adresse de Son dans un registre
|
|
ldrsh r1, [r2,r4,lsl #1]
|
|
;R1=R1+32768
|
|
add r1, #32768
|
|
;R0=R0/92
|
|
mov r0, #92
|
|
udiv r1, r0
|
|
;Sortir la valeur PWM en fonction de R0
|
|
;ldr r5, =SortieSon
|
|
str r1, [r0]
|
|
bl PWM_Set_Value_TIM3_Ch3
|
|
;Indice++
|
|
add r4, #1
|
|
str r4,[r3]
|
|
pop {pc}
|
|
;}
|
|
|
|
Depassement
|
|
pop {pc}
|
|
endp
|
|
|
|
END
|