?? usblib.c
字號:
/* RdPktEp3 */
/* */
/* DESCRIPTION */
/* */
/* read packet into Ep3 fifo */
/* */
/* AUTHOR */
/* */
/* Zhi-gang Yang shenzhen watertek */
/* */
/* INPUTS */
/* buf data buffer */
/* num data size (byte) */
/* */
/* OUTPUTS */
/* */
/* None */
/* */
/* HISTORY */
/* */
/* DATE REMARKS */
/* */
/* 2004-12-28 Created initial version 1.0 */
/*************************************************************************/
void RdPktEp3(U8 *buf,int num)
{
int i;
for(i=0;i<num;i++)
{
buf[i]=(U8)rEP3_FIFO;
}
}
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* RdPktEp4 */
/* */
/* DESCRIPTION */
/* */
/* read packet from Ep4 fifo */
/* */
/* AUTHOR */
/* */
/* Zhi-gang Yang shenzhen watertek */
/* */
/* INPUTS */
/* buf data buffer */
/* num data size (byte) */
/* */
/* OUTPUTS */
/* */
/* None */
/* */
/* HISTORY */
/* */
/* DATE REMARKS */
/* */
/* 2004-12-28 Created initial version 1.0 */
/*************************************************************************/
void RdPktEp4(U8 *buf,int num)
{
int i;
for(i=0;i<num;i++)
{
buf[i]=(U8)rEP4_FIFO;
}
}
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* ConfigEp3DmaMode */
/* */
/* DESCRIPTION */
/* */
/* config Ep3 transmit by DMA mode */
/* */
/* AUTHOR */
/* */
/* Zhi-gang Yang shenzhen watertek */
/* */
/* INPUTS */
/* bufAdr data buffer address */
/* count data size (byte) */
/* */
/* OUTPUTS */
/* */
/* None */
/* */
/* HISTORY */
/* */
/* DATE REMARKS */
/* */
/* 2004-12-28 Created initial version 1.0 */
/*************************************************************************/
void ConfigEp3DmaMode(U32 bufAddr,U32 count)
{
int i;
rINDEX_REG=3;
count=count&0xfffff; //transfer size should be <1MB
rDISRCC2=(1<<1)|(1<<0);
rDISRC2=ADDR_EP3_FIFO; //src=APB,fixed,src=EP3_FIFO
rDIDSTC2=(0<<1)|(0<<0);
rDIDST2=bufAddr; //dst=AHB,increase,dst=bufAddr
#if USBDMA_DEMAND
rDCON2=(count)|(0<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(4<<24)|(1<<23)|(0<<22)|(0<<20);
//demand,requestor=APB,CURR_TC int enable,unit transfer,
//single service,src=USBD,H/W request,autoreload,byte,CURR_TC
#else
rDCON2=(count)|((unsigned)1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(4<<24)|(1<<23)|(0<<22)|(0<<20);
//handshake,requestor=APB,CURR_TC int enable,unit transfer,
//single service,src=USBD,H/W request,autoreload,byte,CURR_TC
#endif
rDMASKTRIG2= (1<<1);
//DMA 2 on
//rEP3_DMA_FIFO=0x40; //not needed for OUT operation.
rEP3_DMA_TTC_L=0xff;
rEP3_DMA_TTC_M=0xff;
rEP3_DMA_TTC_H=0x0f;
rOUT_CSR2_REG=rOUT_CSR2_REG|EPO_AUTO_CLR|EPO_OUT_DMA_INT_MASK;
//AUTO_CLR(OUT_PKT_READY is cleared automatically), interrupt_masking.
#if USBDMA_DEMAND
rEP3_DMA_UNIT=EP3_PKT_SIZE; //DMA transfer unit=64 bytes
rEP3_DMA_CON=UDMA_DEMAND_MODE|UDMA_OUT_DMA_RUN|UDMA_DMA_MODE_EN;
// deamnd enable,out_dma_run=run,in_dma_run=stop,DMA mode enable
#else
rEP3_DMA_UNIT=0x01; //DMA transfer unit=1byte
rEP3_DMA_CON=UDMA_OUT_DMA_RUN|UDMA_DMA_MODE_EN;
// deamnd disable,out_dma_run=run,in_dma_run=stop,DMA mode enable
#endif
//wait until DMA_CON is effective.
// rEP3_DMA_CON;
for(i=0;i<10;i++);
}
/*************************************************************************/
/* */
/* FUNCTION */
/* */
/* ConfigEp3IntMode */
/* */
/* DESCRIPTION */
/* */
/* config Ep3 transmit by interrupt mode */
/* */
/* AUTHOR */
/* */
/* Zhi-gang Yang shenzhen watertek */
/* */
/* INPUTS */
/* bufAdr data buffer address */
/* count data size (byte) */
/* */
/* OUTPUTS */
/* */
/* None */
/* */
/* HISTORY */
/* */
/* DATE REMARKS */
/* */
/* 2004-12-28 Created initial version 1.0 */
/*************************************************************************/
void ConfigEp3IntMode(void)
{
rINDEX_REG=3;
rDMASKTRIG2= (0<<1); // EP3=DMA ch 2
//DMA channel off
rOUT_CSR2_REG=rOUT_CSR2_REG&~(EPO_AUTO_CLR/*|EPO_OUT_DMA_INT_MASK*/);
//AUTOCLEAR off,interrupt_enabled (???)
rEP3_DMA_UNIT=1;
rEP3_DMA_CON=0;
// deamnd disable,out_dma_run=stop,in_dma_run=stop,DMA mode disable
//wait until DMA_CON is effective.
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -