DSP

DaVinci DM6437 中文教程

2019-07-13 15:53发布

一、DaVinci DM6437 概述
TMS320DM6437是TI公司2006年推出的、专门为高性能、低成本视频应用开发的、主频600MHz的、32位定点DSP达芬奇 (DaVinci(TM)) 技术的处理器系列。
TMS320DM6437具有下列特点:
  采用TI第3代超长指令集结构(VelociTI.3)的TMS320C64x+ DSP内核,主频可达600MHz,支持8个8位或4个16位并行MAC运算,峰值处理能力高达4800MIPS,可实时处理8路CIF或3路D1格式的H.264编码算法。
  采用2级Cache存储器体系结构,片上有32K字节RAM/Cache可配置的1级程序存储器L1P,48K字节RAM + 32K字节RAM/Cache可配置的1级数据存储器L1D,和128K字节RAM/Cache可配置的2级程序/数据存储器L2,存储器体系结构更灵活、合理,有利于提高图像处理代码/数据的吞吐率。
  片上具有64通道增强型DMA控制器EDMA3,其支持复杂的数据类型的传输,有利于图像数据的高效传输和格式变换。
  丰富的外部存储器接口:一个专用的32位、200MHz、256M字节寻址空间的DDR2存储器接口用于接口高速、大容量的DDR2存储器,以存储代码和数据;一个8位、64M字节寻址空间的异步存储器接口用于接口8位Nor Flash或Nand Flash,以存储固化代码。
  丰富的片上外设:一个专用的单通道视频输入接口,既可以方便地与各种数字视频输入标准接口,还具有常用的视频预处理功能;一个专用的单通道视频输出接口,既可以提供多种模拟视频输出标准,还可以提供各种数字视频输出标准接口,并且在视频输出之前,还支持多个视频窗口管理及在视频画面上叠加文本数据;一个多通道音频串口,可无缝接口音频Codec器件,实现模拟视频信号的输入/输出;一个I2C总线,可无缝接口视频解码器/编码器和音频Codec的控制口,方便实现音/视频编解码器的控制;32位PCI总线,方便与PC机接口,实现多板并行工作。10/100M以太网MAC,方便实现嵌入式视频网络化要求;16位HPI接口,方便实现主/从结构的双处理器视频处理系统。
  由上可知,DM6437是非常适合于作为单通道视频处理系统的主处理器。为了使DM6437适用于多通道视频监控系统,需要将多个视频通道的数据复合后,再通过DM6437片上视频输入接口输入。所以,下面将着重对DM6437的片上视频输入/输出接口逐一介绍。
DM6437视频子系统VPSS
  DM6437片上视频输入/输出接口统称为视频子系统VPSS,DM6437的视频子系统由二部分组成,一是视频处理前端,用于输入数字视频数据,为多种标准的数字视频输入提供接口,并为输入的数字视频数据作必要的预处理。二是视频处理后端,用于输出数字视频数据,以驱动显示器显示视频图像。
  DM6437视频处理前端VPFE为视频处理系统提供二大功能,一是为多种标准数字视频输入提供无缝接口,二是为各种视频处理应用提供必要的预处理。
  DM6437数字视频输入接口被称为CCD控制器,为输入数字视频流提供数据通路和必需的同步信号,其功能如下:
  *16位视频数据总线
  *像素时钟频率最高可达75MHz
  *可直接接口CCD或CMOS图像传感器
  *可接口8/10位BT.656标准数字视频流
  *可接口8/16位带行、场同步信号的YCbCr 4:2:2格式数字视频流
  对于视频监控应用来说,视频信号一般为来自于摄像头的模拟视频信号,其经视频解码器转换为8/10位BT.656或8/16位带行、场同步信号的YCbCr 4:2:2数字视频流,再输入到DSP中进行处理。
  为适应各种视频处理应用,DM6437的视频前端还提供下列3个预处理功能:
  预览器Previewer:将来自CCD控制器或来自外部存储器的RGB图像格式转换为YCbCr 4:2:2图像格式。
缩放器Resizer:接受来自预览器或文本存储器的视频数据,由硬件实现图像大小的缩放,水平和垂直方向缩放比例相互独立,缩放范围为1/4x~4x。
  H3A:由硬件实现自动对焦、自动白平衡、自动曝光。首先接受RGB图像格式,并将图像细分成二维像素块,像素块的大小、位置可编程。然后对像素块进行累加和峰值统计。最后实现3A控制输出。
DM6437视频处理后端VPBE用于实现视频图像的输出显示。显示屏上的一幅图像可以分成若干个区域,每个区域可以代表不同的视频源,即来自不同的视频输出缓冲器,在输出显示之前,需要将来自不同视频输出缓冲器的视频数据复合成一个完整的数字视频流,这个过程称为视频窗口管理;另外,还经常需要将某些图形、字符等信息叠加到视频图像上一起输出显示,这些叠加到视频图像上的图形、字符存储于独立的缓冲器中,因而在输出显示之前,还需要将来自图形、字符缓冲器的数据复合进输出数字视频流中,这个过程称为图形、字符OSD窗口管理与叠加。最后,将复合后的完整的数字视频流以一定的时序格式进行输出,这个过程称为视频输出编码。DM6437视频处理后端可以同时支持2个视频窗口和2个图形、字符OSD窗口管理,并可支持8种视频窗口与OSD窗口数据叠加方法。DM6437的视频输出编码既可以实现用于直接驱动模拟监视器的标准模拟视频输出,也可实现用于直接驱动带数字接口的显示器的多种标准数字视频输出。
数字输出接口兼容高清输出,模拟输出要外接高清编码芯片。
TMS320DM643x 处理器是达芬奇技术中首批仅基于 DSP 的产品,以低于以往的价位提供了更高的处理性能。在摩尔定律的作用下,结合增强型 DSP 内核与最新视频处理子系统 (VPSS),DM643x 处理器能够提高视频性能,以 D1 解析度实现高达 H.264 的视频编码,而且与前代 DSP 数字媒体处理器相比,成本降低了 50%。所有四款处理器均采用新型 TMS320C64x+(TM) 内核,工作频率在 300 至 700 MHz 之间。在全新的应用领域以低廉的价位实现数字视频。
通过集成预览引擎、图像缩放工具以及屏幕视控加速器 (on-screen display accelerator),VPSS 实现了高达 40% 的性能提升,从而为 DSP 添加更多功能预留了空间。此外,集成多达四个 DAC 还将系统成本降低了 4 美元之多。而对更多应用,TMS320DM6437 还为网络功能、用户接口以及运行 DSP 完整系统所需的其他任务预留了足够空间。 二、DaVinci DM6437 学习资料

