SPI to Ethernet Slave

Dependencies:   WIZnetInterface mbed

Fork of SPI_HelloWorld_Mbed by mbed official

main.cpp

Committer:
Ricky_Kwon
Date:
2016-03-10
Revision:
8:46bd5776b6ae
Parent:
7:b09eade395f7
Child:
9:32e3edb40824

File content as of revision 8:46bd5776b6ae:

#include "mbed.h"
#include "EthernetInterface.h"

#define DHCP 1

uint8_t mac_addr[6] = {0x00, 0x08, 0xdc, 0x45, 0x56, 0x67};
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 = 22222;


SPISlave slave(PA_8, PA_7, PA_6, PA_5); // mosi, miso, sclk, ssel
 
int main() {
    
    /**(volatile uint32_t *)(0x41001014) = 0x0060100;
    *(volatile uint32_t *)(0x41003000) = 0x10;
    *(volatile uint32_t *)(0x41003004) = 0x10;
    *(volatile uint32_t *)(0x41003008) = 0x10;
    *(volatile uint32_t *)(0x41003080) = 0x10;
    *(volatile uint32_t *)(0x41003098) = 0x10;*/
    
    int SPI_Data=0;
    int SPI_Send_Cnt=0;
    int Length=0;
    char Eth_Receive_Check_Flag = 1;
    char EthTx[1]={0};
    char EthRx[256]={0,};

    printf("SPI to Ethernet Slave\r\n");
  
    /*
    * SPI Setting
    */
    slave.format(8,3);
    slave.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)
        {
            if(Eth_Receive_Check_Flag==1)
            {
                printf("a");
                Length = socket.receive(EthRx, sizeof(EthRx));
                if(Length>0)
                {
                    printf("b");
                    Eth_Receive_Check_Flag = 0;                       
                }
            }
            if(slave.receive())
            {
                SPI_Data = slave.read();
                switch(SPI_Data)
                {
                    case 0x80:
                        printf("c");
                        if(!Eth_Receive_Check_Flag)
                        {
                            printf("d");
                            slave.reply(0x80);
                        }
                        else
                        {
                            printf("e");
                            slave.reply(0x87);
                        }
                        break;
                    case 0x81:
                        printf("f");
                        slave.reply(Length); 
                        break;
                    case 0x82:
                        if(SPI_Send_Cnt!=Length)
                        {
                            printf("g");
                            slave.reply(EthRx[SPI_Send_Cnt]); 
                            SPI_Send_Cnt++;
                        }
                        else
                        {
                            printf("h");
                            SPI_Send_Cnt = 0;
                            Eth_Receive_Check_Flag = 1;                      
                        }
                        break;
                    default:
                        printf("i");
                        EthTx[0] = SPI_Data;
                        socket.send(EthTx, 1); 
                        break;
                            
                }
            }
        }
    }
}