A PPS modul azt határozza meg, hogy az adott mikrokontroller-kivezetésre mely digitális bemenet vagy kimenet kerül rá. Mindez statikusan, a programkód inicializálását követően, vagy dinamikusan, a programkód futása közben is megvalósítható. Az 1. ábra a PPS modul blokkdiagramját mutatja a Microchip PIC16-sorozatú mikrokontrollerek esetében.
A modul lényegében multiplexerek és kontrollregiszterek okosan összeszervezett összessége. A bemeneti szakaszban a csatlakozók egy adott periféria bemenetére kerülnek multiplexálásra, a kimeneti szakaszban pedig a különböző perifériakimeneteket multiplexálja szét a rendszer a mikrovezérlő fizikai kimeneteire. A PPS kontrollregiszterek képezik le logikailag a különböző perifériafunkciókat a kivezetésekre.
A PPS implementálása 8 bites mikrovezérlő-családonként eltérhet. Egyes családok teljes körű szolgáltatást nyújtó PPS modullal rendelkeznek, amelyeknél az átrendezhető IO-k a mikrovezérlő bármely IO csatlakozójához hozzátársíthatók. Ezzel szemben más eszközök csupán korlátozott PPS-támogatással rendelkeznek, amelyeknél a perifériakiválasztás szabadságát korlátozza, hogy csak bizonyos kivezetésekhez társíthatók. A PIC16 és PIC18-sorozatú mikrovezérlők elnevezése (és természetesen műszaki adatlapja is) egyértelmű utalást ad arra nézvést, hogy kontrollregisztereik és átrendezhető IO alrendszerük milyen lehetőségeket rejt valójában.
Bemenetkiválasztás
A perifériabemenet-kiválasztási, xxxPPS névre hallgató regiszter a PIC16 mikrovezérlőkön meghatározza, hogy mely kivezetés csatlakozik a periféria bemenetéhez. A regiszter egy 5 bites értékkel kerül előzetesen feltöltésre, tehát valamennyi digitális bemenet kezdetben egy adott kivezetéshez van kötve. A regiszterben tárolt érték módosítása megváltoztatja a perifériabemenet fizikai kivezetéshez társítását.
A PIC18-sorozatú mikrovezérlők rendelkeznek egy hasonló célt szolgáló, RPINRx nevű bemeneti regiszterrel, amely beállítja, hogy mely kivezetés mely perifériabemenethez tartozzék. Feltétlenül szükséges értéket beállítani a regiszterben annak érdekében, hogy biztosított legyen a fizikai kivezetés és a kívánt perifériabemenet összeköttetése.
Kimenetkiválasztás
A PIC16-családú mikrovezérlőknél a kulcsszerepet ebben a kérdésben az RxyPPS nevű kimeneti forráskiválasztási regiszter tölti be, amely összeköttetésbe hozza a perifériakimenetet a beállításnak megfelelő fizikai kivezetéssel. Alapértelmezés szerint a regiszter egy 5 bites értéket tartalmaz, amely a perifériakimenetet hozzáköti a fizikai kivezetéshez. A regiszterben tárolt érték módosítása megváltoztatja a perifériakimenet fizikai kivezetéshez társítását.
Ugyanez mondható el a PIC18 alkatrészcsaládról. Az RPORx nevű kimeneti kontrollregiszter beállítja, hogy mely kivezetés mely perifériakimenethez tartozzon. Meg kell adni a regiszternek egy értéket, amely beállítja a fizikai kivezetés és a kívánt perifériakimenet összeköttetését. A regiszter alapesetben nullákkal van feltöltve, ami azt jelenti, hogy a kivezetés alapértelmezés szerint le van választva bármely perifériakimenetről.
Zárási/feloldási mechanizmusok
A PPS regiszterek tartalma kódvégrehajtás alatt egy speciális zárási/feloldási utasításszekvencia segítségével akár többször is módosítható. Ha azonban a fejlesztő úgy dönt, hogy a PPS modul regisztereinek konfigurálására csupán egyszer kíván lehetőséget biztosítani, a konfigurációs regiszterben a megfelelő beállítással kiküszöbölheti a további módosítások végrehajtását.
Rugalmas hozzárendelés
A hozzárendelés rugalmassága a PPS modul használatával optimális. Egyetlen kivezetés szolgálhat különböző perifériák bemeneteként, illetve egy perifériakimenet egyszerre akár több fizikai kivezetésre is leképezhető. A 2. ábra bemutatja, hogyan tud egy egyszeri esemény két olyan perifériafunkciót élesíteni, mint például egy komplementer kimeneti generátor PWM jelének lekapcsolása és egy időzítési esemény rögzítése. A COG1A jelű kimeneti jel két kivezetésre is leképezhető, ami igen hasznos olyan esetekben, ha egy kimeneti jelet az áramkör vagy akár a komplett rendszer két különböző, egymástól távol eső pontjára is el kell vezetni. A két COG1A kivezetés akár össze is köthető a periféria kimeneti áramának növelése érdekében.
Az MPLAB Code Configurator alkalmazása
Az MPLAB X integrált fejlesztői környezet bővítőmodulja, az MPLAB Code Configurator (MCC) rendkívül egyszerű, vizuális lehetőséget biztosít a PIC mikrokontrollereken az IO kivezetések konfigurálására.
Példánkban a COG1 kimeneteket és a COGIN bemenetet a példában szereplő PIC16F1716 mikrovezérlő különböző kivezetéseihez társították. Ehhez csupán annyi a teendő, hogy az MCC futtatása után ki kell választani a COG1 modult az eszköz erőforrásai közül (Device Resources Area), amelynek hatására a COG1 modul és bemeneti/kimeneti funkciói a kivezetés-hozzárendelő területen (Pin Manager Area) megjelenítésre kerülnek. Valamely COG1 kimenet vagy a COGIN bemenet kívánt kivezetéshez való hozzárendeléséhez mindössze annyi a teendő, hogy a kiválasztásnak megfelelő lakatszimbólumra kell kattintani. A művelet sikerességét a lakat bezáródása jelzi (lásd az alábbi 3. ábrát).
Végezetül, a „Generate” gomb megnyomásával a PPS modulban automatikusan érvényesítésre kerül a konfiguráció.
Összefoglalás
Ahogy láthattuk, a PPS modul okosalkalmazásában a 8 bites mikrovezérlők használata lényegesen rugalmasabbá tehető, hiszen rendkívül hasznos segítséget nyújt a fejlesztők és rendszertervezők számára a mikrovezérlő perifériakészletének alkalmazás szempontjából ideális leképezéséhez.