Serial RAM (SPI SRAM) library 23K256, 23LC1024 (Microchip) see: http://mbed.org/users/okini3939/notebook/extend-memory/
Dependents: SPIRAM_23LC1024_FIFO
SerRAM.h@0:69ea2af1d9af, 2013-01-07 (annotated)
- 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?
User | Revision | Line number | New 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 |