BEGIN{
if (!F_ADC) F_ADC=8900;
if (!WINDOWS) WINDOWS=1;
l=int(F_ADC/50+0.5); # Länge des Fensters in Bytes (20 ms Länge)
SINTAB=int((INITEND+l+255)/256)*256;
PI=3.1415926;
# 0. Platz
# Dieser Punkt ist am kritischsten, um die Sinustabelle auf eine
# glatte /256 teilbare Adresse zu legen.
print "// Diese Datei wird von „tables.awk“ erstellt. Editieren zwecklos!";
print "#include <avr/io.h> // _VECTORS_SIZE";
print ".section .vectors // gleich hinter Interrupttabelle platzieren";
printf (".set L,%d\n",l);
print ".set S,(_VECTORS_SIZE+L+255)>>8";
print ".space S<<8-L-_VECTORS_SIZE";
# 1. Fenstertabelle
print ".type wintab,@common";
printf ("wintab: // Länge = %d Bytes, prüfe Adresse = 0x%04X\n",l,SINTAB-l);
for (i=0;i<l;i++) {
arg=(i+0.5)/l;
if (WINDOWS==1) arg=((arg-0.5)*0.9)+0.5; #spreizen um sinnlose Nullen zu vermeiden
c=sin(arg*PI);
c=int(c*c*255+0.5);
if (i%8==0) printf("\t.byte\t");
printf("%3d",c);
if (i%8==7 || i==l-1) printf("\n");
else printf(",");
}
# 2. Sinustabelle
print ".type sintab,@common";
printf("sintab: // Sinustabelle 256 Stützstellen, Adresse = 0x%04X\n",SINTAB);
for (i=0;i<128;i++) {
if (i%8==0) printf("\t.byte\t");
printf("%3d",int(122*sin(i*2*PI/256)+0.5));
if (i%8==7) printf("\n");
else printf(",");
}
print "#ifdef __AVR_HAVE_MUL__ // Zweierkomplement";
for (i=0;i<128;i++) {
if (i%8==0) printf("\t.byte\t");
v=int(122*sin(i*2*PI/256)+0.5);
printf("%3d",v?256-v:v);
if (i%8==7) printf("\n");
else printf(",");
}
print "#else // Vorzeichen+Betrag";
for (i=0;i<128;i++) {
if (i%8==0) printf("\t.byte\t");
printf("%3d",128+int(122*sin(i*2*PI/256)+0.5));
if (i%8==7) printf("\n");
else printf(",");
}
print "#endif";
}
Detected encoding: UTF-8 | 0
|