轻松玩转DSP——基于TMS320F2833x(txt+pdf+epub+mobi电子书下载)


发布时间:2021-03-08 18:00:06

点击下载

作者:马骏杰,尹艳浩,王旭东

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

轻松玩转DSP——基于TMS320F2833x

轻松玩转DSP——基于TMS320F2833x试读:

前言

TMS320F2833x属于TI公司C2000系列的高端产品,其处理能力强大,片上外设丰富,在数字信号控制领域中得到了广泛应用。TMS320F2833x问世多年,不少读者对其基本操作已有初步了解,却经常对开发过程中所遇到的实际问题束手无策。本书旨在系统解析DSP内部模块之间的耦合关系,详细阐述DSP操作的盲点及误区,广泛结合应用问题展开讨论,并给出作者对于这款DSP的独特理解。

全书分为两部分。第一部分为DSP片上基础配置单元,系统介绍了F2833x硬件架构和常用模块的硬件设计方法,软件架构及DSP初始化过程,CCS6.0的应用及定点浮点,汇编及C语言的混合编程,控2制类外设ePWM、eCAP、eQEP、ADC和通信类外设SCI、IC、SPI、CAN的应用。每个模块均配有微视频(每段仅3~5min),读者可以扫描书中对应的二维码观看相应内容。此外,所有内容均结合应用实例,所有代码都标注了详细的中文注释,为读者快速掌握这款MCU的特点及开发方法提供便利。第二部分为应用部分,书中以更直观的方式阐述了F2833x程序引导流程、FLASH编程方法和注意事项、数字电源建模的方法及DSP设计、数字锁相环的原理及应用、FIR和IIR的原理及编程、永磁同步电动机有(无)速度环控制和静止无功发生器原理及设计,按照理论分析—数学建模—仿真实现—源代码示例的过程来介绍DSP的应用。本书给出的示例具有很强的典型性,相关算法均在真实产品中得到体现,为读者扩展思维提供帮助。

本书由哈尔滨理工大学马骏杰编著、统稿,尹艳浩负责书中视频的录制、例程的调试及公众账号的维护,高俊山教授完善了第8、10章内容,谢金宝、张思艳、孙轶男老师共同完善了第11章内容,扬州大学蒋伟老师完善了第12章内容,哈尔滨理工大学王旭东教授审阅了全稿,高晗璎、金宁治、刘金凤、耿新老师提供了宝贵意见,王振东、王光、刘正宇、高英鑫同学协助完成了书中图表的编辑工作。

本书得到广东省重大科技专项项目 (2015B010118003、2016B010135001)、山东省高等学校科技计划项目 (J17KB136)、2017年国家级大学生创新创业训练计划项目 (201710214018) 的资助,受到汽车电子功率驱动与系统集成教育部工程研发中心的支持。本书的编写过程中,参阅了一些优秀的图书和文献资料,在此对这些作品的作者表示感谢。感谢机械工业出版社工作人员为本书出版所做的大量工作,感谢家人的默默支持,并将此书献给宝贝 “子越”:愿你永远拥有一双爱笑的眼睛,永远拥抱一个自由的灵魂。(作者微信公众账号)

由于时间仓促,书中的疏漏与不当之处在所难免,恳请广大读者批评、指正。

本书配套DSP开发板,读者可对所有DSP外设资源进行应用和开发。此外,开发板带有三相全控桥式逆变电路及三相LC滤波电路,可方便实现逆变算法实验和电机控制算法实验,所有软硬件资料随板赠送,有需要的读者可以通过下方二维码进店购买。(DSP开发板购买链接)编者第1章 TMS320F2833x的硬件架构

TMS320F2833x(简称F2833x)硬件框图如图1.1所示,由如下几部分组成:内部及外部总线系统、中央处理器(CPU,简称为C28x)、内部存储器、控制外设、通信端口、直接内存存取控制器(简称为DMA)、中断管理单元、CPU核定时器及实时仿真接口。图1.1 F2833x的内部结构图1.1 系统结构1.1.1 总线系统

F2833x配置了独立的程序总线(Program Bus)和数据总线(Data Bus),使CPU可在单周期内从内存读取2个操作数,也就是人们所熟知的哈佛结构。由于F2833x取操作数不但能从数据存储器读取,也要能从程序存储器读取,所以TI公司采用的是如图1.2所示的改进的哈佛结构(Modified Harvard-Architecture)。

