BE-INTE/Objectif 3/Src/son_callback.s
2020-05-29 13:12:50 +02:00

52 lines
1 KiB
ArmAsm

; ce programme est pour l'assembleur RealView (Keil)
thumb
area madata, data, readwrite
TIM3_CCR3 equ 0x4000043C ; adresse registre PWM
E_POS equ 0
E_TAI equ 4
E_SON equ 8
E_RES equ 12
E_PER equ 16
area moncode, code, readonly
import etat
import Son
import LongueurSon
import PeriodeSonMicroSec
export timer
timer proc
ldr r12,=etat ;on met l'adresse du struct dans r12
ldr r0, [r12,#E_POS]
ldr r1, [r12, #E_TAI]
cmp r1,r0
bne inf
mov r2,#0x8000
ldr r3, =TIM3_CCR3
str r2, [r3]
b fin
inf
ldr r1, [r12,#E_SON]
ldrsh r2, [r1,r0,lsl #0x1] ; on met l'échantillon dans r2
add r2,#0x8000 ;on ajoute une composante continue équivalente à 2^15
ldr r1, [r12,#E_RES]
mul r2,r1 ;on multiplie l'échantillon par la résoltuion
mov r3,#0xFFFF
cmp r2,r3 ;on compare l'échantillon avec 2^16 - 1
blo sto
sdiv r2,r1 ;si on a un dépassement, on divise par la résolution
sto ldr r1, =TIM3_CCR3
str r2, [r1]
;str r2, [TIM3_CCR3] ;on met le nouvel échantillon dans le registre de sortie
add r0, #1
str r0, [r12,#E_POS]
fin
bx lr
endp
end