打印

5416DSP+FPGA数据采集系统,项目进行中,经验直播年后回归!

[复制链接]
楼主: congfeiyu
手机看帖
扫描二维码
随时随地手机跟帖
41
congfeiyu|  楼主 | 2011-2-16 16:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
昨天LZ做了个小测试程序来测试DSP能否正确读写FPGA,测试结果正确,现在已经开始开发DSP的程序。在这里向大家推荐一本书:《C/C++语言硬件程序设计----基于TMS320C5000系列DSP》,这是少有的能够介绍C5000系列DSP的C语言编程的书之一,LZ在这里学到了很多C语言开发DSP的知识。现在LZ在编写工程文件中的头文件,就是定义FPGA中各个寄存器的地址以及DSP片上寄存器的地址以及初始化值的头文件。但是在这之前遇到了个问题,不知有没有网友能给解答:附图是5416DSP的存储器图,在on-chip ROM那一段写的是4K*16bit,但是这一段的地址是从C000到FEFF,一共15.75k*16bit,那这个4K*16bit到底什么意思呢?:dizzy:

3.jpg (37.65 KB )

3.jpg

使用特权

评论回复
42
congfeiyu|  楼主 | 2011-2-18 17:07 | 只看该作者
今天LZ参考了资料,将MCBSP0的寄存器的初始化值给确定了一下,准备将MCBSP配置成SPI模式,但是由于对串口不熟,有些寄存器的某些位到底该为什么值还不是很清楚,先试试吧,等确定了再把程序贴上来

使用特权

评论回复
43
congfeiyu|  楼主 | 2011-2-19 16:46 | 只看该作者
这项目做的 从头到尾就我一个人忙活 连个请教的师傅的都没有

使用特权

评论回复
44
congfeiyu|  楼主 | 2011-2-21 10:23 | 只看该作者
LZ在编译DSP程序时CCS报错: error: expected an expression,对应的代码是 *(volatile unsigned int *)CLKMD=0x0000; 错误怎么找也找不出来,后来终于发现了,原来CLKMD是在头文件里定义的宏#define PMST 0x001d; 后面不应该有分号的,但我不小心加了分号,去掉之后就正常了:victory:

使用特权

评论回复
45
lqb888| | 2011-2-25 15:50 | 只看该作者
好    学习了

使用特权

评论回复
46
congfeiyu|  楼主 | 2011-3-1 15:20 | 只看该作者
最近LZ遇到了问题 DDS芯片AD9851的输出按理说应该是时钟脉冲的,但是现在输出的是正负都有的正弦波,奇怪...

使用特权

评论回复
47
congfeiyu|  楼主 | 2011-3-3 10:39 | 只看该作者
哈哈 终于找到原因了,原来这个AD9851在输出10MHZ以上的脉冲时就会衰减,我将它配置成7MHZ输出的话脉冲输出的幅度就满足要求了,不向昨天的在1V和2V之间波动了,但是7MHZ频率也太低了点,看看老师怎么说吧。但是还有一个问题就是时钟正常了但是ADC还是没有输出,检查中...

使用特权

评论回复
48
congfeiyu|  楼主 | 2011-3-4 10:55 | 只看该作者
ADC没输出的原因找到了!原来ADS1278的八个低电平有效的power down引脚被我悬空处理了,我原本以为悬空就是高电平呢,导师说CMOS电路悬空是低电平,于是我飞线将power down接到3.3V上,ADC就有输出了!原来ADC一直在power down状态,怎么会有输出呢?这个经验告诉大家,不用的引脚一定不要悬空,要将其接到非有效的电平上,否则会有意想不到的不正常后果!

使用特权

评论回复
49
congfeiyu|  楼主 | 2011-3-7 11:12 | 只看该作者
ADC有输出后,发现FIFO的wrusedw[9..0]输出一直为0,以为写入FIFO失败呢,但是用DSP试着读了一下发现读出数据了,这到底是怎么回事呢?难道是FIFO坏了?如果wrusedw[9..0]一直为0的话我就不能用它的最高位作为半满标志来触发DSP中断了

