一直想等比赛完了,写点东西留给刚上路的难兄难弟们,一直有事耽搁,可能是比赛太累了引起各种失调 - -!
因为要准备大学生电子设计大赛,所以一开始自学了5416这个板子,后来由于5416片上资源实在太少不适合电子竞赛就转学了2812。因为身边一直也没个人交流,所以每一步都比较艰辛,想起住在实验室的一年里,每天大半夜喝着咖啡,听着小曲,调着板子,日子艰辛却令人回味,觉得日子就这么永远继续下去也不错,娶个板子。。。 汗
先提个建议:
1. 手里一定要有本关于28X硬件的书方便查,不要没事就问些比如外部中断是电平有效还是上升有效呢,哪个寄存器控制呢? 现在的书好像都是翻译TI的文档的译版,内容差不太多 没什么见解,都是技术手册类型的。
2.多上论坛,多下论文,多搜google。虽然有时候论坛里的问题不会被很好解决,论文很多都是没有被实现就拿出来一顿闲扯,但是 我在论坛上还是认识了很多很多好人,帮我解决问题,让我张见识,包括我大哥。好论文就看看各个学校的优秀硕士毕业设计就好了。还有外国的一些dsp论坛,也不错的,外国人在论上说English不像英语46级那么贱,我都看的懂,学到不少东西。
3.多实践才能发现有些东西不像书上说的那么简单,当然把问题弄明白后,发现 恩 确实那么简单。
4.无论是28x,还是达芬奇,还是arm fpga,开发工具始终都是外家工夫。硬件,编程功底,算法思想才是内家工夫,不要以为用了DSP了就比用51 avr的人强。一直很佩服那个用MEGA8做usb转并口下载线的那个大哥,在我们这用的泛滥成灾了。 有时候,用dsp做流水灯,测温度和用dsp做随机等效采样,语音识别,图像处理的人 是有些差别的。
XINTF:因为学习DSP是从54X入手的,而5系的DSP都是分成3个区:程序区,数据区,IO区 入手2812的时候自以为是了一下,转了很久才晓得2812的存储器映射是把数据和程序区连在一起了,而5系的所谓IO空间被替换成了XINTF,当然XINTF也是负责外部接口的。想想,2812人家都是32位的了,空间一下子从2^16上位到了2^32,没必要再分家了吧。大家用单片机的时候往往比较在意IO口的操作,而学DSP的时候总线结构是一定要理解的。用XINTF的时候,把数据线接一个缓冲器,就相当于一组IO口了吧,分配一个地址就相当于一组IO口,只要把XINTF和缓冲器的片选弄好,你就有无数个GPIO了。用外部存储接外设的时候,要知道你板子上的flash和ram都映射了哪两组zone区,别把这两块区域用了。要会用*((volatile unsigned int *)0x4FFB)这类的方式操作外部存储单元。
GPIO: 一定要确定你的GPIO脚的配置,是配了GPIO还是第二功能。确定输出输入配了没。 很简单,但是程序改多了有时候就容易忘。还有,DSP的GPIO很脆弱,具体多少mA忘了,不过有一次调一个dds AD9852的时候,用mps430一直没问题,用2812调,烧了。很郁闷不知道怎么回事,想了半天以为带电插拔让静电给烧了?费了好大劲,重焊了快片子,再调,再烧··· 诅咒了半天9852,后来发现可能是限流电阻小了,2812的GPIO比单片机腼腆的多。
ADC: 2812的ad说道很多,配起来也较麻烦,那个启动/停止这两种方式要理解,DSP内部AD通道之间有时会有串扰,要避免串扰,未使用的通道要接地。还有一个比较重要的地方,就是ad的采样率和存储速度。做示波器,把ad开到了最快,但是实际上发现怎么只有1M不到的样子。AD没配错,郁闷了半天,想到其实AD跑的再快,存储的速度跟不上也没用。存储速度也就是说 ad_value[w]=AdcRegs.RESULT0;的速度,这关系到ADC中断函数的效率情况。不过我试过把中断函数写的再简洁,最终整个采样也就跑几M而已。 外部电路的话一般都是用FPGA对ram乒乓操作解决的,dsp一直没想到什么好办法。 |