navicat怎么添加check约束
304
2022-11-21
tms320c6748异步接口访问相关问题
本文主要是关于tms320c6748的相关介绍,并着重对tms320c6748异步接口访问相关问题进行了详尽的阐述。
tms320c6748
C6748 DSP 的关键特性与优势:
·最低成本与最低功耗的 C6000 处理器以及业界最低功耗的浮点 DSP 总功耗为 420mW,在特定使用情况下电压为 1.0V时待机功耗为 7mW;
·待机功耗比市场上现有的浮点 DSP 解决方案降低多达 9 倍;
·TI 首款集成 SATA 的处理器,可支持大容量数据存储;
·通过 DVFS 提供多个工作点,可关闭不使用的外设并提供可选的 I/O 电压,这些优异特性有助于提高便携性并降低产品的发热量;
·配套提供的 TI TPS65070 电源管理产品可实施所有时序与默认选项,并可支持器件的低功耗模式;
·高达 300 MHz 的 C674x 内核可为高精度及宽动态范围提供浮点工作能力以及能实现更高性能的定点工作能力;
·C6748 能实现引脚对引脚兼容,使客户能采用同一软件和硬件平台扩展整个产品系列;
·128 KB 至 448 KB 的片上存储器可减少外部存储器接入,并降低功耗。
德州仪器 (TI) 推出浮点功能的全新高性能处理器 —— TMS320C6748,这款芯片也是业界功耗最低的浮点数字信号处理器 (DSP),可充分满足高能效、连通性设计对高集成度外设、更低热量耗散以及更长电池使用寿命的需求。不仅具备通用并行端口 (uPP),同时也是 TI 首批集成串行高级技术附件 (SATA)的器件。
tms320c6748异步接口访问相关问题
1、uPP硬件IO资源,通信时需要用到的管脚:
UPCTL寄存器中的CHN、IWA、IWB决定A、B通道与DATA[15:0]、XDATA[15:0]的关系。IWA为高,A通道使用16bit数据,反之则为8bit数据,IWB同理;CHN为高,A、B通道均使能,反之只使用A通道。
无论是同步还是异步,都必须有时钟源。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, Sign Extend –右对齐,高位的状态取决于最高bit的状态,当为1那么所有空出的高位补1,例如ABCh(101010111100),最高位为1,转换为16bit数据为FABCh。
Left-Justify, Zero Fill–左对齐,低位空出的位补零。
4、模式选择
5、数据触发方式
单倍数据传输:(SDR)数据信号只能在时钟上升沿或者下降沿触发有效
双倍数据传输:(DDR)数据信号在时钟上升沿和下降沿都触发有效
通道A、B在传输数据时是通过DMA模块来实现的,DMA模块与通道的对应关系如下图:
上图很清楚的告诉我们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信号又是可以禁止又是可以使能的,很容易迷惑人。到底怎么配置能达到通信要求,参考时序图,还是发送方接收方不一样配置?
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)
{
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_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;
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的相关介绍就到这了,如有不足之处欢迎指正。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~