📄 bulkcmd.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 + -