53 lines
1 KiB
ArmAsm
53 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
|
|
|
|
|
|
|
|
|