Forum: Mikrocontroller und Digitale Elektronik Gibt es reine 16-Bit-MCs?


von Rolf F. (Gast)


Lesenswert?

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?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

von Felix Mellmann (Gast)


Lesenswert?

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.

von Rolf F. (Gast)


Lesenswert?

@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?

von A.K. (Gast)


Lesenswert?

"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.

von Rolf F. (Gast)


Lesenswert?

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.

von A.K. (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

"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

von Thomas S. (tstuetz)


Lesenswert?

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

von A.K. (Gast)


Lesenswert?

"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.

von Thomas S. (tstuetz)


Lesenswert?

@A.K. stimmt, bei manchen kamen dann "Bomben" (Atari) oder "Guru
Meditations" (Amiga) auf den Bildschirm grins :-)

von Lanius (Gast)


Lesenswert?

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.

von Marko B. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.