初学DSP的感受——TM320C5416 DSK

    真正接触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实现,这个工作十分严峻,靠美好的幻想肯定不行。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
/************************************************************* *Copyright (c) 2005,北京精仪达盛科技有限公司研发部 *All rights reserved * *文件名称:tms320uc5402.h *文件标示: *摘 要:本文件内容为TMS320UC5402 DSP 寄存器定义头文件 * 寄存器都以指针方式进行寻址 * *当前版本:1.0 *作 者:王飞 *完成日期:2005年2月17日 * *取代版本: *原作者 : *完成日期: *************************************************************/ #ifndef TMS320UC5402_H #define TMS320UC5402_H /*TMS320UC5402 CPU寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define IMR *(volatile unsigned int *)0x0000 /*中断屏蔽寄存器*/ #define IFR *(volatile unsigned int *)0x0001 /*中断标志寄存器*/ #define ST0 *(volatile unsigned int *)0x0006 /* 状态寄存器0 */ #define AL *(volatile unsigned int *)0x0008 /* 低16位A 累加器寄存器 */ #define AH *(volatile unsigned int *)0x0009 /* 高16位A 累加器寄存器 */ #define AG *(volatile unsigned int *)0x000A /* Accumulator A guard bits (39–32) */ #define BL *(volatile unsigned int *)0x000B /* 低16位B 累加器寄存器 */ #define BH *(volatile unsigned int *)0x000C /* 高16位B 累加器寄存器 */ #define BG *(volatile unsigned int *)0x000D /* Accumulator B guard bits (39–32) */ #define TREG *(volatile unsigned int *)0x000E /* 临时寄存器 */ #define TRN *(volatile unsigned int *)0x000F /* 传输寄存器 */ #define AR0 *(volatile unsigned int *)0x0010 /* 辅助寄存器0 */ #define AR1 *(volatile unsigned int *)0x0011 /* 辅助寄存器1 */ #define AR2 *(volatile unsigned int *)0x0012 /* 辅助寄存器2 */ #define AR3 *(volatile unsigned int *)0x0013 /* 辅助寄存器3 */ #define AR4 *(volatile unsigned int *)0x0014 /* 辅助寄存器4 */ #define AR5 *(volatile unsigned int *)0x0015 /* 辅助寄存器5 */ #define AR6 *(volatile unsigned int *)0x0016 /* 辅助寄存器6 */ #define AR7 *(volatile unsigned int *)0x0017 /* 辅助寄存器7 */ #define SP *(volatile unsigned int *)0x0018 /* 堆栈寄存器 */ #define BK *(volatile unsigned int *)0x0019 /* Circular buffer size register */ #define BRC *(volatile unsigned int *)0x001A /* 块重复计数器寄存器 */ #define RSA *(volatile unsigned int *)0x001B /* 块重复开始地址寄存器 */ #define REA *(volatile unsigned int *)0x001C /* 块重复结束地址寄存器 */ #define PMST *(volatile unsigned int *)0x001D /* 处理器模式状态寄存器 */ #define XPC *(volatile unsigned int *)0x001E /* 扩展程序页寄存器 */ /*TMS320UC5402 外围寄存器 ~~~~~~~~~~~~~~~~~~~~*/ /*TMS320UC5402 多通道缓存串口0寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define DRR20 *(volatile unsigned int *)0x0020 /* McBSP0数据接收寄存器2 */ #define DRR10 *(volatile unsigned int *)0x0021 /* McBSP0数据接收寄存器1 */ #define DXR20 *(volatile unsigned int *)0x0022 /* McBSP0数据发送寄存器2 */ #define DXR10 *(volatile unsigned int *)0x0023 /* McBSP0数据发送寄存器1 */ #define SPSA0 *(volatile unsigned int *)0x0038 /* McBSP0 subbank 地址寄存器 */ #define SPSD0 *(volatile unsigned int *)0x0039 /* McBSP0 subbank 数据寄存器 */ /*TMS320UC5402 定时器0寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define TIM *(volatile unsigned int *)0x0024 /* 定时器0寄存器 */ #define PRD *(volatile unsigned int *)0x0025 /* 定时器0周期计数器寄存器 */ #define TCR *(volatile unsigned int *)0x0026 /* 定时器0控制寄存器 */ /*TMS320UC5402 等待状态寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define SWWSR *(volatile unsigned int *)0x0028 /* 软件等待状态寄存器 */ #define BSCR *(volatile unsigned int *)0x0029 /* bank-switching control register */ #define SWCR *(volatile unsigned int *)0x002B /* 软件等待状态控制寄存器 */ /*TMS320UC5402 主机通讯接口寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define HPIC *(volatile unsigned int *)0x002C /* 主机通讯接口控制寄存器 */ /*TMS320UC5402 定时器1寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define TIM1 *(volatile unsigned int *)0x0030 /* 定时器1寄存器 */ #define PRD1 *(volatile unsigned int *)0x0031 /* 定时器1周期计数器寄存器 */ #define TCR1 *(volatile unsigned int *)0x0032 /* 定时器1控制寄存器 */ /*TMS320UC5402 通用IO寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define GPIOCR *(volatile unsigned int *)0x003C /* 通用IO引脚控制寄存器 */ #define GPIOSR *(volatile unsigned int *)0x003D /* 通用IO引脚状态寄存器 */ /*TMS320UC5402 多通道缓存串口1寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define DRR21 *(volatile unsigned int *)0x0040 /* McBSP1数据接收寄存器2 */ #define DRR11 *(volatile unsigned int *)0x0041 /* McBSP1数据接收寄存器1 */ #define DXR21 *(volatile unsigned int *)0x0042 /* McBSP1数据发送寄存器2 */ #define DXR11 *(volatile unsigned int *)0x0043 /* McBSP1数据发送寄存器1 */ #define SPSA1 *(volatile unsigned int *)0x0048 /* McBSP1 subbank 地址寄存器 */ #define SPSD1 *(volatile unsigned int *)0x0049 /* McBSP1 subbank 数据寄存器 */ /*TMS320UC5402 DMA寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define DMPREC *(volatile unsigned int *)0x0054 /* DMA通道优先级,使能控制寄存器 */ #define DMSA *(volatile unsigned int *)0x0055 /* DMA subbank 地址寄存器 */ #define DMSDI *(volatile unsigned int *)0x0056 /* DMA subbank 数据自增寄存器 */ #define DMSDN *(volatile unsigned int *)0x0057 /* McBSP1 subbank 数据寄存器 */ /*TMS320UC5402 PLL寄存器 ~~~~~~~~~~~~~~~~~~~~*/ #define CLKMD *(volatile unsigned int *)0x0058 /* 时钟模式寄存器 */ /*TMS320UC5402 多通道缓存串口子地址 ~~~~~~~~~~~~~~~~~~~~*/ #define SPCR1 0x00 /* 串口控制寄存器1 */ #define SPCR2 0x01 /* 串口控制寄存器2 */ #define RCR1 0x02 /* 接收控制寄存器1 */ #define RCR2 0x03 /* 接收控制寄存器2 */ #define XCR1 0x04 /* 传送控制寄存器1 */ #define XCR2 0x05 /* 传送控制寄存器2 */ #define SRGR1 0x06 /* 采样率产生寄存器1 */ #define SRGR2 0x07 /* 采样率产生寄存器2 */ #define MCR1 0x08 /* 多通道寄存器1 */ #define MCR2 0x09 /* 多通道寄存器2 */ #define RCERA 0x0A /* 接收通道使能寄存器A */ #define RCERB 0x0B /* 接收通道使能寄存器B */ #define XCERA 0x0C /* 发送通道使能寄存器A */ #define XCERB 0x0D /* 发送通道使能寄存器B */ #define PCR 0x0E /* 引脚控制寄存器 */ /*TMS320UC5402 DMA子地址 ~~~~~~~~~~~~~~~~~~~~*/ #define DMSRC0 0x00 /* DMA通道0源地址寄存器 */ #define DMDST0 0x01 /* DMA通道0目的地址寄存器 */ #define DMCTR0 0x02 /* DMA通道0单元数目寄存器 */ #define DMSFC0 0x03 /* DMA通道0同步选择、桢数计数寄存器 */ #define DMMCR0 0x04 /* DMA通道0传送模式控制寄存器 */ #define DMSCR1 0x05 /* DMA通道1源地址寄存器 */ #define DMDST1 0x06 /* DMA通道1目的地址寄存器 */ #define DMCTR1 0x07 /* DMA通道1单元数目寄存器 */ #define DMSFC1 0x08 /* DMA通道1同步选择、桢数计数寄存器 */ #define DMMCR1 0x09 /* DMA通道1传送模式控制寄存器 */ #define DMSRC2 0x0A /* DMA通道2源地址寄存器 */ #define DMDST2 0x0B /* DMA通道2目的地址寄存器 */ #define DMCTR2 0x0C /* DMA通道2单元数目寄存器 */ #define DMSFC2 0x0D /* DMA通道2同步选择、桢数计数寄存器 */ #define DMMCR2 0x0E /* DMA通道2传送模式控制寄存器 */ #define DMSRC3 0x0F /* DMA通道3源地址寄存器 */ #define DMDST3 0x10 /* DMA通道3目的地址寄存器 */ #define DMCTR3 0x11 /* DMA通道3单元数目寄存器 */ #define DMSFC3 0x12 /* DMA通道3同步选择、桢数计数寄存器 */ #define DMMCR3 0x13 /* DMA通道3传送模式控制寄存器 */ #define DMSRC4 0x14 /* DMA通道4源地址寄存器 */ #define DMDST4 0x15 /* DMA通道4目的地址寄存器 */ #define DMCTR4 0x16 /* DMA通道4单元数目寄存器 */ #define DMSFC4 0x17 /* DMA通道4同步选择、桢数计数寄存器 */ #define DMMCR4 0x18 /* DMA通道4传送模式控制寄存器 */ #define DMSRC5 0x19 /* DMA通道5源地址寄存器 */ #define DMDST5 0x1A /* DMA通道5目的地址寄存器 */ #define DMCTR5 0x1B /* DMA通道5单元数目寄存器 */ #define DMSFC5 0x1C /* DMA通道5同步选择、桢数计数寄存器 */ #define DMMCR5 0x1D /* DMA通道5传送模式控制寄存器 */ #define DMSRCP 0x1E /* DMA源程序页地址(控制通道) */ #define DMDSTP 0x1F /* DMA目的程序页地址(控制通道) */ #define DMIDX0 0x20 /* DMA单元索引地址寄存器0 */ #define DMIDX1 0x21 /* DMA单元索引地址寄存器1 */ #define DMFRI0 0x22 /* DMA桢索引寄存器0 */ #define DMFRI1 0x23 /* DMA桢索引寄存器1 */ #define DMGSA 0x24 /* DMA全局源地址重装寄存器 */ #define DMGDA 0x25 /* DMA全局目的地址重装寄存器 */ #define DMGCR 0x26 /* DMA全局计数重装寄存器 */ #define DMGFR 0x27 /* DMA全局桢计数重装寄存器 */ #endif
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值