EDN首页   博客首页

日志档案

发表于 2006-9-11 13:45:07

29

标签: 无标签

NIOS中操作硬件

NIOS II 中硬件很隐蔽,操作好象是用库里生成的函数,直接操作不方便,摸索了很长时间,前两天看一本书,是说SDK的时候,每组相关硬件的寄存器地址是连续的,上面给出了结构体来对应硬件寄存器组的方法,这点很像以前看过的一个2812的工程的处理方法,可以写一个结构体,然后再声明硬件名为这个结构体型的指针就可以直接对这个寄存器组操作了,访问哪个寄存器,可以通过->进行,若其中有某些寄存器是需要位操作的,可以再做一个位的结构体,然后做一个公用体,把这个位结构体和一个int型放在一起,然后就把这个需要位操作的寄存器声明为该公用体型即可。

比如

#include "system.h"
typedef struct
{
 int bit0 : 1;
 int bit1 : 1;
 int bit2 : 1;
 int bit3 : 1;
 int bit4 : 1;
 int bit5 : 1;
 int bit6 : 1;
 int bit7 : 1;
 int bit8 : 1;
 int bit9 : 1;
 int bit10 : 1;
 int bit11 : 1;
 int bit12 : 1;
 int bit13 : 1;
 int bit14 : 1;
 int bit15 : 1;
}ST_bit;

typedef union
{
 ST_bit bit;
 int port;
}UN_port;

typedef struct
{
 UN_port data;
 int direction;
 ...
 ...
 ...
}ST_pio;

#define pio0  ((volatile ST_pio *)P0_BASE)
#define P0  pio0->data.port
#define P0_Dir  pio0->direction
#define P0_0  pio0->data.bit.bit0
...
...
...

串口操作试着用这种方法做了一下,很方便。

系统分类: CPLD/FPGA   |   用户分类: SOPC   |   来源: 无分类   |   【推荐给朋友】   |   【添加到收藏夹】

    阅读(1999)    回复(6)  

投一票您将和博主都有获奖机会!

最新评论

  • wdl67

    2006-9-21 16:58:00

    very good!

  • cocappjj

    2006-9-12 9:00:56

    虽然我看不懂,但还是回复一下。顺便提一下,这么多人看了都不留言啊。。。

  • yuzr

    2007-3-18 11:07:33

    精彩的解决办法。

  • pennyllin

    2006-9-27 8:24:52

    我也看不懂,不过还是收益了,谢谢!盼望更多的关于nios的文章。

  • lilac

    2007-7-25 21:47:45

    谢谢!正在学习nios~

  • Don

    2007-8-11 20:38:30

    雪中送炭