带你了解TI的DSP入门芯片TMS320F28335
作为一个电子硬件工程师,为什么我们看不懂DSP,或者我们的一些同学对DSP了解不多?今天我们来介绍一款DSP入门芯片,TI的TMS320F28335。相信看完这一系列内容,大家对DSP会有一个初步的了解。
TMS320F28335简介:
TMS320F28335采用176引脚LQFP四边形封装,其功能结构如参考文献所示。其主要表现如下:
高性能静态CMOS工艺,指令周期6.67 ns,主频150 MHz;
高性能32位CPU,单精度浮点运算单元(FPU),采用哈佛流水线结构,可快速执行中断响应,并具有统一的内存管理模式,可用C/C语言实现复杂的数学算法;
6通道DMA控制器;
256 Kxl6的片内闪存、34 Kxl6的SARAM存储器、1 kX16的OTPROM和8 Kxl6的启动ROM。其中16 Kxl6的Flash、OTPROM、SARAM都有密码保护。
控制时钟系统具有片内振荡器、看门狗模块、动态PLL调整支持、内部可编程PLL,通过软件设置相应寄存器的值来改变CPU的输入时钟频率。
8外部中断,与TMS320F281X系列DSP相比,没有专门的中断引脚。GPI00~GPI063连接到该中断。GPI00-GPI031接xint 1、XINT2、XNMI的外部中断,GPl032~GPI063接XINT3-XINT7的外部中断;
支持58个外设中断的外设中断扩展控制器(PIE)管理由片内外设和外部引脚引起的中断请求;
增强外设模块:18路PWM输出,包括6路高分辨率脉宽调制模块(HRPWM)、6路事件捕捉输入和2路正交调制模块(QEP);
三个32位定时器,定时器0和定时器1作为通用定时器,定时器0接PIE模块,定时器1接中断INTl3;定时器2用于DSP/BIOS的实时片上系统,并连接到中断INTl4。如果系统不使用DSP/BIOS,定时器2可用于通用定时器。
串行外设包括2通道CAN模块、3通道SCI模块、2个McBSP(多通道缓冲串行接口)模块、1个SPI模块和1个I2C主从兼容串行总线接口模块。
12位模数转换器具有16个转换通道、2个采样保持器件、内部和外部基准电压,转换速度为80 ns,并且还支持多通道转换。
88个可编程多路复用GPIO引脚;
低功耗模式;
1.9 V内核,3.3 v I/o电源;
符合IEEEll49.1标准的片上扫描模拟接口(JTAG);TMS320F28335的内存映射要注意以下几点:
片内外设寄存器块0~3只能用于数据存储区,用户不能在这个存储区写程序。
OTP ROM区(0x38 0000~0x38 03FF)是用于存储A/D转换器校准程序的只读空间,用户不能将程序写入该空间。
即使未应用eCAN模块,也应启用时钟模块,将分配给eCAN的RAM空间用作通用RAM。
如果设置了安全码,所有存储区0x 33 ff 80 ~0x 33 fff 5都需要写入数据0x0000,不能用来存储程序或数据。反之,0x33FF80~Ox33FEF可以存储数据或程序,其中0x33FFF0~Ox33FFF5只能存储数据。
模拟工具和开发环境:
TMS320F28335开发工具包括:标准优化的C/C编译/汇编/连接器、CCS集成开发环境、评估板和XDS510仿真器。CCS是一个界面友好、功能完善的集成开发平台,具有编辑、汇编、编译、软硬件仿真和调试功能。
TMS320F28335的ADC
TMS320F28335上有16通道、12位的模数转换器模数转换器。他可以被配置为两个独立的8通道输入模式,也可以通过配置广告公司.ADCTRL1.bit.SEQ_CASC=1,将其设置为一个16通道的级联输入模式。输入的方式可以通过配置广告公司.ADCTRL1.bit.ACQ_PS=1,将其设置为顺序采集。即从低通道开始到高通道结束。值得注意的是片上物理输出核心的输入电压范围为0 - 3V,一旦超过3V,片上的物理输出核心模块将会被烧掉100 .全音阶的第七音上的数据表介绍其物理输出核心的精度可达到12位,实际上达到不了。经测试,我们估计最好的时候可以达到11位就不错了。下面我们来简单介绍一下物理输出核心模块的原理。其数字值由下面公司来计算,其中公式中的3为片内参考电压数字值=4096*(输入模拟电压-ADC lo)/3;(当0 V时输入《3 V》。物理输出核心可以分为SEQ1和SEQ2两个模块,其中SEQ1包括ADC in 00-ADC in 07;SEQ2包括ADCIN08至ADCIN15 .SEQ1模块可以通过软件、脉宽调制、外部中断引脚来启动,而SEQ2不可以通过外部中断引脚来启动。另外就是物理输出核心可以与直接存储器存取进行数据交换。
TMS320F28335的时钟介绍:
TMS320F28335上有一个基于锁相环路电路的片上时钟模块,为中央处理器及外设提供时钟有两种方式:一种是用外部的时钟源,将其连接到X1引脚上或者XCLKIN引脚上,X2接地;另一种是使用振荡器产生时钟,用30MHz的晶体和两个20PF的电容组成的电路分别连接到X1和X2引脚上,XCLKIN引脚接地。我们常用第二种来产生时钟。此时钟将通过一个内部锁相环路锁相环电路,进行倍频。由于F28335的最大工作频率是150M,所以倍频值最大是5。其中倍频值由PLLCR的低四位和PLLSTS的第7、8位来决定。其详细的倍频值可以参照TMS320F28335的数据表。下面是F28335的时钟设置:
void InitPll(Uint16 val,Uint16 divsel)
{
//确保锁相环路没有在跛行模式下运行
if (SysCtrlRegs .PLLSTS.bit.MCLKSTS!=0)
{
//检测到缺少外部时钟
//将此行替换为对适当的
//SystemShutdown();功能。
ASM("estop 0");
}
//DIVSEL必须为0,PLLCR才能从
//0x0000 .通过外部复位XRSn将其置0
//这使我们处于1/4
if (SysCtrlRegs .PLLSTS.bit.DIVSEL!=0)
{
EALLOW
SysCtrlRegs .pl列表。有点。div sel=0;
EDIS;
}
//更改PLLCR
if (SysCtrlRegs .PLLCR.bit.DIV!=val)
{
EALLOW
//在设置PLLCR之前,关闭丢失时钟检测逻辑
SysCtrlRegs .pl列表。有点。麦克尔科夫=1;
SysCtrlRegs .pllcr。有点。div=val
EDIS;
//可选:等待锁相环路锁定。
//在此期间,CPU将切换到OSCCLK/2,直到
锁相环路稳定。一旦锁相环路稳定,CPU将
//切换到新的锁相环路值。
//
//锁定时间由锁相环路锁定计数器监控。
//
//代码不需要等待锁相环路锁定。
//但是,如果代码做了任何对时间很关键的事情,
//并且要求锁定正确的时钟,那么最好是
//等待切换完成。
//等待锁相环路锁定位被置位。
//应该在此循环之前禁用看门狗,或者在此循环内馈入
//通过服务狗()进行循环。
//取消注释以禁用监视程序
已禁用og();
while(SysCtrlRegs .PLLSTS.bit.PLLLOCKS!=1)
{
//取消注释以服务监视程序
//service dog();
}
EALLOW
SysCtrlRegs .pl列表。有点。麦克尔科夫=0;
EDIS;
}
//如果切换到1/2
if((divsel==1)||(divsel==2))
{
EALLOW
SysCtrlRegs .pl列表。有点。div sel=div sel
EDIS;
}
//如果切换到1/1
//*首先转到1/2,让功率稳定下来
//所需的时间取决于系统,这只是一个例子
//*然后切换到1/1
if(divsel==3)
{
EALLOW
SysCtrlRegs .pl列表。有点。div sel=2;
DELAY _ US(50L);
SysCtrlRegs .pl列表。有点。div sel=3;
EDIS;
}
}
TMS320F28335的外部中断总结:
这里我们应该很清楚DSP的中断系统。C28XX有16个中断源,其中两个非屏蔽中断RESET和NMI、定时器1和定时器2分别使用中断13和14。这样,12个中断直接连接到外设中断扩展模块PIE。简单来说,PIE就是通过12根线与28335核心的12条中断线相连。在PIE的另一边,有12*8线连接外设,比如AD,SPI,EXINT等等。这样,PIE管理12*8=96个外部中断。这12组大中断由28335内核的中断寄存器IER控制,即IER决定每个中断属于哪一组大中断(例如IER |=M _ int 12;意思是我们需要使用12组的中断,但是12组的CPU不知道PIEIER需要确定什么中断。接下来由PIE模块中寄存器PIEIER中的低8确定该中断是该组的第一个中断,这些配置要告诉CPU(我们可以很容易的想象出PIEIER有12个,也就是从PIEIER 1到PIEIER 12)。此外,PIE模块还有一个中断标志寄存器PIEIFR。同样,它的低8位是来自外部中断的8个标志位,CPU的IFR寄存器是中断组的标志寄存器。从这个角度来看,CPU的所有中断寄存器控制12组中断,PIE的所有中断寄存器控制每组8个中断。另外我们用的是哪个外部中断,对应的外部中断寄存器,需要注意的是外部中断标志要由软件自己清零。PIE和CPU的中断标志寄存器由硬件清除。
EALLOW//这是写入真正受保护的寄存器所需要的
PieVectTable。XINT2=ISRExint//告知中断入口地址
EDIS;//这是禁止写入低保护寄存器所必需的
PieCtrlRegs。pie ctrl . bit . en pie=1;//启用饼图块启用饼图。
PieCtrlRegs。piier 1 . bit . intx 5=1;//启用第一组中的中断5
IER |=M _ int 1;//启用第一组CPU中断
EINT//启用全局中断INTM
ERTM;//启用全局实时中断DBGM
换句话说,12组中的每个中断都要完成上面同样的配置,剩下的就是配置自己的中断了。我们提到过,EXINT,也就是外面有低水平的时候我们就会进入。
中断并完成我们的程序。这里介绍一下,DSP的所有GPIO端口都可以配置为外部中断端口,配置方法如下:
GpioCtrlRegs。gpb mux 2 . bit . gpio 54=0;//选择它们作为GPIO端口。
GpioCtrlRegs。gpb mux 2 . bit . gpio 55=0;
GpioCtrlRegs。gpb mux 2 . bit . gpio 56=0;
GpioCtrlRegs。gpb mux 2 . bit . gpio 57=0;
GpioCtrlRegs。gpb dir . bit . gpio 54=0;//选择它们都是输入端口。
GpioCtrlRegs。gpb dir . bit . gpio 55=0;
GpioCtrlRegs。gpb dir . bit . gpio 56=0;
GpioCtrlRegs。gpb dir . bit . gpio 57=0;
GpioCtrlRegs。gpbqsel 2 . bit . gpio 54=0;//GPIO时钟与系统时钟相同,支持GPIO。
GpioCtrlRegs。gpbqsel 2 . bit . gpio 55=0;
GpioCtrlRegs。gpbqsel 2 . bit . gpio 56=0;
GpioCtrlRegs。gpbqsel 2 . bit . gpio 57=0;
GpioIntRegs。gpioxint 3 sel . bit . gpio sel=54;//中断3选择GPIO
GpioIntRegs。gpioxint 4 sel . bit . gpio sel=55;
GpioIntRegs。gpioxint 5 sel . bit . gpio sel=56;
GpioIntRegs。gpioxint 6 sel . bit . gpio sel=57;
XIntruptRegs。xint 3c r . bit . polarity=0;//触发模式为下降沿触发。
XIntruptRegs。xint 4 Cr . bit . polarity=0;
XIntruptRegs。xint 5 Cr . bit . polarity=0;
XIntruptRegs。xint 6 Cr . bit . polarity=0;
XIntruptRegs。xint 3 Cr . bit . enable=1;//启用中断
XIntruptRegs。xint 4 Cr . bit . enable=1;
XIntruptRegs。xint 5 Cr . bit . enable=1;
XIntruptRegs。xint 6 Cr . bit . enable=1;
注意,外部中断1和2只能为GPIO 0-GPIO 31配置;外部中断3和4、5、6、7仅针对GPIO 32-GPIO 63进行配置。
基于TMS320F28335的信号处理板的设计与实现
硬件系统设计
1.1计划概述
系统的主要功能是DSC通过ADC采样芯片同时采样12路模拟信号。在DSC中进行数据处理后,通过异步串行收发器上传到上位机。同时,上位机还可以通过异步收发器向DSC发送预定命令,控制信号处理板的工作模式和状态。
根据功能要求,整个硬件电路可以分为三个部分:电源模块、数字部分和模拟部分。其功能结构框图如图1所示。
1.2电源模块设计
整个处理板的外部输入电压为5 V和12 V,通过相应的电压转换芯片分别为模拟和数字部分提供不同的电压幅度。对于数字部分,电源模块需要为DSC提供1.9 V的核心电压,为DSC等芯片的外围提供3.3 V的外围电压。在该系统中,LT1963AES8集成芯片提供1.9 V,LT 1963 AEST-3.3集成芯片提供3.3 V.对于模拟部分,系统要求输入ADC的信号幅度在12V以内,因此系统选择LT1086IT-12和LT11 75IT分别将输入的15V电压转换为12V。
1.3数字电路设计
数字电路主要是以DSC为核心的应用电路。该部分主要处理和存储ADC传输的数据,完成DSC与上位机的通信和数据传输。从图1中可以看出,它包含以下部分。外围SRAM扩展,EEPROM扩展电路,SCI上位机通信接口电路。
外围SRAM扩展
考虑到TMS320F28335芯片中ram资源有限,而程序空间和数据空间RAM只有34 kB,数据宽度为16位,需要对片内RAM进行扩展才能满足大量程序的运行。本系统选用Cypress公司的CY7C1011CV33-12ZSXE集成芯片,利用TMS320F28335提供的XINTF接口完成片外RAM的扩展。
XINTF是TMS320F28335提供的非复用异步总线,用于完成外部异步设备的扩展。XINTF可以将外设映射到三个固定的内存映射区域。当外部资源连接到某个区域时,需要通过XINTF的一个片选信号来选择外部资源。
CY7C1011CV33-12ZSXE是一款CMOS静态RAM存储器,容量为64 kB,数据宽度为16位。图2是外围SRAM扩展电路的连接图。
如图2所示,该系统选择ZONE7作为RAM的外设扩展。DSC通过其XZCS7引脚向片外SRAM发送片选信号。WE信号用于控制DSC读写片外SRAM。当DSC的XWEo引脚为低电平时,DSC读写片外RAM。XWEo为高电平,DSC的XRD引脚为低电平,所以是读操作。
EEPROM扩展
考虑到系统上电后,需要对一些设备的状态进行初始化,这些初始化的数据在设备运行过程中需要不断的改变。因此,在设备运行的过程中,数据是实时保存的,使得设备断电后数据仍然存在。该系统利用TMS320F28335的SPI接口扩展EEPROM,存储设备运行时实时获取的初始化数据。本系统选用Atmel公司的AT25160集成芯片。该芯片的容量为2 kB,宽度为8位。模块电路如图3所示。
如图3所示,DSC通过SPISTEA引脚发送片选信号选择EEPROM,通过SPICLKA引脚发送SPI传输时钟,而数据写入和读取分别通过Spis-IMO和SPISOMIA引脚完成。EEPROM中的HOLD引脚用于暂停与主机的串行数据传输,WP引脚用于对EEPROM进行写保护。如果为低电平,主机无法向其写入数据。系统向两个引脚输入高电平,以确保EEPROM始终可以不间断地读写。
1 . 3 . 3 sci主机通信接口
为了实现上位机与DSC之间的异步通信和数据传输,本系统使用TMS320F28335提供的SCI接口来完成所需的要求。SCI是一个双线异步串行端口,通常称为UART。其数据收发支持全双工通信,内部收发有16级FIFO缓存数据。为了保证数据的可靠性,SCI提供了奇偶校验、数据溢出检测等操作。SCI接口的输出信号电平为LV-TTL电气标准,由RS232收发转换器驱动,获取RS232电气标准的信号,供上位机接收。
1.4模拟电路设计
模拟电路主要是以ADC为核心的应用电路。主要实现模拟信号的处理和采集。最核心的部分是AD转换。
AD转换部分主要通过数字采样完成模拟信号到数字信号的转换。本系统选用的ADC芯片是美国模拟电气公司的AD7656。模数转换芯片AD7656是一款高度集成的6通道6位逐次逼近型(SAR) ADC,内置一个2.5 V基准电压源和一个基准电压缓冲器。该器件的功耗比最接近的双极性ADC低60%。在每通道250 KB s-1的采样速率下,AD7656的精度是同类产品的两倍。模拟电压范围可通过引脚和软件选择:10 V或5v;模拟电源的电压范围为4.75 ~ 5.25 V,工作电压宽,无需电平转换等其他措施,可直接接入DSC。提供并行和串行接口。它能在-40 ~ 85下工作。250 KB/s时的功耗为140 mW,待机模式下仅为100W。基于iCOMS技术制造的AD7656可以满足工业领域在分辨率、多通道、转换速率和功耗方面的更高要求。
AD7656支持利用DSC进行并行和串行数据传输,采样数字信号的传输模式通过选择SER/PARSEL引脚的高电平和低电平来控制。当它是高电平时,使用串行传输模式,否则使用并行传输模式。该系统采用并行传输方式。在具体转换过程中,每个AD7656中的6个采样通道可以分为A、B、C三组,每组包含两个通道。三组通道可以同时或分别采样,每组中的两个通道可以同时采样。引脚CONVSTA、CONVSTB和CONVSTC分别用于控制采样通道A、B和C。当上升沿电平到达任一引脚时,该引脚的模数转换对应的两个通道启动,模数转换开始。当三个引脚相连时,三组采样通道,即所有六个采样通道同时采样。系统选择三组通道进行同步采样。
当DSC与多个ADC相连时,需要通过Cs片选引脚选择ADC。采样开始时,BUSY引脚会从低电平变为高电平。在整个采样过程中,BUSY引脚将保持高电平。采样结束后,BUSY引脚将从高电平变为低电平。这时DSC就可以开始读取数据了。该系统使用此引脚作为DSC外部中断源的输入引脚。当BUSY从高电平变为低电平时,它会通知DSC产生一个中断来读取数据。
本系统选用两片AD7656完成12路数据采样,ADC设备通过DSC的XINTF ZONE6映射到DSC进行数据传输。两个ADC与DSC的连接通过地址解码和逻辑控制实现。具体结构如图4所示。
图4左下角是逻辑部分,ADC的选择是通过DSC的地址线BA17和BA18完成的。DSC中ADC0和ADC1的地址映射为0x180000和0x1400 00。40 kHz的外部输入时钟用作ADC的采样频率。两个ADC对应DSC的同一个中断。当任何一个ADC完成采样时,都会引起DSC的中断,从而读取采样的数据。
2.系统软件设计
如上所述,整个信号处理板有12路模拟信号,通过传感器接收12路模拟信号。两片AD7656将12路模拟信号转换成数字信号,传输给TMS320F28335。采集的数据在TMS320F28335中进行处理,然后通过SCI传输到上位机。同时,必要的数据通过SPI接口保存到EEPROM中。整个采集和通信过程由上位机发出的相关命令控制。程序的流程如图5所示。
在主函数中,程序首先完成相应模块的初始化,设置CPU的运行时钟,选择各模块的工作模式,然后读取EEPROM中的设备初始化数据,然后进入等待状态。此时,CPU等待ADC采样的数据。当ADC采样过程结束时,它进入ADC中断响应功能。在这个函数中,主要是读取数据。对于小信号,幅度由程控放大器放大,然后存储在用户定义的缓冲器中。上位机在两种串口工作模式下发送命令,从而触发SCI的串口中断服务功能。然后在中断服务功能中完成相应的命令要求。系统选择串口1完成采集数据到上位机的传输,串口0完成要保存的数据和一些相关操作到EEPROM的传输。而SCI0和SCI1对应DSC外设中断的INT9.1和INT9.3,外部中断XINT1对应INT1.4,程序将两个串口的传输速率都设置为38.4 KBs-1。
设备工作时,由于SCI1的中断源是上位机发送的命令,系统规定上位机每20ms发送一次数据接受命令,所以SCI1的中断响应周期为td=20 ms由于采样率为40 kHz,ADC的中断服务函数的响应周期为0.025 ms,系统规定要采集的数据个数为50,所以采集一组数据的时间为tc=1.25 ms,所以ADC在一次SCI1中断中会采集16组数据考虑到串口传输的波特率为38.4 KBs-1,传输一个16位数据的时间为tt=0.417 ms,一组数据采集时间加上串行数据传输时间为tctt=1.667 ms“4结论”
设计的信号处理板以TMS320F28335为核心处理器,使用AD7656完成模拟信号采样的功能硬件平台。TMS320F28335芯片集成了丰富的外设资源。通过驱动软件的配置和硬件系统的设计,可以方便高效地处理和计算大量的数字信号。AD7656的6通道模拟信号采集和16位高精度模拟信号采样成功完成了模拟信号的数字转换,降低了模拟信号采样的失真。实验表明,信号处理板采集的数字信号误差值约为1.37 mV,可达到14位的采样精度。
推荐阅读
- dc-dc模块是什么_DC/DC电源模块是什么它的自身特点是什么
- 微信闪退怎么办,如何解决微信朋友圈闪退
- 怎么自己修复手机碎屏,如何自己修复手机碎屏
- 华硕路由器设置(华硕路由器登陆地址)
- 广州市公务员考试网(广州公务员招考网)
- 支付宝余额支付关闭解决办法,支付宝余额支付功能关闭了该怎么开启
- 如何制作简单的表格,如何制作简单捕蝇器
- 比亚迪电动汽车2022年新款价格_比亚迪电动汽车2022年新款
- 命运之战中文破解版游戏介绍(命运之战中文破解版)
- 情侣晚上必看污电影,教你免费点亮永久情侣黄钻图标
- 豆腐渣工程是谁说的,我国著名豆腐渣工程事件有哪些
- 广州大学学费多少?广州大学一年的学费是多少?各专业收费2022
- 手机怎样下载电影到u盘,怎样下载电影到u盘
- 狗狗走丢了怎么办,狗狗丢了怎么找回来
- 惠普打印机怎么重新装驱动?(惠普打印机驱动安装教程)
- 最便宜的敞篷车有哪些_敞篷车有哪些
- 云储存是什么怎么使用_云存储怎么使用
- 显示器超频怎么办调,显示器超频怎么办
- 教你如何逗猫咪开心,教你如何逗猫