亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? irq.c

?? nxp的ARM9處理器LPC3180代碼,提供了幾乎所有的外設示例程序.
?? C
字號:
/*****************************************************************************
 *   irq.c: Interrupt handler C file for Philips LPC230x Family Microprocessors
 *
 *   Copyright(C) 2006, Philips Semiconductor
 *   All rights reserved.
 *
 *   History
 *   2005.10.01  ver 1.00    Prelimnary version, first Release
 *
******************************************************************************/
#include "LPC318x.h"			/* LPC310X Peripheral Registers	*/
#include "type.h"
#include "irq.h"

DWORD IntStatus;
HandlerAddr   IntVectTable[3][32];	/* 0 is MIC, 1 is SIC1, 2 is SIC2 */

/******************************************************************************
** Function name:		IRQ_Exception
**
** Descriptions:		Interrupt handler, called in the startup.s file.
**				Check all the bits in MIR first, then SIC1 and SIC2.
**
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void __irq IRQ_Exception( void )
{
    HandlerAddr IRQHandler;
    int i;

    /* The first while loop is to take care of MIC1 interrupts. */
    while ( (MIC_SR != 0) && (!(MIC_SR & 0x01)) && (!(MIC_SR & 0x02)) )
    {
	for ( i = 31; i >= 0; i-- )
	{
	    if ( MIC_SR & (1<<i) ) 
	    {
		if ( IntVectTable[0][i] != NULL )
		{
		    IRQHandler = IntVectTable[0][i];
		    if ( MIC_ATR & (1<<i) )	/* If edge trigger, clear interrupt status */
		    {
			MIC_RSR |= (1<<i);	/* No need to clear on level trigger */
		    }
		    (*IRQHandler)();
		}
		else
		{
		    if ( MIC_ATR & (1<<i) )	/* If edge trigger, clear interrupt status */
		    {
			MIC_RSR |= (1<<i);	/* No need to clear on level trigger */
		    }
		}
	    }
	}
    }

    /* If Sub1IRQn is not enabled in the MIC_ER, below while loop should never 
    be called. */ 
    while ( SIC1_SR != 0 )
    {
	IntStatus = SIC1_SR;
	for ( i = 31; i >= 0; i-- )
	{
	    if ( SIC1_SR & (1<<i) )
	    {
		if ( IntVectTable[1][i] != NULL )
	    	{
		    IRQHandler = IntVectTable[1][i];
		    if ( SIC1_ATR & (1<<i) )	/* If edge trigger, clear interrupt status */
		    {		    
			SIC1_RSR |= (1<<i);	/* No need to clear on level trigger */
		    }
		    (*IRQHandler)();
		}
		else	/* Bad thing happened, interrupt occurs, no handler installed */
		{
		    if ( SIC1_ATR & (1<<i) )	/* If edge trigger, clear interrupt status */
		    {		
			SIC1_RSR |= (1<<i);	/* No need to clear on level trigger */
		    }
		}
	    }
	}
    }

    /* If Sub2IRQn is not enabled in the MIC_ER, below while loop should never 
    be called. */
    while ( SIC2_SR != 0 )
    {
	IntStatus = SIC2_SR;
	for ( i = 31; i >= 0; i-- )
	{
	    if ( SIC2_SR & (1<<i) ) 
	    {
		if ( IntVectTable[2][i] != NULL )
		{
		    IRQHandler = IntVectTable[2][i];
		    if ( SIC2_ATR & (1<<i) )	/* If edge trigger, clear interrupt status */
		    {	
			SIC2_RSR |= (1<<i);	/* No need to clear on level trigger */
		    }
		    (*IRQHandler)();
		}
		else
		{
		    if ( SIC2_ATR & (1<<i) )	/* If edge trigger, clear interrupt status */
		    {	
			SIC2_RSR |= (1<<i);	/* No need to clear on level trigger */
		    }
		}
	    }
	}
    }
    return;
}

/******************************************************************************
** Function name:		FIQ_Exception
**
** Descriptions:		Fast interrupt handler, called in the startup.s.
**
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void __irq FIQ_Exception( void )
{
    while ( 1 );				   
}

/******************************************************************************
** Function name:		init_irq
**
** Descriptions:		Initialize interrupt controller.
** parameters:			None
** Returned value:		None
** 
******************************************************************************/
void init_irq(void) 
{
    DWORD i;

    MIC_ER = 0x0000;
    SIC1_ER = 0x0000;
    SIC2_ER = 0x0000;

    for (i = 0; i < 32; i++) 
    {
	IntVectTable[0][i] = (HandlerAddr)NULL;
	IntVectTable[1][i] = (HandlerAddr)NULL;
	IntVectTable[2][i] = (HandlerAddr)NULL;
    }
    return;
}

