tms320c6748异步接口访问相关问题

电子说

1.3w人已加入

描述

  本文主要是关于tms320c6748的相关介绍,并着重对tms320c6748异步接口访问相关问题进行了详尽的阐述。

  tms320c6748

  德州仪器 (TI) 宣布推出具有无与伦比连接选项与定点和浮点功能的四款全新处理器 —— TMS320C6748,同时这四款产品也是业界功耗最低的浮点数字信号处理器 (DSP),可充分满足高能效、连通性设计对高集成度外设、更低热量耗散以及更长电池使用寿命的需求。

  上述器件结合了一系列独特的应用优化特性和外设,能显著降低工业、通信、医疗诊断和音频等多种产品的总体系统成本。对诸如测量测试、公共安全无线电、音乐特效以及智能家居传感器等需要高速数据传输和高容量存储的应用而言,这些处理器不仅具备通用并行端口 (uPP),同时也是 TI 首批集成串行高级技术附件 (SATA)的器件。

  这些产品拥有高达 300 MHz 的性能,可通过动态电压与频率缩放 (DVFS) 及多种省电模式管理片上电源。若配合 TI 电源管理软件和配套模拟解决方案,开发人员无需成为节能技术专家即可优化系统,提高性能,降低功耗。为了简化设计工作,缩短开发时间,新产品都是引脚对引脚兼容,可与所有 TMS320C6000 器件实现代码兼容,并配套提供低成本的实验板和功能齐备的评估板 (EVM)。

  C6748 DSP 的关键特性与优势:

  ·最低成本与最低功耗的 C6000 处理器以及业界最低功耗的浮点 DSP 总功耗为 420mW,在特定使用情况下电压为 1.0V时待机功耗为 7mW;

  ·待机功耗比市场上现有的浮点 DSP 解决方案降低多达 9 倍;

  ·TI 首款集成 SATA 的处理器,可支持大容量数据存储;

  ·uPP 可实现与数模转换器、FPGA 或其它 C6748处理器的高速连接;

  ·EMAC、多媒体卡/安全数据卡 (MMC/SD) 以及高速 USB 2.0/1.1 可全面满足桌面、网络或便携式连接或存储的需求;

  ·视频端口能够支持原始视频的输入输出,而 LCD 控制器则使开发人员能够方便地连接具有 VGA 分辨率的显示屏;

  ·通过 DVFS 提供多个工作点,可关闭不使用的外设并提供可选的 I/O 电压,这些优异特性有助于提高便携性并降低产品的发热量;

  ·配套提供的 TI TPS65070 电源管理产品可实施所有时序与默认选项,并可支持器件的低功耗模式;

  ·高达 300 MHz 的 C674x 内核可为高精度及宽动态范围提供浮点工作能力以及能实现更高性能的定点工作能力;

  ·C6748 能实现引脚对引脚兼容,使客户能采用同一软件和硬件平台扩展整个产品系列;

  ·128 KB 至 448 KB 的片上存储器可减少外部存储器接入,并降低功耗。

  德州仪器 (TI) 推出浮点功能的全新高性能处理器 —— TMS320C6748,这款芯片也是业界功耗最低的浮点数字信号处理器 (DSP),可充分满足高能效、连通性设计对高集成度外设、更低热量耗散以及更长电池使用寿命的需求。不仅具备通用并行端口 (uPP),同时也是 TI 首批集成串行高级技术附件 (SATA)的器件。

  广州创龙推出的TL6748-EVM评估套件为开发者使用TI TMS320C6748处理器提供了完善的软件开发环境,系统支持:裸机、SYS/BIOS、DSP/BIOS。提供参考底板原理图,DSP C6748入门教程、丰富的Demo程序、完整的软件开发包,以及详细的C6748系统开发文档,方便用户快速评估TMS320C6748处理器、设计系统驱动及其定制应用软件,也大大降低产品开发周期,让客户产品快速上市。主要面向电力、通信、工控、音视频处理等数据采集处理行业。

  TL6748-EVM评估套件是一个功能丰富的开发板,为嵌入式设计人员提供快捷简单的实践方式来评估TMS320C674x系列处理器,是一个完整的实验评估平台。

  tms320c6748异步接口访问相关问题

  OMAPL138有多种地址数据总线如I2C、SPI、UART,这些接口能够满足一般的低速传送要求,但是在高速协同中却不能满足数据传输的需求。我们知道,并行数据传输肯定要比串行传输快,TMS320C6748平台上搭载了uPP(通用并行IO)。在Ti公司的66系列DSP中搭载了更高速的RapidIO接口,最高速率达10Gbps,相比TCPIP协议软件开销较低,与 FPGA互联方便,是一种比较有前景的通信技术。

  1、uPP硬件IO资源,通信时需要用到的管脚:

  TMS320C6748

  由上图可看出uPP有两个通道即通道A和通道B,通道A、B都具有各自START、ENABLE、WAIT、CLOCK信号控制管脚。而两个十六位的数据管脚DATA[15:0]不直接对应通道A、XDATA[15:0]也不直接对应通道B。数据管脚DATA[15:0]、XDATA[15:0]与通道A、B的对应关系是通过配置寄存器UPCTL来实现的。

  TMS320C6748

  UPCTL寄存器中的CHN、IWA、IWB决定A、B通道与DATA[15:0]、XDATA[15:0]的关系。IWA为高,A通道使用16bit数据,反之则为8bit数据,IWB同理;CHN为高,A、B通道均使能,反之只使用A通道。

  2、时钟选择

  无论是同步还是异步,都必须有时钟源。uPP是同步的,发送方提供时钟源。

  传输模式使用内部时钟:

  I/O Clock = Transmit Clock/(2 × (UPICR.CLKDIVn + 1))

  

  上图的transmit Clock通过查看相关的手册可知是锁相环得出的,来自PLL0_SYSCLK2,再将其二分频后再经过(UPICR.CLKDIV+1)分频,得到CLOCK pin的频率。

  3、数据格式

  uPP支持任何字长介于8~16bit的数据,显然,要操作8bit、16bit很简单,那么对于数据字长介于8bit~16bit之间的数据应该怎么操作呢。下图给出了12bit数据的打包方式。

  TMS320C6748

  Right-Justify, Zero Extend –很简单,就是字面上的意思,右对齐,高位空出的位清零。

  Right-Justify, Sign Extend –右对齐,高位的状态取决于最高bit的状态,当为1那么所有空出的高位补1,例如ABCh(101010111100),最高位为1,转换为16bit数据为FABCh。

  Left-Justify, Zero Fill–左对齐,低位空出的位补零。

  4、模式选择

  TMS320C6748

  5、数据触发方式

  单倍数据传输:(SDR)数据信号只能在时钟上升沿或者下降沿触发有效

  双倍数据传输:(DDR)数据信号在时钟上升沿和下降沿都触发有效

  uPP具有2个独立的DMA模块,分别称为DMA模块I,DMA模块Q。

  通道A、B在传输数据时是通过DMA模块来实现的,DMA模块与通道的对应关系如下图:

  TMS320C6748

  6、DMA专用术语Windows Address、Byte Count、Line Count、Line Offset Address在内存中关系。

  

  上图很清楚的告诉我们Windows Address只指其起始地址,Line Offset Address是指其偏移地址。然后一个疑问是为什么在图中看来,Line1和Line2永远都分开着,Line与Line之间是连续存放的还是无间隙的?

  仔细阅读datasheet会发现,在述说这段的文字中总强调起始地址最好设置为aligned to a 64-bit (that is, the3 LSBs must equal 0)。再一琢磨,如果起始地址达到了alignedto a 64-bit 的要求,那Line与Line就是无缝连接了。而且在实际应用中,Line与Line之间都是连续存放的,因为配置DMA channel 的寄存器UPTCR只提供了64Bytes 128Bytes 256Bytes选项。

  7、时序图

  (1)单倍数据发送

  

  (2)单倍数据接收

  

  (3)双倍数据接收

  

  上图是单通道接收SDR模式,看似好好的时序图,START信号高电平使能整个uPP接收,但是datasheet中却表示START的极性是可以通过STARTx bit in UPICR来修改的,即START可以低电平触发使能uPP。给人一种感觉:start、enalbe、wait信号又是可以禁止又是可以使能的,很容易迷惑人。到底怎么配置能达到通信要求,参考时序图,还是发送方接收方不一样配置?

  回头一想,start、enable的极性都可以自己定义,只要发送和接收配置成一致就行了,因为uPP大多时候用于与adc的无缝连接,虽然adc都是高电平触发使能的,但也没准有的adc是下降沿使能触发的。即adc也可能是高电平使能也可能是低电平使能。start、enable信号极性使能的可配置型使得应用adc更加自由不再拘束了。

  8、程序

  (1)uPP初始化文件

  /*

  *uPP.h

  *

  * Created on: 2015-7-2

  * Author: JJS

  */

  #ifndef UPP_H_

  #define UPP_H_

  #define M 256

  Uint32 Buffer_Trans[1000];

  Uint32 Buffer_Recv[1000];

  /*

  extern voidsetup_uPP_receive(void)

  {

  uppRegs-》UPPCR= (CSL_UPP_UPPCR_SWRST_RESET《《CSL_UPP_UPPCR_SWRST_SHIFT);//寄存器复位

  delay(10);

  uppRegs-》UPPCR= (CSL_UPP_UPPCR_SWRST_RUNNING《《CSL_UPP_UPPCR_SWRST_SHIFT);//离开复位模式

  uppRegs-》UPCTL=0;

  uppRegs-》UPICR=0;

  uppRegs-》UPIVR=0;

  uppRegs-》UPIES=0;

  uppRegs-》UPDLB=0;

  uppRegs-》UPPCR=0;

  uppRegs-》UPTCR=0;

  uppRegs-》UPCTL= (

  (CSL_UPP_UPCTL_IWA_16BIT 《《 CSL_UPP_UPCTL_IWA_SHIFT)|//数据传输16Bit

  (CSL_UPP_UPCTL_DRA_SINGLE 《《 CSL_UPP_UPCTL_DRA_SHIFT)|//单数据模式

  (CSL_UPP_UPCTL_DPWA_FULL 《《CSL_UPP_UPCTL_DPWA_SHIFT)|//全数传输

  (CSL_UPP_UPCTL_CHN_ONE 《《 CSL_UPP_UPCTL_CHN_SHIFT)|//双通道

  (CSL_UPP_UPCTL_MODE_RECEIVE 《《 CSL_UPP_UPCTL_MODE_SHIFT ));//A接

  uppRegs-》UPICR= (( 0《《CSL_UPP_UPICR_CLKDIVB_SHIFT)|//通道的时钟分频

  (0《《CSL_UPP_UPICR_CLKDIVA_SHIFT)|

  (1《《CSL_UPP_UPICR_STARTA_SHIFT)|

  (1《《CSL_UPP_UPICR_ENAA_SHIFT));

  uppRegs-》UPTCR= (( CSL_UPP_UPTCR_TXSIZEB_64B《《CSL_UPP_UPTCR_TXSIZEB_SHIFT)|//数据发送门限

  (CSL_UPP_UPTCR_TXSIZEA_64B《《CSL_UPP_UPTCR_TXSIZEA_SHIFT)|

  (CSL_UPP_UPTCR_RDSIZEQ_64B《《CSL_UPP_UPTCR_RDSIZEQ_SHIFT)|

  (CSL_UPP_UPTCR_RDSIZEI_64B《《CSL_UPP_UPTCR_RDSIZEI_SHIFT));

  uppRegs-》UPIVR= ( (0x0AAA 《《CSL_UPP_UPIVR_VALB_SHIFT)| //空闲状态下固定的数据值

  (0x0AAA 《《CSL_UPP_UPIVR_VALA_SHIFT));

  uppRegs-》UPIES= ((CSL_UPP_UPIES_EOLQ_SET《《CSL_UPP_UPIES_EOLQ_SHIFT)|//中断标志

  (CSL_UPP_UPIES_EOWQ_SET《《CSL_UPP_UPIES_EOWQ_SHIFT)|

  (CSL_UPP_UPIES_EOLI_SET《《CSL_UPP_UPIES_EOLI_SHIFT)|

  (CSL_UPP_UPIES_EOWI_SET《《CSL_UPP_UPIES_EOWI_SHIFT));

  //

  uppRegs-》UPDLB=((CSL_UPP_UPDLB_BA_DISABLE《《CSL_UPP_UPDLB_BA_SHIFT )|

  (CSL_UPP_UPDLB_AB_DISABLE《《CSL_UPP_UPDLB_AB_SHIFT));

  uppRegs-》UPPCR= ((CSL_UPP_UPPCR_EN_ENABLE《《CSL_UPP_UPPCR_EN_SHIFT)|//使能接口

  (CSL_UPP_UPPCR_SOFT_ENABLE《《CSL_UPP_UPPCR_SOFT_SHIFT)|

  (CSL_UPP_UPPCR_RTEMU_ENABLE《《CSL_UPP_UPPCR_RTEMU_SHIFT));

  }

  */

  void setup_uPP_LoopBack(void)

  {

  uppRegs-》UPPCR= (CSL_UPP_UPPCR_SWRST_RESET《《CSL_UPP_UPPCR_SWRST_SHIFT);//寄存器复位

  delay(300);

  uppRegs-》UPPCR= (CSL_UPP_UPPCR_SWRST_RUNNING《《CSL_UPP_UPPCR_SWRST_SHIFT);//离开复位模式

  uppRegs-》UPCTL =0;

  uppRegs-》UPICR=0;

  uppRegs-》UPIVR=0;

  uppRegs-》UPIES=0;

  uppRegs-》UPDLB =0;

  uppRegs-》UPPCR=0;

  uppRegs-》UPTCR=0;

  uppRegs-》UPCTL = ((CSL_UPP_UPCTL_IWB_16BIT 《《 CSL_UPP_UPCTL_IWB_SHIFT)|//数据传输16Bit

  (CSL_UPP_UPCTL_IWA_16BIT 《《 CSL_UPP_UPCTL_IWA_SHIFT)|//数据传输16Bit

  (CSL_UPP_UPCTL_DRB_SINGLE 《《 CSL_UPP_UPCTL_DRB_SHIFT)|//单数据模式

  (CSL_UPP_UPCTL_DRA_SINGLE 《《 CSL_UPP_UPCTL_DRA_SHIFT)|//单数据模式

  (CSL_UPP_UPCTL_DPWB_FULL 《《 CSL_UPP_UPCTL_DPWB_SHIFT)|//全数传输

  (CSL_UPP_UPCTL_DPWA_FULL 《《CSL_UPP_UPCTL_DPWA_SHIFT)|//全数传输

  (CSL_UPP_UPCTL_CHN_TWO 《《 CSL_UPP_UPCTL_CHN_SHIFT)|//双通道

  (CSL_UPP_UPCTL_MODE_DUPLEX1 《《 CSL_UPP_UPCTL_MODE_SHIFT ));//A发B接

  uppRegs-》UPICR= (( 2《《CSL_UPP_UPICR_CLKDIVB_SHIFT)|//通道的时钟分频

  (2《《CSL_UPP_UPICR_CLKDIVA_SHIFT)|

  // (2《《CSL_UPP_UPICR_STARTA_SHIFT)|//开始信号(仅配置接收)

  // (2《《CSL_UPP_UPICR_ENAA_SHIFT))|//使能信号(仅配置接收)

  (2《《CSL_UPP_UPICR_STARTB_SHIFT)|//开始信号(仅配置接收)

  (2《《CSL_UPP_UPICR_ENAB_SHIFT));//使能信号(仅配置接收);

  uppRegs-》UPTCR= ((CSL_UPP_UPTCR_TXSIZEB_64B《《CSL_UPP_UPTCR_TXSIZEB_SHIFT)|//数据发送门限

  (CSL_UPP_UPTCR_TXSIZEA_64B《《CSL_UPP_UPTCR_TXSIZEA_SHIFT)|

  ( CSL_UPP_UPTCR_RDSIZEQ_64B《《CSL_UPP_UPTCR_RDSIZEQ_SHIFT)|

  (CSL_UPP_UPTCR_RDSIZEI_64B《《CSL_UPP_UPTCR_RDSIZEI_SHIFT));

  uppRegs-》UPIVR= ( (0x0AAA 《《CSL_UPP_UPIVR_VALB_SHIFT)| //空闲状态下固定的数据值

  (0x0AAA 《《CSL_UPP_UPIVR_VALA_SHIFT));

  uppRegs-》UPIES= ((CSL_UPP_UPIES_EOLQ_SET《《CSL_UPP_UPIES_EOLQ_SHIFT)|//中断标志

  (CSL_UPP_UPIES_EOWQ_SET《《CSL_UPP_UPIES_EOWQ_SHIFT)|

  (CSL_UPP_UPIES_EOLI_SET《《CSL_UPP_UPIES_EOLI_SHIFT)|

  (CSL_UPP_UPIES_EOWI_SET《《CSL_UPP_UPIES_EOWI_SHIFT));

  uppRegs-》UPDLB =((CSL_UPP_UPDLB_BA_DISABLE《《CSL_UPP_UPDLB_BA_SHIFT )|//B发A收

  (CSL_UPP_UPDLB_AB_ENABLE《《CSL_UPP_UPDLB_AB_SHIFT ));//A发B收

  uppRegs-》UPPCR= ((CSL_UPP_UPPCR_EN_ENABLE《《CSL_UPP_UPPCR_EN_SHIFT)|//使能接口

  (CSL_UPP_UPPCR_SOFT_ENABLE《《CSL_UPP_UPPCR_SOFT_SHIFT)|

  (CSL_UPP_UPPCR_RTEMU_ENABLE《《CSL_UPP_UPPCR_RTEMU_SHIFT));

  }

  extern void uPP_Loopback()

  {

  /*******B通道*******/

  // setup_uPP_reset();

  uppRegs-》UPQD0= (Uint32)&Buffer_Recv;//发送数组地址,8Bit对齐

  uppRegs-》UPQD1 = 0x00010000+M*4*3;//128*2*4*2

  uppRegs-》UPQD2 = 0x00010000;

  // setup_uPP_reset();

  /*******A通道*******/

  uppRegs-》UPID0= (Uint32)&Buffer_Trans;//接收数组地址,8Bit对齐

  uppRegs-》UPID1 = 0x00010000+M*4*3;//128*2*4

  uppRegs-》UPID2 = 0x00010000;

  }

  (2)uPP功能程序

  extern void uPP_Resiver()

  {

  // setup_uPP_reset();

  /*******A通道*******/

  uppRegs-》UPID0= (Uint32)&Buffer_Recv;//接收数组地址,8Bit对齐

  uppRegs-》UPID1 = 0x00010000+M*4*3;//128*2*4

  uppRegs-》UPID2 = 0x00010000;

  }

  extern void uPP_Transfer()

  {

  // setup_uPP_reset();

  /*******B通道*******/

  uppRegs-》UPQD0= (Uint32)&Buffer_Recv;//接收数组地址,8Bit对齐

  uppRegs-》UPQD1 = 0x00010000+M*4*3;//128*2*4

  uppRegs-》UPQD2 = 0x00010000;

  }

  #endif /* UPP_H_ */

  (3)uPP功能主程序

  int jj=0;

  int kk=0;

  //float data;

  //int PaRAM_event10_Buffer_Ping();

  void main(void)

  {

  //setup_uPP_receive();

  setup_uPP_LoopBack();

  for(kk=0;kk《768;kk++)

  {

  Buffer_Trans[kk]=kk;

  }

  //uPP_Transfer();

  //uPP_Resiver();

  uPP_Loopback();

  while(1);

  }

  结语

  关于tms320c6748的相关介绍就到这了,如有不足之处欢迎指正。

相关阅读推荐:基于TMS320C6416的USB数据传输系统设计

相关阅读推荐:TMS320C54xx、LV320AIC24型多媒体数字信号

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分