QRSS Rx Network receiver. A receiver to sample a segment of RF spectrum and send this data to a server for further processing and display. NXP mbed Design Challenge entry (Honorable Mention). Published in Circuit Cellar, Feb 2012

Dependencies:   NetServices mbed DNSResolver

Revision:
0:82ff15078322
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/I2S_Rx.h	Wed Jan 25 20:32:53 2012 +0000
@@ -0,0 +1,131 @@
+/*---------------------------------------------------------------------------
+
+    QRSS Receiver Application
+        
+    by Clayton ZL3TKA/VK1TKA
+    clayton@isnotcrazy.com
+
+    Header File for I2S Receiver
+        
+    I2S Receiver operates in slave mode
+
+---------------------------------------------------------------------------*/
+#ifndef _I2S_RX_H
+#define _I2S_RX_H
+
+#include "mbed.h"
+#include "BufferSys.h"
+
+// Definitions
+
+#define I2S_DUMMY_BUFFER_SIZE       16
+
+// Macros
+
+//
+// Classes
+//
+
+//---------------------------------------------------------------------------
+//
+//  I2S Receiver Class
+//
+class TI2SReceiver
+{
+    // create/destroy
+    public:
+        TI2SReceiver( TBufferPool &BuffPol );
+        ~TI2SReceiver() 
+            {
+                Stop();
+            }
+
+    // API
+    public:
+        // Initialise the hardware
+        void Init();
+
+        // Start receiving
+        void Start();
+        
+        // Stop receiving
+        void Stop();
+        
+        // Receiver status
+        bool Running()
+            { return bRunning; }
+        
+        // Test for a buffer available
+        //  Return number of queued buffers
+        int Count() const
+            { return ReceivedBuffers.Count(); }
+        //  Test if empty
+        bool Empty() const
+            { return ReceivedBuffers.Empty(); }
+
+        // Read out a buffer
+        bool Read( TBufferHandle &Handle )
+            {
+                // queue is filled from interrupts, so we need to ensure we always access it with interrupts off
+                __disable_irq();
+                bool bRet = ReceivedBuffers.Read(Handle);
+                __enable_irq();
+                return bRet;
+            }
+
+        // report the number of buffer failures
+        uint32_t BufferFailures() const
+            { return ulBufferFailures; }
+
+        // DMA IRQ Routine
+        void DMA_Interrupt(void);
+
+        // Debug routine - 
+        // Read samples from the I2S by polling it
+        //  Returns number of samples read
+        int PolledRead( int32_t *piBuffer, int iLen );
+
+        //  Debug routine - 
+        //      Read status register
+        uint32_t Status();
+
+        //  Debug routine - 
+        //      Report Status
+        void Report();
+
+    // Private methods
+    private:
+
+        //  Start a new DMA transfer
+        void StartDMATransfer();
+
+    // data
+    private:
+        // pool to get buffers from
+        TBufferPool     &EmptyBuffersPool;
+
+        // queue of incoming sample buffers
+        TBufferQueue    ReceivedBuffers;
+
+        // the current buffer being used
+        TBufferHandle   CurrentRxBuffer;
+
+        // flags indicating run status
+        bool            bRunning;
+
+        // a buffer to use when there are no empty buffers available
+        int32_t        aulDummyBuffer[I2S_DUMMY_BUFFER_SIZE];
+        
+        // frame counters etc
+        uint32_t        ulBufferCount;
+        uint32_t        ulBufferAllocations;
+        uint32_t        ulBufferFailures;
+        
+};
+
+#endif
+
+//---------------------------------------------------------------------------
+//  END
+//---------------------------------------------------------------------------
+