Romilly Cocking
/
Ser23K256
Library to drive the Microchip 23K256 SRAM over SPI.
main.cpp@0:318f4f480b1b, 2010-08-14 (annotated)
- Committer:
- romilly
- Date:
- Sat Aug 14 20:15:08 2010 +0000
- Revision:
- 0:318f4f480b1b
- Child:
- 1:28eb43851e6e
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
romilly | 0:318f4f480b1b | 1 | #include "mbed.h" |
romilly | 0:318f4f480b1b | 2 | |
romilly | 0:318f4f480b1b | 3 | DigitalOut ncs(p14); |
romilly | 0:318f4f480b1b | 4 | |
romilly | 0:318f4f480b1b | 5 | SPI spi(p5,p6,p7); |
romilly | 0:318f4f480b1b | 6 | |
romilly | 0:318f4f480b1b | 7 | void on() { |
romilly | 0:318f4f480b1b | 8 | ncs = 0; |
romilly | 0:318f4f480b1b | 9 | } |
romilly | 0:318f4f480b1b | 10 | |
romilly | 0:318f4f480b1b | 11 | void off() { |
romilly | 0:318f4f480b1b | 12 | ncs = 1; |
romilly | 0:318f4f480b1b | 13 | } |
romilly | 0:318f4f480b1b | 14 | |
romilly | 0:318f4f480b1b | 15 | void write(int address, char byte) { |
romilly | 0:318f4f480b1b | 16 | on(); |
romilly | 0:318f4f480b1b | 17 | spi.write(0x02); // write data |
romilly | 0:318f4f480b1b | 18 | spi.write(address >> 8); |
romilly | 0:318f4f480b1b | 19 | spi.write(address & 0xFF); |
romilly | 0:318f4f480b1b | 20 | spi.write(byte); |
romilly | 0:318f4f480b1b | 21 | off(); |
romilly | 0:318f4f480b1b | 22 | } |
romilly | 0:318f4f480b1b | 23 | |
romilly | 0:318f4f480b1b | 24 | |
romilly | 0:318f4f480b1b | 25 | void write(int address, char * buffer, int count) { |
romilly | 0:318f4f480b1b | 26 | on(); |
romilly | 0:318f4f480b1b | 27 | spi.write(0x01); // write status |
romilly | 0:318f4f480b1b | 28 | spi.write(0x40); // sequential mode |
romilly | 0:318f4f480b1b | 29 | off(); |
romilly | 0:318f4f480b1b | 30 | on(); |
romilly | 0:318f4f480b1b | 31 | spi.write(0x02); |
romilly | 0:318f4f480b1b | 32 | spi.write(address >> 8); |
romilly | 0:318f4f480b1b | 33 | spi.write(address & 0xFF); |
romilly | 0:318f4f480b1b | 34 | for (int i = 0; i < count; i++) { |
romilly | 0:318f4f480b1b | 35 | spi.write(buffer[i]); |
romilly | 0:318f4f480b1b | 36 | } |
romilly | 0:318f4f480b1b | 37 | off(); |
romilly | 0:318f4f480b1b | 38 | on(); |
romilly | 0:318f4f480b1b | 39 | spi.write(0x01); // write status |
romilly | 0:318f4f480b1b | 40 | spi.write(0x0); // byte mode |
romilly | 0:318f4f480b1b | 41 | off(); |
romilly | 0:318f4f480b1b | 42 | } |
romilly | 0:318f4f480b1b | 43 | |
romilly | 0:318f4f480b1b | 44 | |
romilly | 0:318f4f480b1b | 45 | char read(int address) { |
romilly | 0:318f4f480b1b | 46 | on(); |
romilly | 0:318f4f480b1b | 47 | spi.write(0x03); |
romilly | 0:318f4f480b1b | 48 | spi.write(address >> 8); |
romilly | 0:318f4f480b1b | 49 | spi.write(address & 0xFF); |
romilly | 0:318f4f480b1b | 50 | int result = spi.write(0); |
romilly | 0:318f4f480b1b | 51 | off(); |
romilly | 0:318f4f480b1b | 52 | return (char) result; |
romilly | 0:318f4f480b1b | 53 | } |
romilly | 0:318f4f480b1b | 54 | |
romilly | 0:318f4f480b1b | 55 | int main() { |
romilly | 0:318f4f480b1b | 56 | off(); |
romilly | 0:318f4f480b1b | 57 | char buff[50]; |
romilly | 0:318f4f480b1b | 58 | write(0, 'h'); |
romilly | 0:318f4f480b1b | 59 | write(1, 'i'); |
romilly | 0:318f4f480b1b | 60 | write(2, '!'); |
romilly | 0:318f4f480b1b | 61 | write(3, '\0'); |
romilly | 0:318f4f480b1b | 62 | for (int address = 0; address < 4; address++) { |
romilly | 0:318f4f480b1b | 63 | buff[address] = read(address); |
romilly | 0:318f4f480b1b | 64 | } |
romilly | 0:318f4f480b1b | 65 | printf("mem = %s\r\n", buff); |
romilly | 0:318f4f480b1b | 66 | write(0, "Hello world!",12); |
romilly | 0:318f4f480b1b | 67 | for (int address = 0; address < 12; address++) { |
romilly | 0:318f4f480b1b | 68 | buff[address] = read(address); |
romilly | 0:318f4f480b1b | 69 | } |
romilly | 0:318f4f480b1b | 70 | buff[12]='\0'; |
romilly | 0:318f4f480b1b | 71 | printf("now = %s\r\n", buff); |
romilly | 0:318f4f480b1b | 72 | } |