打印

Ti DSP编程入门

[复制链接]
2095|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
张凤武|  楼主 | 2012-3-8 15:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.BOOT方式
2.内存,寄存器映射
3.片上设备控制
比如,DM642可以从PCI BOOT可以从Flash BOOT,到底如何BOOT是由外部引脚配置的,即硬配置,对于编程来说是不需要理解太多的,硬件工程师说明的。如果是PCI BOOT就多看看PCI BOOT方面的资料。有时开发板提供例子,比如BSP/BSL/(板级支持包什么名字都一个意思,一套软件上的接口),Ti为DM642提供了CSL(芯片支持库,主要是片上设备控制的C库)。需要说明的时,没有CSL一样可以编DSP,那就是查设备的寄存器的用法,这些都是芯片厂家肯定会提供的。
除此之外,Ti为DSP提供了一个内核环境。作为coder,先可以不了解很多内核机制,只要知道这个内核怎么用就可以了,事实上我也没有去了解很多内核的机制,当然所有内核的机制都差不多。如果有其他内核编程经验就很容易理解了。
然后,C语言当然是必须掌握的。先不说软件思想有多少,至少要很清楚源代码到二进制是如何的一个过程。这些都不是DSP特有的。
最后,底层编程调试工作一般都是仿真,所以对仿真也是要有一定理解的,简单地提一下,DSP仿真就是J-tag。通过捕获DSP 的Jtag口就可以仿真了,其内部是一种通讯。比如仿真时要观察DSP的RAM,就是通讯的方式通知DSP,DSP内部得到RAM的数据,发到J-tag,一切都是厂商和硬件做好的,不多解释了。
下面解释一下DM642从和PC配合时启动
1.上电后,DM642处于RESET状态
2.PC上电后,BIOS为DM642分配资源
3.PC启动操作系统,操作系统发现PCI设备,加载设备驱动
4.设备驱动得到DM642的RAM(包括寄存器)到PC的资源映射(IO或者Memory)
5.PC像控制别的设备一样写寄存器,写内存,最终就是把固件写到DM642外部RAM里
6.然后就是让DSP脱离RESET,控制一个寄存器或者什么的

相关帖子

沙发
张凤武|  楼主 | 2012-3-8 15:42 | 只看该作者
写一个Ti DSP编程的入门**吧。下面我把Ti DSP简称DSP,以DM642为例子吧。
底层编程首先对硬件环境是要熟悉的,硬件环境包括:

1.BOOT方式
2.内存,寄存器映射
3.片上设备控制
比如,DM642可以从PCI BOOT可以从Flash BOOT,到底如何BOOT是由外部引脚配置的,即硬配置,对于编程来说是不需要理解太多的,硬件工程师说明的。如果是PCI BOOT就多看看PCI BOOT方面的资料。有时开发板提供例子,比如BSP/BSL/(板级支持包什么名字都一个意思,一套软件上的接口),Ti为DM642提供了CSL(芯片支持库,主要是片上设备控制的C库)。需要说明的时,没有CSL一样可以编DSP,那就是查设备的寄存器的用法,这些都是芯片厂家肯定会提供的。

除此之外,Ti为DSP提供了一个内核环境。作为coder,先可以不了解很多内核机制,只要知道这个内核怎么用就可以了,事实上我也没有去了解很多内核的机制,当然所有内核的机制都差不多。如果有其他内核编程经验就很容易理解了。

然后,C语言当然是必须掌握的。先不说软件思想有多少,至少要很清楚源代码到二进制是如何的一个过程。这些都不是DSP特有的。

最后,底层编程调试工作一般都是仿真,所以对仿真也是要有一定理解的,简单地提一下,DSP仿真就是J-tag。通过捕获DSP 的Jtag口就可以仿真了,其内部是一种通讯。比如仿真时要观察DSP的RAM,就是通讯的方式通知DSP,DSP内部得到RAM的数据,发到J-tag,一切都是厂商和硬件做好的,不多解释了。

