; 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