SPI to Ethernet Slave

Dependencies:   WIZnetInterface mbed

Fork of SPI_HelloWorld_Mbed by mbed official

Committer:
Ricky_Kwon
Date:
Thu Mar 10 05:21:42 2016 +0000
Revision:
8:46bd5776b6ae
Parent:
7:b09eade395f7
Child:
9:32e3edb40824
switch case

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbed_official 0:466ad3f38b6b 1 #include "mbed.h"
Ricky_Kwon 3:30b262b6c2f9 2 #include "EthernetInterface.h"
Ricky_Kwon 3:30b262b6c2f9 3
Ricky_Kwon 5:709f1ad85e97 4 #define DHCP 1
Ricky_Kwon 5:709f1ad85e97 5
Ricky_Kwon 5:709f1ad85e97 6 uint8_t mac_addr[6] = {0x00, 0x08, 0xdc, 0x45, 0x56, 0x67};
Ricky_Kwon 5:709f1ad85e97 7 const char ip_addr[] = "xxx.xxx.xxx.xxx";
Ricky_Kwon 5:709f1ad85e97 8 const char mask_addr[] = "xxx.xxx.xxx.xxx";
Ricky_Kwon 5:709f1ad85e97 9 const char gateway_addr[] = "xxx.xxx.xxx.xxx";
Ricky_Kwon 5:709f1ad85e97 10
Ricky_Kwon 5:709f1ad85e97 11 const char* Target_addr = "192.168.0.2";
Ricky_Kwon 5:709f1ad85e97 12 const int Target_port = 22222;
Ricky_Kwon 5:709f1ad85e97 13
Ricky_Kwon 5:709f1ad85e97 14
Ricky_Kwon 3:30b262b6c2f9 15 SPISlave slave(PA_8, PA_7, PA_6, PA_5); // mosi, miso, sclk, ssel
mbed_official 0:466ad3f38b6b 16
mbed_official 0:466ad3f38b6b 17 int main() {
Ricky_Kwon 8:46bd5776b6ae 18
Ricky_Kwon 8:46bd5776b6ae 19 /**(volatile uint32_t *)(0x41001014) = 0x0060100;
Ricky_Kwon 8:46bd5776b6ae 20 *(volatile uint32_t *)(0x41003000) = 0x10;
Ricky_Kwon 8:46bd5776b6ae 21 *(volatile uint32_t *)(0x41003004) = 0x10;
Ricky_Kwon 8:46bd5776b6ae 22 *(volatile uint32_t *)(0x41003008) = 0x10;
Ricky_Kwon 8:46bd5776b6ae 23 *(volatile uint32_t *)(0x41003080) = 0x10;
Ricky_Kwon 8:46bd5776b6ae 24 *(volatile uint32_t *)(0x41003098) = 0x10;*/
Ricky_Kwon 8:46bd5776b6ae 25
Ricky_Kwon 8:46bd5776b6ae 26 int SPI_Data=0;
Ricky_Kwon 8:46bd5776b6ae 27 int SPI_Send_Cnt=0;
Ricky_Kwon 8:46bd5776b6ae 28 int Length=0;
Ricky_Kwon 8:46bd5776b6ae 29 char Eth_Receive_Check_Flag = 1;
Ricky_Kwon 8:46bd5776b6ae 30 char EthTx[1]={0};
Ricky_Kwon 8:46bd5776b6ae 31 char EthRx[256]={0,};
Ricky_Kwon 5:709f1ad85e97 32
Ricky_Kwon 3:30b262b6c2f9 33 printf("SPI to Ethernet Slave\r\n");
Ricky_Kwon 3:30b262b6c2f9 34
Ricky_Kwon 3:30b262b6c2f9 35 /*
Ricky_Kwon 3:30b262b6c2f9 36 * SPI Setting
Ricky_Kwon 3:30b262b6c2f9 37 */
Ricky_Kwon 3:30b262b6c2f9 38 slave.format(8,3);
Ricky_Kwon 3:30b262b6c2f9 39 slave.frequency(1000000);
Ricky_Kwon 5:709f1ad85e97 40 /*
Ricky_Kwon 5:709f1ad85e97 41 * Network Setting
Ricky_Kwon 5:709f1ad85e97 42 */
Ricky_Kwon 5:709f1ad85e97 43 printf("Wait a second...\r\n");
Ricky_Kwon 5:709f1ad85e97 44 EthernetInterface eth;
Ricky_Kwon 5:709f1ad85e97 45 #if DHCP==1
Ricky_Kwon 5:709f1ad85e97 46 printf("Network Setting DHCP\r\n");
Ricky_Kwon 5:709f1ad85e97 47 eth.init(mac_addr);
Ricky_Kwon 5:709f1ad85e97 48 #else
Ricky_Kwon 5:709f1ad85e97 49 printf("Network Setting Static\r\n");
Ricky_Kwon 5:709f1ad85e97 50 eth.init(mac_addr, ip_addr, mask_addr, gateway_addr);
Ricky_Kwon 5:709f1ad85e97 51 #endif
Ricky_Kwon 5:709f1ad85e97 52 eth.connect();
Ricky_Kwon 5:709f1ad85e97 53 printf("IP Address is %s\r\n", eth.getIPAddress());
Ricky_Kwon 3:30b262b6c2f9 54 while(1)
Ricky_Kwon 3:30b262b6c2f9 55 {
Ricky_Kwon 5:709f1ad85e97 56 printf("Check Ethernet Link\r\n");
Ricky_Kwon 5:709f1ad85e97 57 if(eth.link() == true)
Ricky_Kwon 3:30b262b6c2f9 58 {
Ricky_Kwon 5:709f1ad85e97 59 printf("Link up\r\n");
Ricky_Kwon 5:709f1ad85e97 60 break;
Ricky_Kwon 5:709f1ad85e97 61 }
Ricky_Kwon 5:709f1ad85e97 62 }
Ricky_Kwon 8:46bd5776b6ae 63
Ricky_Kwon 5:709f1ad85e97 64 /*
Ricky_Kwon 5:709f1ad85e97 65 * Create Client Socket and Connecting
Ricky_Kwon 5:709f1ad85e97 66 */
Ricky_Kwon 5:709f1ad85e97 67 TCPSocketConnection socket;
Ricky_Kwon 5:709f1ad85e97 68 while(1)
Ricky_Kwon 5:709f1ad85e97 69 {
Ricky_Kwon 5:709f1ad85e97 70 while (socket.connect(Target_addr, Target_port) < 0)
Ricky_Kwon 5:709f1ad85e97 71 {
Ricky_Kwon 5:709f1ad85e97 72 printf("Unable to connect to (%s) on port (%d)\r\n", Target_addr, Target_port);
Ricky_Kwon 5:709f1ad85e97 73 wait(1);
Ricky_Kwon 5:709f1ad85e97 74 }
Ricky_Kwon 5:709f1ad85e97 75 printf("Connected to Server at %s\r\n",Target_addr);
Ricky_Kwon 5:709f1ad85e97 76
Ricky_Kwon 5:709f1ad85e97 77 while(1)
Ricky_Kwon 5:709f1ad85e97 78 {
Ricky_Kwon 8:46bd5776b6ae 79 if(Eth_Receive_Check_Flag==1)
Ricky_Kwon 8:46bd5776b6ae 80 {
Ricky_Kwon 8:46bd5776b6ae 81 printf("a");
Ricky_Kwon 8:46bd5776b6ae 82 Length = socket.receive(EthRx, sizeof(EthRx));
Ricky_Kwon 8:46bd5776b6ae 83 if(Length>0)
Ricky_Kwon 8:46bd5776b6ae 84 {
Ricky_Kwon 8:46bd5776b6ae 85 printf("b");
Ricky_Kwon 8:46bd5776b6ae 86 Eth_Receive_Check_Flag = 0;
Ricky_Kwon 8:46bd5776b6ae 87 }
Ricky_Kwon 8:46bd5776b6ae 88 }
Ricky_Kwon 5:709f1ad85e97 89 if(slave.receive())
Ricky_Kwon 5:709f1ad85e97 90 {
Ricky_Kwon 8:46bd5776b6ae 91 SPI_Data = slave.read();
Ricky_Kwon 8:46bd5776b6ae 92 switch(SPI_Data)
Ricky_Kwon 8:46bd5776b6ae 93 {
Ricky_Kwon 8:46bd5776b6ae 94 case 0x80:
Ricky_Kwon 8:46bd5776b6ae 95 printf("c");
Ricky_Kwon 8:46bd5776b6ae 96 if(!Eth_Receive_Check_Flag)
Ricky_Kwon 8:46bd5776b6ae 97 {
Ricky_Kwon 8:46bd5776b6ae 98 printf("d");
Ricky_Kwon 8:46bd5776b6ae 99 slave.reply(0x80);
Ricky_Kwon 8:46bd5776b6ae 100 }
Ricky_Kwon 8:46bd5776b6ae 101 else
Ricky_Kwon 8:46bd5776b6ae 102 {
Ricky_Kwon 8:46bd5776b6ae 103 printf("e");
Ricky_Kwon 8:46bd5776b6ae 104 slave.reply(0x87);
Ricky_Kwon 8:46bd5776b6ae 105 }
Ricky_Kwon 8:46bd5776b6ae 106 break;
Ricky_Kwon 8:46bd5776b6ae 107 case 0x81:
Ricky_Kwon 8:46bd5776b6ae 108 printf("f");
Ricky_Kwon 8:46bd5776b6ae 109 slave.reply(Length);
Ricky_Kwon 8:46bd5776b6ae 110 break;
Ricky_Kwon 8:46bd5776b6ae 111 case 0x82:
Ricky_Kwon 8:46bd5776b6ae 112 if(SPI_Send_Cnt!=Length)
Ricky_Kwon 8:46bd5776b6ae 113 {
Ricky_Kwon 8:46bd5776b6ae 114 printf("g");
Ricky_Kwon 8:46bd5776b6ae 115 slave.reply(EthRx[SPI_Send_Cnt]);
Ricky_Kwon 8:46bd5776b6ae 116 SPI_Send_Cnt++;
Ricky_Kwon 8:46bd5776b6ae 117 }
Ricky_Kwon 8:46bd5776b6ae 118 else
Ricky_Kwon 8:46bd5776b6ae 119 {
Ricky_Kwon 8:46bd5776b6ae 120 printf("h");
Ricky_Kwon 8:46bd5776b6ae 121 SPI_Send_Cnt = 0;
Ricky_Kwon 8:46bd5776b6ae 122 Eth_Receive_Check_Flag = 1;
Ricky_Kwon 8:46bd5776b6ae 123 }
Ricky_Kwon 8:46bd5776b6ae 124 break;
Ricky_Kwon 8:46bd5776b6ae 125 default:
Ricky_Kwon 8:46bd5776b6ae 126 printf("i");
Ricky_Kwon 8:46bd5776b6ae 127 EthTx[0] = SPI_Data;
Ricky_Kwon 8:46bd5776b6ae 128 socket.send(EthTx, 1);
Ricky_Kwon 8:46bd5776b6ae 129 break;
Ricky_Kwon 8:46bd5776b6ae 130
Ricky_Kwon 8:46bd5776b6ae 131 }
Ricky_Kwon 5:709f1ad85e97 132 }
Ricky_Kwon 3:30b262b6c2f9 133 }
Ricky_Kwon 3:30b262b6c2f9 134 }
mbed_official 0:466ad3f38b6b 135 }