DSP应用技术(第二章)

本文深入介绍了TMS320C2000系列的F28335处理器,包括其32位CPU架构、浮点单元、存储单元和丰富的外设。强调了其针对实时控制的优化,如高级驱动和高精度传感。同时,详细阐述了F28335的中断系统,包括中断分类、中断向量表和PIE模块,以及中断服务程序的工作原理。此外,还提及了外部接口模块XINTF在存储器扩展中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TMS320C2000处理器

2.1 TMS320C2000概述

C2000:32位微控制器,针对处理、传感和驱动进行优化以提高闭环性能的 32 位微控制器

  • 专为实时控制而构建。
  • 强大的处理能力
  • 高级驱动
  • 高精度传感
  • 丰富的连接(用于整合系统的连接)
    从串行接口(如 I2C、SPI、UART,甚至 McBSP)到协议(如 CAN 和 LIN)再到标准(如 USB 和以太网),C2000实时控制微控制器提供各种连接选项使应用彼此同步。

2.2 TMS320F28335内部结构

TMS320C2000系列DSP芯片采用改进的哈佛结构,其程序总线存储器和数据存储器分别独立,有各自的总线结构,并允许互访。
TMS320C2000系列DSP芯片有3个主要组成部分:中央处理单元、存储器、片内外设。同一系列DSP都采用相同的中央处理单元、总线结构和指令集。但片内存储器以及外设有所区别。

2.2.1 F28335 DSP的内核

CPU介绍

基于F28335 CPU + FPU 的控制器和 TI 现有的 F28x 具有相同的32位定点 CPU架构(减少对存储空间的占用),同时支持16位于32位的指令操作(加快指令的执行时间);

此外,F28335 的 CPU 还包括一个单精度(32位)的IEEE 754 浮点单元(FPU)

F28335 的 CPU 还支持一种叫原子指令的读/写简化机制,可以在单个时钟周期内完成“读取-修改-写回”的操作。

原子指令是小的、通用的不可中断指令
原子指令可以更快地完成读/写操作,并具有更小的代码规模。

总线结构

F28335 的总线分为内存总线和外设总线两种。
多总线被用于在内存和外设以及CPU之间传输数据。

类型组成
程序读总线22位地址,32位数据
数据读总线32位地址,32位数据
数据写总线32位地址,32位数据

流水线机制

即处理流程分为若干步骤,而且整个数据处理是“单流向”的,即没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,可以提高系统的工作频率。

F28335 还使用一个特殊的8级保护管道,最大限度地提高吞吐量。这里有一种特殊的保护机制,即不允许对同一位置同时进行读/写,以避免时序的冲突。

FPU流水线

F28335 附带了专门的浮点处理引擎(Floating Point Unit,FPU),可以理解为一个协处理器。
两个并行的处理器(CPU + FPU),在它们直接之间就涉及数据的交换,且整数与浮点格式之间的转换需要1个延时槽,其余的指令,例如load、store、max、min、absolute等,则不需要延时槽。

其基本特性为:
(1)浮点运算是没有流水线保护的,例如,FPU 可以再前一条指令写操作结束前就发出一条新的指令;(这意味着一些与其有关的指令需要使用延时槽来等待操作完成)
(2)汇编器检测流水线的冲突;
(3)编译器将阻止流水线的冲突;
(4)在浮点流水线的延时槽中防止非冲突指令可以提高性能。

2.2.2 F28335 的存储单元

F28335 的存储空间被划分为程序存储与数据存储,其中一些存储器即可用于存储程序,也可用于存储数据。一般而言,F28335 DSP上的存储介质有以下几种:

(1)Flash 存储器
(2)单周期访问 RAM
(3)OTP(One Time Programmable,一次编程)
(4)片外存储
(5)Boot ROM

代码安全模块(CSM)

使用 CSM 的主要目的就是防止逆向工程,并保护知识产权,即 IP。
实际的 CSM 是位于 Flash 中的一段长度为 128bit 的存储空间。
密码长度可由用户定义,长度为128位,即2128=3.4×1038种可能的密码。
在烧写 Flash 时,一定要注意 CSM 位所烧写的内容,一旦忘记所烧写的密码,则芯片无法再次烧写。

2.2.3 片上外设

外设是 DSP 芯片上除了 CPU、存储单元之外的,可以实现一些与外部信号进行交互的单元。

2.3 F28335特点

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 F28335 系统时钟

内核时钟(SYSCLKOUT)
外设时钟:

  • 低速时钟(LSPCLK)
  • 高速时钟(HSPCLK)

2.4.1 内核时钟

片上振荡器 OSC 及锁相环模块 PLL 共同决定了器件的时钟信号。

在这里插入图片描述
F28335 系列 DSP 具有三种时钟方案:

  • 直接由外部引脚XCLKIN提供时钟信号,XCLKIN 为 3.3V时钟脉冲输入
  • 片内振荡器产生需要的时钟信号(使用X1、X2引脚)External Crystal or Resonator 为外部晶振

PLL 工作模式

如上图所示,OSCCLK 由内部振荡器或外部电路直接提供,而 OSCCLK 之后的时钟信号处理由 PLL 模块进行控制,PLL 模块具有 3 中工作模式,由寄存器 PLLSTS[DIVSEL] 位决定,如下表所示。

在这里插入图片描述
写 PLLCR 寄存器前,PLLSTS[DIVSEL] 必须为0。

PLL 配置流程:

在这里插入图片描述

2.4.2 外设时钟

在 F28335 系列 DSP 中,几乎每一个外设都需要相应时钟信号,这些时钟信号都是对系统时钟信号 SYSCLKOUT 处理后产生的。

2.5 中断控制

为了及时响应、处理外界的异步事件,中断要求DSP暂停当前的工作,转而对外界异步事件作出处理,完成以后再继续当前的工作。

2.5.1 中断分类
在这里插入图片描述
TMS320C2000 管理中断有3个主要阶段:
在这里插入图片描述
2.5.2 外设中断扩展模块 PIE

F28335 系列 CPU 可直接处理1路非屏蔽(NMI)以及16路可屏蔽中断(INT1~INT14、RTOSINT、DLOGINT)。

F28335 系列 DSP 的 CPU 无法直接处理所有的中断请求,因此通常使用外设中断扩展模块(PIE)来仲裁外设或外部引脚中断请求信号,并将仲裁结果送入到 CPU 进行处理。

PIE模块概述

PIE 模块最多可接受96路中断请求信号,这96路中断请求信号被分为12组,每组有8路,每组将产生一路复用的中断请求信号,共12路,这12路复用的中断请求信号连接到CPU的中断输入口INT1~INT12 上。96路中断请求信号中的每一路都具有独立的中断向量,这些向量被存储在特定的 RAM 中,用户可根据需要修改。CPU 需要9个时钟周期访问中断向量地址并保存重要的CPU寄存器,因此 CPU 可快速响应中断事件。中断优先级可通过硬件和软件共同控制,每路中断请求信号都可以在PIE模块中使能或静止。

中断请求信号分为外设级、PIE级和CPU级3种。

在这里插入图片描述

  • 外设级中断:
    片内外设的各个中断信号都具有自己的中断标志寄存器和中断使能寄存器。
    当外设有中断事件发生时,该外设相关寄存器的中断标志位(IF)将置1。如果该外设相关寄存器中的中断使能位(IE)也为1,那么此次中断事件将向 PIE 发出中断请求信号;
    如果其中断使能位为0,中断标志位IF将保持为1,直到被软件清零。如果之后IE被被置1,此时IF如果仍未1,也将会向 PIE 发出中断请求信号。
  • PIE级
    PIE单元将所有96个中断分为12个组,每个组负责8个外设或引脚中断。
    每个PIE单元都有一个中断标志寄存器PIEIFRx和中断使能寄存器PIEIERx,还有一个中断应答寄存器PIEACKx。
  • CPU级
    PIE将中断请求发到CPU后,CPU中断标志寄存器IFR中对应INTx将被置位。

2.5.3 中断向量表

中断矢量表,又称为中断地址,表明中断发生后,若DSP响应中断,指令执行的地址。

在这里插入图片描述
中断向量表映射地址

