📄 usbin.c
字号:
/****************************************************************
NAME: usbin.c
DESC: usb bulk-IN operation
HISTORY:
Mar.25.2002:purnnamu: ported for S3C2410X.
****************************************************************/
#include <string.h>
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "def.h"
#include "2410usb.h"
#include "usbmain.h"
#include "usb.h"
#include "usblib.h"
#include "usbsetup.h"
#include "usbin.h"
//static void PrintEpiPkt(U8 *pt,int cnt);
// ===================================================================
// All following commands will operate in case
// - in_csr1 is valid.
// ===================================================================
#define SET_EP1_IN_PKT_READY() rIN_CSR1_REG= ( in_csr1 &(~ EPI_WR_BITS)\
| EPI_IN_PKT_READY ) //IN_CSR1_REG=0x01
#define SET_EP1_SEND_STALL() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)\
| EPI_SEND_STALL) )
#define CLR_EP1_SENT_STALL() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)\
&(~EPI_SENT_STALL) )
#define FLUSH_EP1_FIFO() rIN_CSR1_REG= ( in_csr1 & (~EPI_WR_BITS)\
| EPI_FIFO_FLUSH) )
// ***************************
// *** VERY IMPORTANT NOTE ***
// ***************************
// Prepare the code for the packit size constraint!!!
// EP1 = IN end point.
U8 ep1Buf[EP1_PKT_SIZE];
int transferIndex=0;
U8 CSW_Block[13];
extern U8 CBW_Block[31];
extern U8 TR_Flag;
extern U32 dCSWDataResidue;
void PrepareEp1Fifo(U8 *buf,int num)
{
int i;
U8 in_csr1;
rINDEX_REG=1;
in_csr1=rIN_CSR1_REG;
WrPktEp1(buf,num);//Write data (byte) to EP1 FIFO from ep1Buf[]
if(num<EP1_PKT_SIZE)
{
SET_EP1_IN_PKT_READY();//IN_CSR1_REG=0x01
}
//while(rIN_CSR1_REG&EPI_IN_PKT_READY);
}
void Return_CSW(void)
{
int i;
U8 in_csr1;
rINDEX_REG=1;
in_csr1=rIN_CSR1_REG;
memset(CSW_Block,0,32);
CSW_Block[0]=0x55;
CSW_Block[1]=0x53;
CSW_Block[2]=0x42;
CSW_Block[3]=0x53;
for(i=4;i<8;i++)
CSW_Block[i]=CBW_Block[i];
CSW_Block[8]=(U32)dCSWDataResidue;
WrPktEp1((U8 *)&CSW_Block,13);
SET_EP1_IN_PKT_READY();
//while(rIN_CSR1_REG&EPI_IN_PKT_READY);
TR_Flag=0;
return;
}
void Ep1Handler(void)
{
U8 in_csr1;
// int i;
rINDEX_REG=1;
in_csr1=rIN_CSR1_REG;
//DbgPrintf("<1:%x]",in_csr1);
//I think that EPI_SENT_STALL will not be set to 1.
if(in_csr1 & EPI_SENT_STALL)
{
//DbgPrintf("[STALL]");
CLR_EP1_SENT_STALL();
return;
}
if(TR_Flag==2)
{
read_10();
}
else if(TR_Flag==1)
{
//if((CBW_Block[15]==0x00)||(CBW_Block[15]==0x1e))
// Uart_Printf("......%x\n",CBW_Block[15]);
Return_CSW();
}
return;
}
/*
void PrintEpiPkt(U8 *pt,int cnt)
{
int i;
DbgPrintf("[B_IN:%d:",cnt);
for(i=0;i<cnt;i++)
DbgPrintf("%x,",pt[i]);
DbgPrintf("]");
}
*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -