HPI接口在TI DSP中的應(yīng)用及常見問題分析
3. HPI寄存器地址映射
HPI口提供給主機端訪問的寄存器只有4個,通過HCNTL[1:0]選擇。
表1:HPI寄存器訪問選擇
由于在復(fù)用模式下數(shù)據(jù)線通常只有寄存器寬度的一半,所以一個完整的數(shù)據(jù)訪問由高低半字兩次訪問組成,由HWIL信號控制,HWIL信號必須是先低后高。通常將HWIL和HCNTL[1:0]接在主機的地址線上,將4個寄存器映射為主機端的8個內(nèi)存單元,下表中的地址線連接方法將8半字寄存器映射到主機的8個連續(xù)的內(nèi)存單元。這里的地址線是用來選擇HPI的寄存器,與非復(fù)用模式下的地址線直接訪問DSP的內(nèi)存空間是完全不同的作用。
表2:HPI寄存器地址映射
4. HPI寄存器功能說明
HPIC (HPI Control Register)
HPI控制寄存器HPIC的位圖如表3所示,C6000系列DSP的HPI寄存器是32位的,也只有低16位有效,與C5000系列DSP的HPIC寄存器定義的功能保持一致。不同版本的HPI接口的HPIC位定義的主要不同之處在于軟件握手HRDY位的有無,其它位名稱可能存在細小差異,但功能定義都是一樣的。
表3:HPI Control Register
主機在對HPI進行訪問前可以通過HPIC配置字節(jié)序(HWOB)和地址寄存器模式(DUALHPIA)。默認的配置為HWOB=0,即先訪問高半;DUALHPIA=0,即單地址寄存器模式,讀和寫操作使用同一個HPIA;通常都采用默認的HPIC 寄存器配置。
HWOB與硬件信號HWIL是沒有聯(lián)系的,HWIL信號必須保證先低后高分別訪問兩個半字單元。至于先訪問一個字當中的高或低半字,是由HWOB控制的。
HPIA (HPI Address Register)
物理上存在HPIAR,HPIAW兩個地址寄存器。HPIAR是讀操作地址寄存器;HPIAW是寫操作地址寄存器。由HPIC的DUALHPIA位來決定是采用雙地址寄存器模式還是單地址寄存器模式。如果采用雙地址寄存器模式,在對HPIA操作之前,通過設(shè)置HPIC的HPISEL位選擇下一個要訪問的HPIA.通常為了簡化在讀寫操作轉(zhuǎn)換時對HPIC的操作,選用單地址寄存器模式。
HPIA的地址信息在不同系列DSP上有所不同:
在C5000上,數(shù)據(jù)空間,I/O空間只能按16位字尋址,程序空間按字節(jié)尋址。HPI的DMA訪問屬于I/O空間,HPIA的值代表16位字地址。如主機端要訪問DSP內(nèi)存字節(jié)地址0x100, 則要往HPIA寫的地址值是0x80.在用HPI啟動時,要注意DSP代碼是按字節(jié)地址鏈接的,即代碼段的地址是字節(jié)地址,主機端要將代碼段的地址信息除以2再送到HPIA.
在C64上,HPIA的值代表字節(jié)地址,但是HPI訪問的數(shù)據(jù)是32位的,所以HPI會忽略HPIA地址值的低兩位。
在C64+的DSP上,HPIA代表32位字地址,HPI會將字地址左移兩位轉(zhuǎn)換成字節(jié)地址,主機若要訪問DSP字節(jié)地址0x100,則要賦值HPIA 為0x40.
HPID (HPI Data Register)
主機通過HPI對DSP的內(nèi)存訪問是間接訪問,主機只能訪問HPID,HPID與DSP內(nèi)存之間是通過HPI專屬的DMA進行數(shù)據(jù)搬運的。如圖3所示。
圖3:HPI讀寫數(shù)據(jù)流
HPID的訪問分為自增模式和非自增模式。在自增模式下,訪問HPID后,HPIA會自動增加指向下一個字地址,在連續(xù)訪問時,自增模式因為減少了主機對HPIA的操作,可以增加HPI 數(shù)據(jù)訪問的吞吐率。非自增模式下訪問HPID后,HPIA的值保持不變,主機需要更新HPIA來訪問下一個地址。
在寫操作時,主機把數(shù)據(jù)寫到HPID,HPI將第二個半字的數(shù)據(jù)通過HSTROBE的上升沿鎖存到HPID后,將HRDY置為忙狀態(tài),并啟動HPI DMA將HPID的內(nèi)容搬到HPIA所指向的內(nèi)存單元,然后清除HRDY指示可以進行下一次操作。
在讀操作時,在第一個HSTROBE的下降沿,HPI采樣到HR/W為讀命令,則將HRDY置為忙狀態(tài),啟動HPIDMA將HPIA指向的內(nèi)存單元的數(shù)據(jù)搬到HPID,清除HRDY忙狀態(tài),主機端方可結(jié)束總線訪問周期,鎖存數(shù)據(jù)線上的有效數(shù)據(jù)。
評論