48 lines
No EOL
635 B
ArmAsm
48 lines
No EOL
635 B
ArmAsm
; ce programme est pour l'assembleur RealView (Keil)
|
|
thumb
|
|
area moncode, code, readonly
|
|
export timer_callback
|
|
extern etat
|
|
;
|
|
E_POS equ 0
|
|
E_TAI equ 4
|
|
E_SON equ 8
|
|
E_RES equ 12
|
|
E_PER equ 16
|
|
|
|
TIM3_CCR3 equ 0x4000043C ; adresse registre PWM
|
|
|
|
timer_callback proc
|
|
|
|
push{r4}
|
|
|
|
ldr r1, =etat
|
|
ldr r2, [r1, #E_POS]
|
|
|
|
ldr r3, [r1,#E_TAI]
|
|
cmp r2, r3
|
|
beq silence
|
|
bne son
|
|
son ldr r4, [r1, #E_RES]
|
|
ldr r3, [r1, #E_SON]
|
|
ldrsh r3, [r3, r2,lsl #1]
|
|
|
|
add r3, r3, lsl #16
|
|
mul r3, r3, r4
|
|
lsr r3, #16
|
|
;add r3, r3, r4
|
|
;lsl r3, #1
|
|
|
|
ldr r4, =TIM3_CCR3
|
|
str r3, [r4]
|
|
|
|
add r2,#1
|
|
str r2,[r1, #E_POS]
|
|
|
|
silence
|
|
|
|
pop{r4}
|
|
bx lr
|
|
endp
|
|
end
|
|
|