集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
查看: 3883|回复: 15

常用的IP核以及设备驱动

[复制链接]
小舍YZ 发表于 2017-7-8 11:19:09 | 显示全部楼层 |阅读模式
常用的IP核以及设备驱动

Xilinx在EDK环境中提供了嵌入式系统中常用的设备,包括:通用I/O设备、中断控制器设备、定时器、外部存储器控制器以及以太网、串口等高、低通信设备。上述外设以及外设驱动都以IP Core的形式给出,便于使用。本节主要介绍CPU系统所必需的基本外设,如通用I/O、中断以及外存储器控制器。

1.通用I/O设备(GPIO)

1)GPIO结构

通用I/O设备是32位的OPB总线外设,每一位GPIO都可动态配置为输入、输出端口,包含一个寄存器和一个多路器。每个GPIO可最多包含两个通道,通过IPIF模块连接到OPB总线,如图9-6所示,其中的IPIF模块相当于外部总线控制器。

图9-6 GPIO模块的连接示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:20:47 | 显示全部楼层
GPIO的寄存器可以以双字(32比特)、字(16比特)以及字节(8比特)的方式访问。为了与OPB总线相连,需要和IPIF寄存器匹配,因此GPIO的寄存器是字边界访问的。GPIO的数据格式如图9-7所示。

图9-7 GPIO的数据格式示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:21:25 | 显示全部楼层
GPIO设备完整的端口信号如表9-6所列,在系统中可根据实际需求配置相应的参数。其中C_OPB_AWIDTH为OPB外设地址总线宽度;C_OPB_DWIDTH为OPB外设数据总线宽度;C_GPIO_WIDTH为GPIO的总线宽度;C_BASEADDR为系统为GPIO设备分配的基地址,C_HIGH ADDR为高地址。

表9-6 GPIO组件的端口信号

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:22:09 | 显示全部楼层
OPB总线对GPIO寄存器的读写时序如图9-8和图9-9所示。实际上,OPB总线有4种不同的总线访问方式:访问寄存器接口、访问SRAM接口、访问FIFO接口以及突发传送,每种方针方式用于不同的总线操作,具有不同的时序。

图9-8 OPB总线读取GPIO寄存器的时序逻辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:22:42 | 显示全部楼层
图9-9 OPB总线写GPIO寄存器的时序逻辑

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:23:02 | 显示全部楼层
无论读、写操作,都是由OPB总线发出请求,经过几个时钟周期后,收到应答信号表明操作成功,是CPU、DSP等处理器最常见的读、写寄存器操作。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:23:48 | 显示全部楼层
2)GPIO驱动

在EDK中,与GPIO有关的底层文件有:xgpio.c、xgpio.h、xgpio_i.h以及xgpio_l.h。其中xgpio.c定义了GPIO所有的驱动函数,所以在GPIO的用户代码中添加下列语句:
#include “xgpio.h”
#include “xgpio_1.h”
#include “xgpio_i.h”
在xgpio.c中定义了下面驱动函数,包含GPIO的初始化、配置、方向的设定、读取和赋值输出等函数。下面给出常用的GPIO操作函数:

(1)初始化函数

XStatus XGpio_Initialize (XGpio *InstancePtr, Xuint16 DeviceId);

其中InstancePtr是Xgpio结构体指针,存储器的指针参数必须被预先指定;DeviceId是由Xgpio控制的唯一的设备ID,可在xparameter.h文件中找到。通过XGpio_Initialize函数将唯一的设备ID和Xgpio结构体联系起来指定设备。

(2)配置查找函数

XGpio_Config * XGpio_LookupConfig (Xuint16 DeviceId);

该函数查找唯一标志符DeviceId所标识的设备配置,系统配置表里包含了每一个设备的配置信息。返回的m_XGpio即为设备配置结构指针,返回m_XNULL表明未找到标识设备。

(3)数据方向设置函数

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

XGpio_SetDataDirection配置GPIO的数据传输方向。InstancePtr是Xgpio结构体指针;Channel为GPIO的通道数(每个GPIO模块有两个通道),可选值为1或2;DirectionMask是输入输出的位标识,对应位的值为0表示输出,1表示输入。

(4)数取函数

Xuint32 XGpio_DiscreteRead (XGpio *InstancePtr, unsigned Channel);

XGpio_DiscreteRead读寄存器的值。InstancePtr是Xgpio结构体指针;Channel为GPIO的通道数,可选值为1或0。

(5)赋值函数

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

XGpio_DiscreteWrite写寄存器的值。InstancePtr是Xgpio结构体指针;Channel为GPIO的通道数,可选值为1或0。

2.中断控制器

1)GPIO结构
中断控制器(opb_intc)由中断控制核和总线接口组成,中断核可通过参数配置,与相应的总线接口逻辑配合,接在OPB总线上或DCR总线上,即opb_intc和dcr_intc,可用于MicroBlaze和PowerPC嵌入式系统。其和OPB总线的典型连接方式如图9-10所示。

图9-10 中断控制器和OPB总线的连接示意图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:24:29 | 显示全部楼层
中断控制器包括8个可访问的寄存器,如表9-7所列。通过寄存器的配置,中断输入可以通过电平触发或沿触发,包括高电平触发、低电平触发、上升沿触发和下降沿触发。

表9-7 中断控制器以及地址偏移

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:25:04 | 显示全部楼层
中断控制器完整的端口信号如表9-8所列,在系统中可根据实际需求配置相应的参数。

表9-8 中断控制器的端口信号

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
 楼主| 小舍YZ 发表于 2017-7-8 11:25:45 | 显示全部楼层
中断控制器的OPB读写时序如图9-11所示。

图9-11 OPB总线中断控制器读写时序

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?我要注册

x
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|小黑屋|手机版|Archiver|fpga论坛|fpga设计论坛 ( 京ICP备20003123号-1 )

GMT+8, 2024-11-28 10:41 , Processed in 0.063566 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表