【转载】PIO函数接口的调用方法
2016-09-18 09:58
190 查看
一、PIO口赋值
在NIOS II中,给PIO口赋值有多种方法,下面依次介绍
1、利用给定的宏定义函数,函数原型如下:
其中,base是要访问的IO口的基地址,data是所要写入的数据
2、当我们跳入到上述函数的定义时,可以发现其定义方式为
因此,我们可以直接调用函数IOWR(base, 0, data)来对PIO口赋值,参数的含义同上。
3、直接对寄存器赋值
通过对PIO口的用户手册的阅读可知,一个或者一组PIO口所对应的寄存器有DATA、DIRECTION、INTERRUPT_MASK、EDGE_CAPTURE,因此可以直接对PIO的寄存器进行访问来赋值,假设PIO的基地址如下定义:
则,可以定义如下结构体:
同时,将LED_PIO的基地址映射到该结构体的首地址
这样,可以直接对上述结构体操作,以实现对PIO口的操作,如对IO写一个数据,可以如下方式操作:
同时也可以对其的其他寄存器访问。
4、地址映射方式
如下所示
(先对LED_PIO_BASE强制类型转换,然后在取地址所指向的值,并用宏定义成LEDPORT)
于是,想对IO赋值,就只需要如下操作:
二、从IO口读取值
读值也有上述4中方式,只是用的函数不同。当然,前提是必须把IO口设置为input模式
1、 用调用函数方式,有如下函数可以供我们使用:
base为所以读取的IO口基地址,返回的值放在keyvalue变量中
2、同时,也可以调用如下函数:
参数值同上。
3、如果是直接对寄存器访问,这和对IO口操作方式类似,只是此时的LED->DATA就是要读取的值,如下:
keyvalue = KEY->DATA;
4、地址方式还未实验,理论上是可以的。
上述方式只是我的初步理解,可能有错误之处。
是为记录
在NIOS II中,给PIO口赋值有多种方法,下面依次介绍
1、利用给定的宏定义函数,函数原型如下:
IOWR_ALTERA_AVALON_PIO_DATA(base, data)
其中,base是要访问的IO口的基地址,data是所要写入的数据
2、当我们跳入到上述函数的定义时,可以发现其定义方式为
#define IOWR_ALTERA_AVALON_PIO_DATA(base, data) IOWR(base, 0, data)
因此,我们可以直接调用函数IOWR(base, 0, data)来对PIO口赋值,参数的含义同上。
3、直接对寄存器赋值
通过对PIO口的用户手册的阅读可知,一个或者一组PIO口所对应的寄存器有DATA、DIRECTION、INTERRUPT_MASK、EDGE_CAPTURE,因此可以直接对PIO的寄存器进行访问来赋值,假设PIO的基地址如下定义:
#define LED_PIO_BASE 0x11000020
则,可以定义如下结构体:
typedef struct { unsigned long int DATA; unsigned long int DIRECTION; unsigned long int INTERRUPT_MASK; unsigned long int EDGE_CAPTURE; }PIO_STR;
同时,将LED_PIO的基地址映射到该结构体的首地址
#ifdef _LED #define LED ((PIO_STR *)LED_PIO_BASE) #endif
这样,可以直接对上述结构体操作,以实现对PIO口的操作,如对IO写一个数据,可以如下方式操作:
LED->DATA = 0XFF;
同时也可以对其的其他寄存器访问。
4、地址映射方式
如下所示
#define LED_PIO_BASE 0x11000020 #define LEDPORT *(unsigned int *)LED_PIO_BASE
(先对LED_PIO_BASE强制类型转换,然后在取地址所指向的值,并用宏定义成LEDPORT)
于是,想对IO赋值,就只需要如下操作:
LEDPORT = 0xff;
二、从IO口读取值
读值也有上述4中方式,只是用的函数不同。当然,前提是必须把IO口设置为input模式
1、 用调用函数方式,有如下函数可以供我们使用:
keyvalue = IORD_ALTERA_AVALON_PIO_DATA(base)
base为所以读取的IO口基地址,返回的值放在keyvalue变量中
2、同时,也可以调用如下函数:
keyvalue = IORD(base, 0)
参数值同上。
3、如果是直接对寄存器访问,这和对IO口操作方式类似,只是此时的LED->DATA就是要读取的值,如下:
keyvalue = KEY->DATA;
4、地址方式还未实验,理论上是可以的。
上述方式只是我的初步理解,可能有错误之处。
是为记录
相关文章推荐
- 工厂方法-接口-动态调用DLL
- 如何动态调用DLL中类的方法以及属性 (转载)
- 用axis在eclipse中new出webService client生成客户端,调用远程webservice接口的方法
- Jquery调用webService的四种方法 【转载】
- php中调用其他系统http接口的方法
- 在VC中调用COM组件的方法(转载)
- 通过.NET Remoting调用CCNET接口的方法
- [转载]VC调用存储过程的通用方法(SQLServer篇)
- 利用Windows Group实现基于角色的WCF接口方法调用授权
- c#接口使用方法(转载)
- Mcad学习笔记之异步编程(AsyncCallback委托,IAsyncResult接口,BeginInvoke方法,EndInvoke方法的使用小总结)(转载)
- 如何使用单元测试 测试WEB组件方法中的含有Session、Cookie等HttpContext功能调用的方法?[转载]
- 组件接口方法调用,返回S_FALSE 还是E_FAIL?
- C#调用Dephi接口方法
- Castle AOP 系列(二):对接口方法调用的拦截
- 如何调用IDispatch接口的方法和属性
- 我转载的文章《.NET中统一的存储过程调用方法 》具体实现代码
- JNI调用本地库 打包后的使用dll的方法 [转载]
- 【转载】关于“静态方法不能调用非静态方法”的补充解释
- csp接口实现中调用FuncReturnhWnd异常 解决方法