LPCOpen lwip lpc1768 AHB Schreiben

OP #4520353
Lesenswert?

Hallo,

ich versuche gerade das lpcopen echo server example auf meinem lpc1768 
zum laufen zu bekommen. Als dev Board habe ich ein mini-dk2 welches den 
gleichen ethernet phy lan8720a wie auf dem NXP_LPCXPRESSO board hat.

Mein Projekt habe ich soweit aufgesetzt und der compiler laeuft auch 
durch.

Ich habe jetzt nach und nach die funktionen zum Initialisieren von lwip 
in der main hinzugefuegt.

Nachdem ich das hinzugefuegt habe ging meine Systick LED nicht mehr...
1
netif_add(&lpc_netif, &ipaddr, &netmask, &gw, NULL, lpc_enetif_init, ethernet_input);

Ich habe mich auf die Suche gemacht...
lpc_enetif_init -> low_level_init -> Chip_ENET_Init(LPC_ETHERNET, true)

Hier drin wird der Peripherial Clock gesetzt und resetENET aufgerufen.
So und danach wird das pENET struct beschrieben ... genau da 
verabschiedet sich das Programm.
1
void Chip_ENET_Init(LPC_ENET_T *pENET, bool useRMII)
2
{
3
  Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_ENET);
4
  resetENET(pENET);
5

6
  /* Initial MAC configuration for  full duplex,
7
     100Mbps, inter-frame gap use default values */
8
  pENET->MAC.MAC1 = ENET_MAC1_PARF;
9
  pENET->MAC.MAC2 = ENET_MAC2_FULLDUPLEX | ENET_MAC2_CRCEN | ENET_MAC2_PADCRCEN;
10

11
  Board_LED_Set(LEDS_LED1, 0);
12

13
  if (useRMII) {
14
    pENET->CONTROL.COMMAND = ENET_COMMAND_FULLDUPLEX | ENET_COMMAND_PASSRUNTFRAME | ENET_COMMAND_RMII;
15
  }
16
  else {
17
    pENET->CONTROL.COMMAND = ENET_COMMAND_FULLDUPLEX | ENET_COMMAND_PASSRUNTFRAME;
18
  }
19

20
  pENET->MAC.IPGT = ENET_IPGT_FULLDUPLEX;
21
  pENET->MAC.IPGR = ENET_IPGR_P2_DEF;
22
  pENET->MAC.SUPP = ENET_SUPP_100Mbps_SPEED;
23
  pENET->MAC.MAXF = ENET_ETH_MAX_FLEN;
24
  pENET->MAC.CLRT = ENET_CLRT_DEF;
25

26
  /* Setup default filter */
27
  pENET->CONTROL.COMMAND |= ENET_COMMAND_PASSRXFILTER;
28

29
  /* Clear all MAC interrupts */
30
  pENET->MODULE_CONTROL.INTCLEAR = 0xFFFF;
31

32
  /* Disable MAC interrupts */
33
  pENET->MODULE_CONTROL.INTENABLE = 0;
34

35
}

Ich habe mal geschaut wo hin dieser pointer zeigt.
1
/* AHB peripheral */
2
#define LPC_ENET_BASE             0x50000000

Das ist laut UM10360.pdf auch voellig richtig. Leider weis ich nicht 
warum ich da nichts schreiben darf :(
OP #4520403
Lesenswert?

Genau das was du gesagt hast ... SYSCTL_CLOCK_ENET = 30
1
/* Enables power and clocking for a peripheral */
2
void Chip_Clock_EnablePeriphClock(CHIP_SYSCTL_CLOCK_T clk) {
3
  uint32_t bs = (uint32_t) clk;
4

5
#if defined(CHIP_LPC40XX)
6
  if (bs >= 32) {
7
    LPC_SYSCTL->PCONP1 |= (1 << (bs - 32));
8
  }
9
  else {
10
    LPC_SYSCTL->PCONP |= (1 << bs);
11
  }
12
#else
13
  LPC_SYSCTL->PCONP |= (1 << bs);
14
#endif
15
}

und ein
1
LPC_SYSCTL->PCONP & (1 << 30);

Zeigt auch dass dies geschehen ist.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren