📄 isr.c
字号:
#include "D12.h"
#include "general.h"
/*++
Copyright (c) 2004 GoldInfo Technology Co., Ltd.
Module Name:
D12.c
Abstract:
Module related to D12 chip register operate,this is D12 module
Environment:
ccs2.0 IDE
Revision History:
02/5/20014 Mikal created
--*/
//*****************************************************************************
UWord16 EpBuf[64] ;
UWord16 EpBuf1[64] ;
extern DEVICE_REQUEST DeviceRequest;
//*****************************************************************************
/*++
Routine Description:
process USB interrupt server function
Arguments:
none
Return Value:
none
--*/
void D12_USB_ISR(void)
{
UWord16 i_st;
i_st = D12_ReadInterruptRegister();
if(i_st != 0)
{
if(i_st & K_D12_INT_BUSRESET)
{
D12_Bus_Reset();//
}
if(i_st & K_D12_INT_EOT)
D12_DMA_Eot();
if(i_st & K_D12_INT_SUSPENDCHANGE)
if(i_st & K_D12_INT_ENDP0IN)
D12_Ep0_Txdone();
if(i_st & K_D12_INT_ENDP0OUT)
D12_Ep0_rxdone();
if(i_st & K_D12_INT_ENDP1IN)
D12_Ep1_Txdone();
if(i_st & K_D12_INT_ENDP1OUT)
D12_Ep1_Rxdone();
if(i_st & K_D12_INT_ENDP2IN) // bulk in
D12_Main_Txdone();
if(i_st & K_D12_INT_ENDP2OUT)
D12_Main_Rxdone();//bulk out
}
}
//*****************************************************************************
/*++
Routine Description:
process USB bus reset
Arguments:
none
Return Value:
none
--*/
void D12_Bus_Reset(void)
{
}
//*****************************************************************************
/*++
Routine Description:
process endpoint0 out transaction
Arguments:
none
Return Value:
none
--*/
void D12_Ep0_rxdone(void)
{
UWord16 ep_last, type;//,i,j,Dataindex=1;
ep_last = D12_ReadLastTransactionStatus(0);
if (ep_last & K_D12_SETUPPACKET) // the packet is setup packet
{
D12_ReadEndpoint(0, 8,(UCHAR *)(&(DeviceRequest)));//read the setup packet
DeviceRequest.wValue =((DeviceRequest.reserve1)<<8)|(DeviceRequest.wValue);
DeviceRequest.wIndex = ((DeviceRequest.reserve2)<<8)|(DeviceRequest.wIndex);
DeviceRequest.wLength = ((DeviceRequest.reserve3)<<8)|(DeviceRequest.wLength);
D12_AcknowledgeEndpoint(0);
D12_AcknowledgeEndpoint(1);
type = (DeviceRequest.bmRequestType )&(0x60) ;
if(type == 0x00) // standard request device to host
{
CTLSETUP_StandardRequest();
} // standard request
else if(type == 0x20) // class request
{
CTLSETUP_ClassRequest();
}
}
}
//*****************************************************************************
/*++
Routine Description:
process endpoint0 in transaction
Arguments:
none
Return Value:
none
--*/
void D12_Ep0_Txdone(void)
{
}
//*****************************************************************************
/*++
Routine Description:
process DMA transaction
Arguments:
none
Return Value:
none
--*/
void D12_DMA_Eot(void)
{
}
//*****************************************************************************
/*++
Routine Description:
process endpoint1 in transaction
Arguments:
none
Return Value:
none
--*/
void D12_Ep1_Txdone(void)
{
D12_ReadLastTransactionStatus(3);
}
//*****************************************************************************
/*++
Routine Description:
process endpoint1 out transaction
Arguments:
none
Return Value:
none
--*/
void D12_Ep1_Rxdone(void)
{
D12_ReadLastTransactionStatus(2);
}
//*****************************************************************************
/*++
Routine Description:
process endpoint2 in transaction
Arguments:
none
Return Value:
none
--*/
void D12_Main_Txdone(void)
{
D12_ReadLastTransactionStatus(5);
BULKIN_Packet();
}
//*****************************************************************************
/*++
Routine Description:
process endpoint2 out transaction
Arguments:
none
Return Value:
none
--*/
void D12_Main_Rxdone(void)
{
D12_ReadLastTransactionStatus(4);
D12_ReadEndpoint(4, 64, EpBuf);
G_EndPnt2status=D12_ReadEndpointStatus(4);
G_EndPnt2status &= 0x60;
if (G_EndPnt2status == 0x60)
D12_ReadEndpoint(4, 64, EpBuf1);
D12_AcknowledgeEndpoint(0); // clear buffer
BULKOUT_Packet();
}
/*******************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -