Motorola ONCE SC140 Application Note page 27

Enhanced once stopwatch timer
Table of Contents

Advertisement

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;
}
Complete Example of Profiling
A-5

Advertisement

Table of Contents
loading

Table of Contents