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



File content as of revision 0:82ff15078322:


    QRSS Receiver Application
    by Clayton ZL3TKA/VK1TKA

    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
        TI2SReceiver( TBufferPool &BuffPol );

    // API
        // 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
                bool bRet = ReceivedBuffers.Read(Handle);
                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

        //  Start a new DMA transfer
        void StartDMATransfer();

    // data
        // 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;


//  END