凌阳科技大学计划论坛

首页 » 16位应用专题 » OS应用专区 » MINIOS外部中断的问题?
fanjun415 - 2007-11-26 15:17:00
我按照miniOS使用中断的方法,定义了中断的服务函数,并设置和开启了外部中断!但是程序仿真和实际运行时,外部中断都没有反映!不知为何?可有什么注意事项吗?
Mariah49 - 2007-11-26 15:29:00
仿真的时候应该得不到外部中断是正常的。因为没有办法触发中断。

连接硬件调试的时候要注意外部中断的触发条件,是外部中断源的那个沿触发中断,是否产生了这个沿。
fanjun415 - 2007-12-3 0:11:00
软件仿真的时候是可以触发外部中断的,采用PORT/IO方式即可!而且保证给的是下降沿,并且引脚正确!以下是程序,为何不行呢?:'( 恳请高手解答?
volatile unsigned int *P_IOA_BUFFER =(unsigned int*)(0x7000);        //Port A data register
volatile unsigned int *P_IOA_DIR =(unsigned int*)(0x7002);        //Port A direction register
volatile unsigned int *P_IOA_ATTRIB = (unsigned int*)(0x7003);  //Port A attribute register


volatile unsigned int *P_IOB_BUFFER =(unsigned int*)(0x7005);        //Port B data register
volatile unsigned int *P_IOB_DIR =(unsigned int*)(0x7007);        //Port B direction register
volatile unsigned int *P_IOB_ATTRIB = (unsigned int*)(0x7008);    //Port B attribute register

volatile unsigned int *clear_dog = (unsigned int*)(0x7012);

main()
{
    void func_INT(void);
    void Task1();
    void Task2();
    SpSInit();
    *P_IOA_DIR = 0XFFFF;                       
    *P_IOA_ATTRIB = 0XFFFF;                   
    *P_IOB_DIR = 0X0000;                   
    *P_IOB_ATTRIB = 0X0000;
    *P_IOB_BUFFER = 0X0004;                   
    SpSSetVector(IRQ3_EXT1_VEC,func_INT);    //Set interrupt function
    SpFAddINTVec(IRQ3_EXT1_VEC);
    err = SpSTaskCreate(Task1,0,t1stack+24,2);        //Create first task
    err = SpSTaskCreate(Task2,0,t2stack+24,3);        //Create second task
    sem1 = SpSSemCreate(0);//Create semaphore           
    sem2 = SpSSemCreate(0);
    SpSStart();    //Start OS kernel
}
...........
fanjun415 - 2007-12-3 0:15:00
实际使用的时候,我还加了一个4hz的定时中断用来清狗。那个中断可以正常运行。可外部中断就怎么也触发不了!
fanjun415 - 2007-12-5 21:13:00
找到原因了!把SpFAddINTVec(IRQ3_EXT1_VEC);
改成SpFAddINTVec(IRQ3_EXT1_EN);就好了!!!:D
 1 
查看完整版本: MINIOS外部中断的问题?