iusbprocessdatafromhost.c

来自「How to control USB interface under SZ pl」· C语言 代码 · 共 41 行

C
41
字号
// This routine is called by interrupt handler (triggered by OUT endpoint) to handle data
// received from host.

#include "usb_pptt.h"
#include "usb_pdef.h"
#include "usb_pvar.h"

void _iUsbProcessDataFromHost()
{
    U8  i;

    if (_gUsbNumSector > 0)
    {   
        // check whether FIFO contains at least one packet of data 
        while ((_reg_USB_EP3_STAT & 0xFF0000) >= 0x400000)
        {
            // read FIFO dta to buffer
            for (i=0; i<32; i++)
            {
                *(_gpUsbBufPtr++) = _reg_USB_EP3_FDAT;
            }
            _gUsbPacketCount++; // increment packet count        
        
            // check whether one sector (512 bytes = 8 packets) of data has been received
            if (_gUsbPacketCount == 8)
            {
                _gUsbPacketCount = 0;   // reset packet counter
                _iUsbWriteSector();     // write data to sector
                // check whether the last sector has been received
                // if yes, send back acknowledgement
                if (_gUsbNumSector == 0)
                {
                    _reg_USB_EP4_FCTRL |= 0x20000000;   // next write is last one in packet
                    _reg_USB_EP4_FDAT = 0x5000;
                    return;                
                }
            }
        }        
    }
}

⌨️ 快捷键说明

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