MicroBlaze实验_1

MicroBlaze实验系列有以下6个部分:

1、GPIO

2、中断,定时器

3、UART

4、DDR

5、SPI,I2C

6、自定义外设


用GPIO,最需要关注的是,BSP中的“xgpio.h”文件,里面说明了BSP能够提供给应用程序的内置结构体和函数。

1、结构体

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;

系统中的每一个GPIO设备,都需要分配一个XGpio。然后使用下面的函数时,需要把这个XGpio的指针作为参数传进去。


2、函数

//xgpio_sinit.c

//初始化函数,根据给定的DeviceId,初始化对应的Gpio。这个函数在执行时,会调用第二个函数。

int XGpio_Initialize (XGpio *InstancePtr, u16 DeviceId);


//根据DeviceId返回对应的XGpio_Config

XGpio_Config *XGpio_LookupConfig (u16 DeviceId);



//xgpio.c

在给定的地址位置,用给定的配置信息,初始化一个GPIO。

int XGpio_CfgInitialize(XGpio *InstancePtr, XGpio_Config * Config, u32 EffectiveAddr);


为给定的通道里的每一个单独的端口,设置信号的方向(输入/输出)。Channel是GPIO的通道号(在Vivado中放置一个GPIO时分配的编号)。DirectionMask是一个32位的位模板,0表示输出,1表示输入。

void XGpio_SetDataDirection(XGpio *InstancePtr, unsigned Channel, u32 DirectionMask);

和Java中类似,一个Set方法,一个Get方法

u32 XGpio_GetDataDirection(XGpio *InstancePtr, unsigned Channel);


写端口

void XGpio_DiscreteWrite(XGpio *InstancePtr, unsigned Channel, u32 Mask);

读端口

u32 XGpio_DiscreteRead(XGpio *InstancePtr, unsigned Channel);



//xgpio_intr.c

与中断相关的设置函数,如果要用GPIO的中断,需要在Vivado的软核配置中,允许GPIO的中断功能,并接好线。

void XGpio_InterruptGlobalEnable(XGpio *InstancePtr);

void XGpio_InterruptGlobalDisable(XGpio *InstancePtr);

void XGpio_InterruptEnable(XGpio *InstancePtr, u32 Mask);

void XGpio_InterruptDisable(XGpio *InstancePtr, u32 Mask);

void XGpio_InterruptClear(XGpio *InstancePtr, u32 Mask);

u32 XGpio_InterruptGetEnabled(XGpio *InstancePtr);

u32 XGpio_InterruptGetStatus(XGpio *InstancePtr);



//xgpio_extra.c

void XGpio_DiscreteSet(XGpio *InstancePtr, unsigned Channel, u32 Mask);

void XGpio_DiscreteClear(XGpio *InstancePtr, unsigned Channel, u32 Mask);


//xgpio_selftest.c

int XGpio_SelfTest(XGpio *InstancePtr);



你可能感兴趣的:(硬件)