1 | int Enc28j60Heartbeat(void)
|
2 | {
|
3 | LED_RT(0);
|
4 | DESELECT();
|
5 | //Siehe Seite 75 im Datenblatt
|
6 | Enc28j60WriteReg(BANKX_ECON1, Enc28j60ReadReg(BANKX_ECON1) & 0xD3);
|
7 | Enc28j60SwitchBank(BANK0);
|
8 | Enc28j60WriteReg(BANK0_EDMASTL, 0x00);
|
9 | Enc28j60WriteReg(BANK0_EDMASTH, 0x00);
|
10 | Enc28j60WriteReg(BANK0_EDMANDL, 0xFF);
|
11 | Enc28j60WriteReg(BANK0_EDMANDH, 0x1F);
|
12 | Enc28j60WriteReg(BANK0_ERXNDL, 0xFF);
|
13 | Enc28j60WriteReg(BANK0_ERXNDH, 0x1F);
|
14 | Enc28j60SetMaskReg(BANKX_ECON1, (1<<BANKX_ECON1_CSUMEN));
|
15 | //Enable Test mode, select the desired test, select the desired port configuration for the test.
|
16 | //Autofill normal Port Conf
|
17 | Enc28j60SwitchBank(BANK3);
|
18 | //Set TME
|
19 | Enc28j60SetMaskReg(BANK3_EBSTCON, (1<<1));
|
20 | //Set TMSEL0
|
21 | Enc28j60SetMaskReg(BANK3_EBSTCON, (1<<2));
|
22 | //Set TMSEL1
|
23 | Enc28j60ClearMaskReg(BANK3_EBSTCON, (1<<3));
|
24 | //Set PSLE
|
25 | Enc28j60ClearMaskReg(BANK3_EBSTCON, (1<<4));
|
26 | //START Set BIST
|
27 | Enc28j60SetMaskReg(BANK3_EBSTCON,(1<<0));
|
28 | Enc28j60SetMaskReg(BANKX_ECON1, (1<<BANKX_ECON1_DMAST));
|
29 |
|
30 | starttime();
|
31 | while( (0x20 & Enc28j60ReadReg(BANKX_ECON1)) != 0x20)
|
32 | {
|
33 | //mindestens 100ms
|
34 | if(gettime() >= 100)
|
35 | {
|
36 | //Fehler
|
37 | LED_RT(1);
|
38 | Enc28j60Reset();
|
39 | stoptime();
|
40 | cleartime();
|
41 | return 2;
|
42 | }
|
43 | }
|
44 |
|
45 | //Berechnung fertig
|
46 | Enc28j60SwitchBank(BANK0);
|
47 | uint8_t edmacsl = Enc28j60ReadReg(BANK0_EDMACSL);
|
48 | uint8_t edmacsh = Enc28j60ReadReg(BANK0_EDMACSH);
|
49 | Enc28j60SwitchBank(BANK3);
|
50 | uint8_t ebstcsl = Enc28j60ReadReg(BANK3_EBSTCSL);
|
51 | uint8_t ebstcsh = Enc28j60ReadReg(BANK3_EBSTCSH);
|
52 | if( edmacsl == ebstcsl && edmacsh == ebstcsh)
|
53 | {
|
54 | //Fehlerfrei
|
55 | stoptime();
|
56 | cleartime();
|
57 | return 0;
|
58 | }
|
59 | else
|
60 | {
|
61 | //Fehler
|
62 | Enc28j60Reset();
|
63 | stoptime();
|
64 | cleartime();
|
65 | return 1;
|
66 | }
|
67 | }
|