SPI RAM 23LC1024 (Microchip) with DMA and FIFO
Fork of SPIRAM_23LC1024_DMA by
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 }
Generated on Fri Jul 15 2022 15:45:42 by 1.7.2