Motorola ONCE SC140 User Manual

Page 27

Advertising
background image

Complete Example of Profiling

A-5

asm("move.l #$00010000,PCTL1");
}

int main(void)
{
int rc = 0;
unsigned long clock_ext, clock_val,time_us;

PLL_setup_300MHz();
EOnCE_stopwatch_timer_init();
EOnCE_LED_init();
EOnCE_stopwatch_timer_start();

if (Autocorr(test_x, test_m, test_r_h, test_r_l, test_wind) != ref_result) {
rc = 1;
}

EOnCE_stopwatch_timer_stop(&clock_ext, &clock_val);
EOnCE_LED_off();
time_us=Convert_clock2time(clock_ext, clock_val,EONCE_MICROSECOND);
printf("time consumed by function is %d us\n", time_us);
return rc;
}

Word16 Autocorr (Word16 x[], Word16 m, Word16 r_h[], Word16 r_l[],
const Word16 wind[])
{
Word16 i, j, norm;
Word16 y[L_WINDOW];
Word32 sum;
Word16 overfl, overfl_shft;

for (i = 0; i < L_WINDOW; i++) {
y[i] = mult_r (x[i], wind[i]);
}
overfl_shft = 0;

do {
overfl = 0;
sum = 0L;

for (i = 0; i < L_WINDOW; i++) {
sum = L_mac (sum, y[i], y[i]);
}

if (L_sub (sum, MAX_32) == 0L) {
overfl_shft = add (overfl_shft, 4);
overfl = 1;

for (i = 0; i < L_WINDOW; i++) {
y[i] = shr (y[i], 2);
}
}
} while (overfl != 0);
sum = L_add (sum, 1L);

norm = norm_l (sum);
sum = L_shl (sum, norm);
L_Extract (sum, &r_h[0], &r_l[0]);

for (i = 1; i <= m; i++) {
sum = 0;

for (j = 0; j < L_WINDOW - i; j++) {
sum = L_mac (sum, y[j], y[j + i]);
}

sum = L_shl (sum, norm);
L_Extract (sum, &r_h[i], &r_l[i]);
}
norm = sub (norm, overfl_shft);

return norm;
}

void L_Extract (Word32 L_32, Word16 *hi, Word16 *lo)
{
*hi = extract_h (L_32);
*lo = extract_l (L_msu (L_shr (L_32, 1), *hi, 16384));

return;
}

Advertising