u16 rcv_num; u8 read_cnt; u8 i;
u16 temp; u8 j = 0;
//½ÓÊÕµ½µÄÊý¾Ý
rcv_num = USB_CNT0_RX & 0x03FF; //{
// unsigned char s[32] = {0};
// sprintf((char*)s, \¶Ëµã0¶ÁÈ¡¡¾%d¡¿×Ö½ÚÊý¾Ý:\ // USART_send_str(s); //} //USART_send_str(\ //¶ÁÈ¡´ÎÊý read_cnt = (rcv_num+1)>>1; for(i=0;i //¶ÁÈ¡¶Ëµã1ÊÕµ½µÄÊý¾Ý u8 USB_read_EP1_buf(u8 *buf, u32 *USB_buf) { u16 rcv_num; u8 read_cnt; u8 i; u16 temp; u8 j = 0; //½ÓÊÕµ½µÄÊý¾Ý rcv_num = USB_CNT1_RX & 0x03FF; { } unsigned char s[32] = {0}; sprintf((char*)s, \¡¾¶Ëµã1¡¿¶ÁÈ¡¡¾%d¡¿×Ö½ÚÊý¾Ý:\USART_send_str(s); USART_send_str(\ //¶ÁÈ¡´ÎÊý read_cnt = (rcv_num+1)>>1; for(i=0;i //ͨ¹ý¶Ëµã0·¢ËÍÊý¾Ý void USB_write_EP0_buf(u8 *buf, u32 *USB_buf, u8 len) { u8 send_cnt; u8 i; u8 j = 0; u16 h,l; // { // unsigned char s[32] = {0}; // sprintf((char*)s, \¶Ëµã0·¢ËÍ¡¾%d¡¿×Ö½ÚÊý¾Ý:\// USART_send_str(s); // } // // USART_send_str(\+++++++\\r\\n\ // for(i=0;i //·¢ËÍ´ÎÊý send_cnt = (len+1) >> 1; for(i=0;i //Òª·¢ËÍÊý¾ÝµÄ³¤¶È USB_CNT0_TX = len; //ʹÄÜ·¢ËÍ£ºÉèÖÃVALID { u16 t = EP0REG; t &= 0x8F8F;//1000 1111 1000 1111 °Ñ tλ¶¼ÉèÖÃΪ0 t |= 0x8080;//1000 0000 1000 0000 °Ñw0λ¶¼ÉèÖÃΪ1 switch(EP0REG & 0x0030) { case 0x0000: t |= 0x0030;break; case 0x0010: t |= 0x0020;break; case 0x0020: t |= 0x0010;break; case 0x0030: t |= 0x0000;break; } EP0REG = t; } } //ͨ¹ý¶Ëµã1·¢ËÍÊý¾Ý void USB_write_EP1_buf(u8 *buf, u32 *USB_buf, u8 len) { u8 send_cnt; u8 i; u8 j = 0; u16 h,l; { unsigned char s[32] = {0}; sprintf((char*)s, \¶Ëµã1·¢ËÍ¡¾%d¡¿×Ö½ÚÊý¾Ý:\ USART_send_str(s); } USART_send_str(\+++++++\\r\\n\ for(i=0;i } USART_send_str(\+++++++\\r\\n\\r\\n\ //·¢ËÍ´ÎÊý send_cnt = (len+1) >> 1; for(i=0;i //·¢ËÍÊý¾Ý¸øÖ÷»ú£¬Ìṩ¶Ëµã0 void USB_ep0_send(void) { if(send_len_ep0 > dev_d[7])//Èç¹ûÐèÒª·¢ËÍÊý¾Ý³¤¶È´óÓڶ˵ã0µÄ×î´ó³¤¶È:·Ö°ü·¢ËÍ { USB_write_EP0_buf(p_send_ep0, ((u32*)(PMAAddr+32*2)), dev_d[7]); send_len_ep0 -= dev_d[7]; p_send_ep0 += dev_d[7]; } else//ÐèÒª·¢Ë͵ÄÊý¾Ý³¤¶ÈСÓÚµÈÓڶ˵ã0µÄ×î´ó°ü³¤ { if(send_len_ep0 != 0)//Ò»´ÎÄܹ»·¢ËÍÍê³É { USB_write_EP0_buf(p_send_ep0, ((u32*)(PMAAddr+32*2)), send_len_ep0); send_len_ep0 = 0; } else//µÈÓÚ0 { if(need_0_pack_ep0 == 1) { need_0_pack_ep0 =0; USB_write_EP0_buf(p_send_ep0, ((u32*)(PMAAddr+32*2)), 0); } } } } //¶Ëµã0ö¾Ù¹ý³Ì´¦Àí void ep0_setup_Process(void) { //¶ÁÈ¡½ÓÊÕµ½µÄÊý¾Ý USB_read_EP0_buf(USB_rcv_buffer, (u32*)(PMAAddr+96*2)); req_type = USB_rcv_buffer[0]; req = USB_rcv_buffer[1]; w_value = (USB_rcv_buffer[3]<<8) | USB_rcv_buffer[2]; w_index = (USB_rcv_buffer[5]<<8) | USB_rcv_buffer[4]; w_length = (USB_rcv_buffer[7]<<8) | USB_rcv_buffer[6]; if(req_type & 0x80)//ÊäÈëÇëÇó { switch((req_type>>5) & 0x03)//ÇëÇóµÄÀàÐÍ { case 0://±ê×¼ÇëÇó.Ê¡ÂÔÁ˶ԡ°ÇëÇóµÄ½ÓÊÕÕß¡±µÄÅÐ¶Ï { //USART_send_str(\±ê×¼ÊäÈëÇëÇó£º\switch(req)//±ê×¼ÇëÇó´úÂë { case 0://»ñȡ״̬ { //USART_send_str(\»ñȡ״̬\\r\\n\} break; case 6://»ñÈ¡ÃèÊö·û { //USART_send_str(\»ñÈ¡ÃèÊö·û¡ª¡ª\ switch((w_value>>8) & 0xFF)//ÃèÊö·ûÀàÐÍ { case 1://É豸ÃèÊö·û { //USART_send_str(\É豸ÃèÊö·û\\r\\n\p_send_ep0 = (u8*)dev_d;//É豸ÃèÊö·ûÊý×é if(w_length > dev_d[0])//Èç¹ûÇëÇóµÄÊý¾Ý´óÓÚÃèÊö·û³¤¶È£¬·µ»ØÃèÊö·û³¤¶È×î´ó³¤¶È { send_len_ep0 = dev_d[0];//18 if((send_len_ep0 % dev_d[7]) == 0) { need_0_pack_ep0 = 1;//Êǰü³¤µÄÕûÊý±¶£¬ÐèÒª·¢ËÍ0³¤¶ÈÊý¾Ý°ü } } else//ÇëÇ󳤶ÈСÓÚµÈÓÚÃèÊö·û³¤¶È£¬Ôò·µ»ØÇëÇ󳤶È