PRS - Kasimashi/Systemes-embarques GitHub Wiki
Peripheral Reflex System
Ceci est une SPECIFICITE Silicons-Labs et ne concerne pas les processeurs du type TI, STM32, etc ...
Le but de ce système est d'améliorer les performances du système en terme énergétique et en charge du CPU.
Peripheral Reflex System
Introduction
Le système Peripheral Reflex System (PRS) est un réseau qui permet aux différents modules périphériques de communiquer directement entre eux sans impliquer le MCU. Les modules périphériques qui envoient des signaux réflexes sont appelés Producers. Le module PRS achemine ces signaux réflexes vers des périphériques appelé Consumers qui appliquent des actions en fonction des signaux réflexes reçus. Le format des signaux réflexes n'est pas donné, mais les déclencheurs de front et d'autres fonctionnalités peuvent être appliqués par PRS.
Aperçu
Un aperçu d'un canal et de la manière dont 4 périphériques différents peuvent être connectés au PRS est donné dans la Figure ci dessous.
Le module PRS contient certains canaux d'interconnexion (voir le manuel de référence de l'appareil pour les canaux PRS disponibles), et chacun d'eux peut choisir entre tous les signaux réflexes de sortie proposés par les producteurs. Les consommateurs peuvent alors choisir quel canal PRS écouter et effectuer des actions basées sur les signaux réflexes acheminés via ce canal. Les signaux réflexes peuvent être à la fois des signaux d'impulsion et des signaux de niveau. Les impulsions PRS synchrones durent un cycle HFPERCLK ou HFBUSCLK et peuvent soit être envoyées par un producteur, par exemple une conversion ADC terminée, soit être générées à partir du détecteur de bord dans le canal PRS. Les signaux de niveau peuvent avoir une forme d'onde arbitraire, mais seront synchronisés avec le HFPERCLK.
La figure ci dessus montre quatre périphériques connectés à deux canaux PRS. Sur un canal se trouvent TIMER0 et ADC0 et l'ACMP et TIMER1 sont connectés à un deuxième canal. Un débordement de TIMER0 peut démarrer une conversion unique ADC, et une sortie ACMP peut être utilisée comme entrée pour un canal de comparaison/capture sur TIMER1.
Opération générales
Le mode Asynchrone
Les canaux réflexes peuvent fonctionner selon deux modes : synchrone ou asynchrone. En mode synchrone, les signaux réflexes sont cadencés sur le HFPERCLK ou HFBUSCLK (disponibles dans les appareils EFM32 Gecko Series 1 et EFR32 Wireless Gecko Series 1) et peuvent être utilisés par n'importe quel consommateur réflexe. Cependant, cela ne fonctionnera pas en mode énergie 2 (EM2) ou en mode énergie 3 (EM3), puisque le HFPERCLK ou HFBUSCLK sera éteint.
Les canaux réflexes asynchrones ne sont pas cadencés sur HFPERCLK ou HFBUSCLK et peuvent être utilisés même en mode énergétique 2 (EM2) ou en mode énergétique 3 (EM3). Cependant, le mode asynchrone ne peut être utilisé que par un sous-ensemble de consommateurs de réflexes marqués avec Prise en charge asynchrone dans le tableau Consommateurs de réflexes. Les périphériques pouvant produire des réflexes asynchrones sont marqués avec Prise en charge asynchrone dans le Producteurs de réflexes.
Pour utiliser ces signaux réflexes de manière asynchrone, définissez le champ de bits ASYNC dans le registre PRS_CHx_CTRL pour le canal PRS en sélectionnant le signal réflexe.
Dans les appareils EFM32 Gecko Series 1 et EFR32 Wireless Gecko Series 1 :
- Les signaux sur l'entrée PRS doivent également avoir une largeur d'au moins une période HFBUSCLK afin d'être détectés correctement. Ceci s'applique à tous les cas où le mode asynchrone n'est pas utilisé dans le PRS
- Il existe deux options de communication entre périphériques sur différentes horloges pré-échelonnées, par exemple entre périphériques sur HFBUSCLK et HFPERCLK :
- Pour les signaux de niveau, aucune action n'est nécessaire, mais le logiciel doit s'assurer que les signaux de niveau sont conservés suffisamment longtemps pour que le domaine de destination puisse les détecter.
- Pour les signaux d'impulsion, la détection de front et l'étirement (champs binaires EDSEL et STRETCH dans le registre PRS_CHx_CTRL) doivent être activés. Lorsque la détection de bord et l'étirement sont activés sur une source PRS, la sortie sur le canal PRS est maintenue suffisamment longtemps pour que le domaine de destination détecte l'impulsion. Cela fonctionne également si plusieurs domaines de destination s'exécutent à des fréquences différentes.
Les canaux PRS peuvent également être déclenchés manuellement en écrivant dans les registres PRS_SWPULSE ou PRS_SWLEVEL (voir 4.4 Conversion DAC des déclencheurs d'impulsions PRS générées par logiciel). PRS_SWLEVEL est un niveau programmable pour chaque canal et contient la valeur pour laquelle il est programmé. Le registre PRS_SWPULSE amènera le canal PRS à émettre une impulsion haute d'un cycle HFPERCLK ou un cycle HFBUSCLK si le bit de canal correspondant est défini sur 1. Les signaux SWLEVEL et SWPULSE sont ensuite XOR avec l'entrée sélectionnée des producteurs pour former le signal de sortie envoyé aux consommateurs écoutant la chaîne. Par exemple, lorsque SWLEVEL est défini, si un producteur produit un signal de 1, cela entraînera une sortie de canal de 0.
Les fonctions emlib
void PRS_SourceSignalSet(unsigned int ch, uint32_t source, uint32_t signal, PRS_Edge_TypeDef edge)
void RS_SourceAsyncSignalSet(unsigned int ch, uint32_t source, uint32_t signal)
peut être utilisé pour configurer facilement les canaux PRS En spécifiant le canal PRS, produisant le périphérique, le signal du périphérique et le front pour la génération d'impulsions (mode synchrone), la fonction configure le PRS en conséquence.
Producers
Chaque canal PRS peut choisir entre des signaux provenant de plusieurs producteurs, ce qui est configuré dans le champ binaire SOURCESEL du registre PRS_CHx_CTRL. Chaque producteur émet un signal qui peut être sélectionné en définissant le champ de bits SIGSEL dans le registre PRS_CHx_CTRL. La définition du champ de bits SOURCESEL sur 0 (désactivé) conduit à une sortie constante nulle du multiplexeur d'entrée. Un aperçu des producteurs disponibles est donné dans le tableau ci-dessous.
Consumers
Les Consumers (répertoriés dans le tableau ci-dessous) peuvent être configurés pour écouter un canal PRS et effectuer une action basée sur le signal reçu sur ce canal. La plupart des consommateurs s'attendent à une entrée d'impulsion, tandis que certains peuvent également gérer des entrées de niveau.
Reference :
https://www.silabs.com/documents/public/application-notes/an0025-efm32-prs.pdf