OMAPL138有多种地址数据总线如I2C、SPI、UART,这些接口能够满足一般的低速传送要求,但是在高速协同中却不能满足数据传输的需求。我们知道,并行数据传输肯定要比串行传输快,TMS320C6748平台上搭载了uPP(通用并行IO)。在Ti公司的66系列DSP中搭载了更高速的RapidIO接口,最高速率达10Gbps,相比TCPIP协议软件开销较低,与 FPGA互联方便,是一种比较有前景的通信技术。
       1、uPP硬件IO资源,通信时需要用到的管脚:
       由上图可看出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来实现的。
       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数据的打包方式。
Right-Justify, Zero Extend –很简单,就是字面上的意思,右对齐,高位空出的位清零。
Right-Justify, Sign Extend –右对齐,高位的状态取决于最高bit的状态,当为1那么所有空出的高位补1,例如ABCh(101010111100),最高位为1,转换为16bit数据为FABCh。
Left-Justify, Zero Fill–左对齐,低位空出的位补零。
4、模式选择
      
       5、数据触发方式
单倍数据传输:(SDR)数据信号只能在时钟上升沿或者下降沿触发有效
双倍数据传输:(DDR)数据信号在时钟上升沿和下降沿都触发有效  
       uPP具有2个独立的DMA模块,分别称为DMA模块I,DMA模块Q。
通道A、B在传输数据时是通过DMA模块来实现的,DMA模块与通道的对应关系如下图:
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开发板———uPP配置相关推荐

  1. 【创龙TMS320C6748开发板试用】+几种基本的程序下载和烧写办法总结

    今天刚好歇下来,就折腾折腾板子了.本来是对着视频学习的,但是其实视频上毕竟是讲,一遍过去了,可能小的东西忽略了,导致怎么都不成功,折腾了好久,也算稍微摸了一点门道,在此大致总结下,和大家一起分享学习 ...

  2. 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(一)

    此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于仿真器的程序加载和烧写,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手册的阅读,欢迎 ...

  3. 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(四)

    此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于SD卡烧写程序到NAND FLASH,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手 ...

  4. 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(二)

    此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于串口的程序加载和烧写,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手册的阅读,欢迎阅 ...

  5. 【学习分享】8 创龙TMS320C6748开发板 基于PRU的Demo例程演示

    hello亲爱的读者们,小编又来更新啦,今天例程所处开发环境依然还是广州创龙开发的TMS320C6748开发板,对往期文章有兴趣的读者可以转到置顶查看往期文章.至此,[学习分享]创龙TMS320C67 ...

  6. 【学习分享】0、创龙 TMS320C6748开发例程使用手册

    如果需要从头开始进行本使用手册的阅读,欢迎阅读本博其他文章(见置顶或文章结尾) 由广州创龙自主研发的SOM-TL6748核心板是基于TI TMS320C6748定点/浮点DSP核心板,55mm*33m ...

  7. 使用CCS+XDS100V2在创龙DM3730开发板完成程序下载和调试

    2018.4.10日拿到创龙EVM-DM3730开发板,按照操作手册进行SD卡程序启动操作,基本上没有问题. 由于项目需要,在DM3730上开发裸机程序,完成对外围器件的功能测试,因此尝试使用下载器对 ...

  8. 创龙AM5728开发板PRU网口测试

    本次测试使用广州创龙TL5728-IDK工业控制开发板进行PRU网口测试. 开发板特点: Ø 基于TI AM5728浮点双DSP C66x +双ARM Cortex-A15工业控制及高性能音视频处理器 ...

  9. 广州创龙TLK7-EVM开发板介绍

    开发板简介 Ø 基于Xilinx Kintex-7系列高性价比FPGA处理器: Ø FPGA芯片型号为XC7K325T-2FFG676I,兼容XC7K160T/410T-2FFG676I,NOR FL ...

最新文章

  1. 16位汇编 在代码段中使用数据
  2. PCL:PCL可视化显示点云
  3. 给ubuntu换个图标主题(icon theme)
  4. android怎么ota升级,Android OTA升级过程
  5. Magento教程 5:系统安装与备份
  6. 不劳烦苹果了!现在,FBI让嫌疑人抬头刷脸就能解锁iPhone
  7. 为癌症医生提供最匹配的医学文献,达摩院精准医学搜索引擎TREC PM 2020评测夺冠...
  8. linux maven 添加项目,Eclipse中Maven项目添加jar包
  9. 基于Android语言的通信调试助手实现(TCP协议+Socket编程)
  10. Android音频系统之二音频框架
  11. 相比传统软件服务,KGB知识图谱的进阶应用体现在哪里
  12. matlab积分e (x 2),e^(x^2)的定积分
  13. 可参考的oa系统demo,抠图网站,机票界面,博客开发网站
  14. 易语言自学视频教程,第一次接触易语言的感受!
  15. java插件相对布局,C#Winform中控件的布局思想
  16. 主机名以及内外部命令
  17. psv2000注册连接不上服务器,PSV地域服务器须知
  18. 芯片|兆易创新逾7300万股限售股下周一上市流通 占总股本23%
  19. npm 开启了npm run dev以后怎么退出或关闭
  20. 2022-5-4-找出游戏的获胜者

热门文章

  1. java-php-python-ssm诗词文化网站计算机毕业设计
  2. 【重磅】写了400多页的Java面试八股文PDF,面试必备
  3. 算法图解(基于C语言)
  4. html语言的基本发展历程,网页设计与制作发展史
  5. Unity 蓝湖 关于UI工作流优化的思考
  6. 含有稀土元素Tb荧光磁性高分子微球/可聚合端基双键铕多元配位复合物荧光微球的研究
  7. Windows10企业版下载与安装教程
  8. python基础教程 pdf github_Python极速入门的多本最佳书籍,不可错过的Python学习资料...
  9. pureref 平移用不了_参考图片神器《PureRef》操作全翻译
  10. 转: 两款优秀的服务器网络流量监控工具:Ntopng和Munin-功能强大直观