Hmm, ik zit een beetje door je code te grasduinen, maar ik snap 1 ding niet helemaal.CurlyMo schreef op maandag 22 februari 2016 @ 11:31:
Precies. Je geeft op dat het om een RaspberryPi 2 gaat. Dan weet wiringX welke SoC daarbij hoort en hoe de GPIO van de SoC zich vertalen naar de fysiek beschikbaar GPIO van het apparaat.
Zo zou je GPIO 1 van de SoC op de BananaPi fysiek GPIO 6 kunnen zijn, maar op de PCDuino GPIO 3. Of bepaalde GPIO kunnen helemaal niet extern bereikbaar zijn gemaakt.
in bananapi.c staat het volgende stukje code:
C:
1
2
3
4
5
6
7
8
| #define SUNXI_GPIO_BASE (0x01C20800) //--snip-- if(wiringBPMode == WPI_MODE_PINS)//wordt gezet in de setup pin = pinToGpioR3[pin];//Dit is 272 als we GPIO 6 willen hebben op de BananaPi. Dit is GPIO PI16 op de Allwinner A20 van de BPI //--snip-- bank = pin >> 5;//dit is 8 i = pin - (bank << 5);//dit is 16 phyaddr = SUNXI_GPIO_BASE + (bank * 36) + 0x10; // +0x10 -> data reg |
Maar ik kom er niet uit, als ik dit 'met de hand' uitreken kom ik op een physaddr van 0x1C20930. Kijk ik in de datasheet dan zitten de bitjes van gpio PI16 op bit 0-2 van register PI_CFG2. Deze heeft een offset van 0x128.
Als ik dan deze offset neem van de GPIO_BASE (0x01C20800) kom ik uit op 0x01C20928. Dit is een verschil van 0x08. Dus ik vraag mij een beetje af waar ik de mist in ga...
***edit***
Klein detail, de configure registers in de A20 zijn 16bit. In de Allwinner R8, die op de C.H.I.P. gebruikt wordt zijn deze 32bit.
[ Voor 4% gewijzigd door Vuikie op 23-02-2016 17:26 ]