📄 intr.c
字号:
//Joe@2003.3.22 10:46 add begin
G_AutoPowerOffCount = 0;
//Joe@2003.3.22 10:46 add end
//patch4.5@richie@eject
G_USBMSDC_ucEject = 0;
//patch5.0@richie@usb key
G_KeyScan = 1;
}
else if ((XBYTE[0x2078] & 0x02) == 0x02) //check usb power falling
{
XBYTE[0x2078] &= 0xfd;
//printf("plug in\n");
G_UI_USBConnect = K_UI_USB_CONNECT; //yichang
L2_SetGPIOBit(14,0); //Power off
//Joe@2003.3.22 10:46 add begin
G_AutoPowerOffCount = 0;
//Joe@2003.3.22 10:46 add end
//patch4.5@richie@cardlock begin
//detect card WP
if (G_Card_Type == K_MEDIA_SDF)
{
UCHAR tmp;
XBYTE[0x2405] &= 0xef;
tmp = XBYTE[0x2409];
tmp &= 0x80;
if (tmp)
{
//printf("WP!!!\n");
G_USBMSDC_ucCardLock = 1;
}
else
{
//printf("NOT WP\n");
G_USBMSDC_ucCardLock = 0;
}
}
else if (G_Card_Type == K_MEDIA_SMC)
{
UCHAR tmp;
XBYTE[0x2406] &= 0xfd;
tmp = XBYTE[0x240A];
tmp &= 0x02;
if (tmp)
{
//printf("1NOT WP\n");
G_USBMSDC_ucCardLock = 0;
}
else
{
//printf("1WP!!!\n");
G_USBMSDC_ucCardLock = 1;
}
}
//patch4.5@richie@cardlock end
}
//patch4.5@richie@msdc plug out exception end
INTR_Leave();
INTR_EnableInterrupt();
}
//-----------------------------------------------------------------------------
//INTR_Enter
//-----------------------------------------------------------------------------
void INTR_Enter(void) USING_1
/*++
Routine Description:
pre-processing in service routine of interrupt 0
Arguments:
none
Return Value:
none
--*/
{
}
//-----------------------------------------------------------------------------
//INTR_Leave
//-----------------------------------------------------------------------------
void INTR_Leave(void) USING_1
/*++
Routine Description:
post-processing in service routine of interrupt 0
Arguments:
none
Return Value:
none
--*/
{
// POWER_UsbConnectStatusChangeInt();
}
//-----------------------------------------------------------------------------
//INTR_DisableInterrupt
//-----------------------------------------------------------------------------
void INTR_DisableInterrupt(void) USING_1
/*++
Routine Description:
disable relative trigger of interrupt 0
Arguments:
none
Return Value:
none
--*/
{
//richie
EX0 = 0;
XBYTE[0x25d1] &= 0xfc; //disable change event interrupt of
// video interface alternate setting
// audio interface alternate setting
XBYTE[0x25a0] &= 0xfc; //NAK of (automatic done by hardware)
// EP0 Out packet
// EP0 In packet
XBYTE[0x25d0] &= 0xf0; //disable ACK interrupt of
// EP0 Setup packet OK
// EP0 Out packet OK
// EP0 In packet OK
// USB reset event
XBYTE[0x25a1] &= 0xc0; //NAK of (automatic done by hardware)
// Bulk In packet
// Bulk Out packet
// Int In packet
// Bulk In 2 packet
// Bulk Out 2 packet
// Int In 2 packet
// richie@1210
//XBYTE[0x25d2] &= 0xc0; //disable ACK interrupt of
///// XBYTE[0x25d2] &= 0xc3; //disable ACK interrupt of
// Bulk In packet OK
// Bulk Out packet OK
// Int In packet OK
// Bulk In 2 packet OK
// Bulk Out 2 packet OK
// Int In 2 packet OK
}
//-----------------------------------------------------------------------------
//INTR_EnableInterrupt
//-----------------------------------------------------------------------------
void INTR_EnableInterrupt(void) USING_1
/*++
Routine Description:
enable relative trigger of interrupt 0
Arguments:
none
Return Value:
none
--*/
{
XBYTE[0x25d1] |= 0x03; //enable change event interrupt of
// video interface alternate setting
// audio interface alternate setting
// XBYTE[0x25a0] |= 0x03; //ACK of
// // EP0 Out packet
// // EP0 In packet
//OHCI update by cch //cch@10/30
if (XBYTE[0x25c0] & 0x01)
{
//patch4.3@richie@oh0530 mark
//XBYTE[0x25a0] &= 0xfc; //NAK of
// EP0 Out packet
// EP0 In packet
//patch4.3@richie@oh0530
XBYTE[0x25c0] = 0xf9; //clear EP0InAck
}
//patch4.4@richie@usbvd
else if (G_btEP0Intr == 1)
{
//patch4.4@richie@usbvd
G_btEP0Intr = 0;
//patch4.3@richie@oh0530
if(G_ucCtrlPhase==K_OutDataPhase)
XBYTE[0x25a0] |= 0x01;
else
XBYTE[0x25a0] |= 0x03; //ACK of
// EP0 Out packet
// EP0 In packet
}
XBYTE[0x25d0] |= 0x07; //enable ACK interrupt of
// EP0 Setup packet OK
// EP0 Out packet OK
// EP0 In packet OK
//richie
if (G_btBulkIntr == 1)
{
//P1 = G_ucBulkPhase;
switch (G_ucBulkPhase)
{
case K_CommandPhase:
case K_OutDataPhase:
//richie@0114
//richie@mi 0409 mark
//case K_OutDataPhaseWrite:
case K_OutResponsePhase:
//DbgPrint(">>>>>>>>>>> Out open\n");
//richie ??? 02 or 06
XBYTE[0x25a1] |= K_USB_CLASS_OUT_OPEN;//0x06; //ACK of
// Bulk Out packet
// Int In packet
XBYTE[0x25d2] |= K_USB_CLASS_OUT_ACK_MASK;//0x06; //enable ACK interrupt of
// Bulk Out packet OK
// Int In packet OK
break;
case K_InDataPhase:
//richie@mi 0409 mark
//case K_InDataPhaseRead:
case K_InResponsePhase:
case K_InCompletionPhase:
//DbgPrint("<<<<<<<<<<< in open\n");
//richie ??? 01 or 05
XBYTE[0x25a1] |= K_USB_CLASS_IN_OPEN;//0x05; //ACK of
// Bulk In packet
// Int In packet
XBYTE[0x25d2] |= K_USB_CLASS_IN_ACK_MASK;//0x05; //enable ACK interrupt of
// Bulk In packet OK
// Int In packet OK
break;
//richie@mi 0409 begin
case K_InDataPhaseRead:
break;
case K_OutDataPhaseWrite:
break;
//richie@mi 0409 end
default:
break;
}
//richie
G_btBulkIntr = 0;
}
EX0 = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -