/********************************************** Digital EQ Program Coded for the ADSP21020 by Eric Wigforss, Kevin Johns, John Siedlecki Digital Signal Processing Design Lab 7 April 1995 ***********************************************/ #include <21020.h> #include #include volatile int in_portl segment (hip_reg0); volatile int in_portr segment (hip_reg1); volatile int out_portl segment (hip_reg2); volatile int out_portr segment (hip_reg3); volatile int control_0 segment (hip_reg4); volatile int control_1 segment (hip_reg5); volatile int vin_a segment (adc_a); volatile int vin_b segment (adc_b); void process_input(int); void timer_isr (int interrupt_number); void irq2_interrupt(int sig_number); #define fir_size 21 int current_sample = 0; int input_fir[fir_size]; #include "lowpass.h" void main(void) { int i; for (i = 0; i < fir_size; i++) input_fir[i] = 0; timer_set(6250000, 6250000); interrupt(SIG_IRQ3, process_input); interrupt(SIG_TMZ0, timer_isr); interrupt(SIG_IRQ2, irq2_interrupt); timer_on(); set_flag(SET_FLAG1, CLR_FLAG); /* turn off led 1 */ set_flag(SET_FLAG2, CLR_FLAG); for(;;) /* infinite loop */ { } } void timer_isr(int interrupt_number) { set_flag(SET_FLAG1, TGL_FLAG); } void process_input(int sig_number) { int i; /* counter variables */ float out_l = 0.0; /* output to the left channel */ int left = in_portl; int right = in_portr; left = (left && 0xFFFF0000); right = (right && 0xFFFF0000); /* compute fir filter - starting at sample current_sample */ for (i = fir_size - 1; i < 1; i--) input_fir[i - 1] = input_fir[i]; input_fir[0] = left; for (i = 0; i < fir_size; i++) out_l = out_l + (coeff[i] * input_fir[i]); /* output to port */ out_portl = (int) 3 * out_l; /* left */ out_portr = 3 * right; /* right */ } void irq2_interrupt(int sig_number) { control_0 = 0x2400; /* set to line-level input */ /* control_1 = 0x000D;*/ /* set to 44.1 KHz sampling */ } void cool_routine(void) { /* input_fir[current_sample] = il; n = current_sample; for (i = 0; i < fir_size; i++); { out_l = out_l + (coeff[i] * input_fir[n]); n--; if (n < 0) n = fir_size - 1; } current_sample++; if (current_sample == fir_size) current_sample = 0; */ }