TMS320C55x DSP芯片结构和CPU外围电路
第2章 DSP芯片结构和CPU外围电路
文章目录
- 第2章 DSP芯片结构和CPU外围电路
- TMS320C55x处理器的特点
- TMS320c55x CPU单元
- 指令缓冲(Instruction Buffer Unit) I单元
- 程序流程(Program Flow Unit) P单元
- 地址数据(Address-data Flow Unit) A单元
- 数据计算(Data Computation Unit) D单元
- TMS320c55x CPU外围电路
- 时钟电路 Clock
- PLL控制寄存器
- 时钟模式寄存器
- 工作模式
- 使用方法
- 通用定时器 Timer
- 结构框图
- 时钟部分
- 计数器部分
- 通用定时器的控制
- 外部存储接口 EMIF
- 概述
- 与外部存储器的接口方式
- 异步接口
- 同步动态RAM
- 例题
- 主机接口 EHPI
- EHPI 基本结构
- 复位对EHPI寄存器的影响
- 接口时序
- 应用举例
- 多通道缓冲串口 McBSP
- 概述
- 基本结构
- 收发通道
- 时钟与帧同步
- 多通道选择
- 串口事件
- 工作模式
- 收发格式与参数设置
- 异常处理
- McBSP寄存器说明
- 应用举例
- 通用输入输出口 GPIO
- 概述
- 上电模式设定
- 其他GPIO
- 直接存储访问控制器 DMA
- 基本结构
- EHPI 通道
- DMA通道传输配置
- 数据块、帧和单元
- 传输类型与数据打包
- 数据源和目的地址
- 单次传输与多次传输
- DMA通道数据传输的启动
- 通道中断与状态
- 寄存器说明
- 应用举例
- 片内存储器与DSP自举
- DA(Dual-Access)RAM
- SA(Single-Access)RAM
- ROM与DSP自举
- 应用举例
TMS320C55x处理器的特点
特征 | 优点 |
---|---|
一个 32 位 ×16 指令缓冲队列 | 缓冲变长指令并完成有效的块重复操作 |
两个 17 位 ×17 位的乘法累加器 | 在一个单周期执行双乘法累加操作 |
一个 40 位算术逻辑单元 (ALU) | 实现高精度算术和逻辑操作 |
一个 40 位桶形移位寄存器 | 能够将一个 40 位的计算结果最高左移 31 位或向右移 32 位 |
1 个 16 位算术逻辑单元 (ALU) | 对主 ALU 并行完成简单的算术操作 |
4 个 40 位的累加器 | 保留计算结果,减少对存储单元的访问 |
12 条独立总线,其中包括: 3 条读数据总线 2 条写数据总线 5 条数据地址总线 1 条读程序总线 1 条程序地址总线 | 为各种计算单元并行提供将要处理的指令和操作数 —— 利用 C55x 的并行机制的优点 |
用户可配置 IDLE 域 | 改进了低功耗电源管理的灵活性 |
TMS320c55x CPU单元
TMS320C55x DSP CPU Reference Guide (Rev. F) (ti.com.cn)

如图所示, C55x有1条32位的程序
数据总线(PB), 5条16位数据
总线(BB、CB、 DB、 EB、 FB)和1条24位的程序地址
总线及5条23位的数据地址
总线, 这些总线分别与CPU相连。
总线通过存储器接口单元(M)与外部程序总线和数据总线相连, 实现CPU对外部存储器的访问。这种并行的多总线结构, 使CPU能在1个CPU周期内完成1次 32位程序代码读
、 3次 16位数据读
和2次 16位数据写
。
C55x根据功能的不同将CPU分为 4 个单元, 即指令缓冲单元 (I)、 程序流程单元 §、 地址流程单元 (A) 和数据计算单元 (D)。
指令缓冲(Instruction Buffer Unit) I单元
如图所示, C55x的指令缓冲单元(I)由指令缓冲队列IBQ(Instruction Buffer Queue)
和指令译码器
组成。 在每个 CPU周期内, (I)单元将从程序读数据总线接收的 4 B 程序代码放入指令缓冲队列, 指令译码器从队列中取 6 B 程序代码, 根据指令的长度可对8位、16位、24位、32位和48位的变长指令进行译码, 然后把译码数据送入 P单元、 A单元和D单元去执行。

程序流程(Program Flow Unit) P单元
如图所示, 程序流程单元( P)由程序地址产生电路
和寄存器
组构成。主要功能产生所有(I)单元读取指令所需的24比特程序地址、控制指令读取顺序。
一般情况下,产生的都是(连续)顺序地址。在遇到指令要求读取非连续地址程序代码时,也可以根据来自(I)单元的立即数和(D)单元的寄存器值产生所需的地址,并将产生地址送到PAB。
在程序流程单元中,控制和影响程序地址的寄存器有5类:
1)程序流程寄存器,包括:PC—程序计数器,RETA—返回地址寄存器,CFCT—控制流程关系寄存器;
2)块重复寄存器,包括:BRC0、BRC1—块重复寄存器0和1、RSA0、RSA1—块重复起始地址寄存器, REA0、REA1—块重复结束地址寄存器0和1;
3)单重复寄存器,包括:RPTC—单重复计数器,CSR—计算单重复寄存器;
4)中断寄存器,包括:IFR0、IFR1(标志),IER0、IER1(使能),DBIER0、DBIER1(调试中断使能);
5)状态寄存器:ST0_55、 ST1_55、 ST2_55、 ST3_55。
地址数据(Address-data Flow Unit) A单元
如图所示, 地址流程单元(A)包括数据地址产生电路(DAGEN)
、算术逻辑电路ALU
和一组寄存器组
构成。
DAGEN
可以根据(I)单元的立即数和本(A)单元的寄存器数据产生读写数据空间的所有地址。在间接寻址中,还需要有§单元来指示采用那种寻址模式。
ALU
能接收(I)单元数据,又能够和存储器、I/O空间、(A)单元寄存器、(D)单元寄存器和§单元寄存器进行数据交换,完成算术、逻辑、位操作、移位、测试、旋转等操作。
(A)单元包括的寄存器有下列4种类型:
1)数据页寄存器(Data Page Register):DPH、DP、(接口数据页)PDP
2)指针寄存器(Pointers):CDPH、CDP—系数数据、SPH、SP、SSP—栈、XAR0~XAR7—辅助
3)循环缓冲寄存器(Circular Buffer Registers):BK03、 BK47、BKC—大小,BSA01、BSA23、BSA45、BSA67、BSAC—起始地址
4)临时寄存器(Temporary Registers):T0~T3
数据计算(Data Computation Unit) D单元
(D)单元包括了CPU的主要计算
部件,能够完成高效的计算功能。如图所示,数据计算(D)单元由移位器
、40比特算术逻辑ALU电路
、两个乘累加器(MAC)
和若干寄存器组
构成。

