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

Dependents:   SPIRAM_23LC1024_FIFO

Committer:
okini3939
Date:
Mon Jan 07 14:30:06 2013 +0000
Revision:
0:69ea2af1d9af
Child:
1:5a261b6a88af
1st build

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 0:69ea2af1d9af 11 * support DMA 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 0:69ea2af1d9af 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 #define RAM_USE_FIFO
okini3939 0:69ea2af1d9af 23 #define RAM_FIFO_NUM 20
okini3939 0:69ea2af1d9af 24
okini3939 0:69ea2af1d9af 25 #include "mbed.h"
okini3939 0:69ea2af1d9af 26
okini3939 0:69ea2af1d9af 27 #ifdef RAM_USE_DMA
okini3939 0:69ea2af1d9af 28 #include "MODDMA.h"
okini3939 0:69ea2af1d9af 29 #endif
okini3939 0:69ea2af1d9af 30
okini3939 0:69ea2af1d9af 31 class SerRAM {
okini3939 0:69ea2af1d9af 32 public:
okini3939 0:69ea2af1d9af 33 /**
okini3939 0:69ea2af1d9af 34 * @param mosi MOSI port (p5, p10)
okini3939 0:69ea2af1d9af 35 * @param miso MISO port (p6, p11)
okini3939 0:69ea2af1d9af 36 * @param sck SCK port (p7, p12)
okini3939 0:69ea2af1d9af 37 * @param cs CS port
okini3939 0:69ea2af1d9af 38 * @param size Memory size (Kbits) default: 256
okini3939 0:69ea2af1d9af 39 */
okini3939 0:69ea2af1d9af 40 SerRAM (PinName mosi, PinName miso, PinName sck, PinName cs, int size = 256);
okini3939 0:69ea2af1d9af 41 SerRAM (SPI& spi, PinName cs, int size = 256);
okini3939 0:69ea2af1d9af 42
okini3939 0:69ea2af1d9af 43 /**
okini3939 0:69ea2af1d9af 44 * @param addr address
okini3939 0:69ea2af1d9af 45 * @param dat data
okini3939 0:69ea2af1d9af 46 * @return 0:success, -1:failure
okini3939 0:69ea2af1d9af 47 */
okini3939 0:69ea2af1d9af 48 int write (int addr, int dat);
okini3939 0:69ea2af1d9af 49 /**
okini3939 0:69ea2af1d9af 50 * @param addr address
okini3939 0:69ea2af1d9af 51 * @param buf buffer
okini3939 0:69ea2af1d9af 52 * @param len length
okini3939 0:69ea2af1d9af 53 * @param async block (DMA)
okini3939 0:69ea2af1d9af 54 * @return >=0:success, -1:failure
okini3939 0:69ea2af1d9af 55 */
okini3939 0:69ea2af1d9af 56 int write (int addr, char *buf, int len, int async = 0);
okini3939 0:69ea2af1d9af 57 /**
okini3939 0:69ea2af1d9af 58 * @param addr address
okini3939 0:69ea2af1d9af 59 * @return data
okini3939 0:69ea2af1d9af 60 */
okini3939 0:69ea2af1d9af 61 int read (int addr);
okini3939 0:69ea2af1d9af 62 /**
okini3939 0:69ea2af1d9af 63 * @param addr address
okini3939 0:69ea2af1d9af 64 * @param buf buffer
okini3939 0:69ea2af1d9af 65 * @param len length
okini3939 0:69ea2af1d9af 66 * @param async block (DMA)
okini3939 0:69ea2af1d9af 67 * @return 0:success, -1:failure
okini3939 0:69ea2af1d9af 68 */
okini3939 0:69ea2af1d9af 69 int read (int addr, char *buf, int len, int async = 0);
okini3939 0:69ea2af1d9af 70
okini3939 0:69ea2af1d9af 71 int setStatus (int status);
okini3939 0:69ea2af1d9af 72 int getStatus ();
okini3939 0:69ea2af1d9af 73
okini3939 0:69ea2af1d9af 74 #ifdef RAM_USE_FIFO
okini3939 0:69ea2af1d9af 75 int fifoAlloc (int size);
okini3939 0:69ea2af1d9af 76 int fifoPut (int n, char dat);
okini3939 0:69ea2af1d9af 77 int fifoPut (int n, char *buf, int len);
okini3939 0:69ea2af1d9af 78 int fifoGet (int n, char *dat);
okini3939 0:69ea2af1d9af 79 int fifoGet (int n, char *buf, int len);
okini3939 0:69ea2af1d9af 80 int fifoAvailable (int n);
okini3939 0:69ea2af1d9af 81 int fifoUse (int n);
okini3939 0:69ea2af1d9af 82 void fifoClear (int n);
okini3939 0:69ea2af1d9af 83 #endif
okini3939 0:69ea2af1d9af 84
okini3939 0:69ea2af1d9af 85 private:
okini3939 0:69ea2af1d9af 86 SPI _spi;
okini3939 0:69ea2af1d9af 87 DigitalOut _cs;
okini3939 0:69ea2af1d9af 88 int _size;
okini3939 0:69ea2af1d9af 89 int _alloc;
okini3939 0:69ea2af1d9af 90
okini3939 0:69ea2af1d9af 91 #ifdef RAM_USE_DMA
okini3939 0:69ea2af1d9af 92 void tc0_callback ();
okini3939 0:69ea2af1d9af 93 void tc1_callback ();
okini3939 0:69ea2af1d9af 94 void err_callback ();
okini3939 0:69ea2af1d9af 95
okini3939 0:69ea2af1d9af 96 __IO uint32_t *ssp_dmacr;
okini3939 0:69ea2af1d9af 97 MODDMA dma;
okini3939 0:69ea2af1d9af 98 MODDMA_Config *dmacfg0, *dmacfg1;
okini3939 0:69ea2af1d9af 99 MODDMA::GPDMA_CONNECTION dmacon0, dmacon1;
okini3939 0:69ea2af1d9af 100 volatile int dmaexit;
okini3939 0:69ea2af1d9af 101 #endif
okini3939 0:69ea2af1d9af 102
okini3939 0:69ea2af1d9af 103 #ifdef RAM_USE_FIFO
okini3939 0:69ea2af1d9af 104 int fifo_num;
okini3939 0:69ea2af1d9af 105 struct {
okini3939 0:69ea2af1d9af 106 char *buf_w, *buf_r;
okini3939 0:69ea2af1d9af 107 int size;
okini3939 0:69ea2af1d9af 108 int addr_w, addr_r;
okini3939 0:69ea2af1d9af 109 int addr2_w, addr2_r;
okini3939 0:69ea2af1d9af 110 int ram;
okini3939 0:69ea2af1d9af 111 int ram_w, ram_r;
okini3939 0:69ea2af1d9af 112 } fifo[RAM_FIFO_NUM];
okini3939 0:69ea2af1d9af 113 #endif
okini3939 0:69ea2af1d9af 114 };
okini3939 0:69ea2af1d9af 115
okini3939 0:69ea2af1d9af 116 #endif