This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320F2812外部中断问题

Other Parts Discussed in Thread: TMS320F2812

请教专家一个问题,

请看下图,

图中,上面的黄色通道称为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;
    // 返回
}

亟待解答。谢谢!