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

📄 bulkcmd.c

📁 增强型51单片机fs7821usb读写程序
💻 C
字号:
/*
**********************************************************************************************
* Project:	TK7821
* File:		BulkCmd.c
* Contents: 
*           
*
* $Date: 02/25/05    Jason    v0.1
*        04/21/05    Mingo    v0.2   www.fameg.com
*        06/24/05    Mingo    v0.3
*
* Copyright (c) 2005 Fameg, Inc. All rights reserved
***********************************************************************************************
*/

#include <reg51.h>
#include <string.h>
#include "sotatype.h"
#include "usbdisk.h"
#include "device.h"
#define DMA_BUFFER0 0x4000
#define DMA_BUFFER1 0x4200

UINT16 RxDataLen,UsbDmaBuffer;

//----------------------------------------------------------------------------
UINT16 BulkGetRxBufAddr()
{
  return (CSRRead(USB_BASE + EP2_RXCSR) & RX2_FIFO_NUM)? DMA_BUFFER1: DMA_BUFFER0;
}  

//----------------------------------------------------------------------------
// Free buffer, allow H/W to use again and return fifo clk to USB.
//----------------------------------------------------------------------------
void BulkFreeBuffer()
{
  FifoClkUsb(UsbDmaBuffer); 
  CSRWrite(USB_BASE + EP2_RXCSR, EN_RX2); // Hardware rely on EN_RX2 to keep state,
                   // so NEVER set EN_RX2 twice or more for one data packet
}	   

//----------------------------------------------------------------------------
void UsbBulkIntHandler(BYTE IntEvent)
{	
	BYTE RegValue;
	UINT16 RxDataLen;

  /* If received packet was OUT. The first thing is get the FIFO position.(0x4000 or 0x4200)
     Otherwise clear IRQ will also clear the FIFO position record. */
//     if(IntEvent & IRQ_RX2)
//     {
     	UsbDmaBuffer = BulkGetRxBufAddr();

	// Clear IRQs.   
		CSRWrite(USB_BASE + EPIE, ~IntEvent);    //must set after BulkGetRxBufAddr()-- FIFO select  Jason  04/29/2005
     	
     	((TDataCast *)&RxDataLen)->ucByte[0] = CSRRead(USB_BASE + EP2_RXCNT1);
        ((TDataCast *)&RxDataLen)->ucByte[1] = CSRRead(USB_BASE + EP2_RXCNT0);
        
        FifoClkCpu(UsbDmaBuffer);
		RegValue = (UsbDmaBuffer == DMA_BUFFER1)? TX1_FIFO_NUM: 0x00; // switch fifo

		FifoClkUsb(UsbDmaBuffer); 
		CSRWrite(USB_BASE + EP1_TXCNT1, ((TDataCast *)&RxDataLen)->ucByte[0]);
  		CSRWrite(USB_BASE + EP1_TXCNT0, ((TDataCast *)&RxDataLen)->ucByte[1]);
       // Set DMA IN enable.

  		CSRWrite(USB_BASE + EP1_TXCSR, EN_TX1 | RegValue);
  		BulkFreeBuffer();
 // 	}
	return;
}
  

⌨️ 快捷键说明

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