Tja...
Vad ska man säga...
För att slippa läsa in hela porten för att sätta en pine på porten så har man valt att göra två register till nästan varje funktion plus en för avläsning...
så för att enabla pull up på pinne 0
PIO_PUER = 1
och för att disabla
PIO_PUDR = 1
Detta gör att man slipper maska ut den bit man är intreserad av att ändra..
Så om man kollar så har varje "register" tre addresser
En för enabel och en för disabel och en för avläsning
Här kommer en kort förklaring på vad registerna är:
PIO_PxR (PIO x Register)
Används för att välja mellan I/O eller peripheral
PIO_PUxR (Pull-up x Register)
Pull-up (vad mer kan säga)
PIO_ASR (A Select Register)
PIO_BSR (B Select Register)
PIO_ABSR (AB Select Status Register)
Är till för att välja vilken peripheral som ska vara på
respektive pinne A eller B
PIO_PxR
Anger om det ska vara outport eller input,
om någe peripheral ansluten till porten kommer den att bestämma vad den ska vara
PIO_MDxR
Anger om utgångarna ska var Open Drain eller inte
PIO_SODR (Set Output Data Register) och
PIO_CODR (Clear Output Data Register)
Används för att sätta respetive slå av utgångarna
PIO_ODSR (Output Data Status Register) och
PIO_OWxR (Output Writen x Register)
Används om man vill skriva parrallet ut på porten
PIO_OWxR används för att maska ut de bitar som ska skrivas och PIO_ODSR för att skriva till porten
PIO_PDSR (Pin Data Status Register)
Läser av pinnarna
PIO_IFxR (Input Filter x Register)
Anväds för filtera bort spikar, delvis när den enabla så måste singnalen vara hör minst 1.5 cycles
PIO_IxR (Interrupt x Register)
Interrupt on changes
Tja jag tror inte jag har glömt någe....
PIO på ARM är en aningen krånligare än på AVR... men när man satt sej in är det ganska smart uppbyggd
