一、相关结构体
typedef
struct {
u16
DeviceId; /* Unique ID of device */
u32
BaseAddress; /* Device base address */
int
InterruptPresent; /* Are interrupts supported in h/w */
int
IsDual; /* Are 2 channels supported in h/w */
} XGpio_Config;
typedef
struct {
u32
BaseAddress; /* Device base address */
u32
IsReady; /* Device is initialized and ready */
int
InterruptPresent; /* Are interrupts supported in h/w */
int
IsDual; /* Are 2 channels supported in h/w */
} XGpio;
BaseAddress:可以在XPS中Address的栏BaseAddress找到;
DeviceId:这个就比较模糊,估计是XPAR_xxxx_DEVICE_ID,其中xxxx是你在XPS的BUS Interface中设置的硬件名字,如下图中的LED_4BITS,那么它的DeviceId就是XPAR_LED_4BITS_DEVICE_ID;(不过这个还是有待研究的,如果谁懂的话,希望能指正,谢谢。)
InterruptPresent:是否具有中断功能;
IsDual:是否复用;
IsReady:初始化是否完成。
二、函数API
/*
* Initialization functions in xgpio_sinit.c
*/
int XGpio_Initialize(XGpio *InstancePtr, u16 DeviceId);
XGpio_Config *XGpio_LookupConfig(u16 DeviceId);
这两个API的源函数是在xgpio_sinit.c。
函数名
| XGpio_Initialize
| 输入
| 1、
XGpio *InstancePtr:需要进行初始化的GPIO结构体;
2、
u16 DeviceId:就是上文提到的DeviceId了。
| 返回
| - XST_SUCCESS if the initialization was successfull.
- XST_DEVICE_NOT_FOUND if the device configuration data was not found for a device with the supplied device ID. | 说明
| GPIO初始化
|
函数名
| XGpio_LookupConfig
| 输入
| u16 DeviceId:就是上文提到的DeviceId了。
| 返回
| A pointer of data type XGpio_Config which points to the
device configuration if DeviceID is found.
- NULL if DeviceID is not found. 返回XGpio_Config结构体指针就是了
| 说明
| 获取初始化结构体信息
|
/*
* API Basic functions implemented in xgpio.c
*/
void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel,
u32 DirectionMask);
设置GPIO的输入输出方向,XGpio *InstancePtr:需要进行初始化的GPIO结构体;unsigned Channel是初始化通道1还是通道2,1代表Channel 1,2代表Channel 2,u32 DirectionMask,某一位设为0就是输出,设为1就是输入,如0x0001就代表第0位为输入,其他为输出。
u32 XGpio_GetDataDirection(XGpio *InstancePtr, unsigned Channel);
获取GPIO的输入输出方向信息。
u32 XGpio_DiscreteRead(XGpio *InstancePtr, unsigned Channel); GPIO数据读。
void XGpio_DiscreteWrite(XGpio *InstancePtr, unsigned Channel, u32 Mask);
GPIO数据写,u32 Mask需要写的数据。
/*
* API Functions implemented in xgpio_extra.c
*/
void XGpio_DiscreteSet(XGpio *InstancePtr, unsigned Channel, u32 Mask); GPIO置1,相应位为1就置1,为0不作改变。
void XGpio_DiscreteClear(XGpio *InstancePtr, unsigned Channel, u32 Mask);
GPIO清0,相应位为0就清0,为1不作改变。 |