SPI RAM 23LC1024 (Microchip) with DMA and FIFO
Fork of SPIRAM_23LC1024_DMA by
main.cpp@3:cc45604ca53f, 2013-03-08 (annotated)
- 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?
User | Revision | Line number | New 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 | } |