移位器
:(D)单元移位器能够接收 来自(I)单元的立即数,与存储器、 I/O空间、(A)单元寄存器、(D)单元寄存器和§单元寄存器进行双向通信。此外,还向(D)单元的ALU和(A)单元的ALU提供移位后的数据。
TMS320c55x CPU外围电路
TMS320VC5509 采用下图所示的结构, 由 CPU 和外围电路构成 。 CPU在上节已经介绍, 外围电路是指除 CPU 以外集成在 DSP 芯片内部的一些功能单元和外部接口, 包括:时钟电路、定时器、多通道缓冲串口 McBSP 、主机接口 EHPI、外部存储器接口 EMIF、通用输入/ 输出口 GPIO 、片内存储器和DMA控制器等。
芯片内部框图来源:
TMS320VC5509A Fixed-Point Digital Signal Processor datasheet (Rev. K) (ti.com.cn)
时钟电路 Clock
TMS320C55x DSP Peripherals Overview Reference Guide (Rev. K) (ti.com.cn)
TMS320VC5509 DSP 内部有一个时钟电路。 该时钟电路由一个数字锁相环(DPLL)
和一个时钟模式寄存器(CLKMD)
组成, 如图 2-4 所示。在时钟模式寄存器的控制下, 数字锁相环能对外部输 入时钟进行分频、 倍频和锁相, 为 CPU 及其外围电路提供工作时钟。

DSP时钟发生器产生CPU时钟,并提供给CPU、外设和DSP内部的其他模块。如下图所示。CPU时钟也传递给一个时钟分频器,该分频器向CLKOUT引脚提供一个信号( CLKOUT )。CLKOUT的频率取决于系统寄存器SYSR的CLKDIV位。上图电路即下图中的DSP Clock Generator
。

上下两图的CLKOUT的命名要区分开。
PLL控制寄存器
介绍PLL控制寄存器(PLLCSR)
,详见课本。
时钟模式寄存器
介绍时钟模式寄存器(CLKMD)
,详见课本。
工作模式
在时钟模式寄存器中 PLLENABLE字段的 控制下 ,DPLL有两种工作模式。
- 若PLLENABLE =0, DPLL工作于旁路(BYPASS)模式。
- 若PLLENABLE =1, DPLL工作于锁定(LOCK)模式。
旁路模式下只能分频,锁定模式即能分频又能倍频。
在旁路模式中,DPLL只对输入时钟CLKIN作简单的分频,分频次数由BYPASSDIV字段确定。
- 若BYPASSDIV =00, 为一分频,即CLKOUT等千CLKIN。
- 若BYPASSDIV =01, 为二分频, 即CLKOUT等于CLKIN的 一 半。
- 若BYPASSDIV =1x, 为四分频,即CLKOUT等千CLKIN的 四分之一。
在锁定模式中, DPLL 锁相环对输入时钟 CKLIN进行跟踪锁定,输出的时钟频率由公式确定。
使用方法
DSP时钟发生器的工作状态(A-F)。时钟模式寄存器(CLKMD)
通过软件加载或通过DSP复位加载。如果写入CLKMD使PLL工作,则PLL开始其锁相序列(状态A)。如果写操作使PLL失效,时钟发生器进入其旁路模式(状态D)。

状态 | 描述 |
---|---|
A | 锁定相位。时钟发生器进入旁路模式,PLL(相位锁定环)将输出时钟信号的相位锁定到输入时钟信号的相位。一旦相位锁定并且输出信号达到由 CLKMD 的 PLL MULT 位和 PLL DIV 位定义的频率,时钟发生器进入其锁定模式(状态 B)。你可以通过写入 CLKMD 来重新配置时钟发生器。 |
B | 锁定模式。在锁定模式下,PLL 正在生成具有选定频率的输出信号。输出信号与输入信号相位锁定。如果 PLL 失去锁定并且 CLKMD 的 IOB 位为 1,时钟发生器将返回到旁路模式并重新获取锁定(状态 A);如果 IOB 位为 0,时钟发生器不会重新获取锁定。空闲指令可以将时钟发生器置于其空闲模式(状态 C)。要更改为旁路模式或以其他方式重新配置时钟发生器,你可以写入 CLKMD。 |
C | 空闲模式(从锁定模式进入)。空闲指令已将时钟发生器置于其空闲模式。如果正确退出空闲模式,时钟发生器将重新开始并重新获取相位锁定(状态 A)。重新获取锁定的方法取决于 CLKMD 的 lAl 位。 |
D | 旁路模式。PLL 被禁用,时钟发生器处于旁路模式。时钟发生器内的分频器产生一个由 CLKMD 的 BYPASS DIV 位定义频率的输出时钟信号。空闲指令可以将时钟发生器置于其空闲模式(状态 E)。要更改为锁定模式或以其他方式重新配置时钟发生器,你可以写入 CLKMD。 |
E | 空闲模式(从旁路模式进入)。空闲指令已将时钟发生器置于其空闲模式。如果正确退出空闲模式,时钟发生器将重新开始旁路模式。 |
省电状态、复位时和失所时需要注意的因素见课本总结,很简洁。
通用定时器 Timer
TMS320VC5503/5507/5509/5510 DSP Timers Reference Guide (Rev. C)
结构框图
MS320VC5509 DSP 片内有两个定时器, 即定时器 0 (Timer 0) 和定时器 1 (Timer 1), 可以用来定时或计数。 它的计数器会在每个时钟周期减1,当减到0时就产生一个输出信号。 该输出信号可用于中断 CPU 或触发 DMA 传输(称为定时器事件)。 由此可见, 定时器通常都要有时钟
、 控制寄存器
、 计数器
和定时器事件
等部分。

TMS320VC5509 的定时器结构如图所示。 首先是时钟部分, 可以采用内部的 CPU 时钟, 也可以采用来自输入/输出引脚 TIN/TOUT 的外部输入时钟, 因此增加了时钟选择电路。
其次, 为了能在定时器工作期间设定下一次定时的长度, 它将计数器分为两个, 一个用于定时器工作(递减方式), 一个用于 CPU 读/写(设置定时长度)。
再次, 在定时器事件部分, 可以产生三个输出信号, 一个是向 CPU 发出中断请求, 一个是向 DMA 控制器发出同步事件, 一个是通过 TIN/TOUT 引脚输出信号。
时钟部分
如上图所示, 定时器的工作时钟可以来自 DSP 内部的 CPU 时钟, 也可以来自从 TIN/ TOUT 引脚输入的外部时钟。 具体时钟源的选择和 TIN/TOUT 引脚的功能由控制寄存器 TCR 中的 FUNC 字段确定。
TMS320VC5509 的定时器有 4 种工作模式。
- 当 FUNC =00 时, TIN/TOUT 为
高阻态
, 时钟源为 CPU 时钟。 该模式为复位后的缺省模式。 - 当 FUNC = 01 时, TIN/TOUT 为
定时器输出
, 时钟源为 CPU 时钟。 此时, TIN/TOUT 作 为三个定时器事件中的一个, 可以输出时钟信号或脉冲信号。 - 当 FUNC = 10 时, TIN/TOUT 为
通用输出
, 时钟源为 CPU 时钟。 此时, TIN/TOUT 作为通用输出, 其电平由控制寄存器 TCR 中的 DATOUT 字段确定。 - 当 FUNC = 11 时, TIN/TOUT 为
外部时钟源输入
, 定时计数器将在其上升沿递减。
计数器部分
该定时器有两个计数器:一个4位预分频器计数器
和一个16位主计数器
。两个计数器每个都有一个计数寄存器和一个周期寄存器。在定时器操作期间,计数寄存器被减量。定时器可以通过复制关联周期寄存器的内容,自动重新加载每个计数寄存器。
计数器 | 寄存器 | 描述 |
---|---|---|
预分频计数器 | PSC | 预分频计数寄存器。定时器预分频寄存器(PRSC)的位9-6。 |
预分频计数器 | TDDR | 定时器分频寄存器(预分频周期寄存器)。PRSC的位3-0。 |
主计数器 | TIM | 主计数寄存器 |
主计数器 | PRD | 主周期寄存器 |

通用定时器的控制
介绍定时控制寄存器TCR
,详见课本概括的很详细全面。
-
重点·搞定例题和作业题
- 配置定时器
外部存储接口 EMIF
TMS320VC5503/5507/5509 DSP External Memory Interface (EMIF) Reference Guide (Rev . A) (ti.com)
概述
EMIF 结构框图
如图所示, TMS320VC5509 DSP 的外部存储器接口 EMIF 有 16 位的数据总线, 4 个片选输出信号, 2 个字节使能信号和多种控制信号, 能够提供多种存储器接口。

EMIF 提供的地址总线根据器件的不同封装形式
有所不同,如下表所示。

外部存储器映射(见图1 - 2)被划分为四个区域,称为芯片使能( Chip Enable,CE )空间
。CE0空间位于最低地址,CE3空间位于最高地址。每个CE空间最多可以包含4M字节。
CE3空间中的一些地址可以用来访问DSP内部的ROM。如下图1 - 2所示,通过改变CPU状态寄存器ST3 _ 55中的MPNMC位,可以在CE3空间和ROM之间切换这些地址。MPNMC和ST3 _ 55在TMS320C55x DSP CPU参考指南( SPRU371 )中描述。对于每个CE空间和ROM中的字节数,见设备专用数据手册。

详见下图,课本中的存储空间映射图更加详细直观。二者可以相互验证着记忆。

与外部存储器的接口方式
EMIF为两种类型的存储设备提供了无缝接口:
- 异步器件,包括ROM、Flash、异步SRAM存储器等。
- 同步DRAM ( SDRAM )存储器。
EMIF支持以下几种数据访问类型
:
- 32位程序指令访问为CPU取指令;
- 32位数据访问用于CPU或DMA控制器;
- 16位数据访问用于CPU或DMA控制器;
- 8位数据访问用于CPU或DMA控制器。
异步接口
- 接口方法(见spru670a 2-2)
支持16位和8位数据的异步访问,连接方法如下图所示。


其中, 各个引脚信号的功能如下。
-
D[15:0]:16 位的数据总线;
-
A[13:0] :14 位的地址总线;
-
BE[1: 0]: 低电平有效的字节选择信号, 用于指定要访问的字节位置;
-
CE: 低电平有效的外部存储空间片选信号, 用于指定要访问的外部空间;
-
ARDY: 外部存储器件就绪指示, 使 EMIF 可以和较慢的器件相连;
-
AOE: 低电平有效的外部存储器件输出使能信号;
-
AWE: 低电平有效的外部存储器件写使能信号;
-
ARE: 低电平有效的外部存储器件读使能信号。
- 异步接口时序
EMIF可编程参数如下:
参数 | 控制位 | 定义 |
---|---|---|
建立时间(Setup periods) | RDSETUP WRSETUP | 设置周期是在CPU时钟周期内,为设置地址、芯片使能(CE)和字节使能(BE)信号,在读取选通信号(ARE)或写入选通信号(AWE)下降之前所给的时间。对于异步读取操作,这也是在ARE下降之前输出使能信号(AOE)的设置周期。 |
选通时间(Strobe periods) | RDSTROBE WRSTROBE | 选通周期是CPU时钟周期内,读取或写入选通信号下降(激活)和上升(去激活)之间的时间。 |
保持时间(Hold periods) | RDHOLD WRHOLD | 保持周期是在CPU时钟周期内,读取或写入选通信号上升后,地址和字节使能线保持激活的时间。对于异步读取操作,这也是ARE上升后输出使能信号的保持周期。 |
延长保持时间(Extended hold periods) | RDEXHLD WREXHLD | 扩展保持周期是在以下情况下插入的额外CPU周期数:(a) EMIF必须在执行下一次访问之前切换到不同的CE空间,或(b) 下一次访问需要改变数据方向(例如,EMIF已完成读取访问,现在必须执行写入访问)。在此期间,所有芯片使能信号都是非激活状态。EMIF会自动在你编程的任何周期上增加1个周期。例如,如果WREXHLD = 0,扩展保持周期为1个周期。 |
超时值(Time-out value) | TIMOUT | 单一的超时值适用于读取操作和写入操作。在操作期间,内部计数器计算ARDY信号被采样为低(表示内存未准备好进行访问)的CPU时钟周期数。如果计数器达到超时值,EMIF会在总线错误状态寄存器中记录一个错误(参见第4-7页的4.4节)。如果CPU总线请求了内存访问,EMIF会向CPU发送一个总线错误中断请求。如果DMA控制器请求了内存访问,EMIF会向DMA控制器发送一个超时信号。DMA控制器可以忽略该信号或向CPU发送一个总线错误中断请求。总线错误中断是可屏蔽的;CPU根据中断是否正确启用来忽略它或处理它。注意:在TMS320VC5503/5507/5509A设备中,如果EMIF全局控制寄存器中的ARDYOFF = 1,则不采样ARDY,因此不会发生超时情况。 |
在异步读操作过程中, 写使能信号 (AWE)
置为高电平;在异步写操作过程中, 输出使能信号 (AOE)
和读使能信号 (ARE)
置为高电平。 异步读/写操作第一次访问存储器的建立时间不少于两个CPU周期, 随后访问存储器的建立时间不少于一个CPU周期。


