Question:
À quoi sert l'interruption UART TX?
user129900
2016-11-22 03:29:16 UTC
view on stackexchange narkive permalink

Je sais que l'interruption RX est évidemment utilisée pour sauver l'interrogation, mais pourquoi celle TX aussi?

Même raison.Vous envoyez souvent un long message un personnage à la fois.
Le code qui ne doit pas faire grand chose d'autre peut bloquer la transmission réelle.Un code plus efficace peut drainer un tampon logiciel dans l'interruption.Pourtant, un code plus sophistiqué sur le matériel qui le prend en charge peut configurer un moteur DMA pour pomper le transfert sans distraire le processeur d'un travail plus important, bien que les débits en bauds série soient souvent assez lents en termes de MCU, ce qui n'est pas toujours important.
Si vous demandez une interruption UART TX sur un type particulier d'appareil, veuillez publier un lien vers sa fiche technique.
L'interruption que d'autres ont mentionnée signale qu'il y a un espace tampon disponible dans l'uart pour plus de données de transmission.Le tampon peut avoir une longueur d'un ou plusieurs octets selon le matériel uart.Il y a souvent une interruption "transfert terminé" différente qui signale que tous les bits ont été décalés hors de l'uart.Cela peut être utilisé à d'autres fins telles que la commutation d'un émetteur-récepteur de l'émission à la réception.
Cinq réponses:
DPF
2016-11-22 03:38:34 UTC
view on stackexchange narkive permalink

L'interruption TX est principalement destinée aux datagrammes plus longs.Vous pouvez lancer le transfert pour un tampon de longueur connue (bytecount).Vous pouvez maintenant pousser votre pointeur de tampon aussi souvent qu'il y a d'octets à envoyer, lorsque l'interruption TX se produit.Cela garantit le transfert "aussi rapide que possible" de votre tampon, sans qu'il soit nécessaire d'interroger un "TransferComplete" -Flag / Statusbit.

Dirceu Rodrigues Jr
2016-11-22 03:50:28 UTC
view on stackexchange narkive permalink

Le but principal de l'interruption TX (en fait une FIN DE TX) est d'envoyer automatiquement le contenu d'un tampon (plusieurs octets).Lorsqu'il est mis en œuvre correctement:

  1. Activez l'interruption d'émission.
  2. Le code utilisateur démarre la transmission en envoyant uniquement le premier octet du tampon.
  3. A la fin de TX (du premier octet), une interruption sera générée.
  4. Dans le TX ISR (Interrupt Service Routine), le code doit envoyer l'octet suivant dans le tampon et mettre à jour l'index du tampon.
  5. À la fin de cette transmission, une nouvelle interruption se produit, et ainsi de suite, jusqu'à ce que tout le contenu du tampon soit envoyé "automatiquement".
  6. Désactivez l'interruption d'émission.

Le comportement exact dépend du microcontrôleur.C'est une description générale.

Une simplification facile sur de nombreuses plates-formes est que le code utilisateur soit simplement responsable de la mise des données dans le tampon et de l'activation de l'interruption;l'ISR désactive l'interruption s'il se déclenche lorsque le tampon est sec.
Surt
2016-11-22 05:11:50 UTC
view on stackexchange narkive permalink

Certains UARTS ont un tampon interne supérieur à un, la série 16xxx pour un.

La procédure ici était

  1. Définissez un masque de fenêtre de transmission, par exemple sur 4 restants.
  2. remplissez les positions de tampon jusqu'à ce que l'UART dise que les données complètes ou ne doivent plus être envoyées
  3. faire autre chose
  4. lorsque seulement 4 positions de tampon ne sont pas envoyées, définissez l'interruption d'émission
  5. attendez que l'interruption soit traitée
  6. si d'autres données doivent être envoyées, rendez-vous à 2.

Cela réduit la charge du processeur en déchargeant certains traitements vers l'UART, permettant ainsi aux processeurs plus lents de suivre et de traiter d'autres tâches au lieu d'être interrompus tout le temps.

Simon Richter
2016-11-22 05:29:37 UTC
view on stackexchange narkive permalink

L'interruption TX se déclenche lorsqu'il y a de l'espace dans la mémoire tampon de transmission.

Pour les périphériques qui n'ont pas de tampon de transmission (c'est-à-dire où vous écrivez un octet, qui est transféré immédiatement), l'interruption est affirmée lorsque le registre de transmission peut être écrit avec l'octet suivant.

Pour les périphériques avec un tampon, l'interruption est affirmée à un moment défini par l'implémentation.Pour certains, c'est lorsque le tampon est à moitié vide, pour certains, c'est lorsque la transmission du dernier octet a commencé et que le tampon est complètement vide.

Rev1.0
2016-11-22 04:20:15 UTC
view on stackexchange narkive permalink

Un autre cas d'utilisation est lorsque vous connectez l'UART à une autre interface de communication comme RS485.Le contrôleur doit libérer le pilote de bus dès que le dernier bit a été décalé hors du tampon TX.Ceci est facile à gérer dans l'interruption TX, mais serait fastidieux à implémenter sans, car vous auriez à attendre un moment précis après avoir écrit le dernier octet dans le tampon de sortie qui varierait également avec la vitesse de transmission.

L'utilisation RS485 fonctionne mieux s'il y a une interruption de transmission complète disponible plutôt que juste une mémoire tampon de transmission disponible.Surtout sur les appareils avec de gros tampons, le seul moyen d'obtenir une interruption après l'envoi du dernier octet utile est de nourrir les octets supplémentaires indésirables UART et d'espérer que l'on peut désactiver la transmission avant de sortir.
@supercat: Vous avez en effet raison de souligner que cela nécessiterait une interruption Tx ** complete **.Mais je pense que cela est toujours lié à la question.
Il est souvent possible de s'en sortir avec juste une interruption disponible dans la mémoire tampon, mais l'interruption tx complete est souvent meilleure;J'avais pensé qu'il pourrait être utile d'amplifier pourquoi certains UART ont des interruptions séparées pour que la mémoire tampon soit prête et que la transmission soit terminée.


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...