2012-05-21 6 views
3

Je viens de prendre en charge un projet de développement de code C pour un microcontrôleur STM32 Cortex M3. Un problème que j'ai immédiatement est que j'ai un canal DMA libre qui transfère des données entre 2 USARTs, mais à l'occasion des données d'une autre source doivent être envoyées à la destination USART.Est-il possible de détecter quand un canal DMA sur un Cortex M3 devient inactif?

Y a-t-il un moyen de détecter quand un DMA est occupé à transférer des données ou inactif, ou si des interruptions sont déclenchées lorsqu'un transfert est terminé?

Un grand merci pour toutes les réponses,

Dave

+1

Ce n'est pas strictement hors-sujet, mais si vous n'obtenez pas la réponse que vous espérez, vous pouvez en trouver une meilleure chez Electronics StackExchange. – Polynomial

+0

Juste pour ajouter un peu à cela - est-il possible que si un périphérique a 2 canaux DMA en streaming des données que le contrôleur DMA arbitre entre les canaux DMA afin qu'un seul écrit à l'emplacement à la fois? – davidpcl1977

+0

Merci Polynomial - Je vais y jeter un coup d'oeil. – davidpcl1977

Répondre

2

Voici ce que je fais pour vérifier si l'opération DMA a terminé:

DMA_Cmd(DMA2_Channel5, ENABLE); // start 
while (!DMA_GetFlagStatus(DMA2_FLAG_TC5)); // wait to finish 
DMA_ClearFlag(DMA2_FLAG_TC5); // clear flag (needed?) 
+0

Merci, je vais essayer. – davidpcl1977

3

fin DMA peut être à la fois sondé ou également les interruptions. Les détails sont dans le manuel de référence pour votre pièce spécifique - "STM32 Cortex-M3" n'est pas assez spécifique pour le réduire au document dont vous avez besoin, mais vous pouvez le télécharger à partir de ST's website.

La manière la plus simple d'implémenter le DMA est d'utiliser le STM32 Stanadard Peripheral Library. Il inclut des exemples de projets pour tous les périphériques, y compris des exemples d'interrogation DMA et d'interruption DMA pour l'USART. Votre chaîne d'outils peut déjà inclure la bibliothèque, mais peut-être pas tous les exemples. Même si vous avez déjà la bibliothèque, c'est une bonne idée de vérifier que c'est la dernière révision.

Questions connexes