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

📄 function.c

📁 USB2.0原理与工程开发光盘(第二版)
💻 C
字号:
#pragma NOIV

#include "testheader.h"
#include "testregs.h"

extern BOOL	Rwuen;     
extern BOOL	GotSUD;	
extern BOOL	Sleep;
extern BOOL	Selfpwr;

BOOL	TestISO;
BOOL    StartGo;

BYTE	Configuration;	
BYTE	AlternateSetting;	
BYTE    suspCount;

void TD_Init(void) 	
{
    int i;
    TestISO=FALSE;
    StartGo=FALSE;
  
    USBIEN |= bmSOF + bmURES; 

    OUTISOVAL = bmEP8 + bmEP9 + bmEP10 + bmEP11 + bmEP12 + bmEP13 + bmEP14 + bmEP15;
    INISOVAL = bmEP8 + bmEP9 + bmEP10 + bmEP11 + bmEP12 + bmEP13 + bmEP14 + bmEP15;

    OUT8ADDR = 0x00;
    OUT9ADDR = 0x10;
    OUT10ADDR = 0x20;
    IN8ADDR = 0x30;
    IN9ADDR = 0x40;
    IN10ADDR = 0x50;

    suspCount = 1;           
    Rwuen = TRUE;	       
    
    PORTACFG = 0x10;         
    OEA = 0xEF;             

    PORTBCFG = 0x00;        
    OEB = 0xFF;             
    OUTB =0xFF;           
    
    PORTCCFG = 0x00;
    OEC = 0xF3;           

    OUTA =(PINSA)|0x40;     
    OUTA =(PINSA)&0x7F;     
   
    OUTC =(PINSC)&0x0F;        
  
    OUTC =(PINSC)&0xFE;         
    OUTC =(PINSC)&0xFE;         
    OUTC =(PINSC)|0x01;         
    OUTC =(PINSC)|0x01;   
 
    OUTC =(PINSC)|0x02;       

    OUTC =(PINSC)&0x3F;       
    
    OUTC =(PINSC)|0x40;       
    OUTC =(PINSC)&0x7F;       
 
    for(i=0;i<15;i++)
    {
       OUTC =(PINSC)&0xDF;        
       OUTC =(PINSC)|0x10;       
       OUTC =(PINSC)|0x20;       
    }

    OUTC =(PINSC)&0xEF;       
    OUTC =(PINSC)&0xDF;      
}

void TD_Poll(void) 		
{
int i,j;
if (StartGo)   
{   
     if((PINSC)&0x08)   
     {  
        FASTXFR = 0x40; 
        for (j=0; j < 8; j++)   
        {
            AUTOPTRH = 0x7C;   
            AUTOPTRL = 0xC0;
            for (i=0; i < 8; i++)      
            {
                 ACC = AUTODATA;
                 ACC = AUTODATA;
                 ACC = AUTODATA;
                 ACC = AUTODATA;
                 ACC = AUTODATA;
                 ACC = AUTODATA;
                 ACC = AUTODATA;
                 ACC = AUTODATA;
             }    
        }
   FASTXFR = 0x0; 
  }
}
}

BOOL TD_Suspend(void) 	    
{                             
   return(TRUE);
}      

BOOL TD_Resume(void) 			        
{
	return(TRUE);                           
}
BOOL DR_GetDescriptor(void)                     
{	
	return(TRUE);                           
}
BOOL DR_GetInterface(void) 		        
{
	IN0BUF[0] = AlternateSetting;
	EZUSB_SET_EP_BYTES(IN0BUF_ID,1);
	return(TRUE);				
}
BOOL DR_SetInterface(void) 		        
{
	AlternateSetting = SETUPDAT[2];
	return(TRUE);				
}
BOOL DR_GetConfiguration(void)	                
{
	IN0BUF[0] = Configuration;
	EZUSB_SET_EP_BYTES(IN0BUF_ID,1);
	return(TRUE);				
}
BOOL DR_SetConfiguration(void)	                
{
	Configuration = SETUPDAT[2];
	return(TRUE);				
}

BOOL DR_GetStatus(void)                         
{
	return(TRUE);                           
}
BOOL DR_ClearFeature(void)                      
{
	return(TRUE);                           
}

BOOL DR_SetFeature(void)                        
{
	return(TRUE);                           
}

BOOL DR_VendorCmnd(void)
{
        return(FALSE);
}

void ISR_Sudav(void) interrupt USB_VECT
{
	GotSUD = TRUE;				

	EZUSB_IRQ_CLEAR();
	USBIRQ = bmSUDAV;			
}

void ISR_Sutok(void) interrupt USB_VECT
{
	EPIO[OUT0BUF_ID].cntrl = 0;	    

	EZUSB_IRQ_CLEAR();
	USBIRQ = bmSUTOK;			
}

void ISR_Sof(void) interrupt USB_VECT
{
   register BYTE zbcout = ZBCOUT;

   int i;
  
   if (!(zbcout & bmEP8))
   {
       if (OUT8DATA==0x55)       
       {             
          OUTC =(PINSC)|0x80;       

          OUTC =(PINSC)&0xFD;  
       }
   }

   if (!(zbcout & bmEP9))
   {
       if(OUT9DATA==0xAA)
       {      
        OUTC =(PINSC)&0x7F;    

        OUTC =(PINSC)|0x02;        

        OUTA =(PINSA)&0x7F;      
       
        StartGo = FALSE;
       }
   }

   if (!(zbcout & bmEP10))
   {
    if (((OUT10BCH << 8) + OUT10BCL)==64)
    {  
       OUTA =(PINSA)|0x80;         
    }
    else
    {   
	   OUTA =(PINSA)&0x7F;           
    }  
    for (i=0; i < 64; i++)            
    {
          OUT4BUF[i] = OUT10DATA;
    }
    StartGo = TRUE; 
   }		
   EZUSB_IRQ_CLEAR();
   USBIRQ = bmSOF;		
}


void ISR_Ures(void) interrupt USB_VECT
{
	EZUSB_IRQ_CLEAR();
	USBIRQ = bmURES;	
}

void ISR_Spare(void) interrupt USB_VECT
{
	                                   
}

void ISR_Susp(void) interrupt USB_VECT
{
   if (suspCount)
   {
           suspCount--;
   }
   else
   {
	   Sleep = TRUE;
   }
	   EZUSB_IRQ_CLEAR();
	   USBIRQ = bmSUSP;
}

void ISR_Ep0in(void) interrupt USB_VECT
{
}

void ISR_Ep0out(void) interrupt USB_VECT
{
}

void ISR_Ep1in(void) interrupt USB_VECT
{
}
void ISR_Ep1out(void) interrupt USB_VECT
{
}

void ISR_Ep2in(void) interrupt USB_VECT
{
}

void ISR_Ep2out(void) interrupt USB_VECT
{
}

void ISR_Ep3in(void) interrupt USB_VECT
{  
}

void ISR_Ep3out(void) interrupt USB_VECT
{
}

void ISR_Ep4in(void) interrupt USB_VECT
{
}

void ISR_Ep4out(void) interrupt USB_VECT
{
}

void ISR_Ep5in(void) interrupt USB_VECT
{
}

void ISR_Ep5out(void) interrupt USB_VECT
{
}

void ISR_Ep6in(void) interrupt USB_VECT
{
}

void ISR_Ep6out(void) interrupt USB_VECT
{
}

void ISR_Ep7in(void) interrupt USB_VECT
{
}

void ISR_Ep7out(void) interrupt USB_VECT
{
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -