⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 intr.c

📁 台湾凌阳方案300万数码相机源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*++

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 + -