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

Dependents:   SPIRAM_23LC1024_FIFO

Committer:
okini3939
Date:
Fri Mar 08 14:00:38 2013 +0000
Revision:
1:5a261b6a88af
Parent:
0:69ea2af1d9af
add CircBuffer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:69ea2af1d9af 1 /*
okini3939 0:69ea2af1d9af 2 * Serial RAM (SPI SRAM) library
okini3939 0:69ea2af1d9af 3 * Copyright (c) 2013 Hiroshi Suga
okini3939 0:69ea2af1d9af 4 * Released under the MIT License: http://mbed.org/license/mit
okini3939 0:69ea2af1d9af 5 */
okini3939 0:69ea2af1d9af 6
okini3939 0:69ea2af1d9af 7 /** @file
okini3939 0:69ea2af1d9af 8 * @brief Serial RAM (SPI SRAM) library
okini3939 0:69ea2af1d9af 9 * 23K256, 23LC1024 (Microchip)
okini3939 0:69ea2af1d9af 10 * support FIFO
okini3939 1:5a261b6a88af 11 * support DMA need http://mbed.org/users/AjK/code/MODDMA/
okini3939 0:69ea2af1d9af 12 */
okini3939 0:69ea2af1d9af 13
okini3939 0:69ea2af1d9af 14 #ifndef __SerRAM_h__
okini3939 0:69ea2af1d9af 15 #define __SerRAM_h__
okini3939 0:69ea2af1d9af 16
okini3939 0:69ea2af1d9af 17 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
okini3939 1:5a261b6a88af 18 #define RAM_USE_DMA
okini3939 0:69ea2af1d9af 19 #define RAM_DMA_SIZE 64
okini3939 0:69ea2af1d9af 20 #endif
okini3939 0:69ea2af1d9af 21
okini3939 0:69ea2af1d9af 22 #include "mbed.h"
okini3939 0:69ea2af1d9af 23
okini3939 0:69ea2af1d9af 24 #ifdef RAM_USE_DMA
okini3939 0:69ea2af1d9af 25 #include "MODDMA.h"
okini3939 0:69ea2af1d9af 26 #endif
okini3939 0:69ea2af1d9af 27
okini3939 0:69ea2af1d9af 28 class SerRAM {
okini3939 0:69ea2af1d9af 29 public:
okini3939 0:69ea2af1d9af 30 /**
okini3939 0:69ea2af1d9af 31 * @param mosi MOSI port (p5, p10)
okini3939 0:69ea2af1d9af 32 * @param miso MISO port (p6, p11)
okini3939 0:69ea2af1d9af 33 * @param sck SCK port (p7, p12)
okini3939 0:69ea2af1d9af 34 * @param cs CS port
okini3939 0:69ea2af1d9af 35 * @param size Memory size (Kbits) default: 256
okini3939 0:69ea2af1d9af 36 */
okini3939 0:69ea2af1d9af 37 SerRAM (PinName mosi, PinName miso, PinName sck, PinName cs, int size = 256);
okini3939 0:69ea2af1d9af 38 SerRAM (SPI& spi, PinName cs, int size = 256);
okini3939 0:69ea2af1d9af 39
okini3939 0:69ea2af1d9af 40 /**
okini3939 0:69ea2af1d9af 41 * @param addr address
okini3939 0:69ea2af1d9af 42 * @param dat data
okini3939 0:69ea2af1d9af 43 * @return 0:success, -1:failure
okini3939 0:69ea2af1d9af 44 */
okini3939 0:69ea2af1d9af 45 int write (int addr, int dat);
okini3939 0:69ea2af1d9af 46 /**
okini3939 0:69ea2af1d9af 47 * @param addr address
okini3939 0:69ea2af1d9af 48 * @param buf buffer
okini3939 0:69ea2af1d9af 49 * @param len length
okini3939 0:69ea2af1d9af 50 * @param async block (DMA)
okini3939 0:69ea2af1d9af 51 * @return >=0:success, -1:failure
okini3939 0:69ea2af1d9af 52 */
okini3939 1:5a261b6a88af 53 int write (int addr, char *buf, int len, bool async = false);
okini3939 0:69ea2af1d9af 54 /**
okini3939 0:69ea2af1d9af 55 * @param addr address
okini3939 0:69ea2af1d9af 56 * @return data
okini3939 0:69ea2af1d9af 57 */
okini3939 0:69ea2af1d9af 58 int read (int addr);
okini3939 0:69ea2af1d9af 59 /**
okini3939 0:69ea2af1d9af 60 * @param addr address
okini3939 0:69ea2af1d9af 61 * @param buf buffer
okini3939 0:69ea2af1d9af 62 * @param len length
okini3939 0:69ea2af1d9af 63 * @param async block (DMA)
okini3939 0:69ea2af1d9af 64 * @return 0:success, -1:failure
okini3939 0:69ea2af1d9af 65 */
okini3939 1:5a261b6a88af 66 int read (int addr, char *buf, int len, bool async = false);
okini3939 0:69ea2af1d9af 67
okini3939 0:69ea2af1d9af 68 int setStatus (int status);
okini3939 0:69ea2af1d9af 69 int getStatus ();
okini3939 0:69ea2af1d9af 70
okini3939 1:5a261b6a88af 71 static SerRAM * getInstance() {
okini3939 1:5a261b6a88af 72 return _inst;
okini3939 1:5a261b6a88af 73 };
okini3939 1:5a261b6a88af 74
okini3939 1:5a261b6a88af 75 #ifdef RAM_USE_DMA
okini3939 1:5a261b6a88af 76 bool isBusy () {
okini3939 1:5a261b6a88af 77 return dmabusy;
okini3939 1:5a261b6a88af 78 };
okini3939 0:69ea2af1d9af 79 #endif
okini3939 0:69ea2af1d9af 80
okini3939 0:69ea2af1d9af 81 private:
okini3939 0:69ea2af1d9af 82 SPI _spi;
okini3939 0:69ea2af1d9af 83 DigitalOut _cs;
okini3939 0:69ea2af1d9af 84 int _size;
okini3939 0:69ea2af1d9af 85 int _alloc;
okini3939 1:5a261b6a88af 86 static SerRAM * _inst;
okini3939 0:69ea2af1d9af 87
okini3939 0:69ea2af1d9af 88 #ifdef RAM_USE_DMA
okini3939 0:69ea2af1d9af 89 void tc0_callback ();
okini3939 0:69ea2af1d9af 90 void tc1_callback ();
okini3939 0:69ea2af1d9af 91 void err_callback ();
okini3939 0:69ea2af1d9af 92
okini3939 1:5a261b6a88af 93 LPC_SSP_TypeDef *_ssp;
okini3939 0:69ea2af1d9af 94 MODDMA dma;
okini3939 0:69ea2af1d9af 95 MODDMA_Config *dmacfg0, *dmacfg1;
okini3939 0:69ea2af1d9af 96 MODDMA::GPDMA_CONNECTION dmacon0, dmacon1;
okini3939 1:5a261b6a88af 97 volatile bool dmabusy;
okini3939 0:69ea2af1d9af 98 #endif
okini3939 0:69ea2af1d9af 99 };
okini3939 0:69ea2af1d9af 100
okini3939 0:69ea2af1d9af 101 #endif