中断向量列表用来存放中断服务函数的地址,F28335 系列 DSP 的中断向量列表可映射到4个不同的存储单元,由以下控制位决定:

  • VMAP:器件复位后此位为1。通过写 ST1 寄存器或 SETC/CLRC VMAP 指令可改变此位的值。正常操作下保留此位为1。
  • M0M1MAP:器件复位后此位为1。通过写 ST1 寄存器或 SETC/CLRC M0M1MAP 指令可改变此位的值。正常操作下保留此位为1。
  • ENPIE:器件复位后此位为0(即 PIE 禁止工作)。通过写 PIECTRL 寄存器可改变此位的值。

在这里插入图片描述
(通常情况下仅使用 PIE 向量)

上电复位后中断向量列表映射为 BROM 向量,在复位和引导完成后,应由用户代码初始化 PIE 向量列表,将向量列表映射为 PIE 向量。下图为器件复位后中断向量列表的配置方法:
在这里插入图片描述
中断向量列表:

PIE 向量列表占用 256×16bit 的SARAM,当 PIE 模块未使用时,此部分 SARAM 可当作通用的 RAM 单元。 PIE 中断向量列表中的内容在复位后是未定义的。 CPU默认从 INT1 到 INT12 具有从高到低的中断优先级顺序。中断优先级体现在中断执行时向量的提取顺序上。

2.5.4 PIE 设置寄存器

寄存器名称寄存器说明
PIECTRLPIE 控制寄存器
PIEACKPIE 中断确认寄存器
PIEIERnPIE 组n使能寄存器
PIEIFRnPIE 组n标志寄存器
  • PIE 控制寄存器 PIECTRL
    PIECTRL 寄存器各位信息如下表所示:

在这里插入图片描述

注:value after reset 为复位后的值

字段取值及功能描述
15~1PIEVECT用于保存 PIE 中断向量的地址,中断向量地址的最低位被忽略,仅保存地址的15~1位。通过读取中断向量地址,可判断 CPU 在响应哪个中断。
0ENPIEPIE 向量列表使能位。0:PIE 模块禁用,向量列表从 Boot ROM 中的 CPU 向量列表提取向量,即使被禁用,PIE 模块的所有寄存器仍可被访问; 1:除 Reset 复位向量外的所有向量都从 PIE 向量列表中提取。
  • PIE 中断确认寄存器 PIEACK
    PIEACK 寄存器各位信息如下表所示:
    在这里插入图片描述PIEACK 功能描述:
字段取值及功能描述
15~12保留保留
11~0PIEACK每位对应一个 PIE 组,bit0对应PIE组1(INT1),以此类推,bit11对应PIE组12(INT12)。0:读返回0,表明此时对应的PIE组可以向CPU发送中断请求;写0无反应; 1:读返回1,表明对应的PIE组向CPU发送过中断请求,此时组内的其他中断请求被阻塞;写1将对本位清零,重新允许对应的PIE组再次向CPU发送中断请求。
  • PIE组使能寄存器 PIEIERn
    PIEIERn 寄存器各位信息如下表所示:
    在这里插入图片描述
    PIEIERn 功能描述:
字段取值及功能描述
15~8保留保留
7~0INTn.8~INTn.1每位用于使能组内的中断。0:禁止中断;1:使能中断
  • PIE组标志寄存器 PIEIFRn
    PIEIFRn 寄存器各位信息如下表所示:
    在这里插入图片描述
    PIEIFRn 功能描述:
字段取值及功能描述
15~8保留保留
7~0INTn.8~INTn.1每位用于指示其对应的中断请求是否有效,与CPU的中断标志寄存器类似,一旦中断请求信号到达,相应的位置1。如果中断服务函数被执行,此位自动清零,同时也可通过向该位写0来清零。硬件对 PIEIFR 寄存器的访问优先级比CPU高。

2.5.5 CPU 中断设置寄存器

CPU级中断控制相关寄存器主要有标志位寄存器 IFR 与中断使能寄存器 IER 两个,用于控制CPU级的中断响应(INT1~INT14),当 PIE 模块使能时,PIE模块将为CPU提供12路中断请求信号(INT1~INT12)。

  • 中断标志寄存器IFR
    IFR 寄存器各位信息如下表所示:
    在这里插入图片描述
    IFR 功能描述:
