您的位置:首页 > 移动开发 > IOS开发

【转载】PIO函数接口的调用方法

2016-09-18 09:58 190 查看
一、PIO口赋值

    在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、地址方式还未实验,理论上是可以的。

 

上述方式只是我的初步理解,可能有错误之处。

是为记录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  FPGA NIOSII QSYS PIO 接口