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);



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值