Partager via


SerCx2 System-DMA-Receive Transactions

Certains pilotes de contrôleur série implémentent la prise en charge des transactions de réception qui utilisent le contrôleur DMA système. Cette prise en charge est facultative, mais peut améliorer les performances en soulageant le main processeur de la nécessité d’utiliser des E/S programmées (PIO) pour les transferts de données longs. SerCx2 effectue une transaction de réception système-DMA en configurant le contrôleur DMA système et en lançant les transferts DMA nécessaires pour le compte du pilote de contrôleur série.

Lorsque le pilote de contrôleur série crée un objet system-DMA-receive, le pilote fournit les paramètres que SerCx2 utilisera pour configurer l’adaptateur DMA système pour les transactions system-DMA-receive.

Avant le début d’une transaction de réception système-DMA, le pilote de contrôleur série a la possibilité d’effectuer toute configuration spéciale du matériel du contrôleur série ou de l’adaptateur DMA qui peut être nécessaire pour la transaction. Une fois la transaction terminée, le pilote peut, si nécessaire, effectuer n’importe quelle propre de l’état matériel du contrôleur série qui peut être nécessaire.

Création de l’objet system-DMA-receive

Avant que SerCx2 puisse appeler les fonctions EvtSerCx2SystemDmaReceiveXxx** du pilote de contrôleur série, le pilote doit appeler la méthode SerCx2SystemDmaReceiveCreate pour inscrire ces fonctions auprès de SerCx2. Cette méthode accepte, en tant que paramètre d’entrée, un pointeur vers une structure SERCX2_SYSTEM_DMA_RECEIVE_CONFIG qui contient des pointeurs vers les fonctions EvtSerCx2SystemDmaReceiveXxx** du pilote.

En option, le pilote peut implémenter l’une ou l’ensemble des fonctions suivantes :

En option, le pilote peut implémenter les deux fonctions suivantes :

Un pilote qui implémente l’une des deux fonctions de la liste précédente doit implémenter les deux.

La méthode SerCx2SystemDmaReceiveCreate crée un objet system-DMA-receive et fournit au pilote appelant un handle SERCX2SYSTEMDMARECEIVE pour cet objet. Les fonctions EvtSerCx2SystemDmaReceiveXxx** du pilote prennent toutes ce handle comme premier paramètre. Les méthodes SerCx2 suivantes prennent ce handle comme premier paramètre :

Initialisation matérielle et propre-up

Certains pilotes de contrôleur série peuvent avoir besoin d’initialiser le matériel du contrôleur série au début d’une transaction de réception système-DMA ou de propre l’état matériel du contrôleur série à la fin de la transaction.

Si un pilote implémente une fonction de rappel d’événement EvtSerCx2SystemDmaReceiveInitializeTransaction , SerCx2 appelle cette fonction pour initialiser le contrôleur série avant de démarrer le premier transfert DMA dans la transaction. Si elle est implémentée, la fonction EvtSerCx2SystemDmaReceiveInitializeTransaction doit appeler la méthode SerCx2SystemDmaReceiveInitializeTransactionComplete pour informer SerCx2 lorsque le pilote termine l’initialisation du contrôleur série.

Si le pilote implémente une fonction de rappel d’événement EvtSerCx2SystemDmaReceiveCleanupTransaction, SerCx2 appelle cette fonction pour propre l’état matériel après la fin du transfert DMA final dans la transaction. Si elle est implémentée, la fonction EvtSerCx2SystemDmaReceiveInitializeTransaction doit appeler la méthode SerCx2SystemDmaReceiveCleanupTransactionComplete pour informer SerCx2 lorsque le pilote termine le nettoyage du contrôleur série.

Un pilote de contrôleur série qui doit effectuer une configuration spéciale du contrôleur DMA système au début d’une transaction system-DMA-receive doit implémenter une fonction de rappel d’événement EvtSerCx2SystemDmaReceiveConfigureDmaChannel . Cette fonction peut appeler la méthode SerCx2SystemDmaReceiveGetDmaEnabler pour obtenir l’enabler DMA pour l’adaptateur DMA système utilisé pour la transaction. SerCx2 appelle cette fonction avant de démarrer le premier transfert DMA dans la transaction. Pour plus d’informations sur les enablers DMA, consultez Activation des transactions DMA.

