HPI接口在TI SOC的應(yīng)用
主機(jī)在對(duì)HPI 進(jìn)行訪問(wèn)前可以通過(guò)HPIC 配置字節(jié)序(HWOB)和地址寄存器模式(DUALHPIA)。默認(rèn)的配置為HWOB=0,即先訪問(wèn)高半;DUALHPIA=0,即單地址寄存器模式,讀和寫(xiě)操作使用同一個(gè)HPIA;通常都采用默認(rèn)的HPIC 寄存器配置。
HWOB 與硬件信號(hào)HWIL 是沒(méi)有聯(lián)系的,HWIL 信號(hào)必須保證先低后高分別訪問(wèn)兩個(gè)半字單元。至于先訪問(wèn)一個(gè)字當(dāng)中的高或低半字,是由HWOB 控制的。
HPIA (HPI Address Register)
物理上存在HPIAR,HPIAW 兩個(gè)地址寄存器。HPIAR 是讀操作地址寄存器;HPIAW 是寫(xiě)操作地址寄存器。由HPIC 的DUALHPIA 位來(lái)決定是采用雙地址寄存器模式還是單地址寄存器模式。如果采用雙地址寄存器模式,在對(duì)HPIA 操作之前,通過(guò)設(shè)置HPIC 的HPISEL 位選擇下一個(gè)要訪問(wèn)的HPIA。通常為了簡(jiǎn)化在讀寫(xiě)操作轉(zhuǎn)換時(shí)對(duì)HPIC 的操作,選用單地址寄存器模式。
HPIA 的地址信息在不同系列DSP 上有所不同:
在C5000 上,數(shù)據(jù)空間,I/O 空間只能按16 位字尋址,程序空間按字節(jié)尋址。HPI 的DMA 訪問(wèn)屬于I/O 空間,HPIA 的值代表16 位字地址。如主機(jī)端要訪問(wèn)DSP 內(nèi)存字節(jié)地址0x100, 則要往HPIA 寫(xiě)的地址值是0x80。在用HPI 啟動(dòng)時(shí),要注意DSP 代碼是按字節(jié)地址鏈接的,即代碼段的地址是字節(jié)地址,主機(jī)端要將代碼段的地址信息除以2 再送到HPIA。
在C64 上,HPIA 的值代表字節(jié)地址,但是HPI 訪問(wèn)的數(shù)據(jù)是32 位的,所以HPI 會(huì)忽略HPIA 地址值的低兩位。
在C64+的DSP 上,HPIA 代表32 位字地址,HPI 會(huì)將字地址左移兩位轉(zhuǎn)換成字節(jié)地址,主機(jī)若要訪問(wèn)DSP 字節(jié)地址0x100,則要賦值HPIA 為0x40。
HPID (HPI Data Register)
主機(jī)通過(guò)HPI 對(duì)DSP 的內(nèi)存訪問(wèn)是間接訪問(wèn),主機(jī)只能訪問(wèn)HPID,HPID 與DSP 內(nèi)存之間是通過(guò)HPI 專屬的DMA 進(jìn)行數(shù)據(jù)搬運(yùn)的。如圖3 所示。
HPID 的訪問(wèn)分為自增模式和非自增模式。在自增模式下,訪問(wèn)HPID 后,HPIA 會(huì)自動(dòng)增加指向下一個(gè)字地址,在連續(xù)訪問(wèn)時(shí),自增模式因?yàn)闇p少了主機(jī)對(duì)HPIA 的操作,可以增加HPI 數(shù)據(jù)訪問(wèn)的吞吐率。非自增模式下訪問(wèn)HPID 后,HPIA 的值保持不變,主機(jī)需要更新HPIA 來(lái)訪問(wèn)下一個(gè)地址。
在寫(xiě)操作時(shí),主機(jī)把數(shù)據(jù)寫(xiě)到HPID,HPI 將第二個(gè)半字的數(shù)據(jù)通過(guò)HSTROBE 的上升沿鎖存到HPID 后,將HRDY 置為忙狀態(tài),并啟動(dòng)HPI DMA 將HPID 的內(nèi)容搬到HPIA 所指向的內(nèi)存單元,然后清除HRDY 指示可以進(jìn)行下一次操作。
在讀操作時(shí),在第一個(gè)HSTROBE 的下降沿,HPI 采樣到HR/W為讀命令,則將HRDY 置為忙狀態(tài),啟動(dòng)HPIDMA 將HPIA 指向的內(nèi)存單元的數(shù)據(jù)搬到HPID,清除HRDY 忙狀態(tài),主機(jī)端方可結(jié)束總線訪問(wèn)周期,鎖存數(shù)據(jù)線上的有效數(shù)據(jù)。
5. HPI 操作流程
主機(jī)對(duì)HPI 的一次總線訪問(wèn)周期為分三個(gè)階段:主機(jī)發(fā)起訪問(wèn),HPI 響應(yīng),主機(jī)結(jié)束訪問(wèn)周期。
A. 主機(jī)發(fā)起訪問(wèn):即對(duì)HPI 寄存器的讀,或者寫(xiě)命令。主機(jī)送出的硬件信號(hào)為HSTROBE(由HCS, HDS1/2產(chǎn)生),HR/W,HCNTL0/1,HWIL,以及HD[0:n]。HPI 在HSTROBE 的下降沿采樣控制信號(hào)HR/W,HCNTL0/1,HWIL 判斷主機(jī)的操作命令。
B. HPI 響應(yīng):HPI 在HSTROBE 的下降沿采樣控制信號(hào),根據(jù)控制信號(hào)做出相應(yīng)的響應(yīng)。如果是寫(xiě)(HR/W為低)命令,則在HSTROBE 的上升沿將數(shù)據(jù)線上的信號(hào)鎖存到HCNTL0/1 和HWIL 指向的寄存器。如果是讀命令(HR/W 為高),如果是讀HPIC,或者HPIA 寄存器,HPI 將寄存器的值直接送到數(shù)據(jù)總線上;如果讀HPID,HPI 先將HRDY 置為忙狀態(tài),HPI DMA 將數(shù)據(jù)從HPIA 指向的內(nèi)存單元讀到HPID,再送到數(shù)據(jù)線上,并清除HRDY 忙狀態(tài),在讀HPID 后半字時(shí),數(shù)據(jù)從寄存器直接送到數(shù)據(jù)總線上,不會(huì)出現(xiàn)HRDY 信號(hào)忙狀態(tài)。
C. 主機(jī)結(jié)束訪問(wèn)周期:對(duì)于寫(xiě)操作,主機(jī)將數(shù)據(jù)送出后,只要滿足芯片手冊(cè)中HPI 對(duì)HCS 的最小寬度要求,即可結(jié)束訪問(wèn)周期。對(duì)于讀HPID 操作,要等HRDY 信號(hào)由忙變?yōu)椴幻?,主機(jī)才能結(jié)束訪問(wèn)周期。兩次連續(xù)的HPI 操作的間隔,在芯片手冊(cè)的HPI 時(shí)序參數(shù)表里有要求,最小間隔為兩個(gè)HPI 功能模塊時(shí)鐘周期。
6. HPI 常見(jiàn)故障案例分析
在HPI 應(yīng)用調(diào)試過(guò)程中,常遇到的問(wèn)題分為:寫(xiě)數(shù)據(jù)不成功,讀數(shù)據(jù)不正確,HRDY 常高。這些問(wèn)題通常都是由于時(shí)序不正確造成的,下面結(jié)合實(shí)際應(yīng)用當(dāng)中的案例進(jìn)行分析。
1.1 寫(xiě)數(shù)據(jù)不成功
案例的硬件連接如下:
首先關(guān)注核心信號(hào)HSTROBE 由DSP_CS,ARM_WR(HDS1),ARM_RD(HDS2)產(chǎn)生,從下面時(shí)序圖可以看出ARM_WR 的下降沿是最后產(chǎn)生的,所以寫(xiě)操作時(shí)HSTROBE 的下降沿反應(yīng)的是ARM_WR 的下降沿。
寫(xiě)HPIC 的時(shí)序截圖如下:
寫(xiě)HPID 的時(shí)序截圖如下:
兩個(gè)時(shí)序圖顯示主機(jī)送出的數(shù)據(jù)111b 在HSTROBE(ARM_WR)的下降沿后,很快被改變成其它值000b。在寫(xiě)HPID 的時(shí)序截圖中,第一個(gè)HSTROBE 的下降后,HPI 送出HRDY 信號(hào),然后數(shù)據(jù)線被改變,首先判斷HPI 對(duì)主機(jī)的命令做出了響應(yīng),通過(guò)HRDY 信號(hào)的出現(xiàn)時(shí)機(jī),說(shuō)明HPI 判斷這是一個(gè)讀操作,可以判斷為HSTROBE 的下降沿采樣HR/W信號(hào)不正確。
從硬件連接來(lái)看,HSTROBE(HR/W)要采樣HR/W,HCNTL0/1 來(lái)判斷主機(jī)命令, HR/W的與HSTROBE 為同一信號(hào)源,且同為下降沿,HR/W與HSTROBE 的下降沿之間的setup 時(shí)間不夠,采樣HR/W的電平狀態(tài)出現(xiàn)誤判,認(rèn)為是高電平讀命令,HPI 對(duì)讀命令的響應(yīng)則是在第一個(gè)HSTROBE 的下降沿之后送出HRDY 信號(hào),并在HRDY 之后,HPI 送出數(shù)據(jù)到總線上。
對(duì)于該問(wèn)題,需要對(duì)參與HSTROBE 邏輯譯碼的HR/W信號(hào)的下降沿做延時(shí)處理,可在邏輯電路如CPLD 或 FPGA 里實(shí)現(xiàn),以確保HSTROBE 的下降沿采樣到穩(wěn)定的HR/W電平。
評(píng)論