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配置相关推荐
- 【创龙TMS320C6748开发板试用】+几种基本的程序下载和烧写办法总结
今天刚好歇下来,就折腾折腾板子了.本来是对着视频学习的,但是其实视频上毕竟是讲,一遍过去了,可能小的东西忽略了,导致怎么都不成功,折腾了好久,也算稍微摸了一点门道,在此大致总结下,和大家一起分享学习 ...
- 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(一)
此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于仿真器的程序加载和烧写,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手册的阅读,欢迎 ...
- 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(四)
此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于SD卡烧写程序到NAND FLASH,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手 ...
- 【学习分享】2、创龙 TMS320C6748开发板程序加载和烧写(二)
此部分由于篇幅过长,将分为五个小点进行叙述,此处主讲基于串口的程序加载和烧写,所用器件为创龙TMS320C6748开发板.需要注意的点已在备注中进行说明. 如果需要从头开始进行本使用手册的阅读,欢迎阅 ...
- 【学习分享】8 创龙TMS320C6748开发板 基于PRU的Demo例程演示
hello亲爱的读者们,小编又来更新啦,今天例程所处开发环境依然还是广州创龙开发的TMS320C6748开发板,对往期文章有兴趣的读者可以转到置顶查看往期文章.至此,[学习分享]创龙TMS320C67 ...
- 【学习分享】0、创龙 TMS320C6748开发例程使用手册
如果需要从头开始进行本使用手册的阅读,欢迎阅读本博其他文章(见置顶或文章结尾) 由广州创龙自主研发的SOM-TL6748核心板是基于TI TMS320C6748定点/浮点DSP核心板,55mm*33m ...
- 使用CCS+XDS100V2在创龙DM3730开发板完成程序下载和调试
2018.4.10日拿到创龙EVM-DM3730开发板,按照操作手册进行SD卡程序启动操作,基本上没有问题. 由于项目需要,在DM3730上开发裸机程序,完成对外围器件的功能测试,因此尝试使用下载器对 ...
- 创龙AM5728开发板PRU网口测试
本次测试使用广州创龙TL5728-IDK工业控制开发板进行PRU网口测试. 开发板特点: Ø 基于TI AM5728浮点双DSP C66x +双ARM Cortex-A15工业控制及高性能音视频处理器 ...
- 广州创龙TLK7-EVM开发板介绍
开发板简介 Ø 基于Xilinx Kintex-7系列高性价比FPGA处理器: Ø FPGA芯片型号为XC7K325T-2FFG676I,兼容XC7K160T/410T-2FFG676I,NOR FL ...
最新文章
- 16位汇编 在代码段中使用数据
- PCL:PCL可视化显示点云
- 给ubuntu换个图标主题(icon theme)
- android怎么ota升级,Android OTA升级过程
- Magento教程 5:系统安装与备份
- 不劳烦苹果了!现在,FBI让嫌疑人抬头刷脸就能解锁iPhone
- 为癌症医生提供最匹配的医学文献,达摩院精准医学搜索引擎TREC PM 2020评测夺冠...
- linux maven 添加项目,Eclipse中Maven项目添加jar包
- 基于Android语言的通信调试助手实现(TCP协议+Socket编程)
- Android音频系统之二音频框架
- 相比传统软件服务,KGB知识图谱的进阶应用体现在哪里
- matlab积分e (x 2),e^(x^2)的定积分
- 可参考的oa系统demo,抠图网站,机票界面,博客开发网站
- 易语言自学视频教程,第一次接触易语言的感受!
- java插件相对布局,C#Winform中控件的布局思想
- 主机名以及内外部命令
- psv2000注册连接不上服务器,PSV地域服务器须知
- 芯片|兆易创新逾7300万股限售股下周一上市流通 占总股本23%
- npm 开启了npm run dev以后怎么退出或关闭
- 2022-5-4-找出游戏的获胜者
热门文章
- java-php-python-ssm诗词文化网站计算机毕业设计
- 【重磅】写了400多页的Java面试八股文PDF,面试必备
- 算法图解(基于C语言)
- html语言的基本发展历程,网页设计与制作发展史
- Unity 蓝湖 关于UI工作流优化的思考
- 含有稀土元素Tb荧光磁性高分子微球/可聚合端基双键铕多元配位复合物荧光微球的研究
- Windows10企业版下载与安装教程
- python基础教程 pdf github_Python极速入门的多本最佳书籍,不可错过的Python学习资料...
- pureref 平移用不了_参考图片神器《PureRef》操作全翻译
- 转: 两款优秀的服务器网络流量监控工具:Ntopng和Munin-功能强大直观