summaryrefslogtreecommitdiffstats
path: root/software/pong3/hello_led.c
blob: 9f472d74ca9ecb1b1306e310aeb21852fa705d75 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
 * 
 * 
 * 
 * 
 */
#include <io.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "system.h"
#include "DM9000A.H"
#include "DM9000A.C"
//#include "sys/alt_irq.h"
#include <../src/alt_irq_register.c>

#if 0
unsigned int rx_len,i,packet_num,rx_cnt,tx_cnt;


#define data_lenght 1468            // Maximun Data lenght 1468 bytes
#define flenght (data_lenght+0x2E)        //Total packet lenght 

 unsigned char SND[flenght]; // Payload buffer
 
 unsigned char RX_DATA[flenght]; // Payload buffer

//-------------------------------------------------------------------------
/* DM9000_init I/O routine */

//-------------------------------------------------------------------------
//-------------------------------------------------------------------------
//-------------------------------------------------------------------------

void UDP_Init(void)
 {              
 unsigned int IPsource_1,IPsource_2,IPsource_3,IPsource_4;
 unsigned int IPdestination_1,IPdestination_2,IPdestination_3,IPdestination_4;
 unsigned int IPchecksum1,IPchecksum2,IPchecksum3,IPchecksum4,IPchecksum5;
 unsigned int Mac_source1, Mac_source2, Mac_source3, Mac_source4, Mac_source5, Mac_source6;
 unsigned int Mac_dest1, Mac_dest2, Mac_dest3, Mac_dest4, Mac_dest5, Mac_dest6;
 unsigned int lenght_h, lenght_l;
 unsigned int  IPlenght_h, IPlenght_l,  IPlenght;
             
 IPsource_1 = 192;        // Assign ie: 192.168.0.44 IP for the CD0 
 IPsource_2 = 168;
 IPsource_3 = 0;
 IPsource_4 = 44;
 
 IPdestination_1 = 192;   // Insert your IP data here
 IPdestination_2 = 168;
 IPdestination_3 = 0;
 IPdestination_4 = 55;

 Mac_dest1 = 0xF4;         // Insert your MAC address data here
 Mac_dest2 = 0x6D;
 Mac_dest3 = 0x04;
 Mac_dest4 = 0x20;
 Mac_dest5 = 0x9F;
 Mac_dest6 = 0xF1;
// Mac_dest1 = 0XFF;         // Insert your MAC address data here
// Mac_dest2 = 0xFF;
// Mac_dest3 = 0xFF;
// Mac_dest4 = 0xFF;
// Mac_dest5 = 0xFF;
// Mac_dest6 = 0xFF;
 Mac_source1 =  0x01;      // Assign an MAC address for DE2
 Mac_source2 =  0x60;
 Mac_source3 =  0x6E;
 Mac_source4 =  0x11;
 Mac_source5 =  0x02;
 Mac_source6 =  0x0F;
 
 lenght_h = ((data_lenght+8) & 0xFF00)>>8; // Convert in H byte and L byte
 lenght_l = ((data_lenght+8) & 0x00FF);

 IPlenght = data_lenght + 8 + 20;     // IP Lenght for IP header
 IPlenght_h = (IPlenght & 0xFF00)>>8; // Convert in H byte and L byte
 IPlenght_l = (IPlenght & 0x00FF);
 // Calculating the IP checksum
 IPchecksum1 = 0x0000C511 + (IPsource_1<<8)+IPsource_2+(IPsource_3<<8)+IPsource_4+
         (IPdestination_1<<8)+IPdestination_2+(IPdestination_3<<8)+(IPdestination_4)+
         (IPlenght_h<<8) + IPlenght_l;
 IPchecksum2 =  ((IPchecksum1&0x0000FFFF)+(IPchecksum1>>16));
 IPchecksum3 = 0x0000FFFF - IPchecksum2;
 IPchecksum4 = (IPchecksum3 & 0xFF00)>>8; 
 IPchecksum5 = (IPchecksum3 & 0x00FF);
 
 unsigned char TXT[flenght] =  { Mac_dest1, Mac_dest2, Mac_dest3, Mac_dest4 ,Mac_dest5, Mac_dest6,
                            Mac_source1, Mac_source2, Mac_source3, Mac_source4, Mac_source5, Mac_source6,
                            0x08, 0x00, 0x45, 0x00, IPlenght_h, IPlenght_l,
                            0x00, 0x00, 0x00, 0x00, 0x80, 0x11,
                            IPchecksum4, IPchecksum5, IPsource_1, IPsource_2, IPsource_3, IPsource_4,
                            IPdestination_1, IPdestination_2, IPdestination_3, IPdestination_4, 0x04, 0x00, 
                            0x04, 0x00, lenght_h, lenght_l, 0x00, 0x00};             

    for (i = 0; i < 42; i++) // Load the TXT[] in the SND (ethernet packet).
     SND[i] = TXT[i];
    
    for (i = 42; i < flenght-4; i++) // generating the data to send.
     SND[i] = i-42;
     
    SND[i++] = 0x35;   // This checksum is not correct... but also the net recieve the packets correctly.
    SND[i++] = 0x15;   // To do, calculate checksum.
    SND[i++] = 0xF0;
    SND[i++] = 0x13;   
    

 }
 
void ethernet_interrupts(void)
{
    
    ReceivePacket(RX_DATA,&rx_len);
    rx_cnt++;
    int j;
    for(j=0;j<rx_len;j++)
    {
        printf("%x ",RX_DATA[j]); 
    }
    printf("\n\n");
} 
 
int main(void)
{
    UDP_Init();
    printf("Working...\n"); 
    msleep(500);
    DM9000_init();//Initialize the DM9000A.
    alt_irq_register( DM9000A_0_IRQ, NULL, (void*)ethernet_interrupts );
    
    rx_cnt = 0;
    tx_cnt = 0;
      while (1)
      {  
        tx_cnt++;
        TransmitPacket(SND,flenght);
        printf("Tx %5d frame\n",tx_cnt);
        printf("Rx %5d frame\n\n",rx_cnt);
        msleep(500);
      }

}
//-------------------------------------------------------------------------


#endif