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


von Ronald (Gast)


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)


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)


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)


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.

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.