分享

Ti DSP编程入门

 AwayFly 2011-03-24

写一个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的编程和单片机区别不大,都是寄存器。

 

下面解释一下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使用的。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多