|
一、功能
安装中中断向量
二、代码:
void PC_VectSet (INT8U vect, void (*isr)(void))
{
#if OS_CRITICAL_METHOD == 3
OS_CPU_SR cpu_sr;
#endif
INT16U *pvect;
pvect = (INT16U *)MK_FP(0x0000, vect * 4); /*pvect 指向欲安装的中断向量位置*/
OS_ENTER_CRITICAL();
*pvect++ = (INT16U)FP_OFF(isr); /*保存中断服务程序的偏移地址*/
*pvect = (INT16U)FP_SEG(isr); /*保存中断服务程序的段地址*/
OS_EXIT_CRITICAL();
} 说明:
unsigned FP_OFF(void far *farptr)---用来取远指针farptr的偏移量
unsigned FP_SEG(void far *farptr) ---用来没置远指针farptr的段值
void far *MK_FP(unsigned seg,unsigned off)---根据段seg和偏移量off构造一个far指针
三、PC_VectGet()
void *PC_VectGet (INT8U vect)
{
#if OS_CRITICAL_METHOD == 3 /* Allocate storage for CPU status register */
OS_CPU_SR cpu_sr;
#endif
INT16U *pvect;
INT16U off;
INT16U seg;
pvect = (INT16U *)MK_FP(0x0000, vect * 4); /*指向中断向量所在地址*/
OS_ENTER_CRITICAL();
off = *pvect++; /* Obtain the vector's OFFSET */
seg = *pvect; /* Obtain the vector's SEGMENT */
OS_EXIT_CRITICAL();
return (MK_FP(seg, off)); /*返回中断向量指向的地址(中断服务程序的地址)*/ |
|