Cirrus-logic EP93xx Manuel d'utilisateur Page 79

  • Télécharger
  • Ajouter à mon manuel
  • Imprimer
  • Page
    / 824
  • Table des matières
  • MARQUE LIVRES
  • Noté. / 5. Basé sur avis des utilisateurs
Vue de la page 78
DS785UM1 3-9
Copyright 2007 Cirrus Logic
MaverickCrunch Co-Processor
EP93xx User’s Guide
3
3
loop
cfmul32 c0, c0, c3 ; c0 <= c0 * 5
cfsub32 c0, c0, c2 ; c0 <= c0 - 1
cfcmp32 r15, c0, c1 ; c0 < 10 ?
blt loop ; yes
cfstr32 c0, [r0, #0x0] ; no, store result
3.2.2 Example 2
The following function performs an FIR filter on the given input stream. The variable “data”
points to an array of floating point values to be filtered, “n” is the number of samples for which
the filter should be applied, “filter” is the FIR filter to be applied, and “m” is the number of taps
in the FIR filter. The “data” array must be “n + m - 1” samples in length, and “n” samples will
be produced.
3.2.2.1 C Code
void
ComputeFIR(float *data, int n, float *filter, int m)
{
int i, j;
float sum;
for(i = 0; i < n; i++)
{
sum = 0;
for(j = 0; j < m; j++)
{
sum += data[i + j] * filter[j];
}
data[i] = sum;
}
}
3.2.2.2 MaverickCrunch Assembly Language Instructions
ComputeFIR
mov r1, r1, lsl #2 ; n *= 4
mov r3, r3, lsl #2 ; m *= 4
outer_loop
mov r12, r3 ; j = m * 4
cfsub64 c0, c0, c0 ; int_sum = 0;
cfcvt32s c0, c0 ; sum = float(int_sum);
inner_loop
cfldrs c2, [r0], #4 ; c2 = *data++;
Vue de la page 78
1 2 ... 74 75 76 77 78 79 80 81 82 83 84 ... 823 824

Commentaires sur ces manuels

Pas de commentaire