| 
 
|     ClearPending(BIT_DMA2);                        <br />    rINTMOD = 0x0;<br />    <br />    // initialize philips UDA1341 chip<br />    init_1341(PLAY);    <br /><br />    // set BDMA interrupt<br />    pISR_DMA2 = (unsigned)dma2_done;<br />    rINTMSK  &= ~(BIT_DMA2);<br />    <br />// initialize variables<br />    f_nDMADone = 0;<br />        <br />    //DMA2 Initialize<br />    rDISRCC2 = (0<<1) + (0<<0);             //AHB, Increment<br />    rDISRC2  = ((INT32T)(pWavFile));                    <br />    rDIDSTC2 = (1<<1) + (1<<0);             //APB, Fixed<br />    rDIDST2  = ((INT32T)IISFIFO);           //IISFIFO<br />    rDCON2   = (1<<31)+(0<<30)+(1<<29)+(0<<28)+(0<<27)+(0<<24)+(1<<23)+(0<<22)+(1<<20)+nSoundLen/2;<br />    //Handshake, sync PCLK, TC int, single tx, single service, I2SSDO, I2S request, <br />    //Auto-reload, half-word, size/2<br />    rDMASKTRIG2 = (0<<2)+(1<<1)+0;            //No-stop, DMA2 channel on, No-sw trigger <br /><br />    //IIS Initialize<br />    //Master,Tx,L-ch=low,iis,16bit ch.,CDCLK=384fs,IISCLK=32fs<br />    rIISCON = (1<<5)+(0<<4)+(0<<3)+(1<<2)+(1<<1);<br />    rIISMOD = (0<<8) + (2<<6) + (0<<5) + (0<<4) + (1<<3) + (1<<2) + (1<<0);      <br />    rIISPSR = (2<<5) + 2;                    //Prescaler_A/B=3 <br />    <br />    //Tx DMA enable,Rx DMA disable,Tx not idle,Rx idle,prescaler enable,stop<br />    rIISFCON = (1<<15) + (1<<13);           //Tx DMA,Tx FIFO --> start piling....<br />    <br />     rIISCON |= 0x1;                         // enable IIS   <br />    while( f_nDMADone == 0);   <br />    rINTMSK |= BIT_DMA2;        <br />    rIISCON = 0x0;                            // IIS stop<br /><br /><br /><br /><br />void __irq dma2_done(void)<br />{<br />    ClearPending(BIT_DMA2);                        // clear pending bit<br />    f_nDMADone = 1;<br />}<br /><br /><br /><br /><br />不懂为什么一到while( f_nDMADone == 0);  程序就跑飞呢? | 
 |