真正接触DSP大概有一个半月了,感觉比较枯燥,比较艰难,更多的是感觉到压力比较大,呵呵。
5416 DSK应该算是很好的初学者的实验平台,上面包含了很多的接口和资源(当然主要是针对音频处理的)。我在准备学习DSP的初始阶段主要是翻书,感觉国内的相关书籍大都差不多,最突出的感觉就是理论味太浓,经常是翻了半天的书,都在讲处理器的架构、指令集之类很深奥的东西,再看看板子,感觉还是啥都没学会。这类的书不宜初学就看,倒是在开始上手进行一些简单的实践遇到某些方面的困难时,可以拿出来参考着细看一下。网上的很多朋友都推崇TI的参考文档(包括开发板周边外设的原厂文档),其权威性自是不必说,但我感觉这类文档看是必须的,可指望看了就能顺利的进行实践设计还是比较难,对有丰富硬件开发经验的大牛们倒是不错的选择。我个人觉得不错的初学途径有3个:一是西电出的一本《C/C++语言硬件程序设计》,书比较薄,但是讲的比较具体实际;二是TI自带的一些简单的例程,其C文件还在其次,工程中的中断asm文件、cmd文件配置对初学者的帮助更大;三是TI的技术支持,工程师们的能力值得信赖,态度也很好,一般不会因为你的问题太过低级而不耐烦,是大多数人没有利用的一个黄金途径。
下面说说我对学习DSP的整体认识,个人感觉主要的学习对象可以分成三块:存储、接口、中断。初学时接触最早最多的应该是存储的配置,一般的书籍对这块的介绍也较多,但是不得不说国内的书籍垃圾,大多这方面的设计都是照抄TI的原版技术文档的描述,而且可谓是闭眼直抄,差的原版描述也抄错,好点的仅止于抄文档上的描述,大多是介绍PMST寄存器的关键位配置以及cmd文件的主要内容,不会去考虑文档描述引起的各种实际情况,比如PMST配置的程序区和存储区介质重叠如何在cmd文件中消除、程序区外扩时中断asm文件中汇编指令要用远程的lib文件要换ext的CCS编译器中要允许远程访问等等。我就是看完书上的解释后,直接使用片上的SARAM做程序区,得到的处理结果和原图老是有黑点,而且经常出现run不完的情况,后来问了TI的技术支持才晓得问题的所在。
接口和中断一般会在稍后的学习中接触到,一般使用到DSP芯片周边的硬件外设(片外FLASH、数据采集转换设备等)时,就要考虑接口,接口处控制信息和数据的传输也必然会牵扯到中断,两者对底层的学习要求更高,学习的价值也很大,因为感觉很多学习DSP的前辈都对底层的信息传递和时序控制不是很在意,但真正要在项目实践中应用自如,对设计对象的了解是十分关键的。感觉我自己在将来一段时间的学习中最可能会接触到的周边硬件外设应该是片外的FLASH和图像的采集转换装置,燃眉之急的当数FLASH,因为5416的片内存储资源有限,我想把片外的FLASH映射到数据区,在应用程序中进行自如的读写操作。为了了解FLASH的读写机制,我首先翻了书上关于往FLASH里烧写程序的介绍(FLASH这时被映射成程序区使用),发现其中主要是讲了FLASH擦、写、读时要写的控制字。然后,在群里与人交流,前辈提出三个步骤:时钟设置、EMIF寄存器设置、控制字写入。再然后,我感觉要扩展FLASH进数据区,时序的考虑肯定不能少(PMST、SWWSR、SWCR、BSCR),由于片内的数据区地址线有限,要借助CPLD管脚做地址线扩展,因此DM_CNTL寄存器的设置也应考虑。再再然后,然后和再然后的考虑应该已经比较周全,关键是要怎么糅合,这就需要了解底层硬件,所以我们还要看5416 DSK片外FLASH的技术文档(还有TI技术支持提供的寄存器设置文档),这样看下来,应该会对整个FLASH有比较清晰的认识,当然,这个工作并不轻松,可能还要经常的请教TI技术支持和师兄们。
综上,燃眉之急有二:一是canny算法(片内存储)在DSP上跑起来,而且速度太慢也不好,结果要行,速度也要行。二是hough检测(用到片外FLASH)的DSP实现,这个工作十分严峻,靠美好的幻想肯定不行。