|
如果不采用DMA模式,下面的代码可以正常工作
pIIS->IISMOD = 0x0189; // IIS slave transmit mode, 16bit, 256fs, 32fs
pIIS->IISFIFCON = 0x0200; // enable Transmit FIFO
pIIS->IISCON = 0x0000; // disable Transmit DMA request
pIIS->IISCON = 0x0001; // start IIS
while(1){
while(pIIS->IISCON & 0x0080);
wordCnt ++;
if(wordCnt == 60)wordCnt = 0;
if(wordCnt < 30)*(WORD *)0x01D18010 = 0x0000;
else *(WORD *)0x01D18010 = 0x7FFF;
}
而下面的代码却无法使IIS工作在DMA模式下,其中data是指针,BDMA的power已经使能
pIIS->IISMOD = 0x0189; // IIS slave transmit mode, 16bit, 256fs, 32fs
pIIS->IISFIFCON = 0x0A00; // enable Transmit FIFO & DMA mode
pIIS->IISCON = 0x0020; // enable Transmit DMA request
pBDMA->DICNT1 = (1 << 30) | (1 << 26) | 0x80000;
// IIS, handshake, unit transfer, polling, disable auto reload, disable DMA
pBDMA->DISRC1 = (1 << 30) | (1 << 28) | (DWORD)data; // half word, increment address
pBDMA->DIDES1 = (1 << 30) | (3 << 28) | 0x01D18010; // M2IO, fixed address
pBDMA->DICNT1 |= (1 << 20); //enable BDMA0
pBDMA->DCON1 = 0; // enable DMA request
pIIS->IISCON = 0x0021; // start IIS
调试时发现pBDMA->DCCNT1中的计数值不变,DAC不出声。
在网上搜过许多程序,都是大同小异,但都无法使IIS工作在DMA模式下,即便是设置成IIS主动模式。所以请教达人44B0的IIS如何设置才能工作在DMA模式下? |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|