SPI to Ethernet Master
Dependencies: WIZnetInterface mbed
Fork of SPI_HelloWorld_Mbed by
Diff: main.cpp
- Revision:
- 3:feec15e3bb27
- Parent:
- 2:34bd7b8d30f9
- Child:
- 4:1b4fc2571fd4
--- a/main.cpp Fri Mar 27 20:16:45 2015 +0000 +++ b/main.cpp Wed Mar 09 08:14:30 2016 +0000 @@ -1,42 +1,101 @@ -/* mbed Example Program - * Copyright (c) 2006-2014 ARM Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -#include "mbed.h" - -SPI spi(p5, p6, p7); // mosi, miso, sclk -DigitalOut cs(p8); - -int main() { - // Chip must be deselected - cs = 1; - - // Setup the spi for 8 bit data, high steady state clock, - // second edge capture, with a 1MHz clock rate - spi.format(8,3); - spi.frequency(1000000); - - // Select the device by seting chip select low - cs = 0; - - // Send 0x8f, the command to read the WHOAMI register - spi.write(0x8F); - - // Send a dummy byte to receive the contents of the WHOAMI register - int whoami = spi.write(0x00); - printf("WHOAMI register = 0x%X\n", whoami); - - // Deselect the device - cs = 1; -} \ No newline at end of file +#include "mbed.h" +#include "EthernetInterface.h" + +#define DHCP 1 + +uint8_t mac_addr[6] = {0x00, 0x08, 0xdc, 0x12, 0x34, 0x45}; +const char ip_addr[] = "xxx.xxx.xxx.xxx"; +const char mask_addr[] = "xxx.xxx.xxx.xxx"; +const char gateway_addr[] = "xxx.xxx.xxx.xxx"; + +const char* Target_addr = "192.168.0.2"; +const int Target_port = 10001; + +SPI master(PA_8, PA_7, PA_6, PA_5); // mosi, miso, sclk + +int main() { + + char txbuf[256]={0,}; + char rxbuf[256]={0,}; + int i, n, closecount, slave_h, length; + + printf("SPI to Ethernet Master\r\n"); + + /* + * SPI Setting + */ + master.format(8,3); + master.frequency(1000000); + + /* + * Network Setting + */ + printf("Wait a second...\r\n"); + EthernetInterface eth; + #if DHCP==1 + printf("Network Setting DHCP\r\n"); + eth.init(mac_addr); + #else + printf("Network Setting Static\r\n"); + eth.init(mac_addr, ip_addr, mask_addr, gateway_addr); + #endif + eth.connect(); + printf("IP Address is %s\r\n", eth.getIPAddress()); + while(1) + { + printf("Check Ethernet Link\r\n"); + if(eth.link() == true) + { + printf("Link up\r\n"); + break; + } + } + + /* + * Create Client Socket and Connecting + */ + TCPSocketConnection socket; + while(1) + { + while (socket.connect(Target_addr, Target_port) < 0) + { + printf("Unable to connect to (%s) on port (%d)\r\n", Target_addr, Target_port); + wait(1); + } + printf("Connected to Server at %s\r\n",Target_addr); + + while(1) + { + + n = socket.receive(txbuf, sizeof(txbuf)); + printf("n = %d\r\n", n); + slave_h = master.write(0x55); + printf("slave_h = char:%c, dec:%d, hex:%x\r\n", slave_h, slave_h, slave_h); + if(slave_h==0x55) + { + printf("check loop slave_h if\r\n"); + length = master.write(0x01); + printf("length = char:%c, dec:%d, hex:%x\r\n", length, length, length); + for(i=0; i<length; i++) + { + rxbuf[i]=master.write(0x00); + printf("rxbuf[%d] = char:%c, dec:%d, hex:%x\r\n", i, rxbuf[i], rxbuf[i], rxbuf[i]); + } + socket.send(rxbuf, strlen(rxbuf)); + } + if(n > 0) + { + printf("check loop n if\r\n"); + for(i=0; i<n; i++) + { + master.write(txbuf[i]); + printf("check loop for\r\n"); + } + memset(txbuf, 0, strlen(txbuf)); + closecount=0; + } + } + } +} + +