请教一个IIS接口播放音频的问题

[复制链接]
3400|3
 楼主| tianying1 发表于 2007-5-8 11:36 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;&nbsp;&nbsp;以下是我写的一段通过IIS接口播放音频的程序<br /><br />void&nbsp;BoFangYinPing(U32&nbsp;Addr)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;U16&nbsp;*buf;<br />&nbsp;&nbsp;&nbsp;&nbsp;U16&nbsp;*buf_tmp;<br />&nbsp;&nbsp;&nbsp;&nbsp;U32&nbsp;size;<br />&nbsp;&nbsp;&nbsp;&nbsp;U8&nbsp;i;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;buf&nbsp;=&nbsp;(U16&nbsp;*)Addr;<br />&nbsp;&nbsp;&nbsp;&nbsp;buf_tmp&nbsp;=&nbsp;buf&nbsp;+&nbsp;22;<br />&nbsp;&nbsp;&nbsp;&nbsp;size&nbsp;=&nbsp;(*(buf&nbsp;+&nbsp;21)&nbsp;&lt&lt&nbsp;16)&nbsp;|&nbsp;*(buf&nbsp;+&nbsp;20);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;pllcon_save&nbsp;=&nbsp;&nbsp;rPLLCON;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rPLLCON&nbsp;=&nbsp;(0x69&nbsp;&lt&lt&nbsp;12)&nbsp;|&nbsp;(0x17&nbsp;&lt&lt&nbsp;4)&nbsp;|&nbsp;0;&nbsp;&nbsp;//如果不屏蔽不可播放<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rIISCON=0x02;<br />&nbsp;&nbsp;&nbsp;&nbsp;//IIS&nbsp;interface&nbsp;enable:&nbsp;no<br />&nbsp;&nbsp;&nbsp;&nbsp;//IIS&nbsp;prescaler&nbsp;enable:&nbsp;yes<br />&nbsp;&nbsp;&nbsp;&nbsp;//receive&nbsp;channel&nbsp;idle&nbsp;command:&nbsp;IISLRCK&nbsp;is&nbsp;generated<br />&nbsp;&nbsp;&nbsp;&nbsp;//transmit&nbsp;channel&nbsp;idle&nbsp;command:&nbsp;IISLRCK&nbsp;is&nbsp;generated<br />&nbsp;&nbsp;&nbsp;&nbsp;//receive&nbsp;DMA&nbsp;service&nbsp;request&nbsp;enable:no<br />&nbsp;&nbsp;&nbsp;&nbsp;//transmit&nbsp;DMA&nbsp;service&nbsp;request&nbsp;enable:no<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//Master,Tx,L-ch=low,iis,16bit&nbsp;ch.,codeclk=256fs,lrck=32fs&nbsp;&nbsp;&nbsp;&nbsp;rIISMOD=0x89;<br />&nbsp;&nbsp;&nbsp;&nbsp;//Serial&nbsp;bit&nbsp;clock&nbsp;frequency&nbsp;slect:32fs<br />&nbsp;&nbsp;&nbsp;&nbsp;//Master&nbsp;clock(CODECLK)&nbsp;frequency&nbsp;select:256fs<br />&nbsp;&nbsp;&nbsp;&nbsp;//Serial&nbsp;data&nbsp;bit&nbsp;per&nbsp;channel:16&nbsp;bit<br />&nbsp;&nbsp;&nbsp;&nbsp;//Serial&nbsp;interface&nbsp;format:&nbsp;IIS&nbsp;compatible&nbsp;format<br />&nbsp;&nbsp;&nbsp;&nbsp;//Active&nbsp;level&nbsp;of&nbsp;left/right&nbsp;channel:Low&nbsp;for&nbsp;left&nbsp;channel&nbsp;(&nbsp;high&nbsp;for&nbsp;right&nbsp;channel)<br />&nbsp;&nbsp;&nbsp;&nbsp;//Transmit/rec.eive&nbsp;mode&nbsp;select:transfer&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;//Master/slave&nbsp;mode:master&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//Prescaler_A/B&nbsp;enable,&nbsp;value=3<br />&nbsp;&nbsp;&nbsp;&nbsp;rIISPSR=0x33;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//prescaler&nbsp;value&nbsp;B:3<br />&nbsp;&nbsp;&nbsp;&nbsp;//Prescaler&nbsp;value&nbsp;A:3<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//Tx/Rx&nbsp;normal,Tx&nbsp;FIFO&nbsp;enable--&gt&nbsp;start&nbsp;piling....&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rIISFCON=0x200;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;//receive&nbsp;fifo&nbsp;enable:no<br />&nbsp;&nbsp;&nbsp;&nbsp;//transmit&nbsp;fifo&nbsp;enable:yes<br />&nbsp;&nbsp;&nbsp;&nbsp;//receive&nbsp;fifo&nbsp;access&nbsp;mode:normal&nbsp;access&nbsp;mode<br />&nbsp;&nbsp;&nbsp;&nbsp;//transmite&nbsp;access&nbsp;mode&nbsp;select:normal&nbsp;access&nbsp;mode<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;/******&nbsp;IIS&nbsp;Tx&nbsp;Start&nbsp;******/<br />&nbsp;&nbsp;&nbsp;&nbsp;rIISCON&nbsp;|=0x1;<br />&nbsp;&nbsp;&nbsp;&nbsp;while(Uart_Getch()&nbsp;!=&nbsp;ESC_KEY)&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(IIS_FIFOREADY)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i&lt8;i++)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*rIISFIF&nbsp;=&nbsp;*buf_tmp++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;((U32)buf_tmp-(U32)(buf+22))&nbsp;&gt&nbsp;size&nbsp;)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf_tmp&nbsp;=&nbsp;(U16&nbsp;*)(buf+22);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WrUTXH0('#');<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;/******&nbsp;IIS&nbsp;Tx&nbsp;Stop&nbsp;******/<br />&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rIISCON=0x0;&nbsp;&nbsp;&nbsp;&nbsp;//IIS&nbsp;stop<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;rPLLCON&nbsp;=&nbsp;pllcon_save;<br />&nbsp;&nbsp;&nbsp;&nbsp;Delay(10);<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br />一开始总是不能播放音频,经过检查,我发现问题出在Uart_Printf()函数。这个函数原先是这样定义的<br />char&nbsp;Uart_Getch(void)<br />{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(!(rUTRSTAT0&nbsp;&&nbsp;0x1));&nbsp;//Receive&nbsp;data&nbsp;ready<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;RdURXH0();<br />}<br />如果改为<br />char&nbsp;Uart_Getch(void)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(rUTRSTAT0&nbsp;&&nbsp;0x1)&nbsp;&nbsp;//Receive&nbsp;data&nbsp;ready<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;RdURXH0();<br />}<br />就可以播放音频了。<br /><br />两种写法,逻辑上是一样的啊,为什么会有这么大的区别呢?<br />请高手指教,不胜感谢!<br />
xwj 发表于 2007-5-8 11:50 | 显示全部楼层

前者会死等

  
 楼主| tianying1 发表于 2007-5-8 11:51 | 显示全部楼层

刚才有个地方打错了

问题不是出在Uart_Printf()函数,而是Uart_Getch()函数
 楼主| tianying1 发表于 2007-5-8 11:52 | 显示全部楼层

为什么会死循环呢?

&nbsp;&nbsp;&nbsp;&nbsp;但是我确实输入字符了啊,应该说rUTRSTAT0&nbsp;&&nbsp;0x1&nbsp;==&nbsp;1应该可以满足,不会死循环了啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

23

主题

36

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部