TI中文支持网
TI专业的中文技术问题搜集分享网站

为什么启动timer0的中断服务后,MCASP就不能以查询方式发送了,我用的是TMS320C6748

昨天发过这个问题,没有说清楚。

我的主程序是这样的

void main(void)
{    DebugUartInit();
    LED_init();
    InterruptInit();
    USTIMER_init();
    TEST_audio();
}

最后一条函数语句 TEST_audio 中包含McASP的正弦波表输出程序

McASP发送控制是非DMA方式的,每查询到串行控制寄存器的XRDY标志被置1时进行新发送,工作正常,可听到持续单音,GP2[8]引脚电平持续翻转。

while(1)
{
    for (msec = 0; msec < 1000; msec++)
    {
        for (sample = 0; sample < 48; sample++)
        {
            while (!CHKBIT(MCASP->SRCTL12, XRDY)) {}
            MCASP->XBUF12 = input_audio_32bit[sample];     // 左声道输出

            while (!CHKBIT(MCASP->SRCTL12, XRDY)) {}
            MCASP->XBUF12 = input_audio_32bit[sample];     // 右声道输出

   LED2_overturn();                                                      // GP2[8]引脚LED闪烁指示

        } 

    }

 }

但是当我启用了timer0的中断应用后,周期性的中断服务完全正常,而上面的循环似乎就死在了 while (!CHKBIT(MCASP->SRCTL12, XRDY)),好像是总也等不到XRDY的置位,或者这个标志被意外清除了?特别是GP2[2]引脚只发生了一次翻转。

中断服务程序很短暂,观察也没有发现因为这个短暂的中断服务引起McASP XSTAT寄存器的XERR错误,折腾了好长时间了,请TI工程师给予帮助,谢谢

Shine:

中断服务子程序用interrupt关键字定义
void MyTimerIsr(void)改成interrupt void MyTimerIsr(void)

user485682:

回复 Shine:

抱歉,按您说的 void MyTimerIsr(void)改成interrupt void MyTimerIsr(void)依然如故

赞(0)
未经允许不得转载:TI中文支持网 » 为什么启动timer0的中断服务后,MCASP就不能以查询方式发送了,我用的是TMS320C6748
分享到: 更多 (0)