字段取值及功能描述
15RTOSINT实时操作系统(RTOS)中断标志位。0:无挂起的RTOS中断;1:至少有一个RTOS中断被挂起
14DLOGINT数据记录中断。0:无挂起的DLOGINT中断;1:至少有一个DLOGINT中断被挂起
13~0INT14~INT1用于表示CPU级的中断状态。0:INTx通道上无中断请求;1:INTx通道上至少有一个中断请求
  • 中断标志寄存器IER
    IER 寄存器各位信息如下表所示:
    在这里插入图片描述
    IER 功能描述:
字段取值及功能描述
15RTOSINT实时操作系统(RTOS)中断标志位。0:禁止RTOS中断;1:使能RTOS中断
14DLOGINT数据记录中断使能控制位。0:禁止DLOGINT中断;1:使能DLOGINT中断
13~0INT14~INT1CPU级的中断使能控制位。0:禁止INTx通道上的中断请求;1:使能INTx通道上的中断请求
  • 全局中断使能位INTM
    在这里插入图片描述

2.5.6 中断服务程序ISR

中断服务程序是用户编写的,是对中断事件做出响应的子程序。
CPU接收到中断请求并响应之后,就根据中断矢量内容转移到相应的中断服务程序ISR中。
ISR在为中断所要求的任务服务之前需要保存和恢复寄存器的值,并且还要管理中断嵌套

2.6 外部接口模块XINTF

EXINTF是一种异步接口,主要用于存储器扩展。

XINTF映射到3个固定的存储器映射区域,下表对XINTF模块的所有信号进行了详细说明。

信号名称输入/输出特性功能描述
XD[31:0]I/O/Z双向32位数据总线,16位模式下只使用XD[15:0]
XA[19:1]O/Z地址总线,地址在XCLKOUT的上升沿被锁存到地址总线上,并保持下一次访问操作
XA0/非XWE1O/Z在16位数据总线模式下,作为地址线的最低位(XA0),32位数据总线模式下,作为低字节的写操作的选通线非XWE1
CLKOUTO/Z输出时钟
非XWE0O/Z写操作的选通线,低电平有效
非XRDO/Z读操作的选通线,低电平有效
XR/非WO/Z读/写信号线,高电平时,表现读操作正在进行;低电平时,表明写操作正在进行
非XZCS0/6/7O区域0/6/7的片选信号线
XREADYI当为高电平时,表明外部设备已完成此次访问的相关操作;XINTF可结束此次访问
非XHOLDI当为低电平时,表明外部设备请求XINTF释放其总线
非HOLDAO/Z当XINTF响应非XHOLD请求后,将非XHOLDA驱动到低电平

XINTF每个区域都有一个片选信号线,当对一个区域进行读/写访问时要将相应的片选信号线驱动到有效电平。

有些器件将两个区域的片选信号线在芯片内部通过与操作互连在一起,从而产生一个共用的信号线,在这种情况下,同一存储器可与2个XINTF区域相连,或与区分这2个XINTF区域的硬件逻辑电路相连。

XINTF的3个存储区域中的任何一个都可通过编程设定独立的等待时间、选通信号建立时间及保持时间,且每个区域的读操作与写操作可配置不同的等待时间、选通信号建立时间及保持时间。

另外,可通过使用XREADY信号线延长等待时间。XINTF接口的这些特性允许访问不同速率的外部存储器或设备。

通过XTIMINGx寄存器可配置每个区域的等待时间及选通信号的建立与保持时间。XINTF接口的访问时序是以内部时钟XTIMCLK为基准的,XTIMCLK信号频率可配置为与系统时钟SYSCLKOUT的频率相同或为SYSCLKOUT频率的一半。

在这里插入图片描述
可以看上图的3个区域的地址空间,区域0的外部地址范围是0X00000-0X00FFF,如果要对区域0的第一个存储单元进行操作,需要将0X00000送到地址线,并将片选信号XZCS0拉低,0X0000 4000是DSP28335的内部地址,0X00000-0X00FFF是信号的地址,意思是程序里面写0X0000 4000这个地址,然后硬件上会把XZCS0拉低,XA(19:0)的值是0X00000,这个就是统一寻址吧。SRAM用的是区域6。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值