63 lines
No EOL
1.2 KiB
ArmAsm
63 lines
No EOL
1.2 KiB
ArmAsm
;AFONSO Perrine LARTIGUE Auriane
|
|
thumb
|
|
area madata, data, readwrite
|
|
flag dcd 0
|
|
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
|
|
export timer_callback
|
|
|
|
import etat
|
|
import Son
|
|
import LongueurSon
|
|
import PeriodeSonMicroSec
|
|
|
|
|
|
|
|
;GPIOB_BSRR equ 0x40010C10 ; Bit Set/Reset registe
|
|
|
|
|
|
timer_callback proc
|
|
push{r4}
|
|
ldr r2, =etat ;r2= @etat
|
|
ldr r0, [r2 , #E_POS] ; r0 = position
|
|
ldr r1, [r2 , #E_TAI] ; r1 = taille
|
|
cmp r0, r1; on compare taille et position
|
|
|
|
beq fin ; taille = position
|
|
|
|
different
|
|
ldr r3 , [r2,#E_SON] ; r3 = @son
|
|
ldrsh r4 , [r3, r0, lsl #0x1] ; r4 = son
|
|
; ajout composante continue: 2^15
|
|
add r4, #0x8000
|
|
|
|
ldr r12 , [r2 ,#E_RES] ; r12 = resolution
|
|
|
|
mul r4 , r12 ; on multiplie par le facteur d'échelle
|
|
mov r12,#0xFFFF
|
|
cmp r4, r12 ; la valeur échatillon doit etre compris entre 0 et 2^16 - 1
|
|
blo registre
|
|
udiv r4, r12
|
|
|
|
|
|
registre ; échantillon copié dans le registre TIM3_CCR3
|
|
ldr r12 , =TIM3_CCR3
|
|
str r4 , [r12]
|
|
|
|
; on incremente la position
|
|
add r0 , #0x1 ;
|
|
str r0 , [r2 , #E_POS]
|
|
|
|
fin pop{r4}
|
|
bx lr
|
|
endp
|
|
|
|
end
|