亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.c

?? 一個很穩定的C語言寫的USB controller 源代碼,注釋很詳細
?? C
?? 第 1 頁 / 共 3 頁
字號:
union                                    //端點最后處理狀態
{
 unsigned char Register;
 struct
 {
  unsigned char successful          :1;
  unsigned char error_code          :4;
  unsigned char setup_packet        :1;
  unsigned char data_1              :1;
  unsigned char prestatus_not_read  :1;
 }Status;
}Last_Status;


//*****************   延時x毫秒函數 ***********
void delay(unsigned int x)                
{
 unsigned int i;
 unsigned int j;
 for(i=0;i<x;i++)
 for(j=0;j<230;j++);
}
//********************************************


void write_usb_command(unsigned char usb_command)       //寫USB命令
{
 USB_A0=USB_COMMAND_ADD;
 USB_DATA=usb_command;
 USB_WR=0;
 USB_WR=1;
 USB_DATA=0xFF;
}

void write_a_usb_data(unsigned char usb_data)        //寫一字節USB數據
{
 USB_A0=USB_DATA_ADD;
 USB_DATA=usb_data;
 USB_WR=0;
 USB_WR=1;
 USB_DATA=0XFF;
}

unsigned char read_a_usb_data(void)                  //讀一字節USB數據
{
 unsigned char temp;
 USB_A0=USB_DATA_ADD;
 USB_RD=0;
 temp=USB_DATA;
 USB_RD=1;
 return temp;
}


void read_interrupt_register(void)             //讀USB中斷寄存器
{
 write_usb_command(Read_Interrupt_Register);
 Interrupt_Register.Register[0]=read_a_usb_data();
 Interrupt_Register.Register[1]=read_a_usb_data();
}

void set_usb_addr(unsigned char addr)          //設置USB地址
{
 write_usb_command(Set_Address);
 write_a_usb_data(0x80|addr);
}

void set_endpoint_enable(void)                  //端點使能
{
 write_usb_command(Set_Endpoint_Enable);
 write_a_usb_data(0x01);
}

unsigned char select_endpoint(unsigned char endp)   //選擇終端點
{
 write_usb_command(Select_EndPoint+endp);
 return read_a_usb_data();
}

unsigned char  read_last_status(unsigned char endp)   //讀端點最后狀態
{
 write_usb_command(Read_Last_Status+endp);
 return read_a_usb_data();
}

void set_endpoint_status(unsigned char endp,unsigned char status)  //設置端點狀態
{
 write_usb_command(0x40+endp);
 write_a_usb_data(!status);
}

unsigned char read_endpoint_status(unsigned char endp)           //讀端點狀態
{
 write_usb_command(0x80+endp);
 return read_a_usb_data();
}

void clear_buffer(void)                        //清緩沖,在讀取緩沖數據后調用
{
 write_usb_command(Clear_Buffer);
}

void validate_buffer(void)                    //緩沖區數據有效,在寫緩沖后調用
{
 write_usb_command(Validate_Buffer);
}

void ack_setup(unsigned char endp)            //應答建立包
{
 select_endpoint(endp);
 write_usb_command(Ack_Setup);
}

void error(unsigned char number)             //出錯處理
{
// unsigned char Error[]={"ERROR: "};
// prints(Error);
// printc(number);
 number=0;
}

unsigned char read_endpoint_buff(unsigned char endp,unsigned char len,unsigned char * buff)   //讀終端點緩沖
{
 unsigned char i,j;
 read_last_status(endp);
 if(!(select_endpoint(endp))&0x01){error(0); return 0;}
 read_endpoint_status(endp);
 write_usb_command(Read_Buffer);
 read_a_usb_data();
 j=read_a_usb_data();
 if(j>len)
  j=len;
 for(i=0;i<j;i++)
  {
   USB_RD=0;
   *(buff+i)=USB_DATA;
   USB_RD=1;
  }
 clear_buffer();
 return j;
}

