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!
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.
DMA = der Datentransfer geschieht ohne Zuhilfenahme des Prozessors der kann derweil was anders machen (Tetris spielen). Optional = Du kannst dich per interupt benachrichtigen lassen, ODER du kannst einfach regelmäßg nachschauen ob was nuees da ist/gesendet werden kann.
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?
Sag doch einfach mal was dir konkret sorgen macht. Von der Prozessorseite her dauert das Empfangen von Seriellen Daten und Ethernet so laaaaaaaaange das er das auch nacheinader machen kann ohne das was passiert.
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
Hallo, kann mir bitte jemand dabei helfen, wie kann man berechnen wielange ein ARM7TDMI braucht um einen Programmsegment auszuführen.Gibt es vielleicht irgendwo einen Tutorial dazu? Vielen Dank
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.
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?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.