Gibt es so etwas wie einen Atmega1280 aber schneller? Was ich brauche ist ein externes Memory Interface und möglichst viele IO Pins (ca. 44) mit genügend Flash (das aktuelle Program belegt im Moment 32kbyte Flash) und einem grosszügigen RAM (die aktuelle Anwendung benötigt ca. 5kbyte RAM). Die Eingänge müssen 5V Tolerant sein. Dass das Timing des Externen Memory Interface bei hohen Geschwindigkeiten sportlich ist ist in diesem Fall kein Problem, ich verwende es um als IO Expander Programmierte CPLDs (7ns Propagation) anzusprechen, die sind also noch lange nicht am Anschlag. Im Moment verwende ich den Atmega1280 aber bei gewissen Interrupt Events wären 20-30% mehr Performance sehr hiflreich.
Hi Es gibt lpc546xx haben ein externer Speicher Interface, das mit 100 MHz läuft. M4 180Mhz. der ist 5V tolerant. Wenn's noch schneller sein soll, imx1060 kann 166Mhz und hat sogar einen kleinen PLA drin, evtl braucht man dann den cpld nicht mehr. Der Haken ist, dass es den Chip nur im bga Gehäuse gibt. m7 600Mhz und mehr. aber nur 3.3V, also nix für den TO. Grüße Thorsten
> Im Moment verwende ich den Atmega1280 aber bei gewissen Interrupt Events > wären 20-30% mehr Performance sehr hiflreich. Das erreicht man aber durchaus durch Optimierung des eigenen Programmcodes. Sobald du ein bisschen mehr machst als ein Flag im Interrupt zu manipulieren, wird relativ viel code produziert (Register sichern,push und Pop aufm Stack etc.), welcher die Interruptlaufzeit dann massiv erhöht. Zeig doch mal so ein Interruptcode...
STM32 hat 5V Tolerante Eingänge (steht im Datenblatt welche). Allerdings würde ich hier statt Speicherinterface-Aufwand eher Aufwand in Schutzschaltungen oder externe Levelshifter investieren... Es macht doch in Zeiten von ARM Cortex-M wenig Sinn wegen ein paar KB externen Speicher anzubinden. So ziemlich jeder ARM Cortex hat mehr RAM als Du brauchst - nimm einfach einen mit 32 - 64K RAM und 256K Flash und gut ist.
Reicht Dir denn kein Controller mit mehr internem Speicher. Die Zeiten von 2K internem RAM sind mittlerweile vorbei.
Datargnan schrieb: > > Es macht doch in Zeiten von ARM Cortex-M wenig Sinn wegen ein paar KB > externen Speicher anzubinden. Will der TE ja eigentlich auch nicht. Die ganze Frage ist mal wieder ein schönes Beispiel für ein XY-Problem. Was der TE eigentlich braucht, ist ein schnelles, paralleles Interface. Zur Zeit mißbraucht er das Businterface eines ATMega1280 für diesen Zweck. Und weil dieses Interface ursprünglich für den Anschluß von externem Speicher vorgesehen ist, glaubt er jetzt, er müsse nach einem Speicherinterface fragen. Was natürlich Blödsinn ist. Die größeren Cortexe haben reihenweise Speicherinterfaces für bspw. SDRAM. Nur nützen die ihm gar nichts.
Axel S. schrieb: > Was natürlich Blödsinn ist. Die größeren Cortexe haben reihenweise > Speicherinterfaces für bspw. SDRAM. Nur nützen die ihm gar nichts. Die können i.d.R. (bei STM32) auch SRAM und normale parallele Busteilnehmer.
Hier was in so einem interrupt etwa passiert
1 | ;-------------------------------------------------------------------------- |
2 | ; |
3 | ; UART 2 - SLUB |
4 | ; |
5 | rxc2_isr: ; USART2 = SLUB |
6 | ; |
7 | in isreg, SREG ; Save Status |
8 | lds qbushigh, UCSR2A ; Get Status |
9 | lds qbuslow, UDR2 ; And Character |
10 | lds itemp, rcsrlb ; Get RCSR |
11 | sbrc itemp, 7 ; Is there still a character in RBUF |
12 | sbr qbushigh, (1<<DOR2) ; if yes we have a data overrun |
13 | sbr itemp, (1<<7) ; Set DR |
14 | sts rbufhb, qbushigh ; Store RBUF |
15 | sts rbuflb, qbuslow |
16 | sts RCSRB, itemp ; Set DR |
17 | sts rcsrlb, itemp |
18 | out SREG, isreg ; |
19 | reti |
20 | ; |
21 | ; Read RCSR |
22 | ; |
23 | readrcsrb: |
24 | lds qbuslow, rcsrlb |
25 | sts DATAL, qbuslow |
26 | sts DATAH, zero ; Upper byte always read as zero |
27 | pop zh |
28 | pop zl |
29 | lds itemp, CLRINT0 |
30 | out SREG, isreg |
31 | reti |
32 | |
33 | csr_isr: |
34 | in isreg, SREG |
35 | push zl |
36 | push zh |
37 | lds zl, STATUS |
38 | bst zl, LB ; Remember if lower byte is not written |
39 | andi zl, 0x3F |
40 | clr zh |
41 | subi zl, low(-DATIOtable) |
42 | sbci zh, high(-DATIOtable) |
43 | ijmp |
44 | |
45 | |
46 | DATIOtable: |
47 | . |
48 | . |
49 | |
50 | rjmp readrcsrb |
51 | rjmp readrbufb |
52 | rjmp readxcsrb |
53 | rjmp readxbufb |
54 | |
55 | . |
56 | . |
Das ganze kommuniziert mit dem Q-Bus einer PDP-11 und emuliert nicht mehr verfügbare Hardware. Zwischen dem Bus und dem MCU sitzt das CPLD und die Bus Transceiver. Das externe Memory Interface benutze ich weil da die Umschaltung der Datenrichtung des Datenports integriert ist und ich so einfach mit dem CPLD Daten austauschen kann, das spart extrem viele Pins zwischen CPLD und MCU und entsprechend auch IO Pins auf dem MCU. Ich glaube einige PIC haben für so etwas einen Parallel Slave Port. Ein weiterer Vorteil des externen Memory Interface ist, dass es eine Ausführungseinheit bildet. D.h. Lesen und Schreiben von CPLD register können nicht durch einen Interrupt unterbrochen werden. Wenn ich das alles von Hand mache (Port Richtung ändern, Register Adresse setzen, Daten austauschen) dann muss ich immer die Interrupts abschalten wenn ich im Hauptprogram CPLD register lesen oder schreiben will. Externen Speicher will ich eben nicht anschliessen. Der Atmega1280 hat mit 8kbyte internem RAM mehr als genug für meine Anwendungen. Wie gesagt, es funktioniert im Moment alles Bestens. Der Nachteil ist eher, dass ich mehrere Hardwareversionen habe, je nach dem welches Interface emuliert wird. Es wäre nett wenn ich ein universelles Interface hätte, das ich dann einfach durch umprogrammieren der MCU in die verschiedenen Interfacekarten "verwandeln" kann. Aber universeller bedeutet meist auch längere Interrupt Routinen und auch sonst etwas mehr Software overhead. Eine kurze Abschätzung hat ergeben, dass ich eben gar nicht so viel mehr Performance brauche (eben diese 20-30%).
zl und zh in einem Doppelregister zu sichern spart 2x mal push und 2 x pop.
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.