昨天发过这个问题,没有说清楚。
我的主程序是这样的
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)依然如故