SPRU978 — TMS320DM643x DMP DSP Subsystem Reference Guide. Describes the digital signal
processor (DSP) subsystem in the TMS320DM643x Digital Media Processor (DMP).
SPRAA84 — TMS320C64x to TMS320C64x+ CPU Migration Guide. Describes migrating from the
Texas Instruments TMS320C64x digital signal processor (DSP) to the TMS320C64x+ DSP. The
objective of this document is to indicate differences between the two cores. Functionality in the
devices that is identical is not included.
SPRU732 — TMS320C64x/C64x+ DSP CPU and Instruction Set Reference Guide. Describes the CPU
architecture, pipeline, instruction set, and interrupts for the TMS320C64x and TMS320C64x+ digital
signal processors (DSPs) of the TMS320C6000 DSP family. The C64x/C64x+ DSP generation
comprises fixed-point devices in the C6000 DSP platform. The C64x+ DSP is an enhancement of
the C64x DSP with added functionality and an expanded instruction set.
SPRU871 — TMS320C64x+ DSP Megamodule Reference Guide. Describes the TMS320C64x+ digital
signal processor (DSP) megamodule. Included is a discussion on the internal direct memory access
(IDMA) controller, the interrupt controller, the power-down controller, memory protection, bandwidth
management, and the memory and cache.

Asynchronous External Memory Interface EMIF SPRU984
DDR2 Memory Controller DDR2 SPRU986
DSP Megamodule—Internal Direct Memory Access IDMA SPRU871
Controller
DSP Megamodule—Interrupt Controller INTC SPRU871
DSP Megamodule—Power-Down Controller PDC SPRU871
DSP Subsystem—Phase-Locked Loop Controller PLLC SPRU978
DSP Subsystem—Power and Sleep Controller PSC SPRU978
Enhanced Direct Memory Access Controller EDMA SPRU987
Ethernet Media Access Controller/ EMAC/MDIO SPRU941
Management Data Input/Output Module
General-Purpose Input/Output GPIO SPRU988
High-End CAN Controller HECC SPRU981
Host Port Interface HPI SPRU998
Inter-Integrated Circuit Module I2C SPRU991
Multichannel Audio Serial Port McASP SPRU980
Multichannel Buffered Serial Port McBSP SPRU943
Peripheral Component Interconnect PCI SPRU985
Pulse-Width Modulator PWM SPRU995
Timer, 64-bit Timer SPRU989
Two-Level Internal Memory Cache SPRU862
Universal Asynchronous Receiver/Transmitter UART SPRU997
VLYNQ Port VLYNQ SPRU938
Video Processing Back End VPBE SPRU952
Video Processing Front End VPFE SPRU977 三、DM6437 DSP EDMA/QDMA
触发方式
     EDMA3CC包括两种通道类型: DMA channels(64个) & QDMA channels(8个),每个通道均由传输队列(4个传输队列,每个队列有16个事件入口)控制器控制,并有一个对应的参数设置集PaRAM set。EDMA与QDMA的主要区别在于两者的触发方式不同。
EDMA的触发方式:
    >event-triggered transfer request:EDMA3的典型用法,允许外设、系统或外部产生的事件触发传输请求;
    >manually-triggered transfer request:由CPU手动向事件设置寄存器(ESR/ESRH)的对应bit位写1,以此触发传输请求;
    >chain-triggered transfer request:通过配置链式传输寄存器,一个传输结束后,自动触发下一个传输请求.
QDMA的触发方式:
    >autotriggered transfer request:预先编程设定传输启动触发word,当向该word写值时就自动触发传输请求;
    >link-triggered transfer requests:配置链式传输后,写入触发字就自动连续传输.


                                                 EDMA 数据传输类型 (EDMA不完全= EDMA3)
EDMA有两种类型的数据传输:1D和2D的(OPT.2DS和OPT.DDS标示源地址和目的地址的数据传输类型,即有4种组合方式);数据的维数表明了数据的组成方式:
①1D数据
数据组成是“块->帧->元素”;一个块中的每帧数据是独立处理(即可以理解亦为2D数据,但是第二维永远是1),每次处理是一个元素,因此一帧中的数据元素可以是在同一个内存地址、连续的地址或者是与同一帧中的前面的数据元素地址具有一定偏移(Offset,由ELEIDX通道参数指定)的某地址;不同帧之间的内存地址偏移由FRMIDX通道参数指定(两帧的第一个元素之间的偏移或者后一帧的第一个元素的地址与前一帧的最后一个元素地址的偏移,具体依赖于通道参数FS的设定);每帧的数据元素个数可以不同,由通道参数ELECNT指定,传完一帧数据后由ELERLD重新载入块中的下一帧的数据元素个数ELECNT;块中的帧的个数由通道参数FRMCNT指定;
1D数据传输有两种同步方式:OPT.FS=0,元素同步方式;OPT.FS=1,帧同步方式;
元素同步时,一次同步事件引起一帧中的一个元素的传输,每传输一次ELECNT递减1;当同步事件触发时,ELECNT=1表明是一帧的最后一个数据元素,此时EDMA控制器除了完成最后这个元素的传输外,还需要重新载入ELECNT(通过ELERLD)并且FRMCNT递减1;ELEIDX表示元素之间的偏移,FRMIDX表示一帧的最后一个元素和下一帧的第一个元素之间的偏移;如果OPT.LINK=1时,传输完成中断产生(FRMCNT=0)就重新从PRAM中载入当前通道的其他参数;
帧同步时,一次同步事件引起一帧数据的传输,FRMIDX表示两帧的第一个元素之间的偏移;
  

② 2D数据
数据组成为“块->数组->元素”,同一数组中的元素是连续存放的,因此ELEIDX无意义;数组中的元素素引表示2D的第一维,块中的数组索引表示2D的第二维;FRMIDX的值依赖于OPT.FS的设定;
OPT.FS=0:表示一次同步事件传输一个数组,此时FRMIDX是数组首地址之间的偏移;每传完一个数组,FRMCNT递减1;当OPT.LINK=1并且FRMCNT递减至0时,从PRAM的中重新载入当前通道的其他参数;
   

OPT.FS=1:表示一次同步事件传输一个块;FRMIDX表示前一个数组的最后一个元素的地址与后一个数组的第一个元素的地址之间的偏移;如果OPT.LINK等于1,则当整块数据传完时,重新从PRAM中为当前通道载入新的参数;
  
(3)EDMA传输过程的源/目的地址的修改
    在每次同步事件触发EDMA数据传输,并且传输完成后,需要对源/目的地址进行更新;地址的更新方式由SUM/DUM进行设定,并且和2DS、2DD以及FS是密切相关的;



(4)数据元素大小和对齐方式
    源/目的地址是在元素大小的边界对齐的,因此要注意指向源/目的地址的指针的类型需要和OPT.ESIZE匹配;
  
(5)FRMCNT和ELEMCNT的更新
   
QUESTION:每次进行计数更新时,ELERLD的值哪里来的??
  
(6)EDMA Linking Transfer
    当传输完成时(根据当前通道参数设定已经传完所有数据了,具体条件如下表所示),并且OPT.LINK=1,EDMA控制器会根据通道参数LINK(非OPT.LINK,16bits)从PaRAM中的其他位置(以24个字节对齐,因为通道参数为6WORD)重新载入当前传输通道的参数;可以链接到一个空的通道参数集(NULL Parameter)来停止EDMA传输,也可以自链接(用于循环缓冲处理或者重复的数据传输);Linking过程中不对相关寄存器作判定;
(7)EDMA中断
    C64X DSP的EDMA控制器的所有64个通道只产生一种中断:EDMA_INT。如果需要让第n个EDMA通道(或者QDMA请求)可以在传输完成时可以产生中断通知CPU的话,应该如下设定:
u       OPT.TCINT=1:表示启用传输完成中断
u       OPT.TCC=n:在传输完成时,CIPR[TCC]=1,用于标记对应通道的传输完成,即便对应的CIER位没有启动,传输完成事件还是会在CIPR记录,即挂起的含义所在;
u       OPT.CIER[n]=1:表示立即允许挂起的第n个通道传输完成事件触发EDMA_INT中断发送给CPU;
其中,TCC用于表示的通道的位数不够时,可以扩展使用TCCM(即TCCM:TCC),CIPR和CIER均由两个寄存器组成:CIPRL+CIPRH以及CIERL+CIERH。
中断服务例程ISR读取CIPR,确定哪一个通道完成了数据传输,进行相应的处理。ISR在进行处理之前需要清除CIPR中确定了通道的位(写入1到相关位清除,写入0不起作用),目的是记录以后的传输完成事件的发生。在中断服务例程对某通道的传输完成中断进行服务后,因为期间有可能有其他通道传输完成了,也已经设置了CIPR中的相应位,或者也有可能本来有好几个中断挂起了并且现在触发了,因此中断服务例程必须检查所有的CIPR并全部完成中断服务才行。当CIPR[n]&CIER[n]=1时,则设置对应的IFR为1,防止在退出ISR时丢失中断并且使得可以多次调用ISR。中断服务例程的一个任务是清除CIPR和CIER中的与通道对应的位。
C64X DSP除了传输完成中断外,还有交替性传输完成中断,即在传输过程中完成一个传输子过程(如传完一个数据元素、传完一个帧/数组数据;2D帧同步传输没有交替性传输完成中断)给CPU发送一个中断,相应的设定由OPT.ATINT、OPT.ATCC设定,处理过程和传输完成中断雷同,区别只是在传输还没全部完成的过程中进行中断处理而已。
   
(8)QDMA
    QDMA数据传输总是帧同步的,即对于1D数据传输而言每次同步事件传输一帧数据,对于2D数据传输而言每次同步事件传输一块数据。因此,QOPT.FS对于QDMA是无意义的。另外,QDMA是一次性快速传输的,因此也没有中间传输过程这个概念,即没有交替性传输完成中断。
   
   
    QDMA没有Linking方式的传输,但是有Chaining方式的传输。QDMA有两组内存映射寄存器用于设定通道参数,如下图所示:
   
    其中,QDMA寄存器集只用于配置,QDMA psedudo寄存器集可以用于提交QDMA请求。
(9)EDMA控制器的请求提交
    请求包括L2控制器(Cache服务、访问未Cache的内存以及QDMA传输)、EDMA通道、HPI/PCI。Transfer Crossbar为请求排定优先级。
   
