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

📄 irq.c

📁 COG-VP12864液晶屏驱动代码及对应RTC实例
💻 C
字号:
/*
*********************************************************
// Copyright (c)2004 Ark Pioneer Microelectronics Ltd.,
// All Rights Reserved
//
// Filename: irq.c
// Version: 1.0
// Created: 2004.01.18   By: Philip
*********************************************************
*/

#include <config.h>
#include <regs.h>
#include <soc.h>
#include <irq.h>
#include <usb.h>

// process other exception
void OtherExcProcess(void)
{
    static WORD logInit = 0;
    
#ifdef DBG
    OutputString("\n OtherExcProcess() \n");
#endif
}

// IRQ processing
void IrqProcess(void)
{
    BYTE irqType;

    // disable usb interrupt request 
    *(PWORD)USBIEN &= ~bmUSBIEN_TOTAL;

    irqType = DetectUsbIrq();
    switch (irqType)
    {
        
        /*case OUT2_IRQ:  //process out2 irq, then clear out2 irq flag
        {
           /* dma((RAM512 + g_wDMACount * 64), OUT2BUF, 64);

	        g_wDMACount ++;
	        if(g_wDMACount == 8)
	        {
		        g_wDMACount = 0;
		        g_bDMA8Packet = TRUE;
            }  
            
            // clear the IRQ
            *(PWORD)OUTIRQ = 0xff;            
        }
        break; */
        
        /*case IN2_IRQ:   //process in2 irq, then clear in2 irq flag
        {
            if(g_wDMACount == 8)
	        {
		        g_wDMACount = 0;
        		g_bDMA8Packet = TRUE;
	        }
	        else
	        {
                g_wDMACount ++;
		        dma(IN2BUF, (RAM512 + g_wDMACount * 64), 64);
	        }
            
        	// clear the IRQ
	        *(PWORD)INIRQ = 0xff;
        }
        break; */
       

        case SUDAV_IRQ:
        {
            *(PWORD)USBIRQ = bmSUDAV;     // Clear SUDAV IRQ
            //SetupCommand();

            // 2004.08.23, philip add
            // Maybe now there is an USB setup IRQ pending. So, don't do
            // anything here that it consumes many CPU time.
            //*(PWORD)USBIRQ = bmSUDAV;     // Clear SUDAV IRQ
        }
        break;

        default:    // internal error
            break;
    }    

    *(PWORD)USBIEN |= bmUSBIEN_TOTAL;
    //clear irq status registers
    *(BYTE *)SCU_INTFLAG = bmSCU_ALL_INT_CLEAR;     // clear SCU interrupt flag
}

BYTE DetectUsbIrq(void)
{
    BYTE reVal = 0;

    if( ((*(PWORD)OUTIRQ) & bmBIT2) == bmOUT2IRQ )
    {
        // out2 irq
        reVal = OUT2_IRQ;
        //return reVal;
    }
    
    if( ((*(PWORD)INIRQ) & bmBIT2) == bmIN2IRQ )
    {
        // in2 irq
        reVal = IN2_IRQ;
        //return reVal;
    }

    if( ((*(PWORD)USBIRQ) & bmBIT0) == bmSUDAV )
    {
        // Setup Data Available Interrupt
        reVal = SUDAV_IRQ;        
    }
    return reVal;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -