SPI RAM 23LC1024 (Microchip) with DMA and FIFO

Dependencies:   SerRAM mbed

Fork of SPIRAM_23LC1024_DMA by Suga koubou

Committer:
okini3939
Date:
Fri Nov 09 00:32:20 2012 +0000
Revision:
0:c5ba7d914282
Child:
1:a7b1803dfa44
1st build

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:c5ba7d914282 1 /*
okini3939 0:c5ba7d914282 2 * SPI RAM 23LC1024 (Microchip)
okini3939 0:c5ba7d914282 3 */
okini3939 0:c5ba7d914282 4 #include "mbed.h"
okini3939 0:c5ba7d914282 5
okini3939 0:c5ba7d914282 6 #define CMD_READ 0x03
okini3939 0:c5ba7d914282 7 #define CMD_WRITE 0x02
okini3939 0:c5ba7d914282 8 #define CMD_RDMR 0x05
okini3939 0:c5ba7d914282 9 #define CMD_WRMR 0x01
okini3939 0:c5ba7d914282 10
okini3939 0:c5ba7d914282 11 DigitalOut myled(LED1);
okini3939 0:c5ba7d914282 12 Serial pc(USBTX, USBRX);
okini3939 0:c5ba7d914282 13
okini3939 0:c5ba7d914282 14 SPI spi(p11, p12, p13); // mosi, miso, sclk
okini3939 0:c5ba7d914282 15 DigitalOut cs(p17);
okini3939 0:c5ba7d914282 16
okini3939 0:c5ba7d914282 17 int ram_write (int addr, char *buf, int len) {
okini3939 0:c5ba7d914282 18 int i;
okini3939 0:c5ba7d914282 19
okini3939 0:c5ba7d914282 20 cs = 0;
okini3939 0:c5ba7d914282 21 spi.write(CMD_WRITE);
okini3939 0:c5ba7d914282 22 spi.write((addr >> 16) & 0xff);
okini3939 0:c5ba7d914282 23 spi.write((addr >> 8) & 0xff);
okini3939 0:c5ba7d914282 24 spi.write(addr & 0xff);
okini3939 0:c5ba7d914282 25
okini3939 0:c5ba7d914282 26 for (i = 0; i < len; i ++) {
okini3939 0:c5ba7d914282 27 spi.write(buf[i]);
okini3939 0:c5ba7d914282 28 }
okini3939 0:c5ba7d914282 29 cs = 1;
okini3939 0:c5ba7d914282 30 return i;
okini3939 0:c5ba7d914282 31 }
okini3939 0:c5ba7d914282 32
okini3939 0:c5ba7d914282 33 int ram_read (int addr, char *buf, int len) {
okini3939 0:c5ba7d914282 34 int i;
okini3939 0:c5ba7d914282 35
okini3939 0:c5ba7d914282 36 cs = 0;
okini3939 0:c5ba7d914282 37 spi.write(CMD_READ);
okini3939 0:c5ba7d914282 38 spi.write((addr >> 16) & 0xff);
okini3939 0:c5ba7d914282 39 spi.write((addr >> 8) & 0xff);
okini3939 0:c5ba7d914282 40 spi.write(addr & 0xff);
okini3939 0:c5ba7d914282 41
okini3939 0:c5ba7d914282 42 for (i = 0; i < len; i ++) {
okini3939 0:c5ba7d914282 43 buf[i] = spi.write(0);
okini3939 0:c5ba7d914282 44 }
okini3939 0:c5ba7d914282 45 cs = 1;
okini3939 0:c5ba7d914282 46 return i;
okini3939 0:c5ba7d914282 47 }
okini3939 0:c5ba7d914282 48
okini3939 0:c5ba7d914282 49 int main() {
okini3939 0:c5ba7d914282 50 int i;
okini3939 0:c5ba7d914282 51 char buf[256];
okini3939 0:c5ba7d914282 52
okini3939 0:c5ba7d914282 53 cs = 1;
okini3939 0:c5ba7d914282 54 pc.baud(115200);
okini3939 0:c5ba7d914282 55 wait_ms(500);
okini3939 0:c5ba7d914282 56
okini3939 0:c5ba7d914282 57 cs = 0;
okini3939 0:c5ba7d914282 58 spi.write(CMD_RDMR);
okini3939 0:c5ba7d914282 59 printf("RAM mode: %02x\r\n", spi.write(0));
okini3939 0:c5ba7d914282 60 cs = 1;
okini3939 0:c5ba7d914282 61
okini3939 0:c5ba7d914282 62 printf("RAM write\r\n");
okini3939 0:c5ba7d914282 63 strcpy(buf, "Hello!");
okini3939 0:c5ba7d914282 64 ram_write(0, buf, 6);
okini3939 0:c5ba7d914282 65
okini3939 0:c5ba7d914282 66 for (i = 0; i < 256; i ++) {
okini3939 0:c5ba7d914282 67 buf[i] = i;
okini3939 0:c5ba7d914282 68 }
okini3939 0:c5ba7d914282 69 ram_write(6, buf, 256);
okini3939 0:c5ba7d914282 70
okini3939 0:c5ba7d914282 71 wait_ms(500);
okini3939 0:c5ba7d914282 72 memset(buf, 0, 256);
okini3939 0:c5ba7d914282 73
okini3939 0:c5ba7d914282 74 printf("RAM read\r\n");
okini3939 0:c5ba7d914282 75 ram_read(0, buf, 256);
okini3939 0:c5ba7d914282 76 for (i = 0; i < 256; i ++) {
okini3939 0:c5ba7d914282 77 printf(" %02x", buf[i]);
okini3939 0:c5ba7d914282 78 if ((i & 0x0f) == 0x0f)
okini3939 0:c5ba7d914282 79 printf("\r\n");
okini3939 0:c5ba7d914282 80 }
okini3939 0:c5ba7d914282 81
okini3939 0:c5ba7d914282 82 while(1) {
okini3939 0:c5ba7d914282 83 myled = 1;
okini3939 0:c5ba7d914282 84 wait(0.2);
okini3939 0:c5ba7d914282 85 myled = 0;
okini3939 0:c5ba7d914282 86 wait(0.2);
okini3939 0:c5ba7d914282 87 }
okini3939 0:c5ba7d914282 88 }