(10) Event Encoder 事件编码器
    事件寄存器ER(包括ERL和ERH)用于捕获对应于64个EDMA通道的事件。在事件编码器中只是负责提交请求,事件的优先局依赖于EDMA通道参数的设定,并且在Transfer Crossbar中才正式排定。
(11)Parameter RAM
    Parameter RAM位于EDMA控制器内部,只有设备总线可以对之进行访问。PRAM表大小为2KB,其组成为:
①     64个24字节(即每项6个32bits的字WORD)的表项,用于保存64个通道的参数,也可作为保存Linking时候需要进行重载的通道参数;
②     21个24字节(即每项6个32bits的字WORD)的表项,用于保存Linking时候需要进行重载的通道参数;
③     剩余的8个字节;
    每个通道参数(6WORDS)如下:

   
(12)EDMA Chaining 传输
    Chaining传输的含义是当一个EDMA通道传输完成时,触发另一个EDMA通道的传输。
    TCINT需要设为1,根据当前通道的(TCCM:)TCC值,设定CCER(CCERL+CCERH)的)(TCCM:)TCC位的值,表示当前通道传输完成后触发(TCCM:)TCC通道的数据传输。
    Chaining传输也可以交替性传输完成,使用ATTC指定要触发的通道。 四、DM6437  中断向量表配置
1. 编写中断服务例程
在.c源文件中编写ISR函数c_intXX,用于中断处理,如:
interrupt void c_intXX (void)
{
          …;
}
注:对于硬件中断而言,XX = 00~15。
2.初始化中断向量表,并在内存段中的中断向量表中配置好对应的中断向量
          首先是把中断向量表定位到某一内存段中,我们可以在cmd文件中配置中断向量表的内存映射,如:
MEMORY
{
    VECS:       o = 0x10800000  l = 0x00000400
    MEMTEST:    o = 0x10800400  l = 0x00000200
    IRAM:       o = 0x10800600  l = 0x0001FA00
    DDR2:       o = 0x80000000  l = 0x10000000
}
SECTIONS
{
    .bss        >   IRAM
    .cinit      >   IRAM
    .cio        >   IRAM
    .const      >   IRAM
    .data       >   IRAM
    .far        >   IRAM
    .stack      >   IRAM
    .switch     >   IRAM
    .sysmem     >   IRAM
    .text       >   IRAM
    .vecs       >   VECS
    .ddr2       >   DDR2
}
      
           然后建立一个.asm文件,用以配置中断向量表中的中断向量,我们需要声明一些全局变量,以便其他源文件可以引用这些变量或者引用其他源文件的变量,如:
   *-----------------------------------------------------------------* Global symbols defined here and exported out of this file
*--------------------------------------------------------------------   .global _vectors
   .global _c_int00
   .global _vector1                  
   .global _vector2       ;RSVD保留
   .global _vector3       ;RSVD保留
   .global _vector4
   .global _vector5
   .global _vector6
   .global _vector7
   .global _vector8
   .global _vector9     
   .global _vector10
   .global _vector11   
   .global _vector12   
   .global _vector13   
   .global _c_int14_vencint  ; Hookup the c_int14 ISR in main()
   .global _vector15
               
    因为引用了rts的_c_int00中断,即RESET中断,因此需要引入这个符号:
   .ref     _c_int00
      
为了把中断服务例程的地址,即中断向量插入到中断向量表中,可以定义一个宏:
VEC_ENTRY .macro addr
       STW      B0,*--B15
       MVKL     addr,B0
       MVKH     addr,B0
       B        B0
       LDW      *B15++,B0
       NOP      2
       NOP   
       NOP   
.endm         
           
      为了初始化中断向量表中的中断向量,可以定义一个虚拟的中断向量:
_vec_dummy:
     B       B3
     NOP     5
           
     接下来就可以配置中断向量表了:
.sect “.vecs”
.align 1024
_vectors:
_vector0:      VEC_ENTRY _c_int00         ;RESET中断
_vector1:      VEC_ENTRY _vec_dummy ;NMI不可屏蔽中断
_vector2:      VEC_ENTRY _vec_dummy ;保留中断1
_vector3:      VEC_ENTRY _vec_dummy ;保留中断2
_vector4:      VEC_ENTRY _vec_dummy ;外部中断INT4
_vector5:      VEC_ENTRY _vec_dummy ;外部中断INT5
_vector6:      VEC_ENTRY _vec_dummy ;外部中断INT6
_vector7:      VEC_ENTRY _vec_dummy ;外部中断INT7
_vector8:      VEC_ENTRY _c_int08 ; EDMA控制器中断EDMAINT,对应于c_int08 ISR
_vector9:      VEC_ENTRY _vec_dummy;JTAGRTDX中断
_vector10:     VEC_ENTRY _vec_dummy;EMIF_SDRAM_Timer中断
_vector11:     VEC_ENTRY _vec_dummy;McBSP_0_Receive中断
_vector12:     VEC_ENTRY _vec_dummy;McBSP_1_Transmit中断
_vector13:     VEC_ENTRY _vec_dummy;Host_Port_Host_to_DSP中断
_vector14:     VEC_ENTRY _vec_dummy;Timer0中断
_vector15:     VEC_ENTRY _vec_dummy;Timer1中断
3. 在C程序中指定定义的中断向量表,并且启用CPU中断功能
在C程序中,用CSL的IRQ模块来设置中断比较方便,在设置之前,需要外部链接上面的asm程序的中断向量表符号:
extern far void vectors();//之所以为vectors,因为C编译器编译后自动改名其为_vectors
引用了中断向量表之后,就可以设置中断了:
       IRQ_setVecs(vectors); //指向asm中定义的中断向量表
       IRQ_nmiEnable();
       IRQ_globalEnable();
       IRQ_map(IRQ_EVT_EDMAINT, 8);       //映射事件到指定的物理中断号
       IRQ_reset(IRQ_EVT_EDMAINT);
4.启动中断源,如venc中断
至此,中断服务例程c_int14_vencint  就可以为venc中断服务了,其它硬件中断向量的配置同理。 五、DM643X McASP0 多声道音频串行端口

为了多声道音频应用的需要,作为通用的音频串口,McASP0 的功能被优化了。McASP0对于时分复用流、I2S 协议和计算机间数字音频接口传输(DIT)是有益的。
McASP0 具体信息
TMS320DM643X 设备包含一个多声道音频串行端口(McASP)接口外设(McASP 0),为了多声道音频应用需要,McASP 是一个被优化了的串口。McASP 由发射部分和接收部分组成,它们能够用不同的数据格式、隔离的主时钟、位时钟、帧同步或者一部分完全独立地进行操作,传输部分和接收部分可以是同步的。McASP模块还包括一个16 位移位寄存器池,可配置为用于传输数据,接收数据,或通用输入/输出( GPIO)。McASP 的传输段可以用时分复用同步串行格式传送数据,或用一个数字音频接口格式传输数据,它的位流可被编码为S / PDIF, AES - 3 ,IEC - 60958,CP- 430 的传输。接收段的McASP 支持的TDM 同步串行格式。该McASP 可以支持一个传输数据格式(TDM 的格式或DIT 格式) ,并一次支持一个接收格式。所有发送移位寄存器及接收移位寄存器都使用相同的格式。然而,发送和接收格式,不必相同。McASP 的发送和接收部分也支持脉冲模式,该模式对于非音频数据(例如,在两个DSP之间传送控制信息)是非常有利的。McASP 外围设备还有额外的能力,产生灵活的时钟,错误检测/处理,以及误差管理。为了了解McASP 外围设备的更加详细的资料及功能,请查阅 二、学习资料
(1)McASP引脚
   串行化引脚:AXR[n]的数据引脚,C6000最多支持8个串行化引脚,即n = 0 ~ 7;
        发送时钟生成器:① AHCLKX – 高频率发送主时钟;② ACLKX – 发送位时钟;
        发送帧同步产生器:AFSX – 发送帧同步或者左/右时钟(LRCLK);
        接收时钟生成器:① AHCLKR;② ACLKR;
        接收帧同步产生器:AFSR;
        Mute输入/输出:① AMUTEIN – 输入,从外部设备;② AMUTE – 输出;③ 数据引脚AXR[n];
(2)时钟器
        McASP发送和接收时钟可以独立进行编程;时钟有三种驱动方式:外部驱动,即通过输入到ACLKR/X引脚的外部时钟驱动;内部驱动,即对内部时钟源AUXCLK分频后驱动;混合驱动,即外部高频时钟输入到AHCLKX/R引脚,分频后作为ACLKR/X的驱动源;
        ACLKX可以由外部时钟源进行驱动,也可以由AHCLKX分频后的内部时钟驱动;
        AHCLKX可以由外部时钟源驱动,也可以由内部时钟AUXCLK的分频时钟进行驱动;
        ACLKR可以由外部时钟源驱动,也可以由AHCLKR分频后的内部时钟驱动;
        AHCLKR可以由外部时钟源驱动,也可以由AUXCLK的分频时钟驱动;
不同的驱动方式和传输触发方式由相应寄存器(ACLKXCTL、AHCLKXCTL、ACLKRCTL、AHCLKRCTL)的不同位段进行配置;
(3)帧同步器
        帧同步有两种方式:burst和TDM。帧同步由AFSRCTL和AFSXCTL寄存器进行配置,主要可以配置的内容有:
①      内部驱动或者外部驱动;
②      上升沿或者下降沿触发帧同步;
③      帧同步的数据宽度:位或者字;
④      位延时:0,1,2个位时钟;
帧同步引脚AFSX和AFSR在传输立体声数据时可以配置为左/右时钟(LRCLK)来用;
(4)串行化器
        每个串行化器n都有一个对应的数据引脚AXR[n]和一个对应的控制寄存器SRCTL[n]。

        XRSR:移位寄存器;
        XRBUF:数据缓冲寄存器;


(5)格式化单元
        格式化单元(传输字以及word在slot中的数据对齐、填充等)由三部分组成,涉及的寄存器是R/XMASK和R/XFMT:
①      位掩码和填充(掩码数据位,进行符号扩展);
接收:RMASK、RPBIT、RPAD;
发送:XMASK、XPBIT、XPAD;
②      循环右移(数据对齐字边界);
接收:RROT;
发送:XRROT;
③      数据反转 (LSB和MSB反转);
接收:RRVRS;
发送:XRVRS;
(6)状态机
     ① 接收状态机:由RFMT寄存器控制,保存McASP状态和错误信息于RSTAT寄存器中;
     ② 发送状态机:由XFMT寄存器控制,保存McASP状态和错误信息于XSTAT寄存器中;
(7) TDM序列器
     ① 接收TDM序列器:由RTDM寄存器控制,保存当前接收slot于RSLOT寄存器中;
     ② 发送TDM序列器:由XTDM寄存器控制,保存当前接收slot于XSLOT寄存器中; 六、DM643X  TPS54310电源芯片
1 TMS3320DM64xx系列SOC对电源的要求
    TMS3320DM64xx系列SOC是应用于数字视频的片上处理平台,具有DSP与ARM双核结构,需要内核与I/0两种电源,而内核电源又分为CVDD(1.2V)和CVDDDSP(1.2V),I/0电源分为DVDDl8(1.8V),DVDDR2(1.8V),DVDD33(3.3V)。由于通常TMS3320DM64xx用于嵌入式系统中,因而,电源电路设计不仅要考虑电压的精度、稳定度和外围电路的复杂度等问题,还要考虑低功耗问题,另外根据设计工艺,为了保证芯片正常工作,在系统上电、关机及稳压操作时,对这几种电源还有一定的排序要求,如果违反该要求,可能降低器件的性能或永久损坏器件。
    图1(a)、图1(b)分别显示的是内核电源之间以及内核电源与I/0电源之间的上电时序。内核电源的上电时序依赖复位时选择的DSP启动模式:如果DSP初始化模式被配置为自启动模式,要求两个内核电源同时上电;如果DSP被配置为主机启动模式(即ARM启动DSP),要求两个内核电源分别上电,CVIDD优先于CVDDDSP,而CVDDDSP必须在复位信号开启(关闭)之前上电。如图1(b)所示,I/O电源必须在CVDD电源上电后的100ns内上电,各个I/O电源的上电顺序没有要求。

2 TPS54310电源芯片功能:
3V-6V输入,3A输出开关电源,SYNCHRONOUS-BUCK PWM SWITCHER

引脚定义:
AGND       模拟地。POWERPAD要与之连接。
BOOT       Bootstrap input.。0.022uF to 0.1uF low ESR CAP 连接BOOT到PH。
COMP      Error amplifier output。连接补偿网络
PGND      电源地。和输入输出间大量辅铜提供回流通路。
PH            相位输入/输出
PWRGD  电源good开漏输出
RT            频率设置电阻输入,这里可以通过电阻设置fs
SS/ENA   SlowStart /输入输出使能,输入时做使能端,连接电容控制开始时间
SYNC      同步输入。双功能,做输入与外部晶振同步,或做内部开关频率选择。
VBIAS      内部偏置校正输出。提供校正电压到内部电路。用一个低ESR的电容连接到地
VIN           电平输入
VSENSE 错误放大反转输入   

3 其他特性
3.1 灵活控制器件的启动/关断特性
    上电过程中,当输入电压不够时,将内部电路置于静止状态,器件不工作;输入电压开始等于并超出正常的起始门限(2.95V)时,激活内部电路,控制器件开始工作。电压稳定后,当输入电压幅度再次降低到关闭门限(2.8V)时,器件停止工作。另外,由于内部比较器的滞后作用和2.5μs上升与下降沿抗尖峰电路的存在,降低了由于混入输入电压内的噪声而引起器件瞬间关断的可能性。
3.2 自定义启动时间
    通过在SS/ENA(慢启动/芯片使能)管脚和AGND(模拟地)管脚之间加一个小电容(Css)能够达到延长启动时间的目的,延迟时间的计算公式为     
3.3 设定转换频率
    转换频率可以被设定为固定的350kHz或550kHz内部振荡器频率,也可以被设定为可调的280kHz~700kHz。振荡频率的设定由SYNC和RT管脚共同决定,当SYNC悬空或接地,而RT悬空时,转换频率为350kHz;当SYNC接入大于2.5V的电压,而RT悬空时,转换频率为550kHz;当SYNC悬空,而RT与地之间接入68k到180k之间的电阻时,转换频率为可调的280kHz~700kHz。
转换频率的计算公式为     
式中:Fsw为转换频率;
    R为端接在RT引脚上的电阻值。
3.4 过电流保护
    判断电流流向,当电流从VIN流向PH时,启动高端场效应管和差分放大器,器件能够感知流经高端场效应管和差分放大器的电流,并将之与过电流门限进行比较,限流操作在每开关周期内进行。当达到限流门限时,高端场效应管会在200ns时间内关断,在吸收电流过量时,由热关断电路进行负载保护。
3.5 热关断
    当温度超出150℃时,使用热关断电路关闭内部场效应管的电源,当温度低于热关断触发点10℃时,器件停止关断状态,并在慢启动电路的控制下重新开始工作。 七、DSP 系统中的时钟电路

         在DSP 系统中,时钟电路是处理数字信息的基础, 同时它也是产生电磁辐射的主要来源,其性能好坏直接影响到系统是否正常运行,所以时钟电路在数字系统设计中占有至关重要的地位。下面主要以TI 公司的产品为例介绍DSP系统中时钟电路的设计。
