alt寄存器赋值三种方式:
方式一:
传统的HAL方式,也就是使用altera的方式(暂且这样说吧)
注:本方式需包含头文件 altera_avalon_pio_regs.h
端口写操作:IOWR_ALTERA_AVALON_PIO_DATA(BASE,数值)
端口读操作:IORD_ALTERA_AVALON_PIO_DATA(BASE)
个人觉得此方式没有什么优点可谈,并且在程序中要写大量的IOWR_ALTERA_AVALON_PIO_DATA之类的语句,繁琐,
初学者还不好理解。
方式二:
定义宏(定义指针)
#define IO *(volatile unsigned char *) IO_BASE
端口写操作:IO=数值
端口读操作:m=IO(m为读端口的数值)
个人觉得此方式方便。语句简单,更靠近单片机编程。
例如:定义了数码管SEG,要想给它赋值,只接写SEG=段值就OK了。
P.S:本方式在CPU等级选择时注意,针对DE0的cyclone 3,如果选择Fast型CPU需做如下设定,否则寄存器无法映射。
方式三:
定义结构体
这是altera官方手册中PIO的寄存器图。
现定义结构体如下:
注:建议采用头文件包含形式。以便成成自己的一套体系。
个人觉得此方式在定义像串口之类的IP,特别方便。并且能形成自己的一套头文件,编程非常方便。
操作方式:
LED->DATA = 1<<i;
这样就可以是一个简单的流水灯了,呵呵,怎么样,是不是要简单很多?
结语:
采用第二种,第三种寄存器映射方式非常方便,大家一定都要学会。
有关寄存器,请大家参阅 altera官方手册第三卷EmbeddedPeripherals