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