This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于6455的EDMA3中断问题

专家好,我是一名新手,目前使用的是DSK6455的板子,主要做一个音频的应用(板子上,AIC23与MCBSP1连接),碰到的问题如下:

我首先设置了两个EDMA3事件,分别是事件1:从McBSP1的DRR地址读数据,每次读80个,采用乒乓方式;每次读完80个数据,中断一次CPU,将读到的数据复制到另外一块存储区;                                 事件2:从一块存储区往McBSP1的DXR地址写数据,每次写80个,采用乒乓方式;每次写完80个数据,中断一次CPU,往该存储区写入新数据。

编译通过,运行,发现声音有“卡卡”声,我自己分析发现:

当设置中断的时候,我使用了INT4和INT5两个中断(中断函数分别为_interrupt1和_interrupt2),但都设置为了EDMA3全局完成中断,也就是INTMUX1=0x00001818,然后当事件1完成一次,中断CPU的时候,执行完了中断函数interrupt1之后,接着进入了interrupt2,而不管事件2有没有完成一次;同样,当事件2完成一次,中断CPU的时候,也把两个中断函数分别响应一次。造成了咔咔声。

从网上看了一下别人的帖子,1.是不是EDMA3只能,或者说只需要配置到一个INT(4-15)?我应该如何设置?中断函数应该怎么写?

                                                                                    2,如果1成立,是不是只要有EDMA3事件完成中断,就会进入一个统一的中断函数,然后程序判断具体是哪个事件完成中断,对于我这个应用,应该怎么写呢?

这个问题已经困扰了我好几天了,烦请专家赐教,深表感激!!!!!!

 

 

另外还有一个问题,也是困扰了我一下,就是指针的问题,比如我写了一个INT16 * int_pointer;然后我想让这个指针首先指向地址0x00ff0000。使用int_pointer=0x00ff0000;结果编译不能通过,说我不能这样给INT16型的赋值,我目前采取了一个笨的办法,另外定义个

#pragma DATA_SECTION(temp1,"my_sect3");
Int16 temp1;

然后在cmd文件里面,给sect3分配一个固定的地址,

然后我再使用int_pointer=&temp1,这样编译可以通过,不过这个方法好麻烦啊,专家可否给一种更好的办法?谢谢!谢谢!

盼回复!!!我的信箱:sulinghua79@sina.com.