📄 hello_world.c
字号:
/**************************************************************程序说明 :usb1.1测试实验类 型 :Nios II作 者 :柳军胜公 司 :杭州自由电子科技 :http://www.freefpga.com电 话 :0571-85084089修 改 :日期时间 :20060905说 明 : 该范例使用FreeDev_usb11 ip core支持开发板成为USB HOST的 设备(常见的是PC机)。**************************************************************/#include "alt_types.h"#include "system.h"#include "altera_avalon_pio_regs.h"#include <string.h>#include <io.h>#include <stdio.h>#include "sys/alt_irq.h"#define COMMAND_ADDR 0x0#define IRQ_ADDR 0x1#define EP1_ADDR 0x2 //同步上传#define EP2_ADDR 0x3 //同步接收#define EP3_ADDR 0x4 //批上传#define EP4_ADDR 0x5 //批接收#define EP5_ADDR 0x6 //中断上传volatile alt_u8 count;void led_run();void init_usb();/*********************************************函数名:USB_0_interrupts功 能:USB中断处理函数输 入:context:相关内容指针,中断号返 回: 备 注: 读取FreeDev_USB11外设中中断源,再读取数据数据 以此数据点亮相应LED。**********************************************/static void USB_0_interrupts(void * context,alt_u32 id){ alt_u8 data; alt_u8 len; alt_u8 irq_reg; volatile int i; alt_u8 j=0; //清中断 IOWR(FREEDEV_USB11_0_BASE,COMMAND_ADDR,0x00); irq_reg=IORD(FREEDEV_USB11_0_BASE,IRQ_ADDR); //首字节为数据长度 len=IORD(FREEDEV_USB11_0_BASE,EP4_ADDR); switch(irq_reg){ //printf("The usb's fifo0 is full \n"); case 0x10: j=0; while(j<len) { data=IORD(FREEDEV_USB11_0_BASE,EP4_ADDR); IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, data); i=0; while (i<100000) i++; j++; } break; } //printf("%d \n",x); }/*********************************************函数名:init_usb功 能:USB初始化函数输 入:返 回: 备 注: 主要完成注册USB外设中断处理**********************************************/void init_usb (void){ alt_u8 a = 0; //注册中断 a=alt_irq_register(FREEDEV_USB11_0_IRQ,(void*)&count,USB_0_interrupts); if (a!=0) { while(1) IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, 0x3a); } return 0;}/*********************************************函数名:led_run功 能:led流水灯函数,同时把LED数据发送到USB PIPE5输 入:返 回: 备 注:**********************************************/void led_run (void){ alt_u8 led = 0x2; alt_u8 dir = 0; alt_u8 a=0; volatile int i; while (1) { if (led & 0x09) { dir = (dir ^ 0x1); } if (dir) { led = led >> 1; } else { led = led << 1; } // LED显示 //IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE, led); // 往中断端点发 IOWR(FREEDEV_USB11_0_BASE,EP5_ADDR,led); i = 0; while (i<200000) i++; } return 0;}int main (){ init_usb(); led_run();}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -