aboutsummaryrefslogtreecommitdiffstats
path: root/lab4/.metadata/.plugins/org.eclipse.core.resources/.history/2e/d036bc2bdf0100181ce89bcacea45786
diff options
context:
space:
mode:
Diffstat (limited to 'lab4/.metadata/.plugins/org.eclipse.core.resources/.history/2e/d036bc2bdf0100181ce89bcacea45786')
-rw-r--r--lab4/.metadata/.plugins/org.eclipse.core.resources/.history/2e/d036bc2bdf0100181ce89bcacea45786163
1 files changed, 163 insertions, 0 deletions
diff --git a/lab4/.metadata/.plugins/org.eclipse.core.resources/.history/2e/d036bc2bdf0100181ce89bcacea45786 b/lab4/.metadata/.plugins/org.eclipse.core.resources/.history/2e/d036bc2bdf0100181ce89bcacea45786
new file mode 100644
index 0000000..5daacd2
--- /dev/null
+++ b/lab4/.metadata/.plugins/org.eclipse.core.resources/.history/2e/d036bc2bdf0100181ce89bcacea45786
@@ -0,0 +1,163 @@
+/*************************************************************************************
+ DEPARTMENT OF ELECTRICAL AND ELECTRONIC ENGINEERING
+ IMPERIAL COLLEGE LONDON
+
+ EE 3.19: Real Time Digital Signal Processing
+ Dr Paul Mitcheson and Daniel Harvey
+
+ LAB 3: Interrupt I/O
+
+ ********* I N T I O. C **********
+
+ Demonstrates inputing and outputing data from the DSK's audio port using interrupts.
+
+ *************************************************************************************
+ Updated for use on 6713 DSK by Danny Harvey: May-Aug 2006
+ Updated for CCS V4 Sept 10
+ ************************************************************************************/
+/*
+ * You should modify the code so that interrupts are used to service the
+ * audio port.
+ */
+/**************************** Pre-processor statements ******************************/
+
+#include <stdlib.h>
+// Included so program can make use of DSP/BIOS configuration tool.
+#include "dsp_bios_cfg.h"
+
+/* The file dsk6713.h must be included in every program that uses the BSL. This
+ example also includes dsk6713_aic23.h because it uses the
+ AIC23 codec module (audio interface). */
+#include "dsk6713.h"
+#include "dsk6713_aic23.h"
+
+// math library (trig functions)
+#include <math.h>
+
+// Some functions to help with writing/reading the audio ports when using interrupts.
+#include <helper_functions_ISR.h>
+#include "Matlab/filter_coeff.txt"
+// Some functions to help with configuring hardware
+#include "helper_functions_polling.h"
+
+
+// PI defined here for use in your code
+#define PI 3.141592653589793
+#define N 12
+double x[N];
+
+/******************************* Global declarations ********************************/
+
+/* Audio port configuration settings: these values set registers in the AIC23 audio
+ interface to configure it. See TI doc SLWS106D 3-3 to 3-10 for more info. */
+DSK6713_AIC23_Config Config = { \
+ /**********************************************************************/
+ /* REGISTER FUNCTION SETTINGS */
+ /**********************************************************************/\
+ 0x0017, /* 0 LEFTINVOL Left line input channel volume 0dB */\
+ 0x0017, /* 1 RIGHTINVOL Right line input channel volume 0dB */\
+ 0x01f9, /* 2 LEFTHPVOL Left channel headphone volume 0dB */\
+ 0x01f9, /* 3 RIGHTHPVOL Right channel headphone volume 0dB */\
+ 0x0011, /* 4 ANAPATH Analog audio path control DAC on, Mic boost 20dB*/\
+ 0x0000, /* 5 DIGPATH Digital audio path control All Filters off */\
+ 0x0000, /* 6 DPOWERDOWN Power down control All Hardware on */\
+ 0x0043, /* 7 DIGIF Digital audio interface format 16 bit */\
+ 0x008d, /* 8 SAMPLERATE Sample rate control 8 KHZ */\
+ 0x0001 /* 9 DIGACT Digital interface activation On */\
+ /**********************************************************************/
+};
+
+
+// Codec handle:- a variable used to identify audio interface
+DSK6713_AIC23_CodecHandle H_Codec;
+
+ /******************************* Function prototypes ********************************/
+void init_hardware(void);
+void init_HWI(void);
+void ISR_AIC(void);
+short non_circ_fir(void);
+/********************************** Main routine ************************************/
+void main(){
+ // initialize board and the audio port
+ init_hardware();
+
+ /* initialize hardware interrupts */
+ init_HWI();
+
+ /* loop indefinitely, waiting for interrupts */
+ while(1) {};
+}
+
+/********************************** init_hardware() **********************************/
+void init_hardware()
+{
+ // Initialize the board support library, must be called first
+ DSK6713_init();
+
+ // Start the AIC23 codec using the settings defined above in config
+ H_Codec = DSK6713_AIC23_openCodec(0, &Config);
+
+ /* Function below sets the number of bits in word used by MSBSP (serial port) for
+ receives from AIC23 (audio port). We are using a 32 bit packet containing two
+ 16 bit numbers hence 32BIT is set for receive */
+ MCBSP_FSETS(RCR1, RWDLEN1, 32BIT);
+
+ /* Configures interrupt to activate on each consecutive available 32 bits
+ from Audio port hence an interrupt is generated for each L & R sample pair */
+ MCBSP_FSETS(SPCR1, RINTM, FRM);
+
+ /* These commands do the same thing as above but applied to data transfers to
+ the audio port */
+ MCBSP_FSETS(XCR1, XWDLEN1, 32BIT);
+ MCBSP_FSETS(SPCR1, XINTM, FRM);
+}
+
+/********************************** init_HWI() **************************************/
+void init_HWI()
+{
+ IRQ_globalDisable(); // Globally disables interrupts
+ IRQ_nmiEnable(); // Enables the NMI interrupt (used by the debugger)
+ IRQ_map(IRQ_EVT_RINT1,4); // Maps an event to a physical interrupt
+ IRQ_enable(IRQ_EVT_RINT1); // Enables the event
+ IRQ_globalEnable(); // Globally enables interrupts
+}
+
+/******************** INTERRUPT SERVICE ROUTINE ***********************/
+void ISR_AIC()
+{
+ unsigned int i;
+ short sample_in, sample_out;
+
+ sample_in = mono_read_16Bit();
+
+ for (i = N-1; i > 0; i--) {
+ x[i] = x[i-1];
+ }
+ x[0] = (float) sample_in / 32767.f;
+
+ sample_out = non_circ_fir();
+
+ mono_write_16Bit(sample_out);
+}
+
+//Convolve the
+short non_circ_fir()
+{
+/* double y[N + M - 1];
+ int i, M, j;
+ M = sizeof(b)/sizeof(b[0]);
+
+ for (i = 0; i < N + M - 1; i++) {
+ for (j = 0; j < i -1; j++) {
+ y[i] = y[i] + b[j]*h[i-j-1];
+ }
+
+ }*/
+ double y = 0;
+ int M, i;
+ M = sizeof(b) / sizeof(b[0]);
+ for(i = 0; i < N; i++) {
+ y += x[i] * b[M-i-1];
+ }
+ return y*32767;
+}