Figure2 - 5、Figure2 - 6分别展示了在读/写操作期间使用ARDY延长选通周期的情况。
- 寄存器配置
介绍了全局控制寄存器(EGCR)
,全局复位寄存器(EMIRST)
,总线错误状态寄存器(EMIBE)
,片选控制寄存器CEx_1,2,3
,详见课本。
同步动态RAM
- SDRAM接口方式(见spru670a 3-8)
SDRAM 是一种高密度、 高速率的同步动态 RAM。 它按行和列的方式来组织存储阵列, 并 通过行列地址对数据进行读/写。 TMS320VC5509 DSP 的 EMIF 能支持容量为 64 Mb 或 128 Mb
的、 宽度为16 位
的 SDRAM。
以 EMIF 与一片 64 Mb 的 SDRAM 接口为例, 它们之间的连接方法如下图所示。

由于 EMIF 的每个片选的最大空间为 32 Mb
, 所以一片 64 Mb 的 SDRAM 就要占用两个片选空间。 但是只能使用开始两个或是最后两个, 即只能为CE0和CE1
或CE2和CE3
。 图中选择了 CE0和CE1, 但 SDRAM 只有一个片选CS, 所以用CE0与之相连,CE1悬空。
- 寄存器配置
与 SDRAM 接口有关的寄存器有 EGCR 、 EMIRST 、 EMIBE 、 CEx_l 、 SDC1、 SDPER 、 SDCNT 、 INIT、 SDC2。
其中,全局控制寄存器 (EGCR)
用于设置同步时钟频率
(MEMFREQ和 MEMCEN 字段);片选空间控制寄存器 1 也只有 MTYPE 字段与 SDRAM 有关, 即当 MTYPE = Ollb
时, 选择 SDRAM 为外部存储器件。 这里只介绍 SDRAM 接口专用的寄存器。
介绍了SDRAM控制寄存器(SDC1、SDC2)
,SDRAM 周期寄存器(SDPER)
和计数寄存器(SDCNT)
, SDRAM初始化寄存器(INIT)
,详见课本。
例题
- 画出硬件连接接口
- 编写代码
主机接口 EHPI
TMS320VC5503/5507/5509 DSP Host Port Interface (HPI)
EHPI 基本结构
TMS320VC5509 DSP有一个16位
数据宽度的主机接口EHPI, 主机通过EHPI可以直接访问DSP内部的DARAM存储器。
介绍EHPI的外部引脚地址/数据
、选通
、控制
和模式选择
介绍EHPI的内部寄存器地址寄存器(HPIA)
、数据寄存器(HPID)
和控制寄存器(HPIC)
复位对EHPI寄存器的影响
HPIC恢复默认值,HPIA和HPID没有被DSP初始化。
接口时序
非复用模式
和复用模式
。
非复用
模式下。HPID用于临时存放要通过EHPI传送的数据。如果是读操作,则HPID中装有在DSP存储区中读到的数据;如果是写操作则HPID中装有要写入DSP存储区的数据。通过配置控制寄存器HPIC可以向DSP发中断,并且可以控制DSP的复位。要访问HPIC必须使HCNTL0
信号为低。

