ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
14 ноября
113500 Топик полностью
Gamma SPb (20.02.2008 13:16, просмотров: 239) ответил Крок на А для ДСПИКов программы на ассемблере уже некошерно писать?
ну здрасте. Все прозрачно написано в ASM30 manual. Исходников до жопы - хотя бы библиотеку math или dsp открыть  _dtmf_goertzel: push PSVPAG push CORCON push.d W8 push W10 /* prepare dsp-core and PSV */ mov #(DSP_MODE_FRACTIONAL | \ DSP_MODE_RND_DIS | \ DSP_MODE_PSV_EN | \ DSP_MODE_SAT_SUPER | \ DSP_MODE_DATA_SAT_EN | \ DSP_MODE_ACCA_SAT_DIS | \ DSP_MODE_ACCB_SAT_DIS | \ DSP_MODE_SIGNED), W8 mov W8, CORCON /* set required dsp-core mode */ mov #psvpage(_dtmf_coeff_8000_205), W8 mov W8, PSVPAG /* set required PSV page */ dec W1, W1 /* frame size */ mov W0, W9 /* Save frame pointer */ /* Calculate Magnitude for every frequency */ /* --------------------------------------- */ do #(16-1), 1f /* Q0 = coeff * Q1 - Q2 + sample */ /* Q2 = Q1 */ /* Q1 = Q0 */ /* coeff = W5 Q1 = W6 Q2 = W8 */ mov #_result, W10 mov W9, W0 /* restore frame pointer */ clr W6 /* clear Q1 */ clr W8 /* clear Q2 */ mov [W2++], W5 /* get coeff for next freq */ do W1, 2f mov [W0++], W7 mpy W4*W7, A ;lac [W0++], #0, A /* Q0 = sample */ ;sftac A, #8 mac W5*W6, A mac W5*W6, A /* Q0 = sample + coeff * Q1 */ neg W8, W8 /* Q2 = -Q2 */ add W8, #0, A /* Q0 = sample + coeff * Q1 - Q2 */ mov W6, W8 /* Q2 = Q1 */ sac.r A, #0, [W10++] 2: sac.r A, #0, W6 /* Q1 = Q0 */ /* Calculate magnitude: magnitude ^ 2 = Q1 ^ 2 + Q2 ^ 2 - Q1 * Q2 * coeff */ mov W8, W7 /* W7 = Q2 */ mpy W6*W6, A mpy W7*W7, B add A /* A = Q1 ^ 2 + Q2 ^ 2 */ mpy W6*W7, B /* B = Q1 * Q2 */ sac.r B, #0, W6 mpy W5*W6, B mac W5*W6, B /* B = Q1 * Q2 * coeff */ sub A /* A = Q1^2 + Q2^2 - Q1*Q2*coeff */ sac.r A, #-1, [W3++] /* save A * 2 for true dB conversion */ 1: nop pop W10 pop.d W8 pop CORCON /* restore CORCON */ pop PSVPAG /* restore PSVPAG */ return