/******************************************************************************
** Function name:		Install_MIC
**
** Descriptions:		Install MIC.
** parameters:			Interrupt number, polarity, action type, and
**				peripheral interrupt handler
** Returned value:		None
** 
******************************************************************************/
void Install_MIC( BYTE IntNum, BYTE ActPol, BYTE ActType, HandlerAddr IRQHandler )
{
    if ( (IntNum < 32) && (IRQHandler != (HandlerAddr)NULL) ) 
    {                            
	if (ActPol == INT_LOW_LEVEL) 
	{
	    MIC_APR &= ~(1 << IntNum);		/* low level / falling edge */
	} 
	else 
	{
	    MIC_APR |= (1 << IntNum);		/* high level / rising edge */
	}

	if (ActType == INT_LEVEL_SENSITIVE) 
	{
	    MIC_ATR &= ~(1 << IntNum);		/* level trigger */
	} 
	else 
	{
	    MIC_ATR |= (1 << IntNum);		/* edge trigger */
	}

	IntVectTable[0][IntNum] = IRQHandler;	         
    }
    return;
}

/******************************************************************************
** Function name:		Enable_MIC
**
** Descriptions:		Enable MIC.
** parameters:			Interrupt number
** Returned value:		None
** 
******************************************************************************/
void Enable_MIC( BYTE IntNum )
{
    if ( IntNum < 32 )
    {
	MIC_ER  |= (1 << IntNum);	/* Enable the IntNum on MIC   */
    }
    return;
}

/******************************************************************************
** Function name:		Disable_MIC
**
** Descriptions:		Disable MIC.
** parameters:			Interrupt number
** Returned value:		None
** 
******************************************************************************/
void Disable_MIC( BYTE IntNum )
{
    if ( IntNum < 32 )
    {       
	MIC_ER &= ~(1 << IntNum);	/* Disable the IntNum on the MIC  */
    }
    return;
}

/******************************************************************************
** Function name:		Install_SIC1
**
** Descriptions:		Install SIC1
** parameters:			Interrupt number, polarity, action type, and
**				peripheral interrupt handlerNone
** Returned value:		None
** 
******************************************************************************/
void Install_SIC1( BYTE IntNum, BYTE ActPol, BYTE ActType, HandlerAddr IRQHandler )
{
    if ( (IntNum < 32) && (IRQHandler != (HandlerAddr)NULL) ) 
    {                            
	if (ActPol == INT_LOW_LEVEL) 
	{
	    SIC1_APR &= ~(1 << IntNum);	/* low level / falling edge */
	} 
	else 
	{
	    SIC1_APR |= (1 << IntNum);	/* high level / rising edge */
	}

	if (ActType == INT_LEVEL_SENSITIVE) 
	{
	    SIC1_ATR &= ~(1 << IntNum);	/* level trigger */
	} 
	else 
	{
	    SIC1_ATR |= (1 << IntNum);	/* edge trigger */
	}

	MIC_APR &= ~(1 << 0);	/* MIC is always low level / falling edge */
	MIC_ATR &= ~(1 << 0);	/* MIC is level trigger */
	IntVectTable[1][IntNum] = IRQHandler;  
    }
    return;                            
}
       
/******************************************************************************
** Function name:		Enable_SIC1
**
** Descriptions:		Enable MIC.
** parameters:			Interrupt number
** Returned value:		None
** 
******************************************************************************/
void Enable_SIC1( BYTE IntNum )
{
    if ( IntNum < 32 )
    {
	MIC_ER |= (1 << 0);		/* SUB1 IRQ is routed to MIC */
	SIC1_ER  |= (1 << IntNum);	/* Enable the IntNum on SIC1 */
    }
    return;
}

/******************************************************************************
** Function name:		Disable_SIC1
**
** Descriptions:		Disable SIC1
** parameters:			Interrupt number
** Returned value:		None
** 
******************************************************************************/
void Disable_SIC1( BYTE IntNum )
{
    if ( IntNum < 32 )
    {       
	SIC1_ER &= ~(1 << IntNum);	/* Disable the IntNum on the SIC1  */
    }
    return;
}

