📄 intr.c
字号:
/*++
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:
intr.c
Abstract:
Module related to interrupt 0
Environment:
Keil C51 Compiler
Revision History:
08/28/2001 Chi-Yeh Tsai created
--*/
//=============================================================================
//Header file
//=============================================================================
#include "general.h"
#include "intr.h"
#include "main.h"
#include "ctlsetup.h"
#include "ctlout.h"
#include "ctlin.h"
#include "bulkout.h"
#include "bulkin.h"
#include "intin.h"
#include "audasc.h"
#include "power.h"
#include "image.h"
//richie@1218
#include "usbmsdc2.h"
//patch4.5@richie@msdc plug out exception
#include "uiflow.h"
//patch5.0@richie@usb key
#include "timer.h"
//Joe@2003.2.25 10:11 add begin
#include "JoeToEvb.h"
//Joe@2003.2.25 10:11 add end
//#define G_3AFreq 3//wendy/2004/9/27
#define G_3AFreq 3 //wendy/2004/9/27
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
//patch4.4@richie@sus
extern xdata UCHAR G_ucSuspend;
extern xdata BYTE G_Card_Type;
//=============================================================================
//Program
//=============================================================================
//-----------------------------------------------------------------------------
//INTR_Int0
//-----------------------------------------------------------------------------
void INTR_Int0(void) INTERRUPT_0 USING_1
/*++
Routine Description:
service routine of interrupt 0
Arguments:
none
Return Value:
none
--*/
{
UCHAR log25c0, log25c1, log25c2;
INTR_DisableInterrupt();
INTR_Enter();
log25c0 = XBYTE[0x25c0]; //save 0x25c0
log25c1 = XBYTE[0x25c1]; //save 0x25c1
log25c2 = XBYTE[0x25c2]; //save 0x25c2
//patch4.4@richie@usbvd
G_btEP0Intr = 0;
if (log25c0 & 0x01) //check ACK of EP0 Setup packet
{
//patch4.3@richie@oh0530
XBYTE[0x25c0] = 0xf8; //clear Ep0SetupAck
CTLSETUP_Packet(); //Ep0SetupAck
//richie
G_btBulkIntr = 0;
//patch4.4@richie@usbvd
G_btEP0Intr = 1;
}
else if (log25c0 & 0x02) //check ACK of EP0 Out packet
{
XBYTE[0x25c0] = 0xfd; //clear Ep0OutAck
CTLOUT_Packet(); //Ep0OutAck
//richie
G_btBulkIntr = 0;
//patch4.4@richie@usbvd
G_btEP0Intr = 1;
}
else if (log25c0 & 0x04) //check ACK of EP0 In packet
{
XBYTE[0x25c0] = 0xfb; //clear Ep0InAck
CTLIN_Packet(); //Ep0InAck
//richie
G_btBulkIntr = 0;
//patch4.4@richie@usbvd
G_btEP0Intr = 1;
}
//richie
//#if 0
//richie@mi 0411
else if ((log25c2 & K_USB_CLASS_IN_ACK_MASK) //check ACK of Bulk In packet
&& (XBYTE[0x25d2] & K_USB_CLASS_IN_ACK_MASK))
{
XBYTE[0x25c2] = K_USB_CLASS_IN_ACK_RESET; //clear BulkInAck
G_ucPktStorIntrf = K_StorageInterface1;
BULKIN_Packet(); //BulkInAck
//richie
G_btBulkIntr = 1;
}
//richie@mi 0411
else if ((log25c2 & K_USB_CLASS_OUT_ACK_MASK) //check ACK of Bulk Out packet
&& (XBYTE[0x25d2] & K_USB_CLASS_OUT_ACK_MASK))
{
XBYTE[0x25c2] = K_USB_CLASS_OUT_ACK_RESET; //clear BulkOutAck
G_ucPktStorIntrf = K_StorageInterface1;
BULKOUT_Packet(); //BulkOutAck
//richie
G_btBulkIntr = 1;
}
else if (log25c2 & 0x04) //check ACK of Interrupt In packet
{
XBYTE[0x25c2] = 0xfb; //clear IntInAck
G_ucPktStorIntrf = K_StorageInterface1;
//INTIN_Packet(); //IntInAck
//richie
G_btBulkIntr = 0;
}
else if (log25c2 & K_USB_AP_IN_ACK_MASK) //check ACK of Bulk In 2 packet
{
//richie@0124 mark
/*
XBYTE[0x25c2] = K_USB_AP_IN_ACK_RESET; //clear BulkIn2Ack
G_ucPktStorIntrf = K_StorageInterface2;
BULKIN_Packet(); //BulkIn2Ack
//richie
G_btBulkIntr = 1;
*/
}
else if (log25c2 & K_USB_AP_OUT_ACK_MASK) //check ACK of Bulk Out 2 packet
{
//richie@0124 mark
/*
XBYTE[0x25c2] = K_USB_AP_OUT_ACK_RESET; //clear BulkOutAck
G_ucPktStorIntrf = K_StorageInterface2;
BULKOUT_Packet(); //BulkOut2Ack
//richie
G_btBulkIntr = 1;
*/
}
else if (log25c2 & 0x20) //check ACK of Interrupt In 2 packet
{
//richie@0124 mark
/*
XBYTE[0x25c2] = 0xdf; //clear IntIn2Ack
G_ucPktStorIntrf = K_StorageInterface2;
INTIN_Packet(); //IntIn2Ack
//richie
G_btBulkIntr = 0;
*/
}
//#endif
else if (log25c1 & 0x01) //check video interface alternate setting changed device Interrupt In packet
{
XBYTE[0x25c1] = 0xfe; //clear VidASChg
//VIDASC_Packet(); //VidASChg
}
else if (log25c1 & 0x02) //check audio interface alternate setting changed device Interrupt In packet
{
XBYTE[0x25c1] = 0xfd; //clear AudASChg
//AUDASC_Packet(); //AudASChg
}
else if (XBYTE[0x27c0] & 0x01) //frame done interrupt
{
G_DRAMint = 1;
XBYTE[0x27c0] = 0;
if(G_ABVLCIntFlag == 0)
G_AVLCSize = (((ULONG)XBYTE[0x2722])<<16)|(((ULONG)XBYTE[0x2721])<<8)|((ULONG)XBYTE[0x2720]);
else
G_BVLCSize = (((ULONG)XBYTE[0x2722])<<16)|(((ULONG)XBYTE[0x2721])<<8)|((ULONG)XBYTE[0x2720]);
G_ABVLCIntFlag = 1 - G_ABVLCIntFlag;
}
else if (((XBYTE[0x20d0] & 0x20) == 0x20) && //VD falling edge interrupt enable
((XBYTE[0x20c0] & 0x20) == 0x20)) //VD falling edge interrupt
{
//UI_Buzzer();
G_3ACount=G_3ACount+1;
XBYTE[0x20c0] &= 0xDF;
XBYTE[0x20D0] |= 0x02; //UI resume interrupt enable
if(G_3ACount==G_3AFreq)
{
G_3AFlag = 1;
G_3ACount=0;
}
}
//patch4.4@richie@sus begin
//add for suspend and resume mechanism
else if (log25c0 & 0x10) //check suspend intr
{
XBYTE[0x25c0] = 0xef; //clear suspend
P1 = 0x52;
G_ucSuspend = 1;
}
else if (log25c0 & 0x80) //check resume intr
{
XBYTE[0x25c0] = 0x7f; //clear resume
P1 = 0x53;
G_ucSuspend = 0;
}
else if (log25c0 & 0x20) //check configuration change intr
{
XBYTE[0x25c0] = 0x4f; //clear suspend/resume/configuration change
XBYTE[0x25d0] |= 0x90;
//P1 = 0x53;
}
//patch4.4@richie@sus end
//patch4.5@richie@msdc plug out exception begin
else if ((XBYTE[0x2048] & 0x02) == 0x02) //check usb power rising
{
G_UI_USBConnect = K_UI_USB_DISCONNECT; //yichang
L2_SetGPIOBit(14,0); //Power off
UI_Buzzer();
DELAY_100ms();
UI_Buzzer();
DELAY_100ms();
DELAY_100ms();
UI_Buzzer();
DELAY_100ms();
DELAY_100ms();
UI_ClearFOSD(25,8,0x00);
UI_ShowGoodBye();
DELAY_100ms();
DELAY_1s();
UI_Buzzer();
DELAY_100ms();
DELAY_100ms();
L2_ConfigGPIOBit(14,1);
L2_SetGPIOBit(16,0); //wendy@2004/9/8//TFT power //add for debug
L2_TurnOnOffDisplay (0); //debug
L2_CtrlScreen(1);//wendy@2004/9/8
UI_ClearFOSD(25, 8, 0x08);
L2_SetGPIOBit(14,0); //Power off
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -