Forum: Mikrocontroller und Digitale Elektronik ARM Cortex M0+ - ATSAMD21G18A USART, USB und I2C parallel in Echtzeit laufen lassen.


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Ronald (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

ich versuche eine Software zu programmieren, die folgendes schafft.

Readout at 3 slave devices on one I2C @100 (14byte + 6byte + 6byte)
Receive on USART a datastream at 1Hz (stream Duration 200ms)
Do some processing.
Send out data over USB (CDC) out at 10Hz. (ca. 10byte)
This should happen in real time.

Unerfreulicherweise blockieren sich USB und USART gegenseitig, sodass es 
mir bisher nur gelang I2C und USART oder I2C und USB zu betreiben aber 
nicht alle drei Schnittstellen.

Aus diesem Grund die folgenden Fragen:

- Ist es überhaupt möglich USART und USB parallel zu betreiben, bzw. 
macht dies Sinn, da ja beide Schnittstellen relativ hohe Datenraten 
ermöglichen. Ist dies vielleicht parallel zu viel, sodass dies nicht 
gescheduled werden kann.
- Ich habe bereits in betracht gezogen die DMA für I2C und USART zu 
nutzen, allerdings macht dies keinen Sinn.

Hat jemand Erfahrung mit derartigen Use Cases? Ist es möglicherweise 
nötig einen DUAL CORE Prozessor zu nutzen?

Grüße

Ron

von S. R. (svenska)


Bewertung
1 lesenswert
nicht lesenswert
Ronald schrieb:
> Unerfreulicherweise blockieren sich USB und USART gegenseitig, sodass es
> mir bisher nur gelang I2C und USART oder I2C und USB zu betreiben aber
> nicht alle drei Schnittstellen.

Inwiefern blockieren die sich?
Erklär das mal bitte genauer.

Es kann sein, dass die internen Busse nicht schnell genug sind, aber 
selbst dann würde das System funktionieren - nur eben zu langsam. Daher 
vermute ich erstmal ins Blaue, dass dein Code schuld ist. Ist der Chip 
selbst schuld, sollte das in Datenblatt oder Errata stehen.

von Gerd E. (robberknight)


Bewertung
0 lesenswert
nicht lesenswert
Ronald schrieb:
> Hat jemand Erfahrung mit derartigen Use Cases? Ist es möglicherweise
> nötig einen DUAL CORE Prozessor zu nutzen?

Das riecht ein bischen nach einem Problem, bei dem ein RTOS helfen 
könnte. Damit hast Du mehrere Threads, die dann entsprechend priorisiert 
werden können. Wenn gerade kein Byte vom UART kommt, legt sich der 
UART-Thread schlafen und USB, I2C etc. kommen zum Zug.

Ich verwende für sowas gerne ChibiOS
http://www.chibios.org/dokuwiki/doku.php

Die beste Einführung dafür dürfte das hier sein:
http://www.chibios.org/dokuwiki/doku.php?id=chibios:book:start

Nachteil bei Dir dürfte sein, daß das integrierte ChibiOS-HAL noch keine 
Unterstützung für die Peripherie Deines ATSAMD21 hat. Der Cortex-M0-Kern 
ist aber unterstützt.

von Jim M. (turboj)


Bewertung
0 lesenswert
nicht lesenswert
Ronald schrieb:
> Unerfreulicherweise blockieren sich USB und USART gegenseitig,

Wieso? Notwendig ist das jedenfalls nicht.

Ronald schrieb:
> Hat jemand Erfahrung mit derartigen Use Cases?

Mache ich hier auf einem LPC1768 bei so ~29,5 MHz, und der wäre da noch 
nicht ernsthaft ausgelastet.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.