/******************************************************************************
** Function name:		Install_SIC2
**
** Descriptions:		Install SIC2
** parameters:			Interrupt number, polarity, action type, and
**				peripheral interrupt handler
** Returned value:		None
** 
******************************************************************************/
void Install_SIC2( BYTE IntNum, BYTE ActPol, BYTE ActType, HandlerAddr IRQHandler )
{
    if ( (IntNum < 32) && (IRQHandler != (HandlerAddr)NULL) ) 
    {                            
	if (ActPol == INT_LOW_LEVEL) 
	{
	    SIC2_APR &= ~(1 << IntNum);	/* low level / falling edge */
	} 
	else 
	{
	    SIC2_APR |= (1 << IntNum);	/* high level / rising edge */
	}

	if (ActType == INT_LEVEL_SENSITIVE) 
	{
	    SIC2_ATR &= ~(1 << IntNum);	/* level trigger */
	} 
	else 
	{
	    SIC2_ATR |= (1 << IntNum);	/* edge trigger */
	}

	MIC_APR &= ~(1 << 0);	/* MIC is always low level / falling edge */
	MIC_ATR &= ~(1 << 0);	/* MIC is level trigger */
	IntVectTable[2][IntNum] = IRQHandler;
    }
    return;                            
}

/******************************************************************************
** Function name:		Enable_SIC2
**
** Descriptions:		Enable SIC2
** parameters:			Interrupt number
** Returned value:		None
** 
******************************************************************************/
void Enable_SIC2( BYTE IntNum )
{
    if ( IntNum < 32 )
    {
	MIC_ER |= (1 << 1);		/* SUB2 IRQ is routed to MIC */
	SIC2_ER  |= (1 << IntNum);	/* Enable the IntNum on SIC2 */
    }
    return;
}
                       
/******************************************************************************
** Function name:		Disable_SIC2
**
** Descriptions:		Disable SIC2
** parameters:			Interrupt number
** Returned value:		None
** 
******************************************************************************/
void Disable_SIC2( BYTE IntNum )
{
    if ( IntNum < 32 )
    {       
	SIC2_ER &= ~(1 << IntNum);	/* Disable the IntNum on the SIC2  */
    }
    return;
}

