打印

2410 iis出现错误,跑飞

[复制链接]
1784|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhlyp|  楼主 | 2008-6-3 17:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DMA, DM, ST, AD, TI
    ClearPending(BIT_DMA2);                        
    rINTMOD = 0x0;
    
    // initialize philips UDA1341 chip
    init_1341(PLAY);    

    // set BDMA interrupt
    pISR_DMA2 = (unsigned)dma2_done;
    rINTMSK  &= ~(BIT_DMA2);
    
// initialize variables
    f_nDMADone = 0;
        
    //DMA2 Initialize
    rDISRCC2 = (0<<1) + (0<<0);             //AHB, Increment
    rDISRC2  = ((INT32T)(pWavFile));                    
    rDIDSTC2 = (1<<1) + (1<<0);             //APB, Fixed
    rDIDST2  = ((INT32T)IISFIFO);           //IISFIFO
    rDCON2   = (1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(0<<24)+(1<<23)+(0<<22)+(1<<20)+nSoundLen/2;
    //Handshake, sync PCLK, TC int, single tx, single service, I2SSDO, I2S request, 
    //Auto-reload, half-word, size/2
    rDMASKTRIG2 = (0<<2)+(1<<1)+0;            //No-stop, DMA2 channel on, No-sw trigger 

    //IIS Initialize
    //Master,Tx,L-ch=low,iis,16bit ch.,CDCLK=384fs,IISCLK=32fs
    rIISCON = (1<<5)+(0<<4)+(0<<3)+(1<<2)+(1<<1);
    rIISMOD = (0<<8) + (2<<6) + (0<<5) + (0<<4) + (1<<3) + (1<<2) + (1<<0);      
    rIISPSR = (2<<5) + 2;                    //Prescaler_A/B=3 
    
    //Tx DMA enable,Rx DMA disable,Tx not idle,Rx idle,prescaler enable,stop
    rIISFCON = (1<<15) + (1<<13);           //Tx DMA,Tx FIFO --> start piling....
    
     rIISCON |= 0x1;                         // enable IIS   
    while( f_nDMADone == 0);   
    rINTMSK |= BIT_DMA2;        
    rIISCON = 0x0;                            // IIS stop




void __irq dma2_done(void)
{
    ClearPending(BIT_DMA2);                        // clear pending bit
    f_nDMADone = 1;
}




不懂为什么一到while( f_nDMADone == 0);  程序就跑飞呢?

相关帖子

沙发
zhlyp|  楼主 | 2008-6-3 17:34 | 只看该作者

跑飞的情况:声音在不断循环播放

使用特权

评论回复
板凳
阿南| | 2008-6-3 17:56 | 只看该作者

需要挂仿真器,查看它在什么情况下飞掉

使用特权

评论回复
地板
zhlyp|  楼主 | 2008-6-4 09:36 | 只看该作者

能详细说一下吗?

我用的ads+h-jtag,只能发现在while( f_nDMADone == 0); 在这句跑飞

使用特权

评论回复
5
阿南| | 2008-6-4 09:52 | 只看该作者

采用混合模式,看是执行哪条汇编指令后飞掉的,是否是引起中

后飞掉的,看寄存器窗口PC值的变化

使用特权

评论回复
6
aibxyz| | 2008-6-4 13:27 | 只看该作者

应该是中断引起的

检查一下,你的中断向量都正确配置?还有中断服务程序正常处理了请求

使用特权

评论回复
7
zhlyp|  楼主 | 2008-7-23 10:55 | 只看该作者

那么长时间,一直没解决

void __irq dma2_done(void)
{
    ClearPending(BIT_DMA2);                        // clear pending bit
    uart_printf("ok");
    f_nDMADone = 1;
}
今天又重新调这个驱动
我发现我加了一句uart_printf("ok");没有输出
说明没调用中断服务程序就已经跑飞了

使用特权

评论回复
8
zhlyp|  楼主 | 2008-7-23 11:28 | 只看该作者

会不会是硬件有错误呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

93

帖子

0

粉丝