unsigned char write_endpoint_buff(unsigned char endp,unsigned char len,unsigned char * buff)    //寫終端點緩沖
{
 unsigned char i;
 read_last_status(endp);
 select_endpoint(endp);
 write_usb_command(Write_Buffer);
 write_a_usb_data(0);
 write_a_usb_data(len);
 for(i=0;i<len;i++)
  {
   USB_DATA=*(buff+i);
   USB_WR=0;
   USB_WR=1;
  }
 USB_DATA=0XFF;
 validate_buffer();
 return len;
}

void disconnect_usb(void)
{
 write_usb_command(0xf3);
 write_a_usb_data(0x0e);
 write_a_usb_data(0x47);
 delay(100);
}

void connect_usb(void)                            //連接USB
{
 write_usb_command(0xf3);                         //初始化USBD12
 write_a_usb_data(0x1e);                          //連接USB
 write_a_usb_data(0x47);                          //設置頻率
}

void init_usb(void)                              //初始化USB
{
 set_usb_addr(0);
 set_endpoint_enable();
}

void usb_bus_reset(void)                         //USB總線復位處理
{
// code unsigned char Usb_Bus_Reset[]={"USB BUS RESET"};
// prints(Usb_Bus_Reset);
 usb_flags.Register=0;
 set_endpoint_enable();
 SCSI.Status.Command=1;
 SCSI.Status.Data=0;
 csw.dCSWSignature=0x55534253;

}

void usb_bus_suspend(void)                       //USB總線掛起處理
{
// code unsigned char Usb_Bus_Suspend[]={"USB BUS SUSPEND"};
// prints(Usb_Bus_Suspend);
// send_to_comport(10);
}

void set_usb_address(void)                       //設置地址
{
 usb_flags.flags.set_addr=1;
 while(select_endpoint(1)&0x01);
 write_endpoint_buff(1,0,0);
 set_usb_addr(Control_Data.DeviceRequest.wValue);
 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
}

void get_status(unsigned char receiver)           //獲取狀態響應
{
 unsigned char status[2];
 switch (receiver)
  {
   case 0:                        //獲取設備狀態
    status[0]=0x00;
    status[1]=0x00;
    break;
   case 1:                        //獲取接口狀態
    status[0]=0x00;
    status[0]=0x00;
    break;
   case 2:                        //獲取端點狀態
    status[0]=0x00;
    status[1]=0x00;
    break;
   }
  write_endpoint_buff(1,2,status);
  usb_flags.flags.usb_endp0_in=0;
}

void clear_feature(unsigned char receiver)    
{
 receiver=0;
 write_endpoint_buff(1,0,0);
 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
}

void set_feature(unsigned char receiver)
{
 receiver=0;
 write_endpoint_buff(1,0,0);
 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
}

void set_descriptor(void)
{
 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
}

void set_configuration(void)
{
 write_endpoint_buff(1,0,0);
 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
}

void get_configuration(void)               //獲取配置狀態
{
 unsigned char value=0x01;
 write_endpoint_buff(1,1,&value);
 usb_flags.flags.usb_endp0_in=0;
}

void set_interface(void)                   //設置接口
{
 write_endpoint_buff(1,0,0);
 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
}

void get_interface(void)                  //獲取接口狀態
{
 unsigned char value=0x01;
 write_endpoint_buff(1,1,&value);
 usb_flags.flags.usb_endp0_in=0;
}

void get_max_LUN(void)                   //獲取磁盤最大邏輯單元號
{
 unsigned char max_LUN=MAX_LUN;          //只有一個邏輯單元
 write_endpoint_buff(1,1,&(max_LUN));
 usb_flags.flags.usb_endp0_in=0; 
}

void mass_storage_reset(void)            //USB大容量存儲設備復位
{
 write_endpoint_buff(1,0,0);
 usb_flags.flags.usb_endp0_in=0;
 usb_flags.flags.setup_packet_out=0;
 SCSI.Status.Command=1;
 SCSI.Status.Data=0;
}