/******************************************************************************
**                            End Of File
******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一二三区视频| 日本大香伊一区二区三区| 亚洲一区在线观看网站| 亚洲欧美怡红院| 欧美国产1区2区| 国产精品麻豆网站| 国产精品毛片久久久久久| 亚洲欧美在线观看| 亚洲精品高清视频在线观看| 亚洲国产一二三| 丁香婷婷综合色啪| 成人在线综合网站| 一本大道久久a久久综合| 91麻豆高清视频| 91国偷自产一区二区开放时间 | 不卡一区二区三区四区| 成人免费看片app下载| 不卡av电影在线播放| 色婷婷久久久久swag精品 | 成人美女视频在线看| 成人a级免费电影| 色婷婷综合久久久中文一区二区| 欧美性三三影院| 精品国一区二区三区| 国产精品久久久久久久岛一牛影视| 国产精品成人免费精品自在线观看| 亚洲精品国产第一综合99久久 | 国产河南妇女毛片精品久久久| 国产成人精品网址| 在线视频欧美区| 日韩一区二区免费在线电影 | 色综合久久综合| 欧美私模裸体表演在线观看| 精品人在线二区三区| 国产精品久久久久9999吃药| 国产精品无码永久免费888| 一区二区三区日韩精品视频| 麻豆91在线看| 在线亚洲人成电影网站色www| 91精品一区二区三区在线观看| 久久久久久久综合色一本| 亚洲免费观看在线视频| 韩国欧美国产1区| 色婷婷亚洲精品| 久久精品欧美一区二区三区麻豆| 亚洲综合久久av| 成人久久18免费网站麻豆| 91精品国产乱码久久蜜臀| 日韩一区在线看| 国产一区二区在线看| 欧美三级中文字| 最新国产成人在线观看| 久久99国产精品麻豆| 欧美色偷偷大香| 亚洲精品日韩专区silk| 国产福利一区二区三区视频在线 | 久久久久9999亚洲精品| 婷婷久久综合九色综合伊人色| 暴力调教一区二区三区| 久久久夜色精品亚洲| 麻豆国产精品官网| 这里只有精品99re| 亚洲一区日韩精品中文字幕| 99re热这里只有精品免费视频| 国产欧美一区二区精品性色超碰 | 日韩精品一区二区三区swag| 亚洲大型综合色站| 在线观看视频一区二区欧美日韩| 欧美国产精品v| 成人黄色片在线观看| 国产视频一区二区在线| 久久国内精品自在自线400部| 91精品免费在线| 日本成人中文字幕| 欧美一级国产精品| 麻豆91小视频| 欧美大尺度电影在线| 男男视频亚洲欧美| 日韩小视频在线观看专区| 日本美女视频一区二区| 日韩欧美国产不卡| 国产最新精品免费| 国产精品污www在线观看| 99久久久国产精品| 亚洲精品乱码久久久久久| 在线国产电影不卡| 日韩激情视频网站| 久久这里只有精品视频网| 国产一区二区按摩在线观看| 中文字幕av一区二区三区免费看| 成人激情av网| 亚洲高清在线视频| 日韩三级视频在线观看| 国产麻豆精品一区二区| 国产丝袜美腿一区二区三区| 9l国产精品久久久久麻豆| 亚洲国产一区二区三区| 日韩精品中文字幕一区| 成人免费视频一区二区| 亚洲国产精品尤物yw在线观看| 在线不卡的av| 国产精品系列在线观看| 玉米视频成人免费看| 制服丝袜一区二区三区| 国产成人免费在线观看| 亚洲黄色录像片| 2023国产一二三区日本精品2022| 99视频有精品| 久久99热狠狠色一区二区| 国产精品人成在线观看免费| 欧美在线三级电影| 国产一区二区三区在线观看免费| 国产精品传媒视频| 日韩欧美一卡二卡| 色婷婷久久99综合精品jk白丝| 天堂成人免费av电影一区| 国产精品麻豆久久久| 日韩一级完整毛片| 日本精品视频一区二区| 国产麻豆91精品| 亚洲成人av电影在线| 国产精品久线观看视频| 欧美videossexotv100| 91久久免费观看| 国产成人免费视| 久久99精品一区二区三区三区| 亚洲激情校园春色| 国产精品天天摸av网| 精品欧美乱码久久久久久1区2区| 91网址在线看| 成人动漫一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 亚洲愉拍自拍另类高清精品| 中文字幕第一区| 久久久亚洲国产美女国产盗摄| 日韩欧美一二区| 69久久夜色精品国产69蝌蚪网| 欧美中文字幕不卡| 日本高清不卡aⅴ免费网站| 成人av在线影院| 懂色av一区二区三区免费观看| 久久电影网电视剧免费观看| 免费在线观看精品| 亚洲v中文字幕| 亚洲一二三区在线观看| 一区二区三区四区不卡在线| 亚洲免费av在线| 亚洲一区欧美一区| 亚洲一区二区三区小说| 亚洲成av人**亚洲成av**| 一区二区高清在线| 一区二区三区在线视频免费| 亚洲视频精选在线| 一区二区三区免费| 亚洲永久免费视频| 婷婷综合久久一区二区三区| 日韩高清欧美激情| 久久99精品国产.久久久久久| 激情深爱一区二区| 国产麻豆视频精品| fc2成人免费人成在线观看播放| 95精品视频在线| 在线观看一区二区视频| 制服视频三区第一页精品| 日韩欧美自拍偷拍| 欧美精品一区二区三区蜜桃视频| 日韩欧美黄色影院| 久久久噜噜噜久久中文字幕色伊伊 | 不卡的av网站| 在线免费观看成人短视频| 欧美军同video69gay| 精品欧美一区二区三区精品久久| 久久先锋资源网| 国产精品成人一区二区三区夜夜夜| 一区二区三区在线视频播放| 日本亚洲视频在线| 国产成人免费视频网站| 日本伦理一区二区| 欧美r级电影在线观看| 中文字幕免费在线观看视频一区| 亚洲人精品午夜| 日韩精品91亚洲二区在线观看 | 亚洲桃色在线一区| 亚洲成人黄色小说| 国产成人免费视频精品含羞草妖精| 色综合网站在线| 精品国产人成亚洲区| 亚洲另类色综合网站| 美国十次了思思久久精品导航| 懂色一区二区三区免费观看| 欧美撒尿777hd撒尿| 国产无人区一区二区三区| 一区二区三区在线不卡| 欧美三级日韩三级| 日韩精品一区二区三区四区| 国产精品福利影院| 麻豆成人综合网| 欧美日韩日本视频| 综合久久国产九一剧情麻豆| 久久国产精品第一页|