新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 带你了解TI的DSP入门芯片TMS320F28335

带你了解TI的DSP入门芯片TMS320F28335

作者:时间:2012-08-21来源:网络收藏

作为一个电子硬件工程师,怎么不能懂,或者我们中有一些同学对的理解还不是很多,今天就让我们给大家介绍一个,来自。相信看过了这一系列的内容,大家会对DSP有初步的

本文引用地址:http://www.eepw.com.cn/article/148554.htm

  简介:

  采用176引脚LQFP四边形封装,其功能结构参见参考文献。其主要性能如下:

  高性能的静态CMOS技术,指令周期为6.67 ns,主频达150 MHz;

  高性能的32位CPU,单精度浮点运算单元(FPU),采用哈佛流水线结构,能够快速执行中断响应,并具有统一的内存管理模式,可用C/C++语言实现复杂的数学算法;

  6通道的DMA控制器;

  片上256 Kxl6的Flash存储器,34 Kxl6的SARAM存储器.1 Kx16 OTPROM和8 Kxl6的Boot ROM。其中Flash,OTPROM,16 Kxl6的SARAM均受密码保护;

  控制时钟系统具有片上振荡器,看门狗模块,支持动态PLL调节,内部可编程锁相环,通过软件设置相应寄存器的值改变CPU的输入时钟频率;

  8个外部中断,相对TMS320F281X系列的DSP,无专门的中断引脚。GPI00~GPI063连接到该中断。GPI00一GPI031连接到XINTl,XINT2及XNMI外部中断,GPl032~GPI063连接到XINT3一XINT7外部中断;

  支持58个外设中断的外设中断扩展控制器(PIE),管理片上外设和外部引脚引起的中断请求;

  增强型的外设模块:18个PWM输出,包含6个高分辨率脉宽调制模块(HRPWM)、6个事件捕获输入,2通道的正交调制模块(QEP);

  3个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位的A/D转换器具有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。

  如果设置安全代码,存储器区域Ox33FF80~0x33FFF5需全部写入数据0x0000,而不能用于存储程序或数据。反之,0x33FF80~Ox33FEF可以存储数据或程序,其中0x33FFF0~Ox33FFF5只能存储数据。

  仿真工具和开发环境:

  TMS320F28335开发工具有:标准的优化C/C++编译/汇编/连接器,CCS集成开发环境,评估板和XDS510仿真器。其中CCS是一个界面友好,功能完善的集成的开发平台,具有编辑、汇编、编译、软硬件仿真调试功能。

  TMS320F28335 的ADC:

  TMS320F28335上有16通道、12位的模数转换器ADC。他可以被配置为两个独立的8通道输入模式,也可以通过配置AdcRegs.ADCTRL1.bit.SEQ_CASC=1,将其设置为一个16通道的级联输入模式。输入的方式可以通过配置 AdcRegs.ADCTRL1.bit.ACQ_PS=1,将其设置为顺序采集。即从低通道开始到高通道结束。 值得注意的是片上ADC的输入电压范围为0--3V,一旦超过3V,片上的ADC模块将会被烧掉。上的DATASHEET介绍其ADC的精度可达到12位,实际上达到不了。经测试,我们估计最好的时候可以达到11位就不错了。下面我们来简单介绍一下ADC模块的原理。其数字值由下面公司来计算,其中公式中的3为片内参考电压Digital Value=4096*(Input Analog Voltage-ADCLO)/3 ;(when 0 V 《 input 《 3 V)。ADC可以分为SEQ1和SEQ2两个模块,其中SEQ1包括ADCIN00--ADCIN07;SEQ2包括ADCIN08--ADCIN15。SEQ1模块可以通过软件、PWM、外部中断引脚来启动,而SEQ2不可以通过外部中断引脚来启动。另外就是ADC可以与DMA进行数据交换。

TMS320F28335 的时钟介绍:

  TMS320F28335上有一个基于PLL电路的片上时钟模块,为CPU及外设提供时钟有两种方式:一种是用外部的时钟源,将其连接到X1引脚上或者XCLKIN引脚上,X2接地;另一种是使用振荡器产生时钟,用30MHz的晶体和两个20PF的电容组成的电路分别连接到X1和X2引脚上,XCLKIN引脚接地。我们常用第二种来产生时钟。此时钟将通过一个内部PLL锁相环电路,进行倍频。由于F28335的最大工作频率是150M,所以倍频值最大是5。其中倍频值由PLLCR的低四位和PLLSTS的第7、8位来决定。其详细的倍频值可以参照TMS320F28335的Datasheet。下面是F28335的时钟设置:

  void InitPll(Uint16 val, Uint16 divsel)

  {

  // Make sure the PLL is not running in limp mode

  if (SysCtrlRegs.PLLSTS.bit.MCLKSTS != 0)

  {

  // Missing external clock has been detected

  // Replace this line with a call to an appropriate

  // SystemShutdown(); function.

  asm(“ ESTOP0”);

  }

  // DIVSEL MUST be 0 before PLLCR can be changed from

  // 0x0000. It is set to 0 by an external reset XRSn

  // This puts us in 1/4

  if (SysCtrlRegs.PLLSTS.bit.DIVSEL != 0)

  {

  EALLOW;

  SysCtrlRegs.PLLSTS.bit.DIVSEL = 0;

  EDIS;

  }

  // Change the PLLCR

  if (SysCtrlRegs.PLLCR.bit.DIV != val)

  {

  EALLOW;

  // Before setting PLLCR turn off missing clock detect logic

  SysCtrlRegs.PLLSTS.bit.MCLKOFF = 1;

  SysCtrlRegs.PLLCR.bit.DIV = val;

  EDIS;

  // Optional: Wait for PLL to lock.

  // During this time the CPU will switch to OSCCLK/2 until

  // the PLL is stable. Once the PLL is stable the CPU will

  // switch to the new PLL value.

  //

  // This time-to-lock is monitored by a PLL lock counter.

  //

  // Code is not required to sit and wait for the PLL to lock.

  // However, if the code does anything that is timing critical,

  // and requires the correct clock be locked, then it is best to

  // wait until this switching has completed.

  // Wait for the PLL lock bit to be set.

  // The watchdog should be disabled before this loop, or fed within

  // the loop via ServiceDog()。

  // Uncomment to disable the watchdog

  DisableDog();

  while(SysCtrlRegs.PLLSTS.bit.PLLLOCKS != 1)

  {

  // Uncomment to service the watchdog

  // ServiceDog();

  }

  EALLOW;

  SysCtrlRegs.PLLSTS.bit.MCLKOFF = 0;

  EDIS;

  }

  // If switching to 1/2

c++相关文章:c++教程


模数转换器相关文章:模数转换器工作原理


脉宽调制相关文章:脉宽调制原理
锁相环相关文章:锁相环原理

上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