W5200(WIZ820io) network interface
Diff: w5100.cpp
- Revision:
- 1:803123933c5a
- Parent:
- 0:61831b843b44
--- a/w5100.cpp Sat Apr 14 17:21:11 2012 +0000 +++ b/w5100.cpp Tue Apr 17 12:13:15 2012 +0000 @@ -9,6 +9,7 @@ #include <stdio.h> #include <string.h> +#include "mbed.h" #include "w5100.h" #ifndef MBED #include <avr/interrupt.h> @@ -30,25 +31,25 @@ #endif #ifdef MBED -SPI spi(p11, p12, p13); // mosi, miso, sclk -DigitalOut _cs(p14); -DigitalOut _reset(p15); -inline void delay(int n) { wait_ms(n); } -inline static void initSS(){ _cs = 1; } -inline static void setSS() { _cs = 0; } -inline static void resetSS() { _cs = 1; } + +SPI* pSPI = NULL; +DigitalOut* pCS = NULL; -void W5100Class::hardware_reset() { - _reset = 1; - _reset = 0; - wait_us(2); - _reset = 1; - wait_ms(150); -} +inline void delay(int n) { wait_ms(n); } +inline static void initSS(){ pCS->write(1); } +inline static void setSS() { pCS->write(0); } +inline static void resetSS() { pCS->write(1); } + #endif //MBED void W5100Class::init(void) { + if (!pSPI) { + pSPI = new SPI(p11, p12, p13); // mosi, miso, sclk + } + if (!pCS) { + pCS = new DigitalOut(p14); + } initSS(); writeMR(1<<RST); @@ -164,16 +165,16 @@ setSS(); #ifdef W5200 - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); - spi.write(0x80); - spi.write(0x01); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); + pSPI->write(0x80); + pSPI->write(0x01); #else - spi.write(0xF0); - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); + pSPI->write(0xF0); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); #endif - spi.write(_data); + pSPI->write(_data); resetSS(); return 1; } @@ -183,14 +184,14 @@ #ifdef W5200 setSS(); - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); - spi.write((0x80 | ((_len & 0x7F00) >> 8))); - spi.write(_len & 0x00FF); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); + pSPI->write((0x80 | ((_len & 0x7F00) >> 8))); + pSPI->write(_len & 0x00FF); for (uint16_t i=0; i<_len; i++) { - spi.write(_buf[i]); + pSPI->write(_buf[i]); } resetSS(); @@ -199,11 +200,11 @@ for (uint16_t i=0; i<_len; i++) { setSS(); - spi.write(0xF0); - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); + pSPI->write(0xF0); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); _addr++; - spi.write(_buf[i]); + pSPI->write(_buf[i]); resetSS(); } #endif @@ -215,17 +216,17 @@ { setSS(); #ifdef W5200 - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); - spi.write(0x00); - spi.write(0x01); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); + pSPI->write(0x00); + pSPI->write(0x01); #else - spi.write(0x0F); - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); + pSPI->write(0x0F); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); #endif - uint8_t _data = spi.write(0); + uint8_t _data = pSPI->write(0); resetSS(); return _data; } @@ -234,14 +235,14 @@ { #ifdef W5200 setSS(); - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); - spi.write((0x00 | ((_len & 0x7F00) >> 8))); - spi.write(_len & 0x00FF); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); + pSPI->write((0x00 | ((_len & 0x7F00) >> 8))); + pSPI->write(_len & 0x00FF); for (uint16_t i=0; i<_len; i++) { - _buf[i] = spi.write(0); + _buf[i] = pSPI->write(0); } resetSS(); @@ -251,11 +252,11 @@ for (uint16_t i=0; i<_len; i++) { setSS(); - spi.write(0x0F); - spi.write(_addr >> 8); - spi.write(_addr & 0xFF); + pSPI->write(0x0F); + pSPI->write(_addr >> 8); + pSPI->write(_addr & 0xFF); _addr++; - _buf[i] = spi.write(0); + _buf[i] = pSPI->write(0); resetSS(); } #endif