1.时钟电路的种类
TI DSP系统中的时钟电路主要有三种:晶体电路、晶振电路、可编程时钟芯片电路。
(1)晶体电路 晶体电路最为简单,只需晶体和两个电容,价格便宜,体积小,能满足时钟信号电平要求,但驱动能力差,不可提供多个器件使用,频率范围小(20kHz~60MHz),使用时还须注意配置正确的负载电容,使输出时钟频率精确、稳定。TI DSP 芯片除C6000、C5510等外,大都内部含有振荡电路,可使用晶体电路产生所需的时钟信号。也可不使用片内振荡电路,直接由外部提供时钟信号。
(2)晶振电路 晶振电路如图2所示,其电路简单、体积小、频率范围宽(1Hz~400MHz)、驱动能力强,可为多个器件使用。但由于晶振频率不能改变,多个独立的时钟需要多个晶振。另外在使用晶振时,要注意时钟信号电平,一般晶振输出信号电平为5V或3.3V,对于要求输入时钟信号电平为1.8V的器件,不能选用晶振来提供时钟信号(如VC5401、VC5402、VC5409和F281X 等)。
(3)可编程时钟芯片电路 其电路较简单,一般由可编程时钟芯片、晶体和两个外部电容构成。有多个时钟输出,可产生特殊频率值,适于多个时钟源的系统,驱动能力强,频宽最高可达200MHz,输出信号电平一般为5V或3.3V,常用器件为CY22381 和C Y 2 0 7 1 A( 有1 个PLL,3 个时钟输出引脚)。目前TI DSP 工作频率已高达1GHz(如最新推出的TMS320C6416T),为降低时钟的高频噪声干扰,提高系统整体的性能,通常设计时使用频率较低的外部参考时钟源,为此须采用可编程时钟芯片电路,它可在在线的情况下,通过编程对系统的工作时钟进行控制,以保证在较低的外部时钟源的情况下,通过其内部集成的PLL 锁相环的倍频,获得所希望的工作频率,同时通过在DSP 内部对时钟进行编程控制,也能较好地满足不同应用的要求。例如对于自动化仪表、便携式仪器以及家电等应用场合,往往希望有较低能耗,这时可通过编程,使DSP工作在较低频率,甚至可以设定为固定分频模式,并关断内部的锁相环相关电路,使功耗最小。而对于数字信号处理以及实时系统,常需要DSP 工作在高速状态,这时则可通过编程,使系统在完成引导之后,进入到锁相倍频模式,提高系统
的工作频率。有时即使在同一应用中,为了需要也可以通过编程,使系统在不同的阶段工作在不同的频率。例如系统在引导时工作在较低频率的固定分频模式,正常工作后进入所需频率的锁相倍频模式,而在等待期间则返回到分频模式并关断PLL 以降低功耗。一般TI DSP 芯片
能提供多种灵活的时钟选项,可以使用片内/片外振荡器、片内PLL或由硬件/软件配置PLL 分频/ 倍频系数。不同的DSP
时钟可配置的能力不同,使用前应参考各自的数据手册。
2.时钟电路选择原则
(1)系统中要求多个不同频率的时钟信号时,首选可编程时钟芯片电路;单一时钟信号时,选择晶体时钟电路;多个同频时钟信号时,选择晶振时钟电路。尽量使用DSP片内的PLL,降低片外时钟频率,提高系统稳定性。
(2)C6000、C5510、C5409、C5416、C5420、C5421 和C5441 等片内无振荡电路,不能用晶体时钟电路。
(3)VC5401、VC5402、VC5409 和F281x等,它们的时钟信号输入电平要求为1.8V,建议采用晶体时钟电路。
(4)C64x 主频最高可达1GHz,必须使用片内PLL,并且要对片内PLL提供独立的供电,电源引脚进行必要的滤波,在C62x/C67x 上还提供PLL 滤波网络引脚,这时外部应加相应的R、C 滤波元件。
3.时钟电路电源和地的设计时钟的供电电源与整个电路板的电源一般是分开的,二者的电源面要隔离开(可以在同一层),只通过铁氧体磁珠
(ferritebead)相连。铁氧体磁珠在低频时阻抗很低,而在高频时阻抗很高,可以抑制高频干扰,这样外面的高频干扰不会影响时钟芯片,同时时钟芯片内部产生的振荡信号也不会影响到外面电路。时钟部分的地和整个PCB 的地是一个统一的整体,这样做的目的是从EMC(electromagneticcompatibility )的角度考虑的。电流流动是需要回路的,电流回路等效于一个天线,回路面积越大对外辐射就越强,也越易受到干扰(主要是近场磁场的能量,这个磁场的能量可能来自自由空间或是由电路板上其它部件辐射的)。在高速电路设计中,电流会自动地寻找阻抗最低的路径返回。如果地层也像电源层那样分割出来,那么所有的电流都会从铁氧体磁珠返回来,直接导致的结果,一是每条电流回路的天线效应增强;二是电流都从铁氧体磁珠流过,大大增加了传导干扰(从地层或电源层耦合进来,对系统性能的影响极大)。在时钟芯片的电源入口处放一个容量为10~100μF的钽电容(具体值根据实际系统而定),它不仅可以防止由于电压波动引
起的电流涌动,还可以抑制低频干扰,但是对于高频干扰却无能为力,所以在大容量电容的后面并联一个0.1μ F的小电容。在时钟芯片的每一个电源引脚处也都要放一个0.1μF的电容,且所放的位置要尽可能地靠近电源引脚,这样可以减少外来的电源噪声。晶振、负载电容PLL 滤波器等应尽可能靠近时钟器件,在靠近时钟输出引脚的地方要串接10~50Ω电阻以减小输出电流,提高时钟波形的质量;另外,不要在时钟芯片的底下布线,因为这些线可能会产生高频干扰耦合进芯片,从而使时钟芯片的输出产生抖动,同时从时钟芯片内部产生的高频干扰也会耦合到芯片底下的走线,使之失去信号完整性。对于时钟走线要严格地控制它的阻抗,所有的线最好都从内层走(以减少干扰),尽量少的出现过孔,因为过孔会引起阻抗发生变化,影响信号的质量,进而产生EMI辐射和抖动问题。 八、DDR2内存

