Serial RAM (SPI SRAM) library 23K256, 23LC1024 (Microchip) see: http://mbed.org/users/okini3939/notebook/extend-memory/

Dependents:   SPIRAM_23LC1024_FIFO

SerRAM.h

Committer:
okini3939
Date:
2013-03-08
Revision:
1:5a261b6a88af
Parent:
0:69ea2af1d9af

File content as of revision 1:5a261b6a88af:

/*
 * Serial RAM (SPI SRAM) library
 * Copyright (c) 2013 Hiroshi Suga
 * Released under the MIT License: http://mbed.org/license/mit
 */

/** @file
 * @brief Serial RAM (SPI SRAM) library
 *   23K256, 23LC1024 (Microchip)
 *   support FIFO
 *   support DMA need http://mbed.org/users/AjK/code/MODDMA/
 */

#ifndef __SerRAM_h__
#define __SerRAM_h__

#if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
#define RAM_USE_DMA
#define RAM_DMA_SIZE 64
#endif

#include "mbed.h"

#ifdef RAM_USE_DMA
#include "MODDMA.h"
#endif

class SerRAM {
public:
    /**
     * @param mosi MOSI port (p5, p10)
     * @param miso MISO port (p6, p11)
     * @param sck SCK port (p7, p12)
     * @param cs CS port
     * @param size Memory size (Kbits) default: 256
     */
    SerRAM (PinName mosi, PinName miso, PinName sck, PinName cs, int size = 256);
    SerRAM (SPI& spi, PinName cs, int size = 256);

    /**
     * @param addr address
     * @param dat data
     * @return 0:success, -1:failure
     */
    int write (int addr, int dat);
    /**
     * @param addr address
     * @param buf buffer
     * @param len length
     * @param async block (DMA)
     * @return >=0:success, -1:failure
     */
    int write (int addr, char *buf, int len, bool async = false);
    /**
     * @param addr address
     * @return data
     */
    int read (int addr);
    /**
     * @param addr address
     * @param buf buffer
     * @param len length
     * @param async block (DMA)
     * @return 0:success, -1:failure
     */
    int read (int addr, char *buf, int len, bool async = false);

    int setStatus (int status);
    int getStatus ();

    static SerRAM * getInstance() {
        return _inst;
    };

#ifdef RAM_USE_DMA
    bool isBusy () {
        return dmabusy;
    };
#endif

private:
    SPI _spi;
    DigitalOut _cs;
    int _size;
    int _alloc;
    static SerRAM * _inst;

#ifdef RAM_USE_DMA
    void tc0_callback ();
    void tc1_callback ();
    void err_callback ();

    LPC_SSP_TypeDef *_ssp;
    MODDMA dma;
    MODDMA_Config *dmacfg0, *dmacfg1;
    MODDMA::GPDMA_CONNECTION dmacon0, dmacon1;
    volatile bool dmabusy;
#endif
};

#endif