Notifications de nouvelles données

En option, le pilote de contrôleur série peut implémenter une fonction de rappel d’événement EvtSerCx2SystemDmaReceiveEnableNewDataNotification . S’il est implémenté, SerCx2 utilise cette fonction pour gérer efficacement les délais d’expiration d’intervalle pendant la gestion des demandes de lecture qui sont traitées en tant que transactions de réception système DMA.

Un délai d’expiration d’intervalle se produit si l’intervalle entre deux octets successifs reçus par le contrôleur série dépasse une durée maximale spécifiée par le client. Une fois qu’un pilote de périphérique a envoyé une demande de lecture à SerCx2, un délai d’expiration d’intervalle ne peut se produire qu’après la réception d’au moins un octet de données à partir du périphérique connecté en série. Le délai entre l’arrivée d’une demande de lecture et la réception du premier octet de données à partir de l’appareil périphérique peut être considérablement plus long que le temps nécessaire pour recevoir le reste des données pour la demande de lecture après la réception du premier octet. Pour plus d’informations, consultez SERIAL_TIMEOUTS.

SerCx2 appelle la fonction EvtSerCx2SystemDmaReceiveEnableNewDataNotification , si elle est implémentée, pour activer une notification de nouvelles données. Si cette notification est activée et que le contrôleur série reçoit un ou plusieurs octets de nouvelles données de l’appareil périphérique, ou qu’il contient déjà des données dans son FIFO de réception, le pilote du contrôleur série doit appeler la méthode SerCx2SystemDmaReceiveNewDataNotification pour notifier SerCx2.

Pour détecter un délai d’expiration d’intervalle possible, SerCx2 appelle régulièrement la routine ReadDmaCounter de l’adaptateur DMA système pour case activée si des données ont été reçues au cours de l’intervalle précédent. La façon dont SerCx2 détecte la réception du premier octet de données dépend si le pilote de contrôleur série implémente ou non une fonction EvtSerCx2SystemDmaReceiveEnableNewDataNotification . Si cette fonction est implémentée, SerCx2 appelle la fonction pour activer une notification de nouvelles données et est averti par le pilote lors de la réception du premier octet de données. Sinon, SerCx2 appelle régulièrement ReadDmaCounter pour détecter la réception du premier octet et peut avoir besoin de réveiller régulièrement le processeur pour effectuer ces appels. Ainsi, un pilote qui implémente une fonction EvtSerCx2SystemDmaReceiveEnableNewDataNotification peut réduire la consommation d’énergie en n’obligeant pas le processeur à se réveiller aussi souvent.

Note SerCx2 s’appuie sur la routine ReadDmaCounter de l’adaptateur DMA système pour surveiller les délais d’attente pendant les transactions de réception système DMA et les transactions de transmission système DMA. La couche d’abstraction matérielle (HAL) doit implémenter une routine ReadDmaCounter entièrement fonctionnelle pour le contrôleur DMA système utilisé pour transférer des données vers et à partir du contrôleur série.

Un pilote de contrôleur série qui prend en charge les notifications de nouvelles données pour les transactions system-DMA-receive doit implémenter une fonction de rappel d’événement EvtSerCx2SystemDmaReceiveCancelNewDataNotification afin que SerCx2 puisse annuler une notification de nouvelles données activée avant qu’elle ne se produise. Si une notification de nouvelles données est activée lorsque la demande de lecture en attente est annulée ou qu’un délai d’attente total se produit, SerCx2 appelle la fonction EvtSerCx2SystemDmaReceiveCancelNewDataNotification pour annuler la notification. Si cette fonction annule correctement la notification en attente, elle retourne TRUE. Une valeur de retour TRUE garantit que le pilote de contrôleur série n’appellera pas SerCx2SystemDmaReceiveNewDataNotification. Une valeur de retour FALSE indique que le pilote a appelé ou appellera bientôt SerCx2SystemDmaReceiveNewDataNotification. Pour plus d’informations sur les délais d’attente totaux, consultez SERIAL_TIMEOUTS.