打印

兄弟们说一下怎么能弄明白dsp/bios

[复制链接]
7700|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
whx8880|  楼主 | 2009-1-9 21:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
推荐一下相关图书也行,看过一本关于ucosii的,还是没啥感觉
弄了个dm642的系统,同时采集音视频数据的,老是有丢数据的现象。
edma、中断、任务、内存拷贝,就这么几个元素,就是折腾不明白。
老大还非得让我把几个ms的处理程序都放在中断服务程序中完成,郁闷死
可我自己又弄不明白怎么做才能彻底解决丢数据的问题
以前是作硬件的,对操作系统没概念,计算机的操作系统也看了点,就是不知道看什么能最有帮助,大家给点建议

相关帖子

沙发
hotpower| | 2009-1-9 21:12 | 只看该作者

老大肯定是搞错了~~~用OS的思想编程,dsp/bios还是不错的

使用特权

评论回复
板凳
whx8880|  楼主 | 2009-1-10 14:00 | 只看该作者

看了hot大叔的一些帖子,bios玩得挺热闹,佩服啊!!!

老大跟我一样,只做过dsp的硬件,没玩过软件,所以也没有操作系统的概念
问题的关键是我找不到解决的办法,而他有是老大,呵呵
hot大叔也是硬件出身吧,传授点秘诀啊

使用特权

评论回复
地板
walnutcy| | 2009-1-10 15:18 | 只看该作者

老hot居然成了硬件出身,,晕啊!

使用特权

评论回复
5
daFish| | 2009-1-15 11:07 | 只看该作者

明白ucos或者有PC多线程的编程应用经验的玩转dspbios不是问题

具体的一些特殊功能要用到的时候看看TI CCS的帮助文档也就OK,没有难以理解的成分在里面。

使用特权

评论回复
6
alex74| | 2009-1-15 16:11 | 只看该作者

。。

推荐一下相关图书也行,看过一本关于ucosii的,还是没啥感觉
弄了个dm642的系统,同时采集音视频数据的,老是有丢数据的现象。
edma、中断、任务、内存拷贝,就这么几个元素,就是折腾不明白。
老大还非得让我把几个ms的处理程序都放在中断服务程序中完成,郁闷死
可我自己又弄不明白怎么做才能彻底解决丢数据的问题
以前是作硬件的,对操作系统没概念,计算机的操作系统也看了点,就是不知道看什么能最有帮助,大家给点建议 
------------
你的问题与操作系统无关。
记得不要在中断里面做任何处理数据的事情,最好拷贝也不要。
还有记得把音频数据放在L1或者L2,千万不要放在L3,ti的asp fifo很小的。

使用特权

评论回复
7
zyf_726| | 2009-1-16 10:50 | 只看该作者

最近也在学习这个东西,刚开始有点迷糊

使用特权

评论回复
8
snakeemail| | 2009-1-23 20:58 | 只看该作者

FIFO

使用特权

评论回复
9
renjie| | 2009-1-26 11:21 | 只看该作者

我觉得会配置修改就足够可以了够用了!!

使用特权

评论回复
10
hotpower| | 2009-1-31 00:12 | 只看该作者

哈哈~~~DSP用DSP/BIOS肯定比ucosii好用~~~

使用特权

评论回复
11
cyongquan| | 2009-2-16 12:43 | 只看该作者

看看datasheet或者书吧

呵呵,一下子弄明白不太容易吧
还是得看看datasheet或者书吧
讲DSP/BIOS的书不多,我知道的有一本《TI DSP/BIOS用户手册与驱动开发》
因为比较懒,看英文datasheet辛苦。。。。hoho。。。。。

使用特权

评论回复
12
whx8880|  楼主 | 2009-2-20 20:50 | 只看该作者

感谢大家的回帖

文档也看了不少,就是没多大效果
也许alex74说的对,我的问题与操作系统无关
我也知道中断服务程序要尽可能短,
至于把音频放到L1,我不知道该怎么做,L1不是由操作系统控制吗,我们能控制吗?放到L2中我都做不到,我将音频EDMA到内ram中,声音就断断续续的,只能放到SDRAM中,再拷到内ram中处理。
我觉得问题的关键是系统只有一个数据发送口,网口,而音视频数据都要通过网口发送,所以就有一个优先级的问题。  
开始系统是这样做的:音视频数据都通过edma读入dsp,读到预定的字节产生edma中断,在edma中断服务程序中判断是音频数据还是视频数据,是音频数据就触发一个swi处理音频压缩,音频压缩结束后再触发一个swi用来发送数据;如果是视频数据就直接触发swi发送数据。发送数据使用的是同一个swi,优先级最高,其次是音频swi。
问题是在发送swi中如何判断音频数据还是视频数据呢,音视频数据有可能同时触发swi。我用了一个全局变量来标志是否是视频数据,我知道这样不安全,但没想到更好的方法(因为中断服务程序和swi中不能用锁)。
这样做数据还是有丢失,后来我想会不会是将音视频放在一个中断中处理一个时会丢失另一个的中断?(后来查了文档感觉不会) 
    

