使用的是6722.CCS6.0.
开始用CSL做RTI的中断,出现很多warning,程序运行一段时间,中断也近不去了.不知道是不是版本问题,就不用CSL了.
后来自己初始化寄存器,自己配置vector.asm:
;unused 4 ;RTI Interrupt 0
Timer1_int:
mvkl _comp0Isr,b31;_xint0_isr
mvkh _comp0Isr,b31
b b31
mvc PCE1,b31 ; address of interrupt vectors
mvc b31,ISTP ; set table to point here
nop 3
nop
nop
现在有个问题:b31在外面的程序中也会被用到.怎么防止冲突呢?有没有压栈的机制.
虽然没有直接跟踪到b31被使用,可是程序的局部变量都用到b19了.
补充一下,现象是这样的:
开了定时器,计算FFT,会出现某些结果异常.关掉定时器就一切ok了.
或者是大量的FFT或卷积运算,运算中途定时器中断再也没有响应了.
ching ricky:
另外,也搞不懂这里是对哪些寄存器或者地址进行操作了:
/* Assigning the ISR */ isrRec.handler = comp0Isr; /* No argument is passed to the ISR */ isrRec.arg = (void *) 0x0;
CSL_intcPlugEventHandler (hIntc, &isrRec);
看了一下,好像是有个表,这个函数把中断服务函数插到表里面.
不知道CSL怎么避免上面提到的b31寄存器的问题.