W5200(WIZ820io) network interface
WIZ820ioNetIf.cpp@2:a8df39b4f3aa, 2012-04-19 (annotated)
- Committer:
- va009039
- Date:
- Thu Apr 19 11:14:43 2012 +0000
- Revision:
- 2:a8df39b4f3aa
- Parent:
- 1:803123933c5a
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
va009039 | 1:803123933c5a | 1 | // WIZ820ioNetIf.cpp 2012/4/17 |
va009039 | 0:61831b843b44 | 2 | #include "WIZ820ioNetIf.h" |
va009039 | 0:61831b843b44 | 3 | #include "w5100.h" |
va009039 | 0:61831b843b44 | 4 | |
va009039 | 1:803123933c5a | 5 | extern SPI* pSPI; // w5100.cpp |
va009039 | 1:803123933c5a | 6 | extern DigitalOut* pCS; // w5100.cpp |
va009039 | 1:803123933c5a | 7 | |
va009039 | 1:803123933c5a | 8 | DigitalOut* pRESET = NULL; |
va009039 | 1:803123933c5a | 9 | |
va009039 | 1:803123933c5a | 10 | void hardware_reset() { |
va009039 | 1:803123933c5a | 11 | if (!pRESET) { |
va009039 | 1:803123933c5a | 12 | pRESET = new DigitalOut(p15); |
va009039 | 1:803123933c5a | 13 | } |
va009039 | 1:803123933c5a | 14 | if (pRESET) { |
va009039 | 1:803123933c5a | 15 | pRESET->write(1); |
va009039 | 1:803123933c5a | 16 | pRESET->write(0); |
va009039 | 1:803123933c5a | 17 | wait_us(2); |
va009039 | 1:803123933c5a | 18 | pRESET->write(1); |
va009039 | 1:803123933c5a | 19 | wait_ms(150); |
va009039 | 1:803123933c5a | 20 | } |
va009039 | 1:803123933c5a | 21 | } |
va009039 | 1:803123933c5a | 22 | |
va009039 | 0:61831b843b44 | 23 | bool wait_linkup(int timeout = 5000) { |
va009039 | 0:61831b843b44 | 24 | Timer link_t; |
va009039 | 0:61831b843b44 | 25 | link_t.start(); |
va009039 | 0:61831b843b44 | 26 | while(link_t.read_ms() < timeout) { |
va009039 | 0:61831b843b44 | 27 | if (0x20 & W5100.readPHYSTATUS()) { |
va009039 | 0:61831b843b44 | 28 | return true; |
va009039 | 0:61831b843b44 | 29 | } |
va009039 | 0:61831b843b44 | 30 | wait_ms(50); |
va009039 | 0:61831b843b44 | 31 | } |
va009039 | 0:61831b843b44 | 32 | return false; |
va009039 | 0:61831b843b44 | 33 | } |
va009039 | 0:61831b843b44 | 34 | |
va009039 | 1:803123933c5a | 35 | void WIZ820ioNetIf::spi(PinName mosi,PinName miso, PinName sclk) { |
va009039 | 1:803123933c5a | 36 | pSPI = new SPI(mosi,miso,sclk); |
va009039 | 1:803123933c5a | 37 | } |
va009039 | 1:803123933c5a | 38 | void WIZ820ioNetIf::cs(PinName _cs) { |
va009039 | 1:803123933c5a | 39 | pCS = new DigitalOut(_cs); |
va009039 | 1:803123933c5a | 40 | } |
va009039 | 1:803123933c5a | 41 | void WIZ820ioNetIf::reset(PinName _reset) { |
va009039 | 1:803123933c5a | 42 | pRESET = new DigitalOut(_reset); |
va009039 | 1:803123933c5a | 43 | } |
va009039 | 1:803123933c5a | 44 | |
va009039 | 0:61831b843b44 | 45 | int WIZ820ioNetIf::setup(int timeout_ms) { |
va009039 | 1:803123933c5a | 46 | hardware_reset(); |
va009039 | 0:61831b843b44 | 47 | W5100.init(); |
va009039 | 0:61831b843b44 | 48 | wait_linkup(); |
va009039 | 2:a8df39b4f3aa | 49 | return W5200NetIf::setup(timeout_ms); |
va009039 | 0:61831b843b44 | 50 | } |