使用特权

评论回复
13
whx8880|  楼主 | 2009-2-20 21:08 | 只看该作者

接上面

视频数据是先通过fpga处理后从EMIF总线发给dsp的,FPGA在发送数据之前会先给dsp发一个中断信号,如果数据在600us内不读走就可以能被改写。
我试过直接在外部中断服务程序中触发edma,但问题是这样我无法判断EDMA 何时结束。如果专门用一个swi来查询edma是否结束就必须优先级高于音频压缩swi的优先级(因为音频压缩时间很长,低于它会丢失视频数据),可这样效率又很低。而且发现有时触发了edma竟然读不到传输结束信号,只能加超时处理。
写了这么多不知说明白了没有,大家帮分析一下。
补充一下:视频数据会在大于3ms的间隔发一次中断,音频大约21ms左右 

使用特权

评论回复
14
yxwsz| | 2009-2-21 10:43 | 只看该作者

找个例子看看

我的建议:
如果你买过TI的DM642开发板,里面的exampledrivervideopal.pjt工程,有三种配置:DISPLAY ONLY/LOOPBACK/PIP, 看一下这个例子和对应的文档,你会对DSP/BIOS的使用, 视频采集处理的流程有一个基本的认识。 其中的video port、mcasp的中断由DSP/BIOS接管的,用户FVID_exchange, FVID_exchange函数就可以获取到采集到的图像数据,然后用DAT_copy把数据传送到指定的区域。

如果使用DSP/BIOS,则video port, mcasp,emac接口的驱动都是现成的,在TI的网站上可以下载到(DDK),你自己只需要写应用程序就OK了。

如果没有使用DSP/BIOS驱动,自己直接写寄存器去采集音频视频数据,需要对EDMA, VIDEO PORT, MCASP, 中断非常熟悉才行,这个难度比较高(要看上千页的文档)。

至于L1 CACHE, L2 CACHE使用,这些都属于优化的范畴了,建议由专门做算法的人去处理。

使用特权

评论回复
15
yxwsz| | 2009-2-21 10:44 | 只看该作者

re

如果自己是头一次搞音视频处理,最好是先找个例子看看,至少知道别人是怎么处理的;否则有闭门造车之嫌。

使用特权

评论回复
16
whx8880|  楼主 | 2009-2-21 21:14 | 只看该作者

多谢yxwsz的回复

很详细,也很中肯,先去看看你说的那个例子。

确实是第一次做音视频处理,但我总觉得我的问题关键是在音视频数据要通过同一个芯片发出去,导致音视频数据不能单独处理,总要在一个线程中考虑谁先谁后的问题。

使用特权

评论回复
17
alex74| | 2009-2-22 16:17 | 只看该作者

...

ti的音频口fifo很小的。所以最好音频的dma优先级开到最高,并且直接指向片内内存,l1,l2无所谓的。如果你指向l3能用只能说你芯片带宽负载很小。
ti的视频口fifo超级大,所以视频的dma你优先级开小,直接指向片外即可。

使用特权

评论回复
18
alex74| | 2009-2-22 16:21 | 只看该作者

。。。。

视频数据是先通过fpga处理后从EMIF总线发给dsp的,FPGA在发送数据之前会先给dsp发一个中断信号,如果数据在600us内不读走就可以能被改写
-----------------
这是很苯的做法,谁设计的?
TI那么丰富的同步接口不用竟然用EMIF这种异步接口。这个体系有问题,如果是做产品建议你完全推倒重来。
如果是学校里玩玩就算了

使用特权

评论回复
19
whx8880|  楼主 | 2009-2-23 22:03 | 只看该作者

多谢alex74回复

因为音频间隔时间长,视频间隔时间短,所以它音频的edma优先级低于视频的,如果音频比视频高,就会丢失视频数据。
视频数据压缩是单独一个芯片完成的,压缩数据是通过数据流方式送出的,只能通过fpga锁存一下,dsp才能读进来。另外视频压缩数据通过fpga时也做了一些处理,并转换成串口行发送了。所以系统没有用到vp口。
虽然是在公司做产品,但方案都是老大说了算,我只有干活的份,呵呵

使用特权

评论回复
20
alex74| | 2009-2-24 16:21 | 只看该作者

这个设计非常不可靠

视频数据是先通过fpga处理后从EMIF总线发给dsp的,FPGA在发送数据之前会先给dsp发一个中断信号,如果数据在600us内不读走就可以能被改写。
我试过直接在外部中断服务程序中触发edma,但问题是这样我无法判断EDMA 何时结束。
--------------
这个设计有问题,这种不可靠的异步模式迟早会出现问题的。即使你现在调好了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

28

帖子

1

粉丝