分类: 嵌入式
2013-07-02 23:24:45
中断驱动程序结构比较简单,因此该驱动的构建过程也比较简单,几个函数库都是静态构建的,唯一需要动态创建的就是中断控制芯片的初始化。
在函数sysHwInit()中调用了函数sysIntInitPIC ()完成了中断控制芯片的初始化,并指定intEoiGet = sysIntEoiGet。此后就可以正常使用中断驱动了。如图3.7。
图3.7 中断控制器的初始化过程
3.4.2 中断驱动程序的应用
中断驱动程序为上层应用程序提供了通用的函数接口,这些函数接口如表3.2所示。注意有些函数如sysLib中的sysIntInitPIC虽然属于提供给上层的函数,但是他的上层用户只有sysLib库的sysHwInit函数,因此不作为为上层应用软件提供的接口。
表格 3.2 中断驱动程序提供的通用函数接口
函数名称 |
函数库 |
说明 |
intConnect |
intArchLib |
安装中断处理函数 |
intEnable |
intArchLib |
控制CPU允许某个特定的中断 |
intDisable |
intArchLib |
控制CPU禁止某个特定的中断 |
intLockLevelSet |
intArchLib |
设置CPU的中断屏蔽级别变量 |
intLockLevelGet |
intArchLib |
获取CPU的中断屏蔽级别变量 |
intVecBaseSet |
intArchLib |
设置中断向量基本地址 |
intVecBaseGet |
intArchLib |
获取中断向量基本地址 |
intVecSet |
intArchLib |
实模式下设置中断向量 |
intVecSet2 |
intArchLib |
保护模式下设置中断向量 |
intVecGet |
intArchLib |
实模式下获取中断向量 |
intVecGet2 |
intArchLib |
保护模式下获取中断向量 |
intVecTableWriteProtect |
intArchLib |
设置中断向量表写保护 |
intRegsLock |
intArchLib |
设置一个寄存器集屏蔽CPU中断 |
intRegsLock |
intArchLib |
设置一个寄存器集允许CPU中断 |
intLevelSet |
intALib |
设置CPU中断级别 |
intLock |
intALib |
屏蔽CPU中断相应 |
intUnlock |
intALib |
允许CPU中断相应 |
sysIntLock |
sysLib |
控制中断控制器屏蔽所有中断 |
sysIntUnlock |
sysLib |
控制中断控制器允许所有中断 |
sysIntDisablePIC |
sysLib |
控制中断控制器屏蔽某一中断 |
sysIntEnablePIC |
sysLib |
控制中断控制器允许某一中断 |
sysIntLevel |
sysLib |
从intEnt函数中调用获取中断号 |
注意:控制CPU屏蔽中断和控制中断控制器屏蔽中断的作用是不同的,前者可以控制的中断范围更大,只要是可屏蔽中断都能完成;而后置控制的范围则较小,只有链接到中断控制器的外围中断才是可以屏蔽的。