下面解释一下DM642从和PC配合时启动

1.上电后,DM642处于RESET状态
2.PC上电后,BIOS为DM642分配资源
3.PC启动操作系统,操作系统发现PCI设备,加载设备驱动
4.设备驱动得到DM642的RAM(包括寄存器)到PC的资源映射(IO或者Memory)
5.PC像控制别的设备一样写寄存器,写内存,最终就是把固件写到DM642外部RAM里
6.然后就是让DSP脱离RESET,控制一个寄存器或者什么的


下面解释一下DM642的地址空间

1.片内RAM
2.EMIF (SDRAM,FLASH)
对于地址空间,就是DM642需要存储数据,或者做IO控制的。DM642主要是拿EMIF接SDRAM做为RAM,FLASH做为ROM。片内RAM可以做高速RAM,也可以配置成Cache。如何配置就是寄存器了,当然用CSL更方便。



下面解释几个片上外设

1.I2C ,I2C主要有时钟相关的寄存器,一次二次PLL控制得到工作频率;master slaver 本地地址 传输方向等等都是寄存器配置,和Cache一样,最好用CSL控制
2.Vedio-Port,设置捕获还是输出,设置视频类型RGB还是YUV,都是数字信号,等等都是CSL控制,不推荐用寄存器
3.GPIO,也是寄存器
通过3个例子可以看出,目前来说,DM642的编程和单片机区别不大,都是寄存器。

使用特权

评论回复
板凳
张凤武|  楼主 | 2012-3-8 15:42 | 只看该作者
下面解释一下DSP/BIOS,以下简称BIOS,和PC 的BIOS不是一回事

DSP/BIOS是Ti提供的一个内核,RTOS。RTOS也不是什么稀奇的东西,简单地说就是一个实时响应能力比较强的东西,从软件上看就是中断处理性能比较高。

BIOS提供任务管理功能,如果有PC软件经验可以认为BIOS里的任务就是线程。硬中断和PC一样,软中断和Windows里的DPC差不多概念。而CLK其实是硬中断一样 PRD其实是软中断实现的 IDLE就是最低优先级的TSK。既然有多任务就必然有一堆任务同步相关的东西,SEM(信号量)LCK(资源锁)ATM(原子操作)等等,MBX(邮箱)可以看做是消息的意思,这些文档里面都有,就需要看书和积累了。

BIOS本身还提供一些内存管理。内存管理基本上用的不多,主要是配置,这个和硬件相关多一点。

外设管理,外设是任何一个操作系统的一个大话题,Windows如此,BIOS也是。DSP编程是危险的,自己的代码很容易让BIOS崩溃,根本原因就是BIOS的代码很容易就可以被自己的代码修改,另外栈溢出也是一个原因。总之就是BIOS被破坏了。回到外设的话题,BIOS下对于那些外设都是可以用寄存器或者CSL了控制的,所以外设控制本身是简单的。由于考虑到软件的规范或者说Ti的规范,建议外设控制都写成Mini-Driver的形式。

关于Mini-Driver,Ti的DDK里面有文档,例子。简单地介绍一下,Mini-Driver是Class Driver下的一个规范性Driver,就是说,Mini-Driver提供一套符合Class Driver标准的接口被Class Driver调用和抽象。而Class Driver本身也有一些接口是可以被Mini-Driver使用的。

使用特权

评论回复
地板
yioy| | 2012-3-8 21:12 | 只看该作者
过来看看

使用特权

评论回复
5
yioy| | 2012-3-8 21:12 | 只看该作者
希望楼主多分享

使用特权

评论回复
6
wewo| | 2012-3-9 15:14 | 只看该作者
很基础的东东要好好看下

使用特权

评论回复
7
cooran| | 2012-3-9 16:32 | 只看该作者
学习一下

使用特权

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

本版积分规则

35

主题

383

帖子

0

粉丝