kolibrios-fun/contrib/other/uarm/pxa255_GPIO.h

48 lines
1.3 KiB
C
Raw Normal View History

#ifndef _PXA255_GPIO_H_
#define _PXA255_GPIO_H_
#include "mem.h"
#include "CPU.h"
#include "pxa255_IC.h"
/*
PXA255 OS GPIO controller
*/
#define PXA255_GPIO_BASE 0x40E00000UL
#define PXA255_GPIO_SIZE 0x00001000UL
typedef struct{
Pxa255ic* ic;
UInt32 latches[3]; //what pxa wants to be outputting
UInt32 inputs[3]; //what pxa is receiving [only set by the pxa255gpioSetState() API]
UInt32 levels[3]; //what pxa sees (it differs from above for IN pins)
UInt32 dirs[3]; //1 = output
UInt32 riseDet[3]; //1 = rise detect
UInt32 fallDet[3]; //1 = fall detect
UInt32 detStatus[3]; //1 = detect happened
UInt32 AFRs[6]; //1, 2, 3 = alt funcs
}Pxa255gpio;
#define PXA255_GPIO_LOW 0 //these values make it look like all HiZ, AFR, and nonexistent pins have pullups to those who dumbly assume gpioGEt returns a boolean
#define PXA255_GPIO_HIGH 1
#define PXA255_GPIO_HiZ 2
#define PXA255_GPIO_AFR1 3
#define PXA255_GPIO_AFR2 4
#define PXA255_GPIO_AFR3 5
#define PXA255_GPIO_NOT_PRESENT 6
Boolean pxa255gpioInit(Pxa255gpio* gpio, ArmMem* physMem, Pxa255ic* ic);
//for external use :)
UInt8 pxa255gpioGetState(Pxa255gpio* gpio, UInt8 gpioNum);
void pxa255gpioSetState(Pxa255gpio* gpio, UInt8 gpioNum, Boolean on); //we can only set value (and only of input pins), not direction
#endif