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

📄 irq.c

📁 自己修改的U-boot1.1.4For AT91RM9200DK. 请用armgcc3.3.2编译。
💻 C
字号:
/******************************************************************************                   SciTech OS Portability Manager Library**  ========================================================================**    The contents of this file are subject to the SciTech MGL Public*    License Version 1.0 (the "License"); you may not use this file*    except in compliance with the License. You may obtain a copy of*    the License at http://www.scitechsoft.com/mgl-license.txt**    Software distributed under the License is distributed on an*    "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or*    implied. See the License for the specific language governing*    rights and limitations under the License.**    The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.**    The Initial Developer of the Original Code is SciTech Software, Inc.*    All Rights Reserved.**  ========================================================================** Language:     ANSI C* Environment:  32-bit Windows NT device drivers.** Description:  Implementation for the NT driver IRQ management functions*               for the PM library.*****************************************************************************/#include "pmapi.h"#include "pmint.h"#include "drvlib/os/os.h"#include "sdd/sddhelp.h"#include "mtrr.h"#include "oshdr.h"/*--------------------------- Global variables ----------------------------*/static int          globalDataStart;static uchar        _PM_oldCMOSRegA;static uchar        _PM_oldCMOSRegB;static uchar        _PM_oldRTCPIC2;static ulong        RTC_idtEntry;PM_intHandler       _PM_rtcHandler = NULL;PMFARPTR    _VARAPI _PM_prevRTC = PMNULL;/*----------------------------- Implementation ----------------------------*//* Functions to read and write CMOS registers */uchar   _ASMAPI _PM_readCMOS(int index);void    _ASMAPI _PM_writeCMOS(int index,uchar value);void    _ASMAPI _PM_rtcISR(void);void    _ASMAPI _PM_getISR(int irq,PMFARPTR *handler);void    _ASMAPI _PM_setISR(int irq,void *handler);void    _ASMAPI _PM_restoreISR(int irq,PMFARPTR *handler);void    _ASMAPI _PM_irqCodeStart(void);void    _ASMAPI _PM_irqCodeEnd(void);/****************************************************************************REMARKS:Set the real time clock frequency (for stereo modes).****************************************************************************/void PMAPI PM_setRealTimeClockFrequency(    int frequency){    static short convert[] = {	8192,	4096,	2048,	1024,	512,	256,	128,	64,	32,	16,	8,	4,	2,	-1,	};    int i;    /* First clear any pending RTC timeout if not cleared */    _PM_readCMOS(0x0C);    if (frequency == 0) {	/* Disable RTC timout */	_PM_writeCMOS(0x0A,(uchar)_PM_oldCMOSRegA);	_PM_writeCMOS(0x0B,(uchar)(_PM_oldCMOSRegB & 0x0F));	}    else {	/* Convert frequency value to RTC clock indexes */	for (i = 0; convert[i] != -1; i++) {	    if (convert[i] == frequency)		break;	    }	/* Set RTC timout value and enable timeout */	_PM_writeCMOS(0x0A,(uchar)(0x20 | (i+3)));	_PM_writeCMOS(0x0B,(uchar)((_PM_oldCMOSRegB & 0x0F) | 0x40));	}}ibool PMAPI PM_setRealTimeClockHandler(PM_intHandler th,int frequency){    static ibool    locked = false;    /* Save the old CMOS real time clock values */    _PM_oldCMOSRegA = _PM_readCMOS(0x0A);    _PM_oldCMOSRegB = _PM_readCMOS(0x0B);    /* Install the interrupt handler */    RTC_idtEntry = 0x38;    _PM_getISR(RTC_idtEntry, &_PM_prevRTC);    _PM_rtcHandler = th;    _PM_setISR(RTC_idtEntry, _PM_rtcISR);    /* Program the real time clock default frequency */    PM_setRealTimeClockFrequency(frequency);    /* Unmask IRQ8 in the PIC2 */    _PM_oldRTCPIC2 = PM_inpb(0xA1);    PM_outpb(0xA1,(uchar)(_PM_oldRTCPIC2 & 0xFE));    return true;}void PMAPI PM_restoreRealTimeClockHandler(void){    if (_PM_rtcHandler) {	/* Restore CMOS registers and mask RTC clock */	_PM_writeCMOS(0x0A,_PM_oldCMOSRegA);	_PM_writeCMOS(0x0B,_PM_oldCMOSRegB);	PM_outpb(0xA1,(uchar)((PM_inpb(0xA1) & 0xFE) | (_PM_oldRTCPIC2 & ~0xFE)));	/* Restore the interrupt vector */	_PM_restoreISR(RTC_idtEntry, &_PM_prevRTC);	_PM_rtcHandler = NULL;	}}

⌨️ 快捷键说明

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