使用特权

评论回复
50
congfeiyu|  楼主 | 2011-3-7 11:13 | 只看该作者
终于又找到原因了,原来altera的FIFO中的写计数器wrusedw一旦写满就会自动清零,难怪我一直看到它一直显示0呢,因为被瞬间写满了啊!那就没问题了,来试试中断方式读取行不行!

使用特权

评论回复
51
大碗拉面| | 2011-3-7 15:05 | 只看该作者
48楼的经验很有价值呀

使用特权

评论回复
52
hxq526| | 2011-3-7 15:41 | 只看该作者
好啊

使用特权

评论回复
53
congfeiyu|  楼主 | 2011-3-9 09:29 | 只看该作者
哇哈哈哈...FPGA已经可以用中断的方式来向DSP发送数据喽!每个通道每次读取512个字,但是在CCS里看DSP的内存时好像后面会有连续的错误的数据,不知是软件的问题还是真有错误的数据,先不管了,现在我要搞DAC了

使用特权

评论回复
54
zhshhe| | 2011-3-11 15:59 | 只看该作者
关注中

使用特权

评论回复
55
congfeiyu|  楼主 | 2011-3-15 16:47 | 只看该作者
DAC搞了我好多天,出来的波形一直是乱七八糟。由于DAC是24位的,而DSP是16位的,我只能和AD一样用两个16位字来存储一个24位数据 ,我测试时从DSP向FPGA的FIFO发送数据,FPGA中的数据转换模块将FIFO中的数据转换成IIS协议的数据发给DAC,这就要求数据转换模块必须一个字不差的转换FIFO中的数据,只要错一个字,波形就全部打乱了。起初我是在DSP里通过while(1)循环来不停地将数据写入FIFO的,企图能侥幸地看到正确的波形,但是一直都不行,就只能用FIFO空来触发DSP中断来向FIFO发送数据,这样出来的波形就正确了,太棒了!
现在两大主要的模块 AD和AD都已经完成了,只要能通过USB和上位机软件接口就行了!

3.jpg (49.42 KB )

DAC的IIS数据时序图

DAC的IIS数据时序图

使用特权

评论回复
56
大碗拉面| | 2011-3-18 10:30 | 只看该作者
用FIFO空来触发DSP中断来向FIFO发送数据,这样出来的波形就正确了

这样做的逻辑是不是这样:
1 DSP先向FPGA的FIFO发送数据
2 FIFO满,然后FPGA的DA转换模块开始工作
3 FIFO空否?空的话则通知DSP。转到步骤1.

如果是这样的话
DSP向FPGA的FIFO发送数据时,DAC的发送过程会不会在此停止一会儿,直到FIFO被填满?

使用特权

评论回复
57
maikun0318| | 2011-3-18 23:51 | 只看该作者
学习了谢谢

使用特权

评论回复
58
congfeiyu|  楼主 | 2011-3-19 14:00 | 只看该作者
56# 大碗拉面 DSP写入FIFO的时间很快,比DA转换快至少一个数量级,所以DAC的转换基本不会中断,但是我现在还是改成了用FIFO的半空来触发DSP写入数据

使用特权

评论回复
59
congfeiyu|  楼主 | 2011-3-19 14:07 | 只看该作者
导师让用函数信号发生器输入AD,将AD转换后的数据直接输出给DA,看看DA能否将新号还原,唉哪有那么简单哦,两个转换器的数据格式不一样,DA是音频转换器,还需要左右声道复用呢。不管了,现在我来做一下时序约束,保证FPGA内不会出现错误

使用特权

评论回复
60
大碗拉面| | 2011-3-22 11:57 | 只看该作者
DSP写入FIFO的时间很快,比DA转换快至少一个数量级,所以DAC的转换基本不会中断,但是我现在还是改成了用FIFO的半空来触发DSP写入数据

刚看了看AD1833A的文档。正如你所说,AD1833A的速度最快是192K。和DSP写入FIFO的时间相比确实不字一个数量级。

使用特权

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

本版积分规则