⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hello_world.c

📁 该范例使用FreeDev_usb11 ip core支持开发板成为USB HOST的 设备(常见的是PC机)。
💻 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 + -