Beim MSP430, der angeblich ein 16-Bit-Mikrocontroller ist, ist mir aufgefallen, daß es - keine 16-Bit I/O-Register gibt und die I/O-Register auch nicht als 16-Bit-Register verwendet werden können, weil die gleichen Register benachbarter Ports nicht benachbart sind. Dies ist besonders ärgerlich, da für einen I/O-Zugriff 4 CPU-Takte nötig sind, also für einen (emulierten) 16-Bit-Port-Zugriff 8 CPU-Takte erforderlich sind! Zudem muß ich für die emulierten 16-Bit-Port-Zugriffe Unions verwenden oder die 16 Bits anders in zwei mal 8 Bit zerlegen. - Auch viele andere Register haben nur 8 Bit, was beim Programmieren sehr stört, da z. B. statt Feldern mit uint16_t Unions mit uint16_t und uint8_t genommen werden müssen und statt einem 16-Bit-Zugriff zwei 8-Bit Zugriffe vorgenommen werden müssen. Dies ist beispielsweise bei den Empfangs- und Sende-Registern für die UARTs der Fall, so dass die UART-IRQ-Frequenz beim MSP430 doppelt so hoch ist, wie eigentlich nötig und die Datenübertragung über die UARTs unnötig CPU-Intensiv macht. Je genauer ich mir den MSP430 ansehe, desto mehr erscheint er als 8-Bitter und daß TI den MSP430 als 16-Bit MC verkauft ist eigentlich Betrug! Gibt es denn keine reinen 16/32/64-Bit Mikrocontroller?
Beim UART ergibt ein 16 Bit-Register wirklich nicht viel Sinn, schließlich erfolgt die Übertragung in einzelnen Bytes, nicht in 16 Bit-Worten. Wo du den "Betrug" siehst kann ich nicht ganz nachvollziehen.
Die C167er von Infineon bzw. ursprünglich Intel sind 16bitter, und zwar durch und durch! Ich hab auf den Dingern gelernt, allerdings gibt es die nicht bei Conrad und Reichelt zu kaufen ... schade eigentlich. Bei Phytec (www.phytec.de) kann man Development-Boards kaufen, da sind dann auch sämtliche Handbücher und Software dabei, aber für einen stolzen Preis von um die 200-300 EUR. Die C167er kenn ich vor allem bei Siemens VDO Motorensteuerungen und solchen Dingen.
@Andreas Schwarz: Wenn man 16 Bit senden will kann man einfach in ein 16-Bit-Register schreiben (das dann gesendet wird) und wenn man nur 8 Bit senden will, kann man das mit einem separaten 8-Bit-Register machen; das Senden ist immer trivial! Beim Empfangen ist es nicht viel komplizierter: Wenn nur 16 empfangene Bits einen IRQ auslösen, gibt jeder Rx-IRQ zwei Byte im Empfangs-Register (das 16 bit breit ist) und über ein spezielles Empfangs-Register kann abgefragt werden, ob denn schon ein einzelnes Byte empfangen wurde (das natürlich auch einzeln ausgelesen werden kann). Wo also soll beim UART ein Problem sein 16 Bit zu senden oder zu empfangen? Schließlich machen Prozessoren wie die Alphas nur 64-Bit-Zugriffe! Rein technisch gibt's überhaupt keinen Grund bei UARTs nur 8-Bit-Register zu verwenden. @Felix Mellmann: Haben diese MCs denn auch bei den UARTs 16-Bit-Register oder müssen da die Bytes noch einzeln durch die Gegend geschoben werden?
"Schließlich machen Prozessoren wie die Alphas nur 64-Bit-Zugriffe!" Stimmt so nicht. 32bit war immer schon möglich, so fundamentalistisch war DEC denn doch nicht. 8bit und 16bit waren zunächst nicht enthalten, wurden aber später doch wieder hinzugefügt, weil's eben ohne schlecht ging. "Rein technisch gibt's überhaupt keinen Grund bei UARTs nur 8-Bit-Register zu verwenden." Aber dann bitte das Datenregister in allen 3 Varianten. Also 16bit low-byte-first, 16bit high-byte-first und wenn partout nur ein Byte zu übertragen ist dann muss auch 8bit sein. Ich habe noch nicht einen einzigen USART gesehen, dessen Transferregister mehr als 8bit Breite hat. Nicht mal dann, wenn er 9bit kann ;-). Die Steuerregister ok, aber bein Transfer ist es einfach Unfug. Wenn dir die immens schnellen Transfers vom UART auf den Wecker gehen, dann such die einen Kiste mit DMA. NB: Einer der ersten echten 16bit Mikros hatte ein 1bittig arbeitendes I/O-System.
Aha, aber wie kann man mittels DMA aus einem Byte-UART einen Word-UART machen und bekommt man damit auch ein 16-Bit-I/O-Register aus zwei 8-Bit-I/O-Registern emuliert? Die neueren MSP430 haben ja DMA.
Verzeihung, aber hast Du irgendeinen blasse Ahnung was DMA ist? Mit DMA spielt das Datentransfer-Register des UART keine Rolle mehr, es wird ein Block aus Daten im RAM automatisch übertragen. Und bei den dabei üblichen Transferraten kann es dir reichlich egal sein, ob das nun byte- oder wortweise passiert. Die Steuerregister werden dadurch zwar auch nicht breiter, aber was soll's. Lass sie so wie sie sind. Der MSP430 ist nicht deshalb 16bittig, damit Du endlich 16bittige I/O zur Verfügung hast, sondern damit sich ein C-Compiler mit seiner inhärenten 16bit Arbeitsweise nicht dauernd mit 2 8bit-Teiloperationen abquälen muss. Ansonsten such die ein geeignetes FPGA und bau dir deinen eigenen Mikrocontroller. Heutzutage keine Problem mehr.
"Gibt es denn keine reinen 16/32/64-Bit Mikrocontroller?" Es gibt keine idealen MCs, alle haben Macken ! Selbst bei den ARMs gibt es 8-Bittige Register, wo man sich fragt, warum nicht 16 oder 32 Bit breit. Es ist müßig, Macken zu hinterfragen. Entweder man lebt damit oder nimmt einen anderen MC mit anderen Macken. Peter
Anmerkungen: der C165 hat einen SSC (synchrone Schnittstelle) welche so Programmiert werden kann, das Sie - asynchron Funktioniert - Datenbit-Anzahl zwischen 2 und 16 ausgibt - das Empfangs- (SSCRB) und Senderegister (SSCTB) 16bittig sind - Vollduplex-Operation möglich aber schwierig Ach ja, er hat natürlich auch eine asynchrone Schnittstelle (ASC0) (Ich liebe und haße Ihn, er kann viel aber ist teilweise auch kompliziert) 16Bit-Prozessoren sind manchmal auch ein Fluch wert, Bsp: C16x, bei Wortzugriffen auf UNgerade Adresse gibts einen Trap. Gruss
"bei Wortzugriffen auf UNgerade Adresse gibts einen Trap" Fand ich anno 68000 meistens ganz praktisch. Gibt einen sehr direkten Hinweis auf Programmfehler, und oft dort wo er steckt, nicht erst wesentlich später.
@A.K. stimmt, bei manchen kamen dann "Bomben" (Atari) oder "Guru Meditations" (Amiga) auf den Bildschirm grins :-)
im Blockschaltbild des der MSP430 kann man sehr schön sehen das es einen 16Bit- und einen 8Bit-Datenbus gibt. Auch was daran angeschlossen ist.
Die I/O-Ports des M16C lassen sich 16-bittig ansprechen. Das gleiche gilt für die Datenrichtungsregister. Die UART Send- und Receive-Register sind zwar 16 bit breit, allerdings wird nur Bit 0 des MSB genutzt (für 9-Bit Protokolle).
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.