请教专家一个问题,
请看下图,
图中,上面的黄色通道称为PDCLK时钟,由外部芯片送给TMS320F2812的XINT1引脚,下降沿触发XINT1中断,在中断程序中,F2812通过XINTF的ZONE0向外部设备发送数据,方案要求在PDCLK随之而来的上升沿到来之前,中断程序必须执行结束,以便外部设备在这个上升沿所存数据。问题是,由于PDCLK的速率很高,而中断服务程序执行时间太长,导致满足不了要求。图中,下面的通道是我测试用的,下降沿表示进入了中断,上升沿表示中断执行结束。可以看出,光是进入中断就花了很长时间。方案要求PDCLK的速率达到2MHZ,但现在只能做到如图所示的800K。
我的中断服务程序如下:
///////////////////////////////////////////////////////////
//主程序
void main(void)
{
…..
…..
PieCtrl.PIEIER1.bit.INTx4 = 1; // XINT1所在PIE分组1中的第4位
IER |= M_INT1; // 开CPU中断1
EINT; // 使能全局中断
ERTM; // 使能实时中断
for(;;)
{}
}
///////////////////////////////////////////////////////////
//中断服务 函数实现
interrupt void Para_Isr(void) //并口数据的中断服务程序
{
ClrTxEnable;
SetTxEnable; //将TxEnable置高,等待PDCLK的上升沿接收数据;
GpioDataRegs.GPBDAT.all = 0x0000; //Test
* zone0start = IQ[count2]; count2++;
if (count2 == 762) //((N * RATE) << 1)
count2 = 0;
GpioDataRegs.GPBDAT.all = 0xffff; //Test
PieCtrl.PIEIFR1.bit.INTx4 = 0; //清除TIPINT的中断标志
//PieCtrl.PIEACK.bit.ACK1 = 1; //清除相应中断组的PIEACKx寄存器位
PieCtrl.PIEACK.all = 0xFFFF;//响应中断,写1清0,允许INT1~INT12向CPU发起中断
//EINT; // 开全局中断
//ERTM;
// 返回
}
亟待解答。谢谢!