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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.