More readable TLV320 Lib

Dependents:   TalkThrough

Revision:
0:808bb0b9cf45
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/I2SSlaveHL.h	Wed Oct 22 09:23:47 2014 +0000
@@ -0,0 +1,126 @@
+
+#include "mbed.h"
+#include "math.h"
+
+#ifndef __MBED_I2SSLAVE_H__
+#define __MBED_I2SSLAVE_H__
+
+extern FunctionPointer akjnh3489v8ncv;
+
+
+class I2SSlave{
+	public:
+		/* @param tx_sda Transmitter serial data line
+		 * @param tx_ws Transmitter word select line
+		 * @param clk Shared transmitter/receiver clock line
+		 * @param rx_sda Receiver serial data line
+		 * @param rx_ws Receiver word select line */
+		I2SSlave(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
+
+		// bit Set the number of bits per write
+		// STEREO (0) or MONO (1) mode
+		void format(int bit, bool mode);
+		
+		void Write(int32_t aLeft, int32_t aRight);
+
+		void Read(int32_t* aLeft, int32_t* aRight);
+		
+		// Mode to enable - NONE, TRANSMIT only, RECEIVE only, BOTH
+		// Enables tx/rx interrupts
+		void start(int mode);
+		
+		void Start();
+		void Stop();
+		
+		void attach(void(*fptr)(void)){
+				akjnh3489v8ncv.attach(fptr);
+		}
+		
+		template<typename T>
+		void attach(T *tptr, void(T::*mptr)(void)){
+				akjnh3489v8ncv.attach(tptr, mptr);
+		}
+        
+		// bit0: receive/transmit interrupt active
+		// bit1: receive/transmit DMA request 1
+		// bit2: receive/transmit DMA request 2
+		// bit[11:8]: receive FIFO level
+		// bit[19:16]: transmit FIFO level
+		int status();
+
+		int GetRxLevel();
+		int GetTxLevel();
+		
+		//defines
+    #define STEREO  0
+    #define MONO    1
+    
+    #define I2SFIFO_EMPTY    0
+    #define I2SFIFO_FULL     8
+    
+    #define RAM_LENGTH  1024
+    #define RAM_LIMIT   (RAM_LENGTH - 1) 
+    #define PTR_MAX     ((RAM_LENGTH / 8) - 1)
+    
+    #define NONE        0
+    #define TRANSMIT    1
+    #define RECEIVE     2
+    #define BOTH        3
+
+	private:        
+        /** I2S intitalize function
+         *
+         * @param tx_sda Transmitter serial data line
+         * @param tx_ws Transmitter word select line
+         * @param clk Shared transmitter/receiver clock line
+         * @param rx_sda Receiver serial data line
+         * @param rx_ws Receiver word select line
+         * @return Returns 0 for successful initialisation, -1 for an error
+         */
+        int initialize_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
+        /** Set internal clock divide by rate
+         *
+         * @param divideBy Divide by 1, 2, 4 or 8
+         */
+        void setClocks_(int divideBy);
+        /** Set up the pins on the processor itself
+         *
+         * @param tx_sda Transmitter serial data line
+         * @param tx_ws Transmitter word select line
+         * @param clk Shared transmitter/receiver clock line
+         * @param rx_sda Receiver serial data line
+         * @param rx_ws Receiver word select line
+         */
+        void setPins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
+        /** Set the data transmission format 
+         *
+         * @param bit Set the number of bits per write
+         * @param mode Set STEREO (0) or MONO (1) mode
+         */
+        void format_(int bit, bool mode);
+        
+				// Set slave mode
+        void modeConfig_(void);
+        
+				/** Store PinName values
+         * 
+         * @param tx_sda Transmitter serial data line
+         * @param tx_ws Transmitter word select line
+         * @param clk Shared transmitter/receiver clock line
+         * @param rx_sda Receiver serial data line
+         * @param rx_ws Receiver word select line
+         */
+        void storePins_(PinName tx_sda, PinName tx_ws, PinName clk, PinName rx_sda, PinName rx_ws);
+        //variables
+        int bit_;
+        bool mode_;
+        PinName tx_sda_; 
+        PinName tx_ws_; 
+        PinName clk_;
+        PinName rx_sda_;
+        PinName rx_ws_;
+};
+
+#endif /*__MBED_I2S_H__*/
+
+