SPI RAM 23LC1024 (Microchip) with DMA and FIFO

Dependencies:   SerRAM mbed

Fork of SPIRAM_23LC1024_DMA by Suga koubou

Committer:
okini3939
Date:
Fri Mar 08 14:02:14 2013 +0000
Revision:
3:cc45604ca53f
Parent:
2:a3e0f7f37ac9
add CircBuffer

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:c5ba7d914282 1 /*
okini3939 0:c5ba7d914282 2 * SPI RAM 23LC1024 (Microchip)
okini3939 1:a7b1803dfa44 3 * 1Mbit
okini3939 2:a3e0f7f37ac9 4 * with DMA ( http://mbed.org/users/AjK/code/MODDMA/ )
okini3939 0:c5ba7d914282 5 */
okini3939 0:c5ba7d914282 6 #include "mbed.h"
okini3939 3:cc45604ca53f 7 #include "SerRAM.h"
okini3939 3:cc45604ca53f 8 #include "CBuffer_SRAM.h"
okini3939 0:c5ba7d914282 9
okini3939 3:cc45604ca53f 10 #define FIFO_SIZE 250
okini3939 0:c5ba7d914282 11
okini3939 0:c5ba7d914282 12 DigitalOut myled(LED1);
okini3939 0:c5ba7d914282 13 Serial pc(USBTX, USBRX);
okini3939 0:c5ba7d914282 14
okini3939 3:cc45604ca53f 15 SerRAM memory(p5, p6, p7, p18, 1024);
okini3939 3:cc45604ca53f 16 CircBuffer fifo(FIFO_SIZE);
okini3939 2:a3e0f7f37ac9 17
okini3939 2:a3e0f7f37ac9 18 extern "C" void HardFault_Handler() {
okini3939 2:a3e0f7f37ac9 19 register unsigned int _msp __asm("msp");
okini3939 2:a3e0f7f37ac9 20 printf("Hard Fault! address: %08x\r\n", *((unsigned int *)(_msp + 24)));
okini3939 2:a3e0f7f37ac9 21 exit(-1);
okini3939 2:a3e0f7f37ac9 22 }
okini3939 2:a3e0f7f37ac9 23
okini3939 3:cc45604ca53f 24 int main() {
okini3939 3:cc45604ca53f 25 char c;
okini3939 3:cc45604ca53f 26 int i, r, w;
okini3939 2:a3e0f7f37ac9 27
okini3939 3:cc45604ca53f 28 pc.baud(115200);
okini3939 3:cc45604ca53f 29 wait_ms(500);
okini3939 3:cc45604ca53f 30 pc.printf("*** SRAM TEST ***\r\n");
okini3939 0:c5ba7d914282 31
okini3939 3:cc45604ca53f 32 printf("- FULL\r\n", w);
okini3939 3:cc45604ca53f 33 for (w = 0; w < 256; w ++) {
okini3939 3:cc45604ca53f 34 if (fifo.queue(w) == false) {
okini3939 3:cc45604ca53f 35 printf("write full %d\r\n", w);
okini3939 3:cc45604ca53f 36 break;
okini3939 3:cc45604ca53f 37 }
okini3939 2:a3e0f7f37ac9 38 }
okini3939 3:cc45604ca53f 39 for (r = 0; r < 256; r ++) {
okini3939 3:cc45604ca53f 40 if (fifo.dequeue(&c) == false) {
okini3939 3:cc45604ca53f 41 printf("read end %d\r\n", r);
okini3939 3:cc45604ca53f 42 break;
okini3939 3:cc45604ca53f 43 }
okini3939 3:cc45604ca53f 44 if (c != r) {
okini3939 3:cc45604ca53f 45 printf("data error %d != %d\r\n", r, c);
okini3939 3:cc45604ca53f 46 return -1;
okini3939 3:cc45604ca53f 47 }
okini3939 0:c5ba7d914282 48 }
okini3939 3:cc45604ca53f 49 printf("- ok\r\n", w);
okini3939 0:c5ba7d914282 50
okini3939 3:cc45604ca53f 51 fifo.flush();
okini3939 0:c5ba7d914282 52
okini3939 3:cc45604ca53f 53 printf("- write > read\r\n", w);
okini3939 3:cc45604ca53f 54 for (w = 1; w < 60; w ++) {
okini3939 3:cc45604ca53f 55 if (fifo.queue(w) == false) {
okini3939 3:cc45604ca53f 56 printf("write full %d\r\n", w);
okini3939 3:cc45604ca53f 57 break;
okini3939 3:cc45604ca53f 58 }
okini3939 0:c5ba7d914282 59 }
okini3939 3:cc45604ca53f 60 for (r = 1; r < 40; r ++) {
okini3939 3:cc45604ca53f 61 if (fifo.dequeue(&c) == false) {
okini3939 3:cc45604ca53f 62 printf("read end %d\r\n", r);
okini3939 3:cc45604ca53f 63 break;
okini3939 3:cc45604ca53f 64 }
okini3939 3:cc45604ca53f 65 if (c != r) {
okini3939 3:cc45604ca53f 66 printf("data error %d != %d\r\n", r, c);
okini3939 3:cc45604ca53f 67 return -1;
okini3939 3:cc45604ca53f 68 }
okini3939 0:c5ba7d914282 69 }
okini3939 3:cc45604ca53f 70 for (; w < 120; w ++) {
okini3939 3:cc45604ca53f 71 if (fifo.queue(w) == false) {
okini3939 3:cc45604ca53f 72 printf("write full %d\r\n", w);
okini3939 3:cc45604ca53f 73 break;
okini3939 3:cc45604ca53f 74 }
okini3939 0:c5ba7d914282 75 }
okini3939 3:cc45604ca53f 76 for (; r < 121; r ++) {
okini3939 3:cc45604ca53f 77 if (fifo.dequeue(&c) == false) {
okini3939 3:cc45604ca53f 78 printf("read end %d\r\n", r);
okini3939 1:a7b1803dfa44 79 break;
okini3939 1:a7b1803dfa44 80 }
okini3939 3:cc45604ca53f 81 if (c != r) {
okini3939 3:cc45604ca53f 82 printf("data error %d != %d\r\n", r, c);
okini3939 3:cc45604ca53f 83 return -1;
okini3939 3:cc45604ca53f 84 }
okini3939 3:cc45604ca53f 85 }
okini3939 3:cc45604ca53f 86 printf("- ok\r\n", w);
okini3939 3:cc45604ca53f 87
okini3939 3:cc45604ca53f 88 fifo.flush();
okini3939 3:cc45604ca53f 89
okini3939 3:cc45604ca53f 90 printf("- write < read\r\n", w);
okini3939 3:cc45604ca53f 91 for (w = 0; w < 250; w ++) {
okini3939 3:cc45604ca53f 92 if (fifo.queue(w) == false) {
okini3939 3:cc45604ca53f 93 printf("write full %d\r\n", w);
okini3939 3:cc45604ca53f 94 break;
okini3939 3:cc45604ca53f 95 }
okini3939 3:cc45604ca53f 96 }
okini3939 3:cc45604ca53f 97 for (r = 0; r < 240; r ++) {
okini3939 3:cc45604ca53f 98 if (fifo.dequeue(&c) == false) {
okini3939 3:cc45604ca53f 99 printf("read end %d\r\n", r);
okini3939 3:cc45604ca53f 100 break;
okini3939 3:cc45604ca53f 101 }
okini3939 3:cc45604ca53f 102 if (c != (r & 0xff)) {
okini3939 3:cc45604ca53f 103 printf("data error %d != %d\r\n", r, c);
okini3939 3:cc45604ca53f 104 return -1;
okini3939 3:cc45604ca53f 105 }
okini3939 1:a7b1803dfa44 106 }
okini3939 3:cc45604ca53f 107 for (; w < 270; w ++) {
okini3939 3:cc45604ca53f 108 if (fifo.queue(w) == false) {
okini3939 3:cc45604ca53f 109 printf("write full %d\r\n", w);
okini3939 3:cc45604ca53f 110 break;
okini3939 3:cc45604ca53f 111 }
okini3939 3:cc45604ca53f 112 }
okini3939 3:cc45604ca53f 113 for (; r < 260; r ++) {
okini3939 3:cc45604ca53f 114 if (fifo.dequeue(&c) == false) {
okini3939 3:cc45604ca53f 115 printf("read end %d\r\n", r);
okini3939 3:cc45604ca53f 116 break;
okini3939 3:cc45604ca53f 117 }
okini3939 3:cc45604ca53f 118 if (c != (r & 0xff)) {
okini3939 3:cc45604ca53f 119 printf("data error %d != %d\r\n", r, c);
okini3939 3:cc45604ca53f 120 return -1;
okini3939 3:cc45604ca53f 121 }
okini3939 3:cc45604ca53f 122 }
okini3939 3:cc45604ca53f 123 for (; w < 400; w ++) {
okini3939 3:cc45604ca53f 124 if (fifo.queue(w) == false) {
okini3939 3:cc45604ca53f 125 printf("write full %d\r\n", w);
okini3939 3:cc45604ca53f 126 break;
okini3939 3:cc45604ca53f 127 }
okini3939 3:cc45604ca53f 128 }
okini3939 3:cc45604ca53f 129 for (; r < 401; r ++) {
okini3939 3:cc45604ca53f 130 if (fifo.dequeue(&c) == false) {
okini3939 3:cc45604ca53f 131 printf("read end %d\r\n", r);
okini3939 3:cc45604ca53f 132 break;
okini3939 3:cc45604ca53f 133 }
okini3939 3:cc45604ca53f 134 if (c != (r & 0xff)) {
okini3939 3:cc45604ca53f 135 printf("data error %d != %d\r\n", r, c);
okini3939 3:cc45604ca53f 136 return -1;
okini3939 3:cc45604ca53f 137 }
okini3939 3:cc45604ca53f 138 }
okini3939 3:cc45604ca53f 139 printf("- ok\r\n", w);
okini3939 1:a7b1803dfa44 140
okini3939 0:c5ba7d914282 141 }