本文主要是關于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資源,通信時需要用到的管腳:
由上圖可看出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的相關介紹就到這了,如有不足之處歡迎指正。
-
SPI
+關注
關注
17文章
1700瀏覽量
91317 -
TMS320C6748
+關注
關注
3文章
42瀏覽量
13093
發布評論請先 登錄
相關推薦
評論