该结构包含:程序总线(22位的程序地址总线PAB、32位的程序数据总线PRDB);数据读总线(32位的数据读地址总线DRAB、32位的数据读数据总线DRDB);数据写总线(32位的数据写数据总线DWDB、32位的数据写地址总线DWAB)。图1.2 F2833x的总线结构

除数据总线和地址总线外,F2833x存在第3类总线,称为寄存器总线。该总线与CPU内部所有的单元相连,允许在这种并行机制下进行快速的数据交互。

此外,DMA控制器通过DMA总线可独立于CPU操作F2833x某些特定的硬件单元,极大地提升CPU的数据吞吐率。

细心的读者可以发现,在图1.1的左侧存在外设连接接口(XINTF),通过外部数据总线32位(D31~D0)和地址总线20位(A19~A0)访问外部存储单元。注意,这种外部访问不是同步的,就2个32位操作数而言,内部访问只需要1个时钟周期而外部访问需要花费一倍的时间,因而在访问外部较慢的存储器时,无须考虑额外的等待时间。1.1.2 中央处理器单元CPU

F2833x具有强大的数字信号处理(DSP)能力又具有微控制器(MCU)的功能。在其诞生之前,执行复杂控制算法的常见方法是VC33 DSP负责运算,LF2407A或者F2812等定点DSP负责控制,现在用一片F2833x来实现还绰绰有余。F2833x存在 32×32位硬件乘法器和64位处理能力的功能,使F2833x可有效处理更复杂的数值解析问题。

此外,F2833x的CPU还支持一种叫“原子指令”的读写简化机制(Atomics Read/Modify/Write)。原子指令是小的、通用的不可中断指令。原子指令可以更快地完成读写操作,并具有更小的代码规模。而采用常规的非原子指令,占用内存多且执行时间长,两种情况的比较如图1.3所示。图1.3 非原子操作与原子操作的比较a) 常规的非原子操作 b)读-修改-写原子操作1.1.3 数学运算单元

F2833x的运算执行单元如图1.4所示。图1.4 F2833x的运算执行单元

1.F2833x的乘法器

乘法器可执行32位×32位或16位×16位乘法,以及双16位×16位乘法。

2.F2833x的ALU

ALU的基本功能是完成算术运算和逻辑操作。这些包括:32位加法运算;32位减法运算;布尔逻辑操作;位操作(位测试、移位和循环移位)。

ALU的输入输出:一个操作数来自ACC输出,另一个操作数由指令选择,可来自输入移位器、乘积移位器或直接来自乘法器。ALU的输出直接送到ACC,然后可以重新作为输入或经过输出移位器送到数据存储器。

3.F2833x的ACC

累加器是32位,用于存储ALU结果,它不但可分为AH(高16位)和AL(低16位),还可进一步分成4个8位的单元(AH.MSB、AH.LSB、AL.MSB和AL.LSB);在ACC中可完成移位和循环移位的位操作,以实现数据的定标及逻辑位的测试。

4.F2833x的移位器

移位器能够快速完成移位操作。F2833x的移位操作主要用于数据的对齐和放缩,以避免发生上溢和下溢;还用于定点数与浮点数间的转换。DSP中的移位器要求在一个周期内完成数据移动指定的位数。

32位输入定标移位器是把来自存储器的16位数据与32位的ALU对齐,可以对来自ACC的数据进行放缩;32位的乘积移位器可以把补码乘法产生的额外符号位去除,可以通过移位防止累加器溢出,乘积移位模式由状态寄存器ST1中的乘积移位模式位(PM)的设置决定;累加器输出移位器用于完成数据的储前处理。1.1.4 F2833x寄存器组

F2833x的寄存器组由辅助寄存器算术单元(ARAU)和一些寄存器组成。

1.F2833x的ARAU

F2833x设置有一个与ALU无关的算术单元ARAU,其作用是与ALU中进行的操作并行地实现对8个辅助寄存器(XAR0~XAR7)的算术运算,从而使8个辅助寄存器完成灵活高效的间接寻址功能,如图1.5所示。图1.5 F2833x的ARAU结构图

指令执行时,当前XARn的内容用作访问数据存储器的地址,如果是从数据存储器中读数据,ARAU就把这个地址送到数据读地址总线(DRAB);如果是向数据存储器中写数据,ARAU就把这个地址送到数据写地址总线(DWAB)。ARAU能够对XARn进行加1、减1及加减某一常数等运算,以产生新的地址。辅助寄存器还可用作通用寄存器、暂存单元或软件计数器。

2.F2833x的CPU寄存器

1)与运算器相关的寄存器。

① 被乘数寄存器XT(32位):XT可以分成两个16位的寄存器T和TL。

② 乘积寄存器P(32位):P可以分成两个16位的寄存器PH和PL。

③ 累加器ACC(32位):存放大部分算数逻辑运算的结果,以32位、16位及8位的方式访问,对累加器的操作影响状态寄存器ST0的相关状态位。

2)辅助寄存器XAR0~XRA7(8个,32位),常用于间接寻址。

3)与中断相关的寄存器,包括中断允许寄存器IER、中断标志寄存器IFR和调试中断允许寄存器DBGIER,它们的定义及功能在中断相关章节叙述。

4)状态寄存器:ST0和ST1,它们控制DSP的工作模式并反映DSP的运行状态。状态寄存器ST0、ST1各位的含义分别见表1.1和表1.2。表1.1 状态寄存器ST0各位的含义表1.2 状态寄存器ST1各位的含义(续)

5)指针类寄存器。

① 程序计数器PC(22位)用来存放CPU正在操作指令的地址,复位值为0x3F FFC0。

② 返回PC指针寄存器RPC(22位)用于加速调用返回过程。

③ 数据页指针DP(16位)用于存放数据存储器的页号(每页64个地址),用于直接寻址。

④ 堆栈指针SP(16位),其生长方向为从低地址到高地址,复位值为 0400H。进行32位数读写,并约定偶地址访问(例:SP为0083H,32位读从0082H开始)。

6)与浮点运算相关的寄存器。

① 浮点结果寄存器8个:R0H~R7H。

② 浮点状态寄存器STF。

③ 重复块寄存器RB。

F2833x的CPU寄存器分布如图1.6所示。图1.6 F2833x的CPU寄存器1.2 存储器配置

F2833x具有34KW的SARAM存储器、256KW的FLASH存储器、1KW的OTP ROM存储器和8KW的Boot ROM存储器,配置如图1.7所示。存储空间分成两块:片外存储空间(3个XINTF区)和片内存储空间(XINTF以外区域)。对于片内空间,除外设帧PF0、PF1、PF2和PF3外,其余空间既可映射为数据空间,又可映射为程序空间。图1.7 F2833x的存储器配置图1.2.1 片上存储单元

1.F2833x的SARAM存储器

F2833x在物理上提供了34KW的SARAM存储器,分布在几个不同的存储区域。(1) M0和M1

M0和M1均为1KW。M0地址为0x00 0000~0x00 03FF,M1地址为0x00 0400~0x00 07FF。M0和M1既可映射为数据空间,也可映射为程序空间。由于复位后SP的内容为0x0400,因此M1默认作为堆栈。(2) L0~L7

L0~L7每块为4KW,它们既可映射为数据空间,也可映射为程序空间。其中L0~L3是双映射(与F2812兼容),既映射到0x00 8000~0x00 BFFF,又映射到0x3F 8000~0x3F BFFF。L0~L3内容受CSM(代码安全模块)保护;L4~L7是单映射的,映射地址为0x00 C000~0x00 FFFF,该区域可以DMA访问。

2.F2833x的FLASH存储器

FLASH存储器为256KW且受CSM保护,程序烧写到FLASH就无须借助仿真器进行调试了,此外连同密码一同烧写,程序的知识产权就得到了保证。F2833x片上地址为0x30 0000~0x33 FFFF。FLASH存储器通常映射为程序存储空间,但也可以映射为数据存储空间。FLASH又分成了8个扇区,各扇区范围见表1.3。表1.3 FLASH扇区分配表

需特别注意的是,A扇区尾部128个单元的特殊用途:

1) 0x33 FF80~0x33 FFF5,使用CSM时,该区域要清零。

2) 0x33 FFF6是FLASH引导程序入口,即应在0x33 FFF6和0x33 FFF7存储跳转指令。

3) 0x33 FFF8~0x33 FFFF,8个单元共128个位,存储密码。

3.OTP ROM存储器

OTP是一次性可编程存储区,即只能一次性写入,不能被擦除,所以已经写过的部分是不可以被擦除和改写的。F2833x有两个OTP区,其中一个已被TI公司用做ADC校准数据区(存放adc_cal()函数),另一区域地址为0x38 0400~0x38 07FF,开放给用户使用。OTP写一次的对象是位,不是字节,不是字,也不是一个区,所以OTP可多次写入,但对于一个位或一个地址,只能写一次。

4.Boot ROM存储器

Boot ROM存储器共8KW,分成如图1.8所示几个区域。图1.8 F2833x的BootROM存储器的映像

5.F2833x的外设帧

外设帧包含PF0、PF1、PF2和PF3,均受EALLOW保护。除CPU寄存器之外的其他寄存器,如CPU定时器、中断向量、ePWM、eCAP等均配置在这个区域。其中外设帧PF3只包含MCBSPA寄存器,可通过DMA访问。1.2.2 片外存储单元(XINTF)的应用及注意事项

1.片外存储单元概述

片外存储单元指的就是XINTF,但F28335的XINTF扩展区减少到3个,分别为Zone0、Zone6和Zone7。每一个XINTF区域可以独立配置特定的读、写访问时序,每个区域还有相应的区域片选信号,当片选信号拉低时,即可访问相应区域。XINTF扩展引脚如图1.9所示。

所有的空间共享20位的外部地址总线,处理器根据被选通的Zone产生相应的地址,具体如下:图1.9 XINTF扩展引脚

1)Zone0分配的外部地址范围为0x00000~0x00FFF。当CPU访问Zone0空间的第一个字时,地址总线产生0x00000;当CPU访问Zone0空间的最后一个字时,地址总线产生0x00FFF地址。需要注意的是,访问Zone0空间时需要将Zone0的片选信号(XZCS0)拉低。

2)Zone6和Zone7共享外部地址总线,地址范围为0x00000~0xFFFFF,片选信号XZCS6为低决定Zone6被访问,片选信号XZCS7为低决定Zone7被访问。

在C28x流水线中,操作的读访问在写操作之前,因而程序是按照 “先写后读”的顺序,但实际运行可能会出现为“先读后写”的情况。

为了防止顺序颠倒,外设寄存器所在的存储区域都设有相应的硬件保护。这些区域被称为“其后紧跟读访问的写操作流水线保护”。Zone0是默认“其后紧跟读访问的写操作流水线保护”的区域。

对同一存储单元进行访问时,C28x自动保护其后紧跟读的写操作。但当访问不同存储单元时,CPU通过插入足够的NOP指令使得在进行读访问前完成写操作。

外设寄存器映射到XINTF区域时需要注意读写的执行顺序;当存储器映射到XINTF区域时,则不需要关心读写的执行顺序,因此区域0通常用来与外设器件相连,而不是存储器。

每个空间的访问等待、选择、建立及保持时间均可通过XTIMINGx寄存器进行配置。XINTF模块用到两个时钟:XTIMCLK(内部时钟)和XCLKOUT(外部时钟)。这两个时钟与CPU时钟SYSCLKOUT的关系如图1.10所示。图1.10 XINTF的时钟框图

XINTF的访问是基于XTIMCLK时钟。配置XINTF时,用户必须配置内部时钟XTIMCLK和SYSCLKOUT的比率关系(配置XINTCNF2寄存器),可将XTIMCLK时钟频率设置为SYSCLKOUT或SYSCLKOUT/2(默认情况)。

XINTF的访问是从外部时钟输出XCLKOUT的上升沿开始的,所有事件都是在相应的XTIMCLK上升沿产生。配置XINTCNF2.CLKMODE位,可将XCLKOUT频率设置为XTIMCLK或XTIMCLK/2(默认情况下,XCLKOUT等于XTIMCLK/2,或等效于SYSCLKOUT/4)。为降低系统干扰,用户可将XINTCNF2寄存器的CLKOFF位写1关闭XCLKOUT的输出。

注意:在改变XINTF配置时,应保证没有访问XINTF区域,配置XINTF参数的代码也不能从XINTF区域执行。

此外,每个区域都可以使用XREADY信号扩展外部等待状态或不扩展。如图1.11所示为XINTF读写时序图。图1.11 XINTF读写时序图

XINTF可直接访问外部存储器映射区域。XINTF区域的读写时序可以分成三个阶段:前导LEAD、有效ACTIVE和结束TRAIL。每阶段等待状态的XTIMCLK周期数可在相应区域的XTIMING中配置,且读访问和写操作的时序配置是独立的。

在前导阶段,被访问区域的片选信号被拉低,访问的地址出现在地址总线上(XA),整个前导阶段的时间可以在XTIMING中配置(单位为XTIMCLK周期)。默认情况下,读、写访问的前导阶段时间均被设置成最大值,即6个XTIMCLK周期。

在有效阶段,即对外部设备的访问。对于读访问,读选通信号XRD被拉低;对于写操作,写选通信号XWE0被拉低。

结束阶段是一段保持时间。在此阶段,片选信号仍保持低电平,但读、写选通信号恢复为高电平,可在XTIMING中配置结束阶段的时间。默认情况下,读、写访问的结束阶段时间被设置成最大值,即6个XTIMCLK周期。

2.总线宽度

每个Zone都可以独立配置为16或32位总线宽度,总线连接如图1.12所示。

根据不同配置,XA0/XWE1信号的功能会发生相应的变化。当XINTFzone配置为16位操作模式时(XTIMINGx[XSIZE]=3),XA0/XWE1作为最低地址位XA0。

总线的宽度可由XTIMINGx[XSIZE]来定义,当连续访问两个总线宽度不同的Zone空间时,两个Zone的访问之间要加入延时,这个可通过配置XBANK来实现。例如,给定的区域配置如下:图1.12 16位/32位数据总线宽度a)外扩16位数据 b)外扩32位数据

1) 0区配置为16位模式(XTIMING0[XSIZE]=3)。

2) 6区配置为32位模式(XTIMING6[XSIZE]=1)。

3) 7区配置为32位模式(XTIMING7[XSIZE]=1)。

若需要连续访问Zone0和Zone6或者Zone0和Zone7,那么要在Zone0访问过后加入至少一个空间切换延时来释放总线,如XBANK=0,XBANK[BCYC]=1。

3.常用寄存器

1) XBANK寄存器,其位格式如图1.13所示。图1.13 XBANK寄存器的位格式

示例:从Zone7切换至其他的Zone,并增加额外的3个周期。

2) XINTCNF2寄存器,其位格式如图1.14所示。图1.14 XINTCNF2寄存器的位格式

示例:XCLKOUT常用于检测时钟的调试阶段。

3) XTIMING0寄存器,位格式如图1.15所示。图1.15 XTIMING0寄存器的位格式

① X2TIMING:指定XRDLEAD、XRDACTIVE、XRDTRAIL、XWRLEAD、XWRACTIVE的缩放因子。0=缩放比例1∶1;1=缩放比例2∶1。

② XSIZE:00~10=保留;01=32位接口(使用32位数据线);11=16位接口。

③ READYMODE:0=XREADY输入为同步方式,1=XREADY输入为异步方式。

④ USEREADY:0=Zone访问时,XREADY信号被忽略;1=XREADY被用于扩展Zone。

⑤ XRDLEAD/XERLEAD:使用XTIMCLK来定义读/写数据时LEAD等待状态周期,见表1.4。表1.4 XTIMCLK定义的读/写数据时LEAD等待状态周期

⑥ XRDACTIVE/XWRACTIVE:用XTIMCLK来定义读/写数据时ACTIVE等待状态周期,见表1.5。表1.5 XTIMCLK定义的读/写数据时ACTIVE等待状态周期

⑦ XRDTRAIL/XWRTRAIL:使用XTIMCLK来定义读/写数据时TRAIL等待状态周期,见表1.6。表1.6 XTIMCLK定义的读/写数据时TRAIL等待状态周期

示例:Zone0的读写时钟配置。

4.示例分析

配置CPU定时器0并使能定时器0中断。中断服务程序拷贝至外部存储Zone7的SARAM中运行(16位数据总线)。参考代码如下:二维码1.1

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载