Serial RAM (SPI SRAM) library 23K256, 23LC1024 (Microchip) see: http://mbed.org/users/okini3939/notebook/extend-memory/
Dependents: SPIRAM_23LC1024_FIFO
SerRAM.h@1:5a261b6a88af, 2013-03-08 (annotated)
- 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?
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 | 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 |