Hallo zusammen,
ich habe mir das ENC28J60-H von Olimex gekauft. Habe das ganze dann an
meinen HCS12 (Dragon12-Board) angeschlossen.
Wenn ich ein Ethernet-Kabel vom ENC28J60 zum PC lege, geht die grüne LED
an und die Orange blinkt gelegentlich (soweit so gut).
Wenn ich nun über SPI Daten an den Controller schicke gehen beide LEDs
aus und der PC meldet, dass kein Ethernetkabel mehr angeschlossen sei.
Handelt es sich hier um einen Fehler in der Hardware oder doch eher in
der Software?
Mein SPI Treiber:
1 | void initSPI(void){
|
2 |
|
3 |
|
4 | uint i;
|
5 |
|
6 | DDRS = DDRS | 0xE0; /* SS, SCLK, MOSI outputs */
|
7 | WOMS = 0;
|
8 |
|
9 |
|
10 | SPI0CR1 = 0x56;
|
11 |
|
12 | SPI0CR2 = 0x18;
|
13 | SPI0BR = 0x00;
|
14 |
|
15 |
|
16 | i = SPI0SR;
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | }
|
22 |
|
23 | uint SPIWrite(uchar * ptrBuffer, uint ui_Len)
|
24 | {
|
25 | uint i,stat;
|
26 |
|
27 | stat= SPI0SR;
|
28 |
|
29 | if (ui_Len == 0) // no data no send
|
30 | return 0;
|
31 |
|
32 | for (i=0;i<ui_Len;i++)
|
33 | {
|
34 | SPI0DR= *ptrBuffer++; // load spi tx reg
|
35 | while(!(SPI0SR)){} // wait for transmission to complete
|
36 | }
|
37 |
|
38 | return i;
|
39 | }
|
40 |
|
41 |
|
42 |
|
43 | uint SPIRead(uchar * ptrBuffer, uint ui_Len)
|
44 | {
|
45 | uint i,stat;
|
46 |
|
47 | stat= SPI0SR;
|
48 |
|
49 | for (i=0;i<ui_Len;i++)
|
50 | {
|
51 | SPI0DR= 0xff; // dummy transmit byte
|
52 |
|
53 | while(!(_SPI0SR.Bits.SPTEF)){}
|
54 |
|
55 | *ptrBuffer++ = SPI0DR; // read data from SPI data reg, place into buffer
|
56 | }
|
57 | return i;
|
58 | }
|
danke im vorraus