资源描述:
《nios2 c语言编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、16nios2c语言编程方法来自:http://www.fpga4u.com/bbs/thread-66-1-1.htmlIORD(base,0) //读数据寄存器DATAIORD(base,1)//读方向寄存器DIRECTIONIORD(base,2)//读中断标志寄存器interruptmaskIORD(base,3) //读边沿触发寄存器edgecaptureIOWR(base,0,data) //写数据寄存器DATAIOWR(base,1,data) //写方向寄存器DIRECTIONIOWR(ba
2、se,2,data) //写中断标志寄存器interruptmaskIOWR(base,3,data)//写边沿触发寄存器edgecapturealt_irq_register(EX_IRQ,edge_cap_ptr,Ex_Interrupt);//注册外部中断,对应的参数分别为中断优先级,传递到中断服务函数的参数,和中断服务函数。IOWR_ALTERA_AVALON_PIO_IRQ_MASK(EX_BASE,0x1);//使能按键中断位,这里在定义硬件时只用了1位IOWR_ALTERA_AVALON_PI
3、O_EDGE_CAP(EX_BASE,0x0);//边沿捕获寄存器清零intmain(void)__attribute__((weak,alias("alt_main")));//将函数入口改为alt_main,由用户自己加载,以减小代码大小。IORD(base,0) //读数据寄存器DATAIORD(base,1)//读方向寄存器DIRECTIONIORD(base,2)//读中断标志寄存器interruptmaskIORD(base,3) //读边沿触发寄存器edgecaptureIOWR(base,0
4、,data) //写数据寄存器DATAIOWR(base,1,data) //写方向寄存器DIRECTIONIOWR(base,2,data) //写中断标志寄存器interruptmaskIOWR(base,3,data)//写边沿触发寄存器edgecapturealt_irq_register(EX_IRQ,edge_cap_ptr,Ex_Interrupt);//注册外部中断,对应的参数分别为中断优先级,传递到中断服务函数的参数,和中断服务函数。IOWR_ALTERA_AVALON_PIO_IRQ_M
5、ASK(EX_BASE,0x1);//使能按键中断位,这里在定义硬件时只用了1位IOWR_ALTERA_AVALON_PIO_EDGE_CAP(EX_BASE,0x0);//边沿捕获寄存器清零intmain(void)__attribute__((weak,alias("alt_main")));//将函数入口改为alt_main,由用户自己加载,以减小代码大小。nios2的C语言和X86或者单片机C语言很相似,上层的标准C库函数都是一样的,区别在于与底层硬件相关的各个外设寄存器的结构不同。如果我们把访问底
6、层硬件寄存器的函数封装起来供上层调用,平台之间的移植就显得很容易了。nios2的C语言和X86或者单片机C语言很相似,上层的标准C库函数都是一样的,区别在于与底层硬件相关的各个外设寄存器的结构不同。如果我们把访问底层硬件寄存器的函数封装起来供上层调用,平台之间的移植就显得很容易了。 下面我总结了一些外设的寄存器结构以及用于访问寄存器的函数。161.可编程输入、输出口PIO//Definedinpio_struct.h//PIOPeripheral//PIORegisterstypedefvolatiles
7、truct{intnp_piodata; //read/write,upto32bitsintnp_piodirection; //write/readable,upto32bits,1->outputbitintnp_piointerruptmask;//write/readable,upto32bits,1->enableinterruptintnp_pioedgecapture; //read,upto32bits,clearedbyanywrite}np_pio;#defineIO
8、ADDR_ALTERA_AVALON_PIO_DATA(base) __IO_CALC_ADDRESS_NATIVE(base,0)#defineIORD_ALTERA_AVALON_PIO_DATA(base) IORD(base,0)#defineIOWR_ALTERA_AVALON_PIO_DATA(base,data) IOWR(base,0,data)#defineIOADDR_