S3C2440之简易播放器设计(利用DMA与IIS通信)

基于S3C2440的简易音乐播放器通过DMA和IIS接口实现流畅播放,避免操作时的卡顿。通过设置DMA控制器,数据自动在内存与IIS发送FIFO间传输。注意DMA的STOP位和ON_OFF位管理,以及在DMA中断中重新开启传输以实现连续播放。此设计为进一步扩展如循环播放、切换歌曲等功能提供了基础。
摘要由CSDN通过智能技术生成

利用前一篇文章讲解的IIS知识,只是不是利用轮询,而是利用DMA控制器,让数据在内存和IIS的发送FIFO之间传送。这样在音乐播放过程中,进行暂停,静音,播放,音量增减都不会使音乐产生卡顿的感觉。

注意DMA的请求是由发送FIFO自动发起的。

可以设置DMAMSKTRIG的STOP位停止DMA,但是真正的停止需要参考ON_OFF位。ON_OFF位当为非自动重载,且CURR_TC为0,该位自动为OFF。STOP位置位,该位也置为OFF。所以需要注意,一次DMA传输结束,假设开启了DMA中断,那么再DMA中断需要再次打开DMA,因为CURR_TC=0使其停止了。

当CURR_TC=0,且DMA ACK=1的话,TC的数值又再次加载了到CURR_TC中。下一次传输又开始了。



int main(void)
{	
	。。。。。。

	while(1)
	{
		printf("\r\nplease select the following alpa");
		printf("\r\n r--run music    s--stop music");
		printf("\r\n p--pasue music  m--mute music");
		printf("\r\n u--up voice     d--down voice\r\n");
		putchar((swt = getchar()));

		switch(swt)
		{
			//play
			case 'r':
				if(STOP == I2S_CTL.state)
				{
					volume = 0x00;	 //初始化音量,默认最大
					mute = 0xa0;	 //初始化为不静音

					playsound(music + 44, sizeof(music) - 44);
				}
				else
					printf("\r\nRUNNING......\r\n");
				break;
			//stop
			case 's':
				if(RUNNING == I2S_CTL.state)
				{
					rIISCON = 0x0;
					rIISFCON = 0x0;
					rDMASKTRIG2 = 1<<2;
					I2S_CTL.flag = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值