中断处理程序:我只是用来翻转IO口电平(论坛的代码编辑器是不是有问题,一用插入代码就全乱码了)
interrupt void xint1_isr(void) //GPIO15是int1的入口
{
// GpioDataRegs.GPBCLEAR.all = 0x4; // GPIO34 is low
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1; //翻转电平
// Acknowledge this interrupt to get more from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
是这样,我用1MHz方波输入到外部中断映射到的GPIO15,设置下降沿触发,然后在中断服务子程序中翻转
GPIO0的电平,以此来测试外部中断从输入,到响应中断,到处理完压栈这些工作所花费的时间,结果发现需要210ns
(用的是F28335,150MHz/6.67ns一个时钟周期)
我的问题:210ns的响应时间对于我来说太慢了,我能否通过什么方法降低进入中断以及压桟等所花费的时间?另:我觉得可能需要深入了解C2000的汇编指令,相关的文档在TI官网如何查找?
chunyu chen1:
这是用示波器观察的,黄线为输入1MHz方波以引起外部中断,蓝线为在中断处理函数中实现的GPIO0的电平的翻转,由图2可以看出,延时有210ns
中断处理程序:我只是用来翻转IO口电平(论坛的代码编辑器是不是有问题,一用插入代码就全乱码了)
interrupt void xint1_isr(void) //GPIO15是int1的入口
{
// GpioDataRegs.GPBCLEAR.all = 0x4; // GPIO34 is low
GpioDataRegs.GPATOGGLE.bit.GPIO0 = 1; //翻转电平
// Acknowledge this interrupt to get more from group 1
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
}
是这样,我用1MHz方波输入到外部中断映射到的GPIO15,设置下降沿触发,然后在中断服务子程序中翻转
GPIO0的电平,以此来测试外部中断从输入,到响应中断,到处理完压栈这些工作所花费的时间,结果发现需要210ns
(用的是F28335,150MHz/6.67ns一个时钟周期)
我的问题:210ns的响应时间对于我来说太慢了,我能否通过什么方法降低进入中断以及压桟等所花费的时间?另:我觉得可能需要深入了解C2000的汇编指令,相关的文档在TI官网如何查找?
Johnson Chen1:
正常应该是9-13的周期进入到中断函数入口,210ns有点长,你可以看一下中断服务函数的反汇编查一下原因, xint1_isr是否已经放在RAM里面执行?
如果想要中断响应快的话,可以将中断ISR用汇编函数来写。