📄 expdrv.c
字号:
/**************************************************************************************************
*
* 作者: 胡翌博,浙江大学信电系电路与系统2001研
*
* 文件名:expDrv.c
*
* 版本: 1.0
*
* 功能描述:本文件为C语言级别的中断驱动程序,包括:
* 中断伺服程序的安装与重定向程序;
* 中断伺服程序本身;
*
* 被本文件引用的文件列表:typDef.h
*
* 应用本文件的文件列表:no
*
* 版本更迭:
* 日期 版本号 作者 备注
* 07-15-2003 1.0 胡翌博 --尚未实验验证
**************************************************************************************************/
#include "typDef.h"
/**************************************************************************************************
函数名称: installIntHandlerB()
函数功能: 用分支指令,安装和重新定位中断伺服程序
入口参数: routine 中断伺服程序新的起始地址值,用于生成新的跳转指令
vector 与该中断伺服程序相应的中断入口
返 回 值: oldvec 中断入口存放跳转到中断伺服程序的跳转指令,该函数返回旧跳转指令
0xFF 安装不成功
备 注: 采用分支指令,因此中断伺服程序的起始地址离中断入口的地址不得超过32MB
**************************************************************************************************/
UINT32 installIntHandler (UINT32 routine, UINT32 *vector)
{
unsigned vec, oldvec;
vec = ((routine - (unsigned)vector - 0x8)>>2);
if (vec & 0xff000000)
{
return 0xFF;
}
vec = 0xea000000 | vec;
oldvec = *vector;
*vector = vec;
return (oldvec);
}
/**************************************************************************************************
函数名称: installIntHandlerPC()
函数功能: 用直接修改PC的方式,安装和重新定位中断伺服程序
入口参数: location 中断伺服程序新的起始地址值,用于生成新的跳转指令
vector 与该中断伺服程序相应的中断入口
返 回 值: oldvec 中断入口存放跳转到中断伺服程序的跳转指令,该函数返回旧跳转指令
0xFF 安装不成功
备 注: 由于采用直接修改PC,从而跳转,因此没有范围的限制
***************************************************************************************************/
UINT32 installIntHandlerPC (UINT32 location, UINT32 *vector)
{
unsigned vec, oldvec;
vec = ((unsigned)location - (unsigned)vector - 0x8) | 0xe59ff000
oldvec = *vector;
*vector = vec;
return (oldvec);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -