2.Frage zu Ethernet-System von LPC2468

Gast #825783
Lesenswert?

Hallo,

da der LPC2468 ein eingenen DMA, SRAM-Buffer und AHB Bus
besitzt, wird der Prozessor minimal belastet, was ich nicht verstehe
ist, der Prozessor wird doch jedesmal mit Interrupt benachrichtigt, wenn
es Daten Vorliegen oder nicht, das ist doch eine Belastung oder?
Außerdem ist im Datenblatt zu finden, dass die Benachrichtigung durch
Interrupt beim Senden oder Empfangen der Ethernet-Daten Optional ist,
gibt es noch eine andere Art der Benachrichtigung?

Andere Frage :Bei der Umwandlung Seriel/Ethernet, welche Faktoren müssen
berücksichtigt werden, damit sowohl Ethernet-Daten als auch
Serielle-Daten nicht verloren gehen, und welche Einschränkungen gibt es
dabei(Interupt-latenz, Baudrate der serielle Schnittstelle..)?

Vielen Dank!
Gast #826057
Lesenswert?

Wie wird der uC von DMA-Controller benachrichtigt das es Ethernet-Daten 
gibt die bearbeitet werden müssen, und umgekehrt: wie sendet der uC 
seine Daten über DMA?

Diese Beide Fragen machen mich verrückt, vor allem weil ich in einem 
Ethernet-Treiber, der DMA benutzt, nicht finde, wo ein Interrupt 
installiert ist, und weil im Datenblatt steht das ein Interrupt optional 
ist.
Gast #826081
Lesenswert?

Ok, nehmen wir mal an der Prozessor bearbeitet gerade eine ISR von einer 
seriellen Schnittstelle, und in dem Moment wird ein Paket in Ethernet 
Buffer empfangen, das heisst man muss gewährleisten, dass der Prozessor 
genug Zeit hat um nachzuschuen ob Ethernet-Pakete vorliegen und dabei 
darf keine serielle Daten verloren gehen, ist das richtig?
Gast #826143
Lesenswert?

Was mir sorger macht ist, dass ich nicht vorhersehen kann wielange der 
Prozessor braucht bis er eine ISR bearbeitet hat, als Beispiel diese 
ISR:
1
void CAN1_ISR_Rx(void) 
2
{
3
  static unsigned int *pDest;
4
  
5
  // initialize destination pointer
6
  pDest = (unsigned int *) &(mRxCAN[us_mRxIN]);
7
  
8
  *(pDest++) = CAN1RFS;  // Frame
9
  *(pDest++) = CAN1RID; // ID    
10
  *(pDest++) = CAN1RDA; // Data A
11
  *(pDest++) = CAN1RDB; // Data B
12
  
13
  us_mRxIN++;
14
  if (us_mRxIN >= MAX_QUEUE )
15
  {
16
    us_mRxIN = 0;
17
  }
18
  
19
  CAN1CMR = RELEASE_RECV_BUF; 
20
}
21

22

23
void CAN_Handler(void) 
24
{    
25
 
26
  CAN1_ISR_Rx();
27
  
28
  VICVectAddr = 0;    /* Acknowledge Interrupt */
29
  return;
30
}
Wie kann ich jetzt berchnen wie lange er dafür braucht, z.B bei 500KBaud 
wenn der CAN-Controller mit 18Mhz getaktet wird.

Danke
#829987
Lesenswert?

Joe wrote:

> kann mir bitte jemand dabei helfen,  wie kann man berechnen wielange ein
> ARM7TDMI braucht um einen Programmsegment auszuführen.

Der mit grossem Abstand einfachste Weg: nachmessen. Wenn's ein LPC2000 
ist, dann hat der netterweise 32bit Timer mit voller Taktrate und mit 
etwas Glück ist mindestens einer davon noch frei (z.B. der PWM-Timer).

Exakt berechnen (lies: nachzählen) wird "etwas" aufwendig, weil ein ARM7 
zwar eine recht einfache Pipeline hat, aber dann doch noch ein paar 
Feinheiten wie Wartezyklen bei nichtsequentiellem Zugriff, diverse 
Puffer, Bussysteme unterschiedlicher Geschwindigkeit usw.
Gast #830024
Lesenswert?

Ich will das nur ungefähr wissen, mit dem Timer ist das eine nette Idee, 
aber sagen wir mal ich starte den Timer, wenn ich im ISR eintrette und 
stoppe ihn, wenn ich fertig damit bin, dieses hin und her zum und von 
Timer wird auch dazu berechnet oder nicht?

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