aboutsummaryrefslogtreecommitdiffstats
path: root/lab5/RTDSP/intio.c
diff options
context:
space:
mode:
authorDivyansh Manocha <dan12n@users.noreply.github.com>2018-02-23 15:04:55 +0000
committerGitHub <noreply@github.com>2018-02-23 15:04:55 +0000
commitda6b455dc35d1f9db153f1a7258549cd8e23f6b2 (patch)
treeb1792ad19d0cc4bab319e69cc7da2e9a636f0f1a /lab5/RTDSP/intio.c
parent391804c59409788a1b38f43dfb33797b6225d06c (diff)
downloadNoiseSilencer-da6b455dc35d1f9db153f1a7258549cd8e23f6b2.tar.gz
NoiseSilencer-da6b455dc35d1f9db153f1a7258549cd8e23f6b2.zip
Adding lab5
Diffstat (limited to 'lab5/RTDSP/intio.c')
-rw-r--r--lab5/RTDSP/intio.c135
1 files changed, 135 insertions, 0 deletions
diff --git a/lab5/RTDSP/intio.c b/lab5/RTDSP/intio.c
new file mode 100644
index 0000000..81930ce
--- /dev/null
+++ b/lab5/RTDSP/intio.c
@@ -0,0 +1,135 @@
+/*************************************************************************************
+ 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>
+// Some functions to help with configuring hardware
+#include "helper_functions_polling.h"
+
+
+// PI defined here for use in your code
+#define PI 3.141592653589793
+short x[] = {0, 0};
+double y[] = {0.0, 0.0};
+double a[] = {1, -1.875/2.125};
+double b[] = {0.125/2.125, 0.125/2.125};
+
+/******************************* 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 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()
+{
+ x[1] = x[0];
+ x[0] = mono_read_16Bit();
+ y[1] = y[0];
+ y[0] = b[0] * x[0] + b[1] * x[1] - a[1] * y[1];
+
+ mono_write_16Bit((short)y[0]);
+}