void get_descriptor(void)                    //獲取描述符
{
    if(!usb_flags.flags.not_end)
     {
      switch(MSB(Control_Data.DeviceRequest.wValue))
	   {
        case DEVICE_DESCRIPTOR:
	         Control_Data.wCount=sizeof(DEVICE_DESCRIPTOR_STRUCT);
 	         Control_Data.pData=(unsigned char *)(&device_descriptor);
             break;
        case CONFIGURATION_DESCRIPTOR:
             Control_Data.wCount=SWAP(con_int_endp_descriptor.configuration_descriptor.wTotalLength);
			 Control_Data.pData=(unsigned char *)(&con_int_endp_descriptor);
             if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
             break;
		case STRING_DESCRIPTOR:
		     if(LSB(Control_Data.DeviceRequest.wValue)==0)
			  {
			   Control_Data.wCount=LANGUAGE_ID[0];
               Control_Data.pData=LANGUAGE_ID;
			  }
		     if(LSB(Control_Data.DeviceRequest.wValue)==2)
			  {
			   Control_Data.wCount=device_serial_number[0];
			   Control_Data.pData=device_serial_number;
			  }
			 break;
	   	}
      if(Control_Data.wLength<Control_Data.wCount)Control_Data.wCount=Control_Data.wLength;
	 }

    if(Control_Data.wCount>=MAX_CONTROL_DATA_SIZE)
     {
	  write_endpoint_buff(1,MAX_CONTROL_DATA_SIZE,Control_Data.pData);
	  Control_Data.pData+=MAX_CONTROL_DATA_SIZE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久综合网色—综合色88| 午夜影院久久久| 制服视频三区第一页精品| av在线不卡电影| 国产成人在线电影| 国产一二精品视频| 国产a级毛片一区| www.亚洲在线| 欧美在线影院一区二区| 欧美日韩一区不卡| 欧美一级电影网站| 久久一区二区视频| 中文字幕中文字幕在线一区| 国产精品亲子乱子伦xxxx裸| 亚洲精品欧美专区| 日本vs亚洲vs韩国一区三区| 久久精品99久久久| av亚洲精华国产精华精| 色网综合在线观看| 欧美一级搡bbbb搡bbbb| 久久久久国色av免费看影院| 亚洲视频一二三| 丝袜美腿亚洲综合| 国产一区二区三区黄视频| 99在线精品一区二区三区| 欧美日韩一级二级三级| 精品免费视频一区二区| 综合电影一区二区三区| 丝袜美腿高跟呻吟高潮一区| 国产成人在线影院| 欧美视频一区在线| 国产日韩欧美精品综合| 亚洲成人动漫精品| 国产乱子伦视频一区二区三区| 色综合久久久久久久| 日韩欧美色电影| 亚洲日本va在线观看| 久久国产精品第一页| 色偷偷久久一区二区三区| 日韩欧美一二区| 亚洲国产一区视频| 国产suv一区二区三区88区| 欧美精品在欧美一区二区少妇| 国产午夜亚洲精品不卡| 日韩专区在线视频| 91免费国产在线| 精品国产一区二区三区四区四 | 日韩在线a电影| 国产成人在线视频免费播放| 56国语精品自产拍在线观看| 国产精品欧美久久久久无广告| 蜜臀av一级做a爰片久久| 91丨porny丨蝌蚪视频| 久久久久高清精品| 极品少妇一区二区| 91精品黄色片免费大全| 亚洲国产成人av好男人在线观看| 成人丝袜18视频在线观看| 欧美成人官网二区| 久久99九九99精品| 欧美男人的天堂一二区| 亚洲精品国产无套在线观| 国产91精品露脸国语对白| 精品久久人人做人人爰| 日韩精品一卡二卡三卡四卡无卡| 一本大道久久a久久综合| 日本一区二区三区视频视频| 国产一区二区在线观看免费| 欧美一区二区免费观在线| 日本中文字幕不卡| 91精品国产入口| 青青草视频一区| 欧美一区二区网站| 麻豆高清免费国产一区| 日韩午夜电影av| 久久99久久久久| 精品日韩一区二区| 国产精品一二三四| 中文字幕二三区不卡| heyzo一本久久综合| 国产精品美女久久久久aⅴ| 国产成人免费视频网站| 国产精品乱码一区二区三区软件| 国产成人精品免费| 国产精品国产三级国产普通话三级 | 久久久久久久久久久久久夜| 国产在线不卡视频| 久久久精品天堂| 成人av在线一区二区| 亚洲精品高清在线| 91精品国产高清一区二区三区蜜臀| 天堂一区二区在线| www久久精品| 成人av在线资源网站| 一区二区激情视频| 欧美一级高清片| 不卡影院免费观看| 亚洲国产精品欧美一二99| 日韩一级高清毛片| 懂色av一区二区三区免费观看| 国产精品久久一级| 欧美日韩精品一区二区三区四区| 日韩电影免费在线观看网站| 久久在线免费观看| 色婷婷精品大在线视频| 毛片av一区二区| 中文字幕佐山爱一区二区免费| 在线播放一区二区三区| 激情文学综合插| 日韩美女视频一区| 26uuu亚洲综合色| 在线亚洲欧美专区二区| 国产一区二区网址| 一区二区三区欧美日韩| 精品成人免费观看| 在线观看日韩电影| 国产老肥熟一区二区三区| 亚洲欧洲日韩在线| 欧美一区二区三区四区视频| 不卡av在线免费观看| aa级大片欧美| 亚洲777理论| 国产精品亲子伦对白| 555www色欧美视频| 91在线播放网址| 国产精品自产自拍| 免费av网站大全久久| 18成人在线观看| 久久久亚洲午夜电影| 日韩一级黄色片| 欧美日韩一区在线| 色婷婷久久久亚洲一区二区三区 | 国产欧美日韩综合| 91麻豆精品国产91久久久资源速度| 国产精品18久久久久久久网站| 天天影视涩香欲综合网| 亚洲男女一区二区三区| 国产精品无遮挡| 久久亚洲私人国产精品va媚药| 欧美精品精品一区| 欧美亚洲高清一区二区三区不卡| 成人avav影音| 不卡一区在线观看| 丁香天五香天堂综合| 韩国成人精品a∨在线观看| 青草av.久久免费一区| 亚洲成av人片在线观看无码| 亚洲一区二区在线视频| 一区二区三区欧美日韩| 亚洲一区欧美一区| 国产在线国偷精品产拍免费yy| 蜜臀av亚洲一区中文字幕| 日本免费新一区视频| 免费在线观看不卡| 青草av.久久免费一区| 日本不卡在线视频| 日本午夜一区二区| 免费在线观看一区二区三区| 男男gaygay亚洲| 国产一区二区三区精品欧美日韩一区二区三区 | 洋洋av久久久久久久一区| 亚洲欧洲日韩综合一区二区| 亚洲三级在线观看| 亚洲国产成人精品视频| 丝袜美腿亚洲一区二区图片| 老汉av免费一区二区三区| 韩国一区二区视频| 成人a级免费电影| 欧美中文一区二区三区| 91精品国产欧美日韩| 久久日一线二线三线suv| 亚洲国产精品精华液2区45| 综合久久给合久久狠狠狠97色| 亚洲伊人色欲综合网| 久久国产人妖系列| 成人精品在线视频观看| 91官网在线免费观看| 欧美一级高清片在线观看| 欧美国产97人人爽人人喊| 亚洲国产一区二区视频| 韩国v欧美v日本v亚洲v| 一本到高清视频免费精品| 欧美高清激情brazzers| 国产欧美日韩中文久久| 曰韩精品一区二区| 国模大尺度一区二区三区| 日本久久一区二区| 精品三级av在线| 伊人夜夜躁av伊人久久| 国内一区二区在线| 欧美体内she精高潮| 久久久久国产一区二区三区四区| 亚洲伊人伊色伊影伊综合网| 久久99九九99精品| 精品国产伦理网| 亚洲一区精品在线| 成人91在线观看| 精品福利av导航| 日本欧美一区二区三区| 色吧成人激情小说|