复用模式,较为复杂略。
应用举例
DSP1 为主机,采用非复用模式于DSP2 通信,并由GPIO来选择要访问的 对象(HPIC或数据空间)。详见课本。
多通道缓冲串口 McBSP
TMS320VC5501/5502/5503/5507/5509/5510 DSP (McBSP (ti.com)
概述
详见课本。
基本结构

收发通道
时钟与帧同步
-
采样速率发生器SRG的输入参考时钟
-
采样速率发生器的输出时钟和帧同步
-
时钟信号的方向和极性
-
帧同步信号的方向和极性
-
同步
多通道选择
串口事件
工作模式
多通道缓冲模式
、SPI模式
、A_bis模式
、数字回环模式
、GPIO模式
、省电模式
收发格式与参数设置
详见课本。
异常处理
- 接收过速
- 接收帧同步错误
- 发送数据重写
- 发送寄存器空
- 发送帧同步错误
McBSP寄存器说明
-
收发通道寄存器
-
时钟和帧同步部分的寄存器
——串口控制寄存器(SPCR1|2
)、引脚控制寄存器(PCR
)、采样速率发生寄存器(SRGR1|2
)、收发控制寄存器(R(X)CR1|2
) -
多通道选择部分的寄存器
——多通道控制寄存器(MCR1|2
)、多通道使能寄存器
应用举例
利用 McBSPO 来发送一段数据, 要求如下:
(1)采用多通道缓冲模式。
(2) 发送时钟和帧同步由内部采样速率发生器驱动, 接收时钟和帧同步由外部信号源驱动。
(3) 发送时钟速率为 CPU 时钟速率的 114, 帧同步周期为 18 个 CLKG, 脉冲宽度为 2 个 CLKG 。
(4) 收发数据帧格式都是每帧 1 个阶段, 每阶段 l 个字, 字长 16 位, 不压扩, 1 位延迟。
(5) 采用查询发送标志 XRDY 和接收标志 RRDY 的方式进行收发。
通用输入输出口 GPIO
概述
由8 个相互独立的可编程引脚 (l00~107) 构成。GPIO 各个引脚的方向由寄存器 IODIR
设定, 各个引脚上的输入/输出电平由寄存器 IODATA
设定。
上电模式设定
自举模式(Boot Mode)
是一种在微处理器或数字信号处理器(DSP)启动时加载程序代码的方式。对于 TMS320VC5509 这样的 DSP,自举模式决定了芯片从何处获取初始化代码以及如何开始执行程序。它就像是一个引导过程,告诉处理器在开机或复位后应该去哪里寻找启动所需的软件指令。- 例如,想象一个计算机系统在开机时,
BIOS(基本输入输出系统)
就是一种自举程序,它负责初始化硬件设备,并从硬盘、U 盘或网络等存储介质中加载操作系统的引导程序,然后将控制权交给操作系统。在 DSP 中,自举模式起到类似的作用,不过加载的是 DSP特定的启动代码
。
其他GPIO
在 DSP 中, 还有每个 7 个McBSP
的引脚、 2 个定时器引脚 TIN/TOUT
和外部标志引脚 XF
都能用作 GPIO 。
直接存储访问控制器 DMA
TMS320VC5503/5507/5509/5510 Direct Memory Access(DMA (ti.com)
基本结构

它通过4个端口和6个通道与 D S P的1/0资源相连。 其内部通过32位宽的 DMA 总线互连。 能 够独立于CPU工作, 完成1/0资源间的数据传输, 而不影响CPU执行其他的事情, 类似于PC 机的后台处理。
- 以视频播放为例,在 PC 机中,当从
硬盘
读取视频数据并传输到显卡
的显存中进行播放时,DMA 控制器可以在后台负责数据传输
。CPU 可以同时处理其他任务
,如响应用户的鼠标点击操作、更新播放界面的进度条显示等。在 TMS320VC5509 DSP 中也是类似的原理,CPU 可以专注于复杂的数字信号处理算法
,而 DMA 控制器在后台默默地完成数据在不同 I/O 资源之间的传输
,从而提高了整个系统的效率和并行处理
能力。
此外它有一个EHPI辅助端口和EHPI辅助通道, 可以直接和主机相连, DMA 控制器的各个传输通道采用时分复用(TDM )的方式分享 DMA 总线。
- 在一个复杂的多设备系统中,EHPI 接口增强了系统的集成性。它允许主机作为一个中心控制单元,对多个基于 DMA 的设备进行统一管理。例如,在一个分布式的数据采集和处理系统中,主机可以通过 EHPI 接口
同时控制多个带有 DMA 控制器的 DSP
,协调它们的数据采集和传输任务。 - 在 DMA 控制器内部,有多个传输通道需要访问 DMA 总线来传输数据。采用时分复用的方式可以在
不增加总线数量
的情况下,让多个通道都能有效地利用总线资源
。例如,如果有 6 个传输通道,通过合理分配时间片,每个通道都有机会在一定时间间隔内使用 DMA 总线进行数据传输,这样就避免了通道之间为了争夺总线资源而产生冲突。
EHPI 通道
由DMA的全局控制寄存器DMA_GCR
中的EHPI PRIO
字段控制优先级
;
由DMA全局控制寄存器DMA_GCR中的EHPI EXCL
字段确定共享模式
和独占模式
。
DMA通道传输配置
DMA传输过程如下图所示,先从数据源读入数据,并将其放到通道的FIFO缓冲区
,然后再从FIFO缓冲区取出写到目的端口。

DMA控制器有两套寄存器:
配置寄存器
:主要功能是对 DMA 通道传输进行预先设定和参数配置。
工作寄存器
:主要用于反映和记录 DMA 通道在数据传输过程中的实时工作状态。
数据块、帧和单元
通道参数寄存器(DMA_CSDP
)、数据帧数寄存器(DMA_CFN
)、数据单元数量寄存器(DMA_CEN
)。
传输类型与数据打包
DMA通道支持的数据传输类型如下表:
端口名称 | 传输类型 | DMA总线宽度 |
---|---|---|
SRAM | 8、16或32位 | 32位 |
DRAM | 8、16或32位 | 32位 |
EMIF | 8、16、32位或4×32位的突发方式 | 32位 |
外设 | 16位 | 16位 |
EHPI | 16位 | 16位 |
DMA 总线宽度为 32 位, 最多能支待两个 16 位
的或一个 32 位
的数据传输, 当所传输的数据单元长度小于总线宽度时, DMA 传输效率降低。比如8位长数据单元的传输, 4 次才传 32 位。 数据打包
:将 4 个8位数据单元打包成一个 32 位的数据包, 则只需传递一次, 这样就能够提高数据传输效率。使用通道参数寄存器(DMA_CSDP)
中的DST(SRC)PACK
字段设定数据打包功能。
数据源和目的地址
DMA通道源起始地址寄存器(DMA_CSSA_L/U
)低16bit+高16bit,DMA通道目的起始地址寄存器(DMA_CDSA_L/U
)低16bit+高16bit。
DMA通道进行数据传输时地址的修改方式由DMA通道控制寄存器(DMA_CCR
),中的DST(SRC)AMODE
字段控制。
单次传输与多次传输
由DMA通道控制寄存器(DMA_CCR
)中的AUTOINIT
、ENDPROG
和REPEAT
字段控制。
DMA通道数据传输的启动
- DMA_CCR 的通道使能字段(
EN
)置为1立即启动传输 - 20个DMA同步事件(6个外部中断、2个定时器中断、12个McBSP事件(每个串口4个)),由DMA_CCR 的同步字段
SYNC
来控制。
此外还可以通过DMA_CCR中的FS
字段,指定这些同步事件时与数据帧
传输同步还是与数据单元
传输同步。
通道中断与状态
DMA 通道在传输过程中产生的各种状态都会把通道状态寄存器(DMA_CSR)
中相应的标志位置 1。同时,在通道中断控制寄存器 DMA_CICR
的控制下, 这些状态都能触发 DMA 通道中断, 使 CPU 能及时得到 DMA 传输的状态。
寄存器说明
详见课本。
应用举例
假定需要将位于SARAM中从字节地址2 0000h开始的32个16位的数据搬到DARAM中从字节地址00C0h开始的数据缓冲区, 要求使用DMA通道1,并由CPU直接启动, 在传完以后给CPU一个中断。
详见课本。
片内存储器与DSP自举
DA(Dual-Access)RAM
双存取 RAM (DARAM) 的字节地址范围是 00 0000h~00 FFFFh
, 分为 8 块, 每块 8 KB。每个周期内可以对同一块 DARAM 访间两次
, 支持8 、16或 32 位的访问, 可以用作程序空间, 也可以用作数据空间。
注意: 8 块 DARAM 中, 字节地址 00 0000h 到 00 00BFh 被 CPU 的存储映射寄存器 MMR
占 用, 位于 DARAM0 的开始部分。 编程时要注意不能使用这段地址。
SA(Single-Access)RAM
单存取 RAM (SARAM) 的字节地址范围是 01 0000h~04 FFFFh
, 分为 32 块, 每块 8KB。 每个周期只能对同一块 SARAM 访问一次
, 支待 8、16 或 32 位的访问, 可用作程序空间, 也可以用作数据空间。
ROM与DSP自举
TMS320VC5509 DSP片内 ROM的字节地址范围是FF 8000h~FF FFFFh
, 只有 1 块, 32 KB。 这一区域是否用作片内 ROM 由 ST3_55
寄存器的 MP/MC
字段决定。 它的值在复位时
由 GPIO[3: 1]
的值决定。
应用举例
详见课本。
参考资料:
TMS320C55X DSP 原理及应用/代少升等编著.–2版.–北京:高等教育出版社,2013.7
TMS320VC5509A 数据表、产品信息和支持 | 德州仪器 TI.com.cn
TMS320C55X DSP 原理及应用/汪春梅,孙洪波编著. — 4版. —北京:电子工业出版社,2014.5
转载请标明出处。
相关文章:
TMS320C55x DSP芯片结构和CPU外围电路
第2章 DSP芯片结构和CPU外围电路 文章目录 第2章 DSP芯片结构和CPU外围电路TMS320C55x处理器的特点TMS320c55x CPU单元指令缓冲(Instruction Buffer Unit) I单元程序流程(Program Flow Unit) P单元地址数据(Address-data Flow Unit) A单元数据计算(Data Computation Unit) D单元…...
【CC2530开发基础篇】继电器模块使用
一、前言 1.1 开发背景 本实验通过使用CC2530单片机控制继电器的吸合与断开,深入了解单片机GPIO的配置与应用。继电器作为一种常见的电气控制元件,广泛用于自动化系统中,用于控制大功率负载的开关操作。在本实验中,将通过GPIO口…...
3D 生成重建035-DiffRF直接生成nerf
3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF,用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型,并且容易出…...
安宝特分享 | AR技术助力医院总院与分院间的远程面诊
随着科技的迅猛发展,增强现实(AR)技术在各行各业的应用愈发广泛,特别是在医疗领域,其潜力和价值正在被不断挖掘。在现代医疗环境中,患者常常面临“看病难、看病远、看病急”等诸多挑战,而安宝特…...
【功能安全】硬件常用安全机制
目录 安全机制分类: ECC内存保护: 看门狗定时器WDT 看门狗的诊断覆盖率 程序流监控 软件自检<...
linux上qt打包(二)
sudo apt install git 新建一个文件夹 名为xiazai, chmod -R 777 xiazai cd xiazai 并进入这个文件夹,然后clone git clone https://github.com/probonopd/linuxdeployqt.git 此处可能要fanQiang才能下 cd linuxdeployqt文件夹 下载平台需要的…...
Vue3 左右2栏的宽度 比例resize
Vue3, 页面左右2栏布局,用vue-resizer.页面效果如下图。 安装 npm i vue-resizer引入 import { DragCol, DragRow, ResizeCol, ResizeRow, Resize } from vue-resizer<DragCol height"100%" width"100%" :leftPercent"15">…...
企业车辆管理系统(源码+数据库+报告)
一、项目介绍 352.基于SpringBoot的企业车辆管理系统,系统包含两种角色:管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术&a…...
LeetCode 1847.最近的房间:有序集合
【LetMeFly】1847.最近的房间:有序集合 力扣题目链接:https://leetcode.cn/problems/closest-room/ 一个酒店里有 n 个房间,这些房间用二维整数数组 rooms 表示,其中 rooms[i] [roomIdi, sizei] 表示有一个房间号为 roomIdi 的…...
C05S07-Tomcat服务架设
一、Tomcat 1. Tomcat概述 Tomcat也是一个Web应用程序,具有三大核心功能。 Java Servlet:Tomcat是一个Servlet容器,负责管理和执行Java Servlet、服务端的Java程序,处理客户端的HTTP请求和响应。Java Server:服务端…...
Vscode搭建C语言多文件开发环境
一、文章内容简介 本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件,以及vscode必备插件,最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多,建议大家在阅读时使用电脑阅读,按照目录…...
mac电脑可以使用的模拟器
BlueStacks Air 推荐-》亲测可用 BlueStacks Air https://www.bluestacks.com 支持macOS/Windows,刚新增了对Apple Silicon系列M芯片的支持 GameLoop https://www.gameloop.com/ 支持 macOS/Windows Genymotion https://www.genymotion.com/ 支持Android/macO…...
vertx idea快速使用
目录 1.官网下载项目 2.修改代码 2.1拷贝代码方式 为了能够快速使用,我另外创建一个新的maven项目,将下载项目的src文件和pom文件拷贝到新建的maven项目。 2.2删除.mvn方式 3.更新配置 4.配置application 5.idea启动项目 1.官网下载项目 从vert…...
selenium 在已打开浏览器上继续调试
关闭浏览器,终端执行如下指令,--user-data-dir换成自己的User Data路径 chrome.exe --remote-debugging-port9222 --user-data-dir"C:\Users\xxx\AppData\Local\Google\Chrome\User Data" 会打开浏览器,打开百度,如下状…...
RequestContextHolder 与 HttpServletRequest 的联系
1. 什么是 RequestContextHolder? RequestContextHolder 是 Spring 框架 提供的一个工具类,用于在当前线程中存储和获取与请求相关的上下文信息。它是基于 ThreadLocal 实现的,能够保证每个线程独立存储和访问请求信息。 与 HttpServletReq…...
力扣hot100——普通数组
53. 最大子数组和 class Solution { public:int maxSubArray(vector<int>& nums) {int n nums.size();int ans nums[0];int sum 0;for (int i 0; i < n; i) {sum nums[i];ans max(ans, sum);if (sum < 0) sum 0;}return ans;} }; 最大子数组和…...
本地部署大模型QPS推理测试
目录 1、测试环境1.1、显卡1.2、模型1.3、部署环境1.3.1、docker1.3.2、执行命令 2、测试问题2.1、20字左右问题2.2、50字左右问题2.3、100字左右问题 3、测试代码3.1、通用测试代码3.2、通用测试代码(仅供参考) 4、测试结果4.1、通用测试结果4.2、RAG测…...
内存、硬盘、DRAM、FLASH
内存 内存是计算机系统中用于临时存储和快速存取当前正在处理的数据和指令的组件,属于临时存储设备,它在计算机运行时用于存储活跃的程序和数据。内存的性能直接影响计算机的处理速度和响应能力。 内存的类型主要分为: DRAM(动态随…...
全景图转6面体图 全景图与6面体图互转
目录 图片转360度全景中心图 依赖项: 库的使用方法: 源代码: 全景图拆成6面体图: 全景图,转6面体,再转全景图: 图片转360度全景中心图 原图: 效果图: 依赖项: pip install py360convert pip install numpy==2.2 库的使用方法: https://g...
【psutil模块02】Python运维模块之系统进程管理方法
系统进程管理方法 获取当前系统的进程信息,包括进程的启动时间、查看或设置CPU亲和度、内存使用率、IO信息、socket连接、线程数等。 1.进程信息 psutil.pids()获取所有PID,使用psutil.Process()接收单个进程的PID,获取进程名、路径、状态、系统资源等…...
Java-08
类的抽象是将类的实现和使用分离, 而类的封装是将实现的细节封装起来并且对用户隐藏,用户只需会用就行。 类的合约指的是从类外可以访问的方法和数据域的集合以及与其这些成员如何行为的描述 isAlive()方法的返回值类型为布尔型(Boolean)。这个方法用于…...
四轴用的无刷电机到底是属于直流电机还是交流电机?
四轴用的无刷电机因其高效、稳定、体积小巧等特点,成为了广泛应用的动力系统之一。尽管其名称中包含“直流”二字,但无刷电机到底是属于直流电机还是交流电机,这一问题常常引发人们的探讨与困惑。 一、无刷电机的工作原理 首先,…...
Redis中的Hot key排查和解决思路
什么是Hot key Hot key其实就是被频繁访问的key,比普通的key访问量要高于十倍或者几十倍不等。例如: QPS集中在特定的Key:实例的总QPS(每秒查询率)为10,000,而其中一个Key的每秒访问量达到了7,000。带宽使…...
CMake 保姆级教程(上)
整理自 视频 【CMake 保姆级教程【C/C】】 https://www.bilibili.com/video/BV14s4y1g7Zj/?p5&share_sourcecopy_web&vd_source6eb8f46d194c5ef9f89d3331f623a9c3 1、cmake简介 源文件(.cpp / .c)要经过 工具链 1.1 工具链 1、预处理&#…...
C++类模板的应用
template <class T> class mylist{ public: // 这是一个链表的节点 struct Link{ T val; Link* next; } 增 :insert(T val) 在链表中创建新节点,节点上保存的数据为 val 删:remove(T val) 移除链表中数据为 val 的节点 改: operator[](…...
Ubuntu 18.04无有线图表且无法设置有线网络
问题背景: 今天在登陆自己的虚拟机Ubuntu系统的时候突然出现 有线连接无法连接的问题,有线连接的图标变为没有了,无法点击网络菜单的Setting模块选项。我的虚拟机有线网络连接方式是NAT方式。 没有如下有线连接图标 解决方法: …...
QoS分类和标记
https://zhuanlan.zhihu.com/p/160937314 1111111 分类和标记是识别每个数据包优先级的过程。 这是QoS控制的第一步,应在源主机附近完成。 分组通常通过其分组报头来分类。下图指定的规则仔细检查了数据包头 : 下表列出了分类标准: 普通二…...
企业内训|阅读行业产品运营实战训练营-某运营商数字娱乐公司
近日,TsingtaoAI公司为某运营商旗下数字娱乐公司组织的“阅读行业产品运营实战训练营”在杭州落下帷幕。此次训练营由TsingtaoAI资深互联网产品专家程靖主持。该公司的业务骨干——来自内容、市场、业务、产品与技术等跨部门核心岗位、拥有8-10年实战经验的中坚力量…...
杭州乘云联合信通院发布《云计算智能化可观测性能力成熟度模型》
原文地址:杭州乘云联合中国信通院等单位正式发布《云计算智能化可观测性能力成熟度模型》标准 2024年12月3日,由全球数字经济大会组委会主办、中国信通院承办的 2024全球数字经济大会 云AI计算创新发展大会(2024 Cloud AI Compute Ignite&…...
SimAI万卡集群模拟器,LLM大模型训练通信计算模拟
SimAI,是阿里巴巴构建的一个统一的模拟器,旨在大规模精确有效地模拟LLM训练过程。通过将训练框架、内核计算和集体通信库有选择地高保真集成到仿真过程中,SimAI在仿真中实现了高精度。 简单点来说,SimAI就是模拟,大模…...
Axure9设置画布固定
在使用AxureRP9设计原型时,如果遇到画布在拖动时变得难以控制,可以尝试在Windows系统中通过‘文件’>‘首选项’,或在Mac系统中通过‘AxureRP9’>‘偏好设置’进行设置,以稳定画布的行为。 现象 页面底层的画布࿰…...
window.getSelection() 获取划线内容并实现 dom 追随功能
功能:鼠标对一段文本中某些文字进行划线之后,需要在当前划线文本处出现一个功能按钮显示对划线内容进行操作,比如收藏、添加样本库等功能。 一、需要了解的鼠标事件对象属性 给 dom 元素注册鼠标事件之后,会有 event 属性&#…...
mybatis-plus超详细讲解
mybatis-plus (简化代码神器) 地址:https://mp.baomidou.com/ 目录 mybatis-plus 简介 特性 支持数据库 参与贡献 快速指南 1、创建数据库 mybatis_plus 2、导入相关的依赖 3、创建对应的文件夹 4、编写配置文件 5、编写代码 …...
浏览器可以直接请求 websocket
一、原生支持 浏览器原生支持 WebSocket 协议,这使得开发者可以直接在 JavaScript 代码中使用 WebSocket 来建立与服务器的双向通信通道。 const socket new WebSocket("ws://localhost:8080");socket.addEventListener("open", function (e…...
* 和 .* 的区别(MATLAB)
在 MATLAB 中,* 和 .* 都是用来进行乘法操作的运算符,但它们有不同的应用场景。我们将从数学和编程的角度详细解析这两者的区别,并且讲解 MATLAB 中 . 运算符的其他常见用法。 1. * 和 .* 的区别 *:矩阵乘法(线性代数…...
51c视觉~合集30
我自己的原文哦~ https://blog.51cto.com/whaosoft/12059371 #SaRA 修改一行代码就能实现高效微调!上海交大&腾讯开源:兼顾原始生成和下游任务 仅修改一行训练代码即可实现微调过程。 文章链接:https://arxiv.org/pdf/2409.06633 …...
JVM虚拟机总揽
为什么 Java 要在虚拟机里运行? 先说结论: 可以一次编译,在各个硬件平台如 Windows_x64、Linux_aarch64)都可以执行建立一个托管环境(Managed Runtime),这个托管环境能够代替我们处理一些代码…...
PCL点云库入门——PCL库可视化之PCLVisualizer类显示复杂点云信息等(持续更新)
1、PCLVisualizer类可视化 PCLVisualizer类作为PCL库可视化到的高级功能,不仅支持点云等数据的可视化,还提供了丰富的交互功能和自定义选项,如颜色调整、视角切换、标注添加等。用户可以通过PCLVisualizer类轻松实现复杂的数据分析和处理任务…...
Hugface国内镜像
问题: urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(hosthuggingface.co, port443): Max retries exceeded with url: /Salesforce/blip-image-captioning-base/resolve/main/preprocessor_config.json (Caused by ProxyError(Cannot connect to proxy.,…...
Vue3 重置ref或者reactive属性值
需要重新定义一个对象绑定复制给原对象 。 实例代码: const data () > ({groupId: ,groupCode: ,groupName: ,groupType: ,});const formData ref(data());//重置对象值 const reset()>{Object.assign(formData, data()…...
前端的Python入门指南(完):错误和异常处理策略及最佳实践
《前端的 Python 入门指南》系列文章: (一):常用语法和关键字对比(二):函数的定义、参数、作用域对比(三):数据类型对比 - 彻底的一切皆对象实现和包装对象异…...
c++:std::map下标运算符的不合理使用
这是我分析之前遗留代码时发现的一个隐藏点;不过我并不认为这样使用std::map是合理的。 看看简化后的代码,v1、v2的值应该是多少呢? #include <map>std::map<int, int> cm[2];int get_cm_value(int device, int ctrl) { auto …...
音频数据采样入门详解 - 给Python初学者的简单解释
音频数据采样入门详解 - 给Python初学者的简单解释 声音是如何变成数字的?什么是采样率?为什么要懂这个?Python小例子总结 大家好!今天我们来聊一个有趣的话题:音频数据是如何在计算机中处理的。让我用最简单的方式来解…...
vue el-dialog实现可拖拉
el-dialog实现拖拉,每次点击度居中显示,以下贴出代码具体实现,我是可以正常拖拉并且每次度显示在中间,效果还可以,需要的可以丢上去跑跑 组件部分: <el-dialog:visible.sync"dialogVisible"…...
iOS在项目中设置 Dev、Staging 和 Prod 三个不同的环境
在 Objective-C 项目中设置 Dev、Staging 和 Prod 三个不同的环境,并为每个环境使用不同的 Bundle ID,可以通过以下步骤实现: 步骤 1: 创建不同的 Build Configuration 打开项目: 启动 Xcode 并打开你的项目。 选择项目文件&…...
开源实时多模态AI Agent,搭载Gemini多模态API(在线体验)
今天发现一个惊艳的开源项目,利用多模态大模型API进行多智能体交互。支持RAG、搜索等。 TEN Agent 是一款由 TEN 提供支持的对话式 AI,集成了 Gemini 2.0 Multimodal Live API、OpenAI Realtime API、RTC 等。它提供实时的看、听和说功能࿰…...
【持续更新】Github实用命令
Intro 最近高强度使用github,遂小计于此作为备忘。 Basic github是一个代码管理软件,能够track文件变动并且管理版本,是当代coding必不可少的工具。当你安装好github在本地以后,你可以通过以下命令初始化当前文件夹(…...
B树的性质和插入过程
性质 平衡性:所有叶子节点都在同一层多路:m 阶 B 树 最多: m 个分支,m-1 个元素 最少: 根节点 2 个分支 1个元素 其他节点 ⌈ m / 2 ⌉ \lceil m/2\rceil ⌈m/2⌉ 个分支 ⌈ m / 2 ⌉ \lceil m/2\rceil ⌈m/2⌉ −…...
分布式链路追踪-02-Dapper 论文介绍
开源项目 auto-log 自动日志输出 概要 现代互联网服务通常被实现为复杂的、大规模的分布式系统。 这些应用程序是由软件模块的集合构建的,这些模块可能由不同的团队使用不同的编程语言开发,并且可以跨越多个物理设施的数千台机器。 在这样的环境中&…...
python:用 sklearn 构建线性回归模型,并评价
编写 test_sklearn_6.py 如下 # -*- coding: utf-8 -*- """ 使用 sklearn 估计器构建线性回归模型 """ import numpy as np import pandas as pd import matplotlib.pyplot as plt from matplotlib import rcParamsfrom sklearn import dataset…...