DDR与DDR2内存
  DDR2(Double Data Rate 2)SDRAM是由JEDEC(电子设备工程联合委员会)进行开发的新生代内存技术标准,它与上一代DDR内存技术标准最大的不同就是,虽然同是采用了在时钟的上升/下降延同时进行数据传输的基本方式,但DDR2内存却拥有两倍于上一代DDR内存预读取能力(即:4bit数据读预取)。换句话说,DDR2内存每个时钟能够以4倍外部总线的速度读/写数据,并且能够以内部控制总线4倍的速度运行。

  此外,由于DDR2标准规定所有DDR2内存均采用FBGA封装形式,而不同于目前广泛应用的TSOP/TSOP-II封装形式,FBGA封装能提供更为良好的电气性能与散热性能,为DDR2内存的稳定工作与未来频率的发展提供了坚实的基础。回想起DDR的发展历程,从第一代应用到个人电脑的DDR200经过DDR266、DDR333到今天的双通道DDR400技术,第一代DDR的发展也走到了技术的极限,已经很难通过常规办法提高内存的工作速度;随着Intel最新处理器技术的发展,前端总线对内存带宽的要求是越来越高,拥有更高更稳定运行频率的DDR2内存将是大势所趋。


 1、延迟问题:


  从上表可以看出,在同等核心频率下,DDR2的实际工作频率是DDR的两倍。这得益于DDR2内存拥有两倍于标准DDR内存的4BIT预读取能力。4bit Prefetch可以认为是端口数据传输率和内存Cell之间数据读/写之间的倍率,也就是把几个cell送来的数据进行排序。Prefetch的实现机制中,数据先输入到I/O缓冲寄存器,再从I/O寄存器输出。换句话说,虽然DDR2和DDR一样,都采用了在时钟的上升延和下降延同时进行数据传输的基本方式,但DDR2拥有两倍于DDR的预读取系统命令数据的能力。也就是说,在同样100MHz的工作频率下,DDR的实际频率为200MHz,而DDR2则可以达到400MHz。


  这样也就出现了另一个问题:在同等工作频率的DDR和DDR2内存中,后者的内存延时要慢于前者。举例来说,DDR 200和DDR2-400具有相同的延迟,而后者具有高一倍的带宽。实际上,DDR2-400和DDR 400具有相同的带宽,它们都是3.2GB/s,但是DDR400的核心工作频率是200MHz,而DDR2-400的核心工作频率是100MHz,也就是说DDR2-400的延迟要高于DDR400。

  2、封装和发热量:

  DDR2内存技术最大的突破点其实不在于用户们所认为的两倍于DDR的传输能力,而是在采用更低发热量、更低功耗的情况下,DDR2可以获得更快的频率提升,突破标准DDR的400MHz限制。

DDR与DDR2内存颗粒及针脚等细节对比
  DDR内存通常采用TSOP芯片封装形式,这种封装形式可以很好的工作在200MHz上,当频率更高时,它过长的管脚就会产生很高的阻抗和寄生电阻,这会影响它的稳定性和频率提升的难度。这也就是DDR的核心频率很难突破275MHz的原因。而DDR2内存均采用FBGA封装形式。不同于目前广泛应用的TSOP封装形式,FBGA封装提供了更好的电气性能与散热性,为DDR2内存的稳定工作与未来频率的发展提供了良好的保障。

  DDR2内存采用1.8V电压,相对于DDR标准的2.5V,降低了约50%,从而明显降低了功耗和发热量,这一点变化是意义重大的。想想看,谁不愿意让自己计算机内的硬件又凉快又省电呢?
 除了以上所说的区别外,DDR2还引入了三项新的技术,它们是OCD、ODT和Post CAS。

  OCD(Off-Chip Driver):也就是所谓的离线驱动调整。它是一些调整电压而平衡的I/O驱动电阻。DDR II通过调整上拉(Pull-up)/下拉(Pull-down)的电阻值使两者电压相等。也就是Pull-up=Pull-down。实现最少DQ-DQS畸变,改进了信号的完整性,并且通过控制overshoot、undershoot和I/O驱动电压校验,改进信号的质量。使用OCD通过减少DQ-DQS的倾斜来提高信号的完整性;通过控制电压来提高信号品质。


  ODT:ODT是内建核心的终结电阻器。我们知道使用DDR SDRAM的主板上面为了防止数据线终端反射信号需要大量的终结电阻。它大大增加了主板的制造成本。实际上,不同的内存模组对终结电路的要求是不一样的,终结电阻的大小决定了数据线的信号比和反射率,终结电阻小则数据线信号反射低但是信噪比也较低;终结电阻高,则数据线的信噪比高,但是信号反射也会增加。因此主板上的终结电阻并不能非常好的匹配内存模组,还会在一定程度上影响信号品质。DDR2可以根据自已的特点内建合适的终结电阻,这样可以保证最佳的信号波形。使用DDR2不但可以降低主板成本,还得到了最佳的信号品质,这是DDR不能比拟的。


  Post CAS:它是为了提高DDR2内存的利用效率而设定的。在Post CAS操作中,CAS信号(读写/命令)能够被插到RAS信号后面的一个时钟周期,CAS命令可以在附加延迟(Additive Latency)后面保持有效。原来的tRCD(RAS到CAS和延迟)被AL(Additive Latency)所取代,AL可以在0,1,2,3,4中进行设置。由于CAS信号放在了RAS信号后面一个时钟周期,因此ACT和CAS信号永远也不会产生碰撞冲突。


  在上图正常的操作中,此时的各项内存参数为:tRRD=2,tRCD=4,CL=4,AL=0,BL=4(BL就是突发数据长度,Burst Length)。我们看到tRRD(RAS到RAS的延迟)为两个时钟周期,tRCD(RAS到CAS的延迟)是四个时钟周期,因此在第四个时钟周期上面ACT(段激活)和CAS信号产生了碰撞,ACT向后移动一个时钟周期,因此大家可以看到后面的数据传输中间出现了一个时钟周期的BUBBLE。


  在Post CAS操作中,CAS信号(读写/命令)能够被插到RAS信号后面的一个时钟周期,CAS命令可以在附加延迟(Additive Latency)后面保持有效。原来的tRCD(RAS到CAS和延迟)被AL(Additive Latency)所取代,AL可以在0,1,2,3,4中进行设置。从上图的时序可以看出,Post CAS和Additive Latency的好处。由于CAS信号放在了RAS信号后面一个时钟周期,因此ACT和CAS信号永远也不会产生碰撞冲突。

  使用Post CAS加Additive Latency会带来三个好处:可以很容易的取消掉命令总线上的Collision(碰撞)现象;提高了命令和数据总线的效率;没有了Bubble,可以提高实际的内存带宽。