集成电路技术分享

 找回密码
 我要注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 小舍YZ

常用的IP核以及设备驱动

[复制链接]
 楼主| 小舍YZ 发表于 2017-7-8 11:27:04 | 显示全部楼层
2)中断控制器驱动

在EDK中,与中断控制器有关的底层文件有:xintc.c、xintc.h、xintc_g.c、xintc_i.h、xintc_intr.c、xintc_l.c、xintc_l.h、xintc_options.c以及xintc_selftest.c。所以在GPIO的用户代码中添加下列语句:
#include “xintc.h”
#include “xintc_1.h”
#include “xintc_i.h”
中断控制器的驱动函数,包含中断控制器的初始化、使能、撤销以及清除等函数。下面给出常用的中断控制器操作函数:

(1)初始化函数

XStatus XIntc_Initialize (XIntc *InstancePtr, Xuint16 DeviceId);

XIntc_Initialize用于指定中断控制模块,同时初始化中断结构域、中断向量表,撤销中断源以及中断输出使能。其中InstancePtr是Xintc的对象;DeviceId是中断模块的唯一设备ID号。返回m_XST_SUCCESS表明初始化成功,否则初始化失败。

(2)中断使能函数

XStatus XIntc_Start (XIntc *InstancePtr, Xuint8 Mode);

XIntc_Start开始中断控制。其中InstancePtr是Xintc的对象;Mode为中断模式,可使能模拟中断以及真实的硬件中断。

(3)中断撤销函数

void XIntc_Stop (XIntc *InstancePtr);

XIntc_Stop输出停止中断控制,其中InstancePtr是Xintc的对象。

(4)中断源连接函数

XStatus XIntc_Connect (XIntc *InstancePtr, Xuint8 Id, XInterruptHandler Handler
               void *CallBackRef);

XIntc_Connect连接中断源的ID以及与之关联的处理程序,当中断被确认后,处理程序将运行。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断;Handler是中断处理程序;CallBackRef是返回参数,通常为连接驱动器的对象指针。若返回mXST_SUCCESS表明连接正确,否则则连接失败。

(5)中断源撤销函数

void XIntc_Disconnect (XIntc *InstancePtr, Xuint8 Id);

XIntc_Disconnect撤销与中断源Id关联的处理程序。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。

(6)特定中断使能函数

void XIntc_Enable (XIntc *InstancePtr, Xuint8 Id);

XIntc_Enable使能由竞争ID提供的中断源,任何一个未决的特定中断条件将导致一个功能调用。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。

(7)特定中断撤销函数

void XIntc_Disable (XIntc *InstancePtr, Xuint8 Id);

XIntc_Disable撤销由竞争ID提供的中断源,但中断控制器将不产生一个特定Id的中断,将继续保留该中断条件。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。

(8)中断源响应函数

void XIntc_Acknowledge (XIntc *InstancePtr, Xuint8 Id);

XIntc_Acknowledge响应竞争后Id的中断源,响应中断后将清除中断条件。其中InstancePtr是Xintc的对象;Id为中断源的序号,0是最高级别的中断。

3.外部存储器控制器

外部存储器控制器基本涵盖了目前所有的外部存储器类型,包括片内BRAM、sram、sdr sdram、ddr sdram、ddr2 sdram以及Flash等器件。这里以sdr sdram控制器为例介绍其结构和底层驱动。

1)sdr sdram控制器结构

sdr sdram存储器是动态同步存储器的一种,采用单时钟,其时钟频率就是数据存储的频率,如时钟信号为100或133 MHz,则数据读写速率也为100或133MHz。但由于sdram依赖于电容的电量来区分逻辑“0”和“1”,但电容器会不断漏电,需要周期性地刷新sdram的每一个存储单元,因此读写时序比较复杂,且读写速率也达不到工作时钟的频率。sdram控制器的作用就是将sdram存储器的初始化、刷新、地址转换、数据读取等操作封装起来,让使用者将其看成系统黑盒,读数直接按地址访问,写数直接往目的地址赋值即可。Xilinx提供了sdr sdram控制器的IP Core,在XPS中,直接将其添加到OPB总线上即可。sdr sdram控制器的内部结构以及与OPB总线的接口如图9-12所示。

图9-12 sdram控制器和OPB总线的连接示意图

本帖子中包含更多资源

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

x
 楼主| 小舍YZ 发表于 2017-7-8 11:27:43 | 显示全部楼层
sdram控制器完整的信号端口列表如表9-9所列。其中C_SDRAM_DWIDTH为sdram存储器的数据宽度,C_SDRAM_AWIDTH为sdram存储器的地址宽度,C_SDRAM_BANK_ AWIDTH为存储器BANK的地址。

表9-9 sdr sdram控制器的端口信号列表

本帖子中包含更多资源

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

x
 楼主| 小舍YZ 发表于 2017-7-8 11:28:25 | 显示全部楼层
sdram控制器支持不同数据位宽的读、写模式,且不同位宽以及不同刷新模式下的读写时序和配置都是不同的。例如,突发模式下16比特数据位宽的sdram控制器读写时序如图9-13和图9-14所示。

图9-13 16比特突发模式读数据的时序逻辑图

本帖子中包含更多资源

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

x
 楼主| 小舍YZ 发表于 2017-7-8 11:28:56 | 显示全部楼层
图9-14 16比特突发模式写数据的时序逻辑图

本帖子中包含更多资源

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

x
 楼主| 小舍YZ 发表于 2017-7-8 11:29:18 | 显示全部楼层
2)sdr sdram控制器驱动

在嵌入式系统中,sdr sdram控制器对于用户来讲是透明的,即用户在功能使用上没有初始化、刷新等操作,直接用IO读写函数读写相应的地址即可。基本的IO读写函数在文件xio.h中定义,其本质就是简单的指针赋值语句,32比特位宽的读写函数如下所示。

#define XIo_In32(InputPtr) (*(volatile Xuint32 *)(InputPtr))
      #define XIo_Out32(OutputPtr, Value) \
            (*(volatile Xuint32 *)((OutputPtr)) = (Value))

因此在操作sdram时,只需添加下列两个头文件。其中,xio.h定义了端口操作的函数,xparameters.h文件则给出了sdram存储器的基地址。

#include " xio.h "
#include " xparameters.h "

本帖子中包含更多资源

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

x
zxopenljx 发表于 2023-2-4 09:55:47 | 显示全部楼层
常用的IP核以及设备驱动
您需要登录后才可以回帖 登录 | 我要注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-28 10:47 , Processed in 0.079279 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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