www.pudn.com > FIFODATAWRITE.rar > FIFODATAWRITE.c


 
//..................................................................................  
void  UsbDataWrite(INT8U *pReadBuffer, INT16U DataLen)		 //pReadBuffer = 位址 
{ 
    UsbDataIn(pReadBuffer, DataLen); 
} 
//..................................................................................  
void  UsbDataIn(INT8U *pReadBuffer, INT16U DataLen) 
{ 
    if (!(EPAFIFOCS & bmFIFO0_FULL))	   //bmFIFO0_FULL =  0x04  若未飽和則成立 
    { 
        FifoIn(pReadBuffer, DataLen); 
    } 
 
    if (!(EPAFIFOCS & bmFIFO0_FULL)) 
    { 
        SendDataCmd(); 
    } 
} 
 
//..................................................................................  
void  FifoIn(INT8U *pReadBuffer, INT16U DataLen) 
{ 
     union 
    { 
        INT8U   Val; 
        struct 
        { 
            INT8U   Count0 : 3; 
            INT8U          : 1; 
            INT8U   Count1 : 3; 
            INT8U          : 1; 
        } Bit; 
    } HighReg;   
 
    Length.Val              = DataLen;	   //2byte 
    HighReg.Val             = EPACNTH;	   //1byte 
 
    EPACNT0L                = Length.Byte[1];          				// Write count low byte	 len & 0x00ff; 
    HighReg.Bit.Count0      = Length.Byte[0] & 0x07; 
    HighReg.Val             = HighReg.Val | bmCNT0HWEN;					 //bmCNT0HWEN =0x08   Write Enable of EP_CNT0[10:8] 
    EPACNTH                 = HighReg.Val;             				// Write count high byte 
    UsbDmaBuffer            = DMA_FIFOA0;             				// Get FIFO address	 DMA_FIFOA0  0xEC00    512 Byte Data FIFO A0 
 
    memcpy((INT8U xdata *)UsbDmaBuffer, pReadBuffer, DataLen);			// Copy data 
} 
//..................................................................................  
void  SendDataCmd(void) 
{																		//bmFIFO0_FULL = 0x04 
                                                       					//bmFIFO0_FULL_WE = 0x40 
    EPAFIFOCS   = (EPAFIFOCS | bmFIFO0_FULL_WE) | bmFIFO0_FULL;			// Set FULL bit 
 
    EPACS       = EPACS | bmEP_RXTXEN;                 				    // Enable RXTX 
} 
//..................................................................................  
union FIFODataLen 
{ 
    INT16U  Val; 
    INT8U   Byte[2]; 
};