SPI RAM 23LC1024 (Microchip) with DMA and FIFO

Dependencies:   SerRAM mbed

Fork of SPIRAM_23LC1024_DMA by Suga koubou

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 /*
00002  * SPI RAM 23LC1024 (Microchip)
00003  *   1Mbit
00004  *   with DMA ( http://mbed.org/users/AjK/code/MODDMA/ )
00005  */
00006 #include "mbed.h"
00007 #include "SerRAM.h"
00008 #include "CBuffer_SRAM.h"
00009 
00010 #define FIFO_SIZE 250
00011 
00012 DigitalOut myled(LED1);
00013 Serial pc(USBTX, USBRX);
00014 
00015 SerRAM memory(p5, p6, p7, p18, 1024);
00016 CircBuffer fifo(FIFO_SIZE);
00017 
00018 extern "C" void HardFault_Handler() {
00019     register unsigned int _msp __asm("msp");
00020     printf("Hard Fault! address: %08x\r\n", *((unsigned int *)(_msp + 24)));
00021     exit(-1);
00022 }  
00023 
00024 int main() {
00025     char c;
00026     int i, r, w;
00027 
00028     pc.baud(115200);
00029     wait_ms(500);
00030     pc.printf("*** SRAM TEST ***\r\n");
00031 
00032     printf("- FULL\r\n", w);
00033     for (w = 0; w < 256; w ++) {
00034         if (fifo.queue(w) == false) {
00035             printf("write full %d\r\n", w);
00036             break;
00037         }
00038     }
00039     for (r = 0; r < 256; r ++) {
00040         if (fifo.dequeue(&c) == false) {
00041             printf("read end %d\r\n", r);
00042             break;
00043         }
00044         if (c != r) {
00045             printf("data error %d != %d\r\n", r, c);
00046             return -1;
00047         }
00048     }
00049     printf("- ok\r\n", w);
00050 
00051     fifo.flush();
00052 
00053     printf("- write > read\r\n", w);
00054     for (w = 1; w < 60; w ++) {
00055         if (fifo.queue(w) == false) {
00056             printf("write full %d\r\n", w);
00057             break;
00058         }
00059     }
00060     for (r = 1; r < 40; r ++) {
00061         if (fifo.dequeue(&c) == false) {
00062             printf("read end %d\r\n", r);
00063             break;
00064         }
00065         if (c != r) {
00066             printf("data error %d != %d\r\n", r, c);
00067             return -1;
00068         }
00069     }
00070     for (; w < 120; w ++) {
00071         if (fifo.queue(w) == false) {
00072             printf("write full %d\r\n", w);
00073             break;
00074         }
00075     }
00076     for (; r < 121; r ++) {
00077         if (fifo.dequeue(&c) == false) {
00078             printf("read end %d\r\n", r);
00079             break;
00080         }
00081         if (c != r) {
00082             printf("data error %d != %d\r\n", r, c);
00083             return -1;
00084         }
00085     }
00086     printf("- ok\r\n", w);
00087 
00088     fifo.flush();
00089 
00090     printf("- write < read\r\n", w);
00091     for (w = 0; w < 250; w ++) {
00092         if (fifo.queue(w) == false) {
00093             printf("write full %d\r\n", w);
00094             break;
00095         }
00096     }
00097     for (r = 0; r < 240; r ++) {
00098         if (fifo.dequeue(&c) == false) {
00099             printf("read end %d\r\n", r);
00100             break;
00101         }
00102         if (c != (r & 0xff)) {
00103             printf("data error %d != %d\r\n", r, c);
00104             return -1;
00105         }
00106     }
00107     for (; w < 270; w ++) {
00108         if (fifo.queue(w) == false) {
00109             printf("write full %d\r\n", w);
00110             break;
00111         }
00112     }
00113     for (; r < 260; r ++) {
00114         if (fifo.dequeue(&c) == false) {
00115             printf("read end %d\r\n", r);
00116             break;
00117         }
00118         if (c != (r & 0xff)) {
00119             printf("data error %d != %d\r\n", r, c);
00120             return -1;
00121         }
00122     }
00123     for (; w < 400; w ++) {
00124         if (fifo.queue(w) == false) {
00125             printf("write full %d\r\n", w);
00126             break;
00127         }
00128     }
00129     for (; r < 401; r ++) {
00130         if (fifo.dequeue(&c) == false) {
00131             printf("read end %d\r\n", r);
00132             break;
00133         }
00134         if (c != (r & 0xff)) {
00135             printf("data error %d != %d\r\n", r, c);
00136             return -1;
00137         }
00138     }
00139     printf("- ok\r\n", w);
00140 
00141 }