《TigerSHARC處理器技術(shù)及其應(yīng)用》課件第4章_第1頁(yè)
《TigerSHARC處理器技術(shù)及其應(yīng)用》課件第4章_第2頁(yè)
《TigerSHARC處理器技術(shù)及其應(yīng)用》課件第4章_第3頁(yè)
《TigerSHARC處理器技術(shù)及其應(yīng)用》課件第4章_第4頁(yè)
《TigerSHARC處理器技術(shù)及其應(yīng)用》課件第4章_第5頁(yè)
已閱讀5頁(yè),還剩170頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第4章TS系列DSP的I/O資源4.1TS處理器的中斷4.2TS處理器的DMA傳輸4.3TS101S的鏈路口4.4TS20XS處理器的鏈路口 4.1TS處理器的中斷

4.1.1TS處理器的中斷源

DSP為應(yīng)用設(shè)計(jì)提供了豐富的中斷資源,從類型上可以分為硬件中斷和軟件中斷。硬件中斷主要包括仿真器中斷、復(fù)位中斷、外部輸入中斷、定時(shí)器中斷、鏈路服務(wù)請(qǐng)求中斷、DMA控制中斷、向量中斷(VIRPT)、硬件錯(cuò)誤中斷和總線鎖定中斷。由于處理器的大部分中斷都是硬件中斷,因此硬件中斷的執(zhí)行效率就很重要。軟件中斷主要是指由特別的指令和軟件異常引起的中斷,具有較高的優(yōu)先級(jí)。此外,中斷也可以分為外部中斷和內(nèi)部中斷。

DSP處理器處理的中斷主要包括:①定時(shí)器中斷;②鏈路口中斷;③?DMA中斷;④外部IRQ中斷;⑤矢量中斷;⑥總線鎖定中斷;⑦硬件錯(cuò)誤中斷;⑧軟件異常中斷;⑨?DEBUG(仿真器)中斷;⑩復(fù)位中斷。對(duì)于以上這些中斷,除了仿真器中斷、軟件異常中斷和復(fù)位中斷不可以屏蔽外,其余中斷都是可以屏蔽的。用戶程序中通過(guò)編程IMASK寄存器可以使能或者屏蔽可屏蔽中斷。如果IMASK寄存器的某個(gè)中斷相應(yīng)位設(shè)置為0(即將該中斷屏蔽),那么當(dāng)出現(xiàn)該中斷請(qǐng)求時(shí),中斷請(qǐng)求只鎖存到中斷鎖存寄存器,但DSP不響應(yīng)中斷服務(wù),直到該中斷在以后解除屏蔽且沒(méi)有清除該中斷鎖存標(biāo)志位時(shí),才響應(yīng)該中斷。

1)定時(shí)器中斷

TS處理器中有兩個(gè)定時(shí)器,能產(chǎn)生四個(gè)定時(shí)器中斷:每個(gè)定時(shí)器產(chǎn)生兩種中斷源,一個(gè)優(yōu)先級(jí)高,一個(gè)優(yōu)先級(jí)低。當(dāng)一個(gè)定時(shí)器產(chǎn)生中斷時(shí),會(huì)同時(shí)將中斷鎖存寄存器ILAT中對(duì)應(yīng)的高和低優(yōu)先級(jí)定時(shí)器中斷位置位。設(shè)置兩個(gè)中斷優(yōu)先級(jí)是為了讓程序員根據(jù)不同的應(yīng)用場(chǎng)合,選擇需要使用高優(yōu)先級(jí)還是低優(yōu)先級(jí)。這樣做的目的是讓用戶通過(guò)使能不同的中斷來(lái)選用所需的優(yōu)先級(jí)。中斷服務(wù)程序執(zhí)行后,僅清除一個(gè)中斷標(biāo)志位。若高優(yōu)先級(jí)和低優(yōu)先級(jí)中斷均使能,則中斷服務(wù)程序會(huì)執(zhí)行兩次。

2)鏈路口中斷

TS處理器有四個(gè)鏈路口,可以產(chǎn)生四個(gè)鏈路口中斷。這些鏈路口通道都有專用的DMA通道協(xié)同其工作,以提高數(shù)據(jù)的傳輸效率。在利用鏈路口進(jìn)行數(shù)據(jù)傳輸時(shí),若鏈路口的接收緩沖區(qū)中有一個(gè)數(shù)據(jù),而沒(méi)有初始化相應(yīng)的DMA通道進(jìn)行接收,則鏈路口將發(fā)出一個(gè)中斷。

3)?DMA中斷

TS處理器有14個(gè)DMA通道,用于數(shù)據(jù)傳輸。每個(gè)DMA通道都可以產(chǎn)生一個(gè)中斷。若DMA通道傳輸控制塊TCB中使能了MDA中斷,且該中斷沒(méi)有屏蔽,全局中斷使能,則該DMA通道塊傳送完成后會(huì)對(duì)中斷鎖存寄存器的相應(yīng)中斷標(biāo)志位置1,產(chǎn)生中斷。

4)外部IRQ中斷

TS處理器提供了四個(gè)外部中斷輸入引腳IRQ0~I(xiàn)RQ3,用于處理器的外部接口對(duì)程序流的控制。這四個(gè)中斷源可以設(shè)置為邊沿觸發(fā),也可以設(shè)置為電平觸發(fā),這可以通過(guò)對(duì)SQCTL寄存器進(jìn)行編程來(lái)實(shí)現(xiàn)。若使能其中斷,且該引腳輸入有效,則發(fā)出一個(gè)中斷。應(yīng)當(dāng)注意的是,如果設(shè)置為電平觸發(fā)中斷,且低電平持續(xù)太長(zhǎng),當(dāng)執(zhí)行完中斷服務(wù)程序后,還沒(méi)有撤銷中斷源,則DSP會(huì)認(rèn)為又產(chǎn)生了一次中斷,再次進(jìn)入中斷服務(wù)程序。

5)矢量中斷

處理器復(fù)位后,會(huì)使能矢量中斷,但未進(jìn)行矢量初始化。其他主處理器可以通過(guò)該中斷發(fā)布中斷事件,使該處理器完成加載。另外,此中斷也可作為一個(gè)通用中斷,供其他主處理器使用。其他主處理器(主機(jī)或其他TS處理器)向這個(gè)寄存器中寫入中斷服務(wù)程序的地址,則該寫操作會(huì)引起矢量中斷。

6)總線鎖定中斷

當(dāng)對(duì)寄存器SQCTL的總線鎖定位置位,且TS處理器獲得總線使用權(quán)時(shí),會(huì)產(chǎn)生總線鎖定中斷,表示TS處理器已經(jīng)獲得外部總線,且鎖定了外部總線,禁止其他處理器使用外部總線。

7)硬件錯(cuò)誤中斷

當(dāng)出現(xiàn)硬件操作錯(cuò)誤時(shí),會(huì)產(chǎn)生硬件錯(cuò)誤中斷。錯(cuò)誤的硬件操作包括:DMATCB初始化錯(cuò)誤,自動(dòng)DMA操作錯(cuò)誤,外部廣播讀操作錯(cuò)誤,訪問(wèn)未使能的SDRAM,在多處理器存儲(chǔ)空間讀自己的存儲(chǔ)空間,鏈路口錯(cuò)誤等。

8)軟件異常中斷

產(chǎn)生軟件異常中斷的主要原因是在程序執(zhí)行過(guò)程中出現(xiàn)了數(shù)據(jù)溢出、非法操作等。當(dāng)軟件異常中斷出現(xiàn)時(shí),如果沒(méi)有使能該中斷,則會(huì)丟失該中斷。導(dǎo)致軟件異常中斷的事件通常有:

(1)?IEEE標(biāo)準(zhǔn)定義的浮點(diǎn)異常。

(2)數(shù)據(jù)出現(xiàn)下溢出,寄存器XSTAT/YSTAT中UEN位置1。

(3)寄存器XSTAT/YSTAT中OEN置位,出現(xiàn)溢出。

(4)調(diào)試異常,如使用TRAP指令,設(shè)置觀測(cè)點(diǎn),觀測(cè)條件匹配。

(5)非法操作,包括使用未定義的指令和對(duì)指令進(jìn)行非法合并。

(6)訪問(wèn)外部非法存儲(chǔ)空間,如利用加載/保存指令或取指操作實(shí)施多處理器空間廣播讀操作。

(7)非法加載未對(duì)齊的數(shù)據(jù),比如從奇地址裝載長(zhǎng)字,從非四字對(duì)齊的地址裝載四字組,且不是DAB訪問(wèn)。

(8)在用戶模式下訪問(wèn)監(jiān)控程序寄存器,侵犯受保護(hù)的寄存器。

(9)同一行中的兩條指令訪問(wèn)同一個(gè)目的地址。

(10)在一個(gè)計(jì)算指令行產(chǎn)生三個(gè)以上的結(jié)果(如,同一指令行中執(zhí)行加減、乘、移位操作)。

(11)在同一指令行中有兩條含有32位立即數(shù)的指令。

(12)當(dāng)預(yù)測(cè)位置位時(shí),同一對(duì)齊的四字組中有多個(gè)分支出現(xiàn)。

當(dāng)這些中斷出現(xiàn)時(shí),首先將其鎖存在中斷鎖存寄存器ILAT中,用戶也可以使用標(biāo)志或者屏蔽寄存器屏蔽這些中斷,使處理器不響應(yīng)該中斷。以上這些中斷的輸入有兩種有效方式,一是電平有效,一是邊沿有效。對(duì)于邊沿有效的中斷,當(dāng)中斷出現(xiàn)時(shí),首先鎖存,直到響應(yīng)了中斷服務(wù)程序,并執(zhí)行中斷服務(wù)程序的第一條指令時(shí),硬件自動(dòng)清除。當(dāng)然,如果不希望響應(yīng),可以采用清除中斷鎖存器的方式清除中斷。對(duì)于電平有效的中斷,如果在中斷信號(hào)撤銷之前處理器還沒(méi)有開始響應(yīng)中斷,則該中斷被丟失,不響應(yīng)。反之,如果中斷服務(wù)程序執(zhí)行完之后,中斷請(qǐng)求還沒(méi)有撤銷,則處理器認(rèn)為是新的中斷。通常電平觸發(fā)中斷可看做是由可訪問(wèn)寄存器的狀態(tài)激勵(lì)的,并通過(guò)讀此寄存器或給寄存器寫入一個(gè)無(wú)效值來(lái)清除。而邊沿觸發(fā)中斷是事件觸發(fā)的。4.1.2TS處理器的中斷向量

當(dāng)處理器處理一個(gè)中斷時(shí),要首先查找中斷向量表。中斷向量表就是含有中斷服務(wù)程序入口地址的指令表,它可以放在處理器的內(nèi)部存儲(chǔ)區(qū),也可以放在外部存儲(chǔ)區(qū)。中斷向量表位于片內(nèi)或者片外存儲(chǔ)區(qū)的地址是相對(duì)于基地址的偏移量。

在TS處理器的中斷源中,每個(gè)中斷都有一個(gè)中斷矢量寄存器與之對(duì)應(yīng),它保存了該中斷服務(wù)程序的入口地址。所有中斷矢量寄存器文件就是所說(shuō)的中斷向量表IVT。整個(gè)向量表有64個(gè)入口地址,其中只有31個(gè)是有效的,其余為保留的。在有效的31個(gè)中斷中,除了四個(gè)通用中斷外,其余都是專用的。中斷矢量寄存器均為32位寬度,用于啟動(dòng)內(nèi)部或外部存儲(chǔ)器中的中斷服務(wù)程序。復(fù)位后,一部分中斷矢量寄存器會(huì)被初始化,并指向特定地址,用于處理器程序加載。如果處理器采用EPROM引導(dǎo)和鏈路引導(dǎo)方式,則將初始化一個(gè)DMA通道,將加載碼載入到存儲(chǔ)器0x0開始的地址。當(dāng)加載DMA執(zhí)行后,它會(huì)發(fā)出一個(gè)DMA中斷。DMA中斷矢量初始化成地址0x0,開始執(zhí)行該引導(dǎo)方式的加載代碼。4.1.3可編程的中斷控制寄存器

在TS處理器中,有31種中斷源,除了不可屏蔽的中斷外,其余的都可以通過(guò)三個(gè)中斷控制寄存器控制處理器對(duì)中斷事件的響應(yīng)。三個(gè)中斷控制寄存器是中斷鎖存寄存器ILAT、中斷屏蔽寄存器IMASK和中斷屏蔽指針寄存器IMASKP。

這三個(gè)寄存器都是64位寬的寄存器,分成兩個(gè)32位寄存器進(jìn)行訪問(wèn),分別用H和L來(lái)標(biāo)識(shí),如ILATH和ILATL、IMASKH和IMASKLPMASKH和PMASKL。

1)中斷控制寄存器INTCTL

在TS201S中,中斷控制寄存器(INTCTL)用于定義外部中斷引腳的中斷觸發(fā)類型(電平或者邊沿觸發(fā))、控制定時(shí)器運(yùn)行或者停止。中斷控制寄存器(INTCTL)的位定義如圖4.1-1所示。圖4.1-1中斷控制寄存器(INTCTL)的位定義

2)中斷鎖存寄存器——(ILATL/ILATH)

中斷鎖存寄存器是一個(gè)64位的寄存器,通過(guò)2個(gè)32位的寄存器對(duì)其進(jìn)行訪問(wèn)。這兩個(gè)寄存器為ILATL和ILATH,分別對(duì)應(yīng)中斷鎖存寄存器的低32位和高32位,且它們都是只讀型的寄存器。

寄存器ILATL和ILATH的位定義與寄存器IMASKL和IMASKH的位定義一致,如圖4.1-2所示。每位對(duì)應(yīng)一種中斷類型,當(dāng)中斷產(chǎn)生時(shí),該寄存器中相應(yīng)的位置“1”,中斷位按照中斷類型優(yōu)先級(jí)排列,位0對(duì)應(yīng)最低中斷類型。對(duì)中斷鎖存寄存器的設(shè)置操作只能通過(guò)寄存器ILATSTL和ILATSTH進(jìn)行,寫入寄存器ILATSTL和ILATSTH的數(shù)值將與寄存器ILATL和ILATH原來(lái)的值進(jìn)行邏輯或(OR)操作,然后將值寫入寄存器ILATL和ILATH。所以,對(duì)寄存器ILATSTL和ILATSTH的某位寫入“1”時(shí),寄存器ILATL和ILATH中相應(yīng)的位將置“1”,而對(duì)寄存器LATSTL和ILATSTH的某位寫入“0”時(shí),寄存器ILATL和ILATH中相應(yīng)的位將沒(méi)變化。圖4.1-2中斷寄存器IMASKL和IMASKH位定義

3)中斷指針屏蔽寄存器——(PMASKL/PMASKH)

中斷指針屏蔽寄存器PMASK是一個(gè)64位的寄存器,通過(guò)2個(gè)32位的寄存器對(duì)其進(jìn)行訪問(wèn)。這兩個(gè)寄存器為PMASKL和PMASKH,分別對(duì)應(yīng)中斷鎖存寄存器的低32位和高32位,且它們都是只讀型的寄存器。寄存器PMASKL和PMASKH的位定義與寄存器IMASKL和IMASKH的位定義一致,如圖4.1-2所示。

中斷指針屏蔽寄存器指示的是當(dāng)前處理器正在響應(yīng)的中斷類型或者正在服務(wù)的中斷服務(wù)程序類型。如果處理器設(shè)置允許中斷嵌套的話,則此時(shí)處理器只會(huì)響應(yīng)中斷優(yōu)先級(jí)比當(dāng)前正在服務(wù)的中斷類型優(yōu)先級(jí)要高的中斷類型,對(duì)于中斷優(yōu)先級(jí)低于當(dāng)前正在服務(wù)的中斷類型優(yōu)先級(jí)的中斷類型將不響應(yīng)。當(dāng)中斷服務(wù)程序完畢后,執(zhí)行RTI或者RETI指令將清除中斷指針屏蔽寄存器中相應(yīng)的位。利用RDS指令可以強(qiáng)制清除中斷指針屏蔽寄存器。

4)中斷屏蔽寄存器——(IMASKL/IMASKH)

中斷指針屏蔽寄存器IMASK是一個(gè)64位的寄存器,通過(guò)2個(gè)32位的寄存器對(duì)其進(jìn)行訪問(wèn)。這兩個(gè)寄存器為IMASKL和IMASKH,分別對(duì)應(yīng)中斷鎖存寄存器的低32位和高32位,且它們都是只讀型的寄存器。寄存器IMASKL和IMASKH的位定義如圖4.1-2所示。對(duì)于可屏蔽中斷,可以通過(guò)設(shè)置寄存器IMASKL和IMASKH中的相應(yīng)位,可以設(shè)置是否響應(yīng)某個(gè)可屏蔽中斷。當(dāng)寄存器IMASKL和IMASKH中的某位置“1”時(shí),可以響應(yīng)相應(yīng)的中斷類型,否則,如果寄存器IMAKL和IMASKH中的某位置“0”,則即使相應(yīng)的中斷類型產(chǎn)生中斷,處理器也不響應(yīng)該中斷。

5)定時(shí)器運(yùn)行當(dāng)前值寄存器——(TIMERxH/L)

TS處理器片內(nèi)包含兩個(gè)定時(shí)器——TIMER0和TIMER1,每個(gè)定時(shí)器都有一個(gè)定時(shí)器運(yùn)行當(dāng)前值寄存器。定時(shí)器運(yùn)行當(dāng)前值寄存器TIMERx是一個(gè)64位的寄存器,通過(guò)2個(gè)32位的寄存器對(duì)其進(jìn)行訪問(wèn)。這兩個(gè)寄存器為TIMERxL和TIMERxH,且它們都是只讀型的寄存器。如果定時(shí)器處于工作狀態(tài),則這兩個(gè)寄存器保存著對(duì)應(yīng)定時(shí)器運(yùn)行的當(dāng)前值。

6)定時(shí)器初始化值寄存器——(TMRINxH/L)

處理器片內(nèi)包含兩個(gè)定時(shí)器——TIMER0和TIMER1,每個(gè)定時(shí)器都有一個(gè)定時(shí)器初始化值寄存器。定時(shí)器初始化值寄存器TMRINx是一個(gè)64位的寄存器,通過(guò)2個(gè)32位的寄存器可對(duì)其進(jìn)行訪問(wèn)。這兩個(gè)寄存器為TMRINxL和TMRINxH,它們保存著對(duì)應(yīng)定時(shí)器運(yùn)行的初始值。

在需要使用定時(shí)器時(shí),應(yīng)當(dāng)在啟動(dòng)定時(shí)器之前把相應(yīng)的定時(shí)器初始值寫入到該寄存器中,然后再啟動(dòng)定時(shí)器。這樣定時(shí)器將從初始值開始,每經(jīng)歷一個(gè)時(shí)鐘周期,便將定時(shí)器初始值減1,直到結(jié)果等于0時(shí),將產(chǎn)生相應(yīng)的定時(shí)器的兩個(gè)中斷(定時(shí)器高優(yōu)先級(jí)中斷和定時(shí)器低優(yōu)先級(jí)中斷),然后定時(shí)器重新從初始值開始運(yùn)行。4.1.4中斷處理過(guò)程

當(dāng)一個(gè)中斷發(fā)生時(shí),寄存器ILAT中相應(yīng)位將置1,同時(shí)將ILAT、IMASK以及PMASK_R按位相與,相與的結(jié)果對(duì)應(yīng)該中斷源的中斷標(biāo)志位為1。如果在IMASK寄存器中使能了全局中斷使能位,則在沒(méi)有其他更高優(yōu)先級(jí)中斷的情況下,TS處理器響應(yīng)優(yōu)先級(jí)最高的且已經(jīng)使能的中斷服務(wù)程序。TigerSHARC的程序控制器開始完成以下操作:

(1)將下一個(gè)取址地址指向中斷向量表IVT中斷矢量寄存器,并將中斷服務(wù)程序的第一條指令壓入指令流水。硬件中斷發(fā)生時(shí),在硬件中斷服務(wù)程序的第一條指令到達(dá)指令流水的EX2階段之前,仍然繼續(xù)執(zhí)行流水中先前的其他正常指令。如果出現(xiàn)異常(exception),則將終止執(zhí)行流水中的所有指令。如果在指令流水中已經(jīng)存在一個(gè)硬件中斷,則不論屏蔽寄存器狀態(tài)如何(PMASK或IMASK),將禁止所有的硬件中斷。

(2)在中斷服務(wù)程序的第一條指令到達(dá)流水的EX2階段之前,重新檢測(cè)全局中斷使能位,若全局中斷禁止,則將終止指令流水中的所有指令,TS處理器開始從正常的指令流中取指,就像沒(méi)有發(fā)生中斷一樣。

(3)將當(dāng)前的PC值(沒(méi)有發(fā)生中斷時(shí)應(yīng)被執(zhí)行指令的PC)保存到相應(yīng)的寄存器中:硬件中斷放在RETI;軟件中斷放在RETS;仿真調(diào)試放在DBGE中。

(4)若有仿真異常,則TS處理器進(jìn)入仿真模式;否則,TS處理器進(jìn)入監(jiān)控程序模式。

(5)當(dāng)中斷服務(wù)程序的第一條指令到達(dá)流水的EX2階段,而且該中斷是邊沿觸發(fā)時(shí),ILAT中的相應(yīng)中斷位將被清除,PMASK中的相應(yīng)中斷位被置位。不論中斷是邊沿觸發(fā)還是電平觸發(fā),此時(shí)PMASK的相應(yīng)中斷位都被置位。PMASK的位[60]僅在硬件中斷時(shí)置位,異常或仿真異常對(duì)其不起作用。上述操作將屏蔽所有的硬件中斷,直到保存RETI寄存器。

以上硬件中斷響應(yīng)過(guò)程如圖4.1-3所示。圖4.1-3TS處理器硬件中斷響應(yīng)過(guò)程在圖中,說(shuō)明了硬件中斷的整個(gè)響應(yīng)過(guò)程。

步驟(1):確定中斷設(shè)置狀態(tài),檢查全局中斷使能位、發(fā)生中斷的中斷使能位,將相關(guān)的位進(jìn)行與運(yùn)算。對(duì)于TS101S,完成操作:

IMASK[60]&IMASK[N]&PMASK_R[N]&NOTIMASK[60];

對(duì)于TS201S,完成操作:

GIE&IMASK[N]&PMASK_R[N]。

步驟(2):一旦屏蔽位置位,則插入ISR取指地址。指令到達(dá)EX2級(jí)時(shí)的PC,它應(yīng)該保存到RETI中。應(yīng)當(dāng)說(shuō)明的是,僅當(dāng)滿足步驟(4)的條件,且清除了ILAT、PMASK中斷位的置位時(shí),中斷服務(wù)程序的第一條指令到達(dá)EX2階段后PC才會(huì)保存到RETI中。步驟(3):執(zhí)行流水中的指令,除非碰到異?;蚍抡鏍顟B(tài)。軟件異常、仿真調(diào)試中斷不受全局中斷使能位的影響。當(dāng)中斷服務(wù)程序的第一條指令執(zhí)行到EX2時(shí),處理器再次檢測(cè)全局中斷使能位是否置位:

如果不為1,則中止中斷并清空流水,等待下一條指令;

如果置位,又是邊沿觸發(fā),則清除ILATN。

步驟(4):如果使能中斷嵌套,則中斷服務(wù)程序應(yīng)該保存上下文,保存RETIB(必須由中斷服務(wù)程序特別指定)。

步驟(5):執(zhí)行中斷服務(wù)程序。步驟(6):如果使能中斷嵌套,則中斷服務(wù)程序恢復(fù)RETIB寄存器的值,恢復(fù)上下文,程序返回。

步驟(7):中斷服務(wù)程序完成后,處理器清除PMASKN并跳轉(zhuǎn)到RETI地址。

軟件中斷僅在引起軟件中斷的指令到達(dá)流水的EX2階段時(shí)才被觸發(fā)。使能的軟件中斷觸發(fā)后,流水中所有位于產(chǎn)生軟中斷指令之后的指令都將被中止,包括硬件中斷服務(wù)程序的指令。若軟件中斷發(fā)生時(shí)流水中存在一個(gè)硬件中斷,則硬件中斷連同流水中的其他指令都將被中止,轉(zhuǎn)而執(zhí)行軟件中斷的服務(wù)程序。但此時(shí)硬件中斷的中斷標(biāo)志沒(méi)有被清除,(硬件)中斷仍保留。軟件中斷程序流程如圖4.1-4所示。圖4.1-4TigerSHARC軟件中斷響應(yīng)過(guò)程4.1.5中斷返回與異常

中斷返回是通過(guò)在中斷服務(wù)程序中執(zhí)行RTI指令來(lái)實(shí)現(xiàn)的。當(dāng)然,這要求在響應(yīng)中斷服務(wù)程序時(shí)就將中斷的返回地址保存到寄存器RETIB中。

對(duì)非嵌套的硬件中斷服務(wù)程序,返回地址自動(dòng)保存在RETI寄存器中。如果發(fā)生非嵌套的軟件中斷,則返回地址應(yīng)從寄存器RETS或DBGE(根據(jù)軟中斷類型)拷貝到RETI中。使用RETIB時(shí)將禁止所有的中斷,直到執(zhí)行完RTI指令。這樣,就能保護(hù)寄存器RETIB不被另一個(gè)中斷所破壞。此后,程序?qū)⑻D(zhuǎn)到寄存器RETI內(nèi)容指向的地址,并重新使能中斷。若系統(tǒng)支持嵌套的中斷,則在中斷服務(wù)程序的開始應(yīng)將處理器的狀態(tài)保存到存儲(chǔ)器中,并在中斷返回前恢復(fù)這些寄存器的內(nèi)容。執(zhí)行完RTI指令后,將清除寄存器PMASK中最高的置1中斷位,指令將跳步到RETI寄存器保持的地址或重新開始中斷。

注意:中斷服務(wù)程序的第一條指令不能是與RETI或RETS寄存器有關(guān)的指令;也不能是RTI或RETI或RDS指令。

異常(exception)是軟件中斷,是在執(zhí)行程序的過(guò)程中由執(zhí)行的代碼觸發(fā)的。圖4.1-4說(shuō)明了軟件中斷引發(fā)時(shí)發(fā)生的問(wèn)題。當(dāng)使能異常中斷的處理過(guò)程如下:

(1)對(duì)于普通異常,將SQCTL位21置位,PC存儲(chǔ)于RETS;對(duì)仿真異常,將SQCTL位22置位,PC存儲(chǔ)于DBGE。

(2)當(dāng)異常中斷出現(xiàn)時(shí),程序控制器從寄存器IVSW指向的地址取址;當(dāng)仿真異常出現(xiàn)時(shí),則從EMUIR寄存器取址。

(3)?PC存儲(chǔ)于RETS(對(duì)于普通異常)或PC存儲(chǔ)于DBGE(對(duì)仿真異常)。

(4)同時(shí)將指令流水中的指令清空。將RETS或DBGE中的返回不經(jīng)過(guò)RETIB傳輸?shù)絉ETI時(shí)程序返回,然后執(zhí)行RTI指令。如果在程序中禁止響應(yīng)異常中斷,則中斷鎖存寄存器ILAT中用于異常的中斷位不會(huì)置位,該異常被忽略。

異常能導(dǎo)致中斷,但異常與中斷仍然有差別:

(1)異常與引起它的指令緊密聯(lián)系。當(dāng)引發(fā)異常的指令到達(dá)指令流水的EX2階段時(shí),開始異常處理過(guò)程,此時(shí),流水中所有的指令被中止。如果引起異常的指令經(jīng)過(guò)判斷不被執(zhí)行,則異常不會(huì)發(fā)生。經(jīng)過(guò)預(yù)測(cè)的指令,即使由于條件不滿足沒(méi)有得到執(zhí)行,如果它能引起異常,則該異常仍然可以觸發(fā)。這一點(diǎn)與中斷是不相同的。

(2)中斷與異常的返回地址保存在不同的寄存器中,這樣就能實(shí)現(xiàn)硬件中斷和異常的嵌套。異常發(fā)生時(shí),返回地址保存在RETS或者DBGE中,而中斷返回地址保存在RETI中。

(3)若異常發(fā)生時(shí)該中斷卻被禁止,則該異常不會(huì)鎖存而被丟失;中斷仍然將被鎖存,指示不響應(yīng)該中斷。

(4)在異常返回前,為了保護(hù)舊的RETI內(nèi)容必須執(zhí)行以下指令,然后才跳轉(zhuǎn)到RETS。

[J31+temporaryaddress]=RETI;;

RETI=RETS;;

RTI;RETI=[J31+temporaryaddress];;4.1.6中斷服務(wù)程序?qū)嵗?/p>

中斷服務(wù)程序(ISR)通常是中斷處理的核心,所有響應(yīng)處理和控制都在服務(wù)程序中得以實(shí)現(xiàn)。在以上內(nèi)容中介紹了中斷的響應(yīng)過(guò)程和處理,下面的程序?qū)嵗龑⒊跏蓟疶igerSHARC的兩個(gè)定時(shí)器,并建立定時(shí)器中斷,且低優(yōu)先級(jí)中斷允許嵌套,高優(yōu)先級(jí)中斷不必使能中斷嵌套。例1

.sectiondata;

.varregister_store; //初始化內(nèi)部存儲(chǔ)器地址單元,保存ISR中使用的寄存器

.varregister_store_2;

.sectionprogram; //建立中斷嵌套

Setup_Timer_Interrupts: //在向量表中,建立中斷服務(wù)程序

J0=j31+TIMER0HP_ISR;;//設(shè)置定時(shí)器0高優(yōu)先級(jí)中斷

IVTIMER0HP=j0;;

J0=j31++TIMER1HP_ISR;;//設(shè)置定時(shí)器1高優(yōu)先級(jí)中斷

IVTIMER1HP=j0;;

xR0=IMASKH;; //不屏蔽定時(shí)器中斷,不能清除其他設(shè)置位

xR1=0x10300000;;

xR0=R0orR1;;

IMASKH=xR0;; //使能全局硬件中斷,TIMER0HP和TIMER1HP中斷//觸發(fā)TIMER0HP中斷和TIMER1HP中斷

TMRIN0H=0x0;;TMRIN0L=0xF;; //設(shè)置定時(shí)長(zhǎng)度

TMRIN1H=0x0;;TMRIN1L=0xA;;

xR0=0x00003000;; //使能定時(shí)器0和1

SQCTLST=xR0;;

Done:idle;nop;nop;nop;;

align_code4;

jumpDone(NP);nop;nop;nop;;

TIMER0HP_ISR:/兩個(gè)定時(shí)器的低優(yōu)先級(jí)中斷

nop;;nop;;nop;;nop;;

j0=j31+register_store;;//保存寄存器,該寄存器在中斷服務(wù)中使用

q[j0+=4]=xr3:0;;

xR0=RETIB;; //清除Pmask[60],可以跳轉(zhuǎn)到高優(yōu)先級(jí)的中斷服務(wù)程序

xr1=r3+r4;; //ISR的程序代碼都加在這里

RETIB=xR0;;//設(shè)置Pmask[60],其他任何中斷都不能中斷此中斷

RETIB=xR0;; //由于存在異常,必須寫兩次

j0=J31+register_store;;

xr3:0=q[j0+=4];; //恢復(fù)寄存器值

RTI(ABS)(NP);nop;nop;nop;;

TIMER1HP_ISR: //由于該中斷優(yōu)先級(jí)高,不必使能中斷嵌套

nop;;nop;;nop;;

j0=j31+register_store_2;; //保存在中斷中要使用的寄存器

q[j0+=4]=xr3:0;;

xr1=r3+r4;; //ISR的其他操作代碼都加在這里

j0=j31+register_store_2;;

xr3:0=q[j0+=4];; //恢復(fù)寄存器值

RTI(ABS)(NP);; 4.2TS處理器的DMA傳輸

4.2.1DMA控制器與傳輸控制塊

TS處理器的DMA控制器位于DSP的I/O處理器內(nèi),其框圖如圖4.2-1所示。圖4.2-1DMA控制器

DMA傳送的數(shù)據(jù)流具有方向性,即從發(fā)送端(源)到接收端(目的)。若發(fā)送端或接收端是存儲(chǔ)器,則其需通過(guò)TCB寄存器來(lái)描述。鏈路和AutoDMA通道只有一個(gè)TCB寄存器。發(fā)送通道需要一個(gè)源TCB。接收鏈路或AutoDMA通道有一個(gè)目的TCB寄存器。要實(shí)現(xiàn)從接收鏈路到發(fā)送鏈路的數(shù)據(jù)回傳,需要編程接收鏈路通道TCB,使之發(fā)送數(shù)據(jù)到目標(biāo)發(fā)送鏈路的緩沖區(qū),DMA根據(jù)TCB編程和請(qǐng)求啟動(dòng)一次傳送。TCB編程決定DMA是連續(xù)工作還是依照請(qǐng)求方式工作(握手方式)。鏈路通道和AutoDMA通道總是按請(qǐng)求方式工作,其中請(qǐng)求信號(hào)由鏈路或AutoDMA寄存器內(nèi)部產(chǎn)生。存儲(chǔ)器-存儲(chǔ)器DMA通道可以在初始化后自動(dòng)啟動(dòng),也可以使用邊沿觸發(fā)的DMARx輸入引腳按握手方式進(jìn)行。總線傳送總是由DMA啟動(dòng)的,傳送源是發(fā)送器,傳送目標(biāo)是接收器。

鑒于每個(gè)特定的周期內(nèi)可能有多個(gè)DMA通道同時(shí)提出有效的請(qǐng)求,因此需要使用優(yōu)先級(jí)方案選擇被服務(wù)的通道。TS處理器在各I/O分組中使用固定的優(yōu)先級(jí)次序,如表4.2-1所示。

可以通過(guò)TS處理器的內(nèi)核處理器、外部主機(jī)處理器以及(外部)TS處理器總線主控設(shè)備,對(duì)存儲(chǔ)器映射的DMA傳輸控制塊TCB寄存器編程,啟動(dòng)DMA操作。TCB(傳輸控制塊)是一個(gè)128位的四字組寄存器,含有DMA塊傳送所需的控制信息。在DMA發(fā)送時(shí),4個(gè)字包含了源數(shù)據(jù)的地址、將要發(fā)送的字?jǐn)?shù)量、地址增量和控制位。在DMA接收時(shí),4個(gè)字包括了目的地址、將要接收的字?jǐn)?shù)量、地址增量和控制位。其結(jié)構(gòu)如圖4.2-2所示。圖4.2-2DMATCB寄存器當(dāng)DY寄存器與DX寄存器結(jié)合在一起使用時(shí),該寄存器保存了Y方向上的16位修改量和16位計(jì)數(shù)值。如果沒(méi)有選擇二維DMA,則不使用該寄存器。

DPx寄存器包括了DMA傳輸?shù)乃锌刂菩畔?。該寄存器也分成兩個(gè)主要段:第一個(gè)段(位22~31)包含了所有控制信息;第二個(gè)段(位0~21)則包含了鏈?zhǔn)叫畔ⅲ?~16位是鏈?zhǔn)街羔樞畔?,?7~21位表示鏈標(biāo)記信息。該寄存器的位定義如圖4.2-3所示。圖4.2-3TCB的DPx寄存器

DPx寄存器的0~14位指定鏈指針CHPT,它就是存儲(chǔ)器中的一個(gè)地址,該地址指向下一個(gè)TCB寄存器的內(nèi)容。地址在放置時(shí),只將其16~2位寫入DP的CHPT段,由于地址必須是四字對(duì)齊方式,因此地址的1~0位信息不需要。例如,下一個(gè)TCB傳輸寄存器保存在存儲(chǔ)器0x87128~0x8712B,則CHPT段的設(shè)置為0x21C4A。

位15~16設(shè)置鏈指針在存儲(chǔ)器中的存放位置(CHTG),00表示位于存儲(chǔ)器塊0,01表示位于存儲(chǔ)器塊1,10表示位于存儲(chǔ)器塊2,11設(shè)置保留。

位21~17段指定DMA通道TCB寄存器,其詳細(xì)定義如表4.2-2所示。DMA通道的建立通過(guò)給每一個(gè)DMA的TCB寄存器寫入一個(gè)四字組來(lái)實(shí)現(xiàn)。對(duì)每個(gè)TCB寄存器必須載入塊起始地址、地址修改量以及傳送字?jǐn)?shù)。對(duì)于鏈路口DMA傳輸,只需要一個(gè)TCB,一旦建立和使能DMA塊,數(shù)據(jù)就自動(dòng)被接收并送到內(nèi)部存儲(chǔ)器中。同樣,當(dāng)發(fā)送鏈路做好發(fā)送數(shù)據(jù)的準(zhǔn)備后,四字組將自動(dòng)從內(nèi)部或外部存儲(chǔ)器傳送到發(fā)送端鏈路緩沖。這些傳送過(guò)程將持續(xù)到所有數(shù)據(jù)緩沖被接收或發(fā)送完為止。同鏈路DMA通道一樣,AutoDMA寄存器通道也只有一個(gè)TCB寄存器。通過(guò)向DCSx寄存器或DCDx寄存器寫入數(shù)據(jù)可以實(shí)現(xiàn)簇總線的TCB寄存器加載,DCSx寄存器針對(duì)源TCB,而DCDx寄存器針對(duì)目的TCB,這里的x可以是0~3之間的任何值。為了向鏈路口或者自動(dòng)DMA寄存器載入TCB,首先向DCx寄存器賦值,此處的x可以是4~13之間的任意值。究竟取哪一個(gè)值,取決于是鏈路口接收或者發(fā)送數(shù)據(jù),還是自動(dòng)DMA通道接收或者發(fā)送數(shù)據(jù)。

若TCB編程為允許DMA產(chǎn)生中斷,則整塊數(shù)據(jù)傳送完后DMA將產(chǎn)生一個(gè)中斷。中斷發(fā)生在計(jì)數(shù)寄存器減至0,而且最后一個(gè)數(shù)據(jù)單元被傳送后。4.2.2DMA控制與狀態(tài)寄存器

DMA的啟動(dòng)和數(shù)據(jù)傳輸受到DMA控制寄存器的控制,通過(guò)DMA狀態(tài)寄存器,可以判斷DMA的操作情況,確定數(shù)據(jù)傳輸正確與否。

1)?DMA狀態(tài)寄存器DSTAT/DSTATC

DSTAT狀態(tài)寄存器為每個(gè)DMA通道指定了3位的狀態(tài)標(biāo)志位,用于指示對(duì)應(yīng)的DMA通道是處于激活狀態(tài)還是禁止?fàn)顟B(tài)。此外,還有指示DMA傳輸是否結(jié)束,傳輸過(guò)程是否有出錯(cuò)的標(biāo)志。在程序調(diào)試中,可以通過(guò)這些標(biāo)志位的檢測(cè)來(lái)判斷DMA操作的結(jié)果是否正確。當(dāng)將DPx寄存器的TY字段置位時(shí),使能某個(gè)DMA通道,此時(shí)在DSTAT寄存器中相應(yīng)的標(biāo)志位同時(shí)自動(dòng)置位,標(biāo)志已經(jīng)激活了該DMA通道。啟動(dòng)一次DMA傳輸后,當(dāng)完成最后一次傳輸時(shí),傳輸完成標(biāo)志位將被置位。如果在傳輸過(guò)程中檢測(cè)到了非法或者錯(cuò)誤條件,錯(cuò)誤狀態(tài)位將被置位。在3位的DMA狀態(tài)位段中,出現(xiàn)的狀態(tài)還可能引起硬件中斷,比如向一個(gè)激活的DMA通道TCB寄存器賦值,對(duì)TCB寄存器中的DP寄存器進(jìn)行非法配置,利用DMA通道讀取廣播式存儲(chǔ)空間。

DSTAT寄存器只可讀,在讀該寄存器時(shí),不允許進(jìn)行正常字讀,只能是長(zhǎng)字或者四字。該寄存器的位定義如表4.2-4所示。2)?DMA控制寄存器

DMA控制寄存器有三個(gè):DCNT、DCNTST和DCNTCL。

DCNT是一個(gè)32位寄存器,用來(lái)控制DMA的數(shù)據(jù)流。給DCNT控制位置位可在當(dāng)前一個(gè)數(shù)據(jù)傳送結(jié)束后暫停DMA;清除這些位后,被懸掛的傳送將會(huì)繼續(xù)進(jìn)行。復(fù)位后,DCNT的初始值為0。其位段和位定義如圖4.2-4所示。圖4.2-4DCNT寄存器的位定義

DCNTST是32位寄存器DCNT的別稱,用于對(duì)DCNT寄存器置位。寫入DCNTST的數(shù)值先與DCNT寄存器中的原值相或,然后存入DCNT中。例如,給寄存器DCNTST的位n寫1,則寄存器DCNT的位n變?yōu)?。

DCNTCL也是32位寄存器DCNT的別稱,用來(lái)清除DCNT寄存器。寫向DCNTCL的數(shù)值先與DCNT寄存器中的原值相與,然后存入DCNT中。例如,給寄存器DCNTCL的位n寫0,則寄存器DCNT的位n變?yōu)?。在使用DMA控制寄存器時(shí),有以下限制:

(1)數(shù)據(jù)長(zhǎng)度限制。對(duì)外部端口(EP)DMA通道,兩個(gè)TCB的LEN域(正常字、長(zhǎng)字或四字組)必須相同。?如果TY域設(shè)置的源或目標(biāo)TCB是引導(dǎo)EPROM,則LEN域必須為0x1(標(biāo)準(zhǔn)字)。對(duì)鏈路通道(接收或發(fā)送),LEN域必須為四字組(0x3)。對(duì)AutoDMA通道,LEN域必須與AutoDMA寄存器傳送數(shù)據(jù)類型一致。

(2)計(jì)數(shù)值限制。對(duì)EPDMA通道,收、發(fā)雙方的計(jì)數(shù)值必須設(shè)置相同。如果不是二維傳輸,則總的計(jì)數(shù)值為DX_COUNT的值。如果是二維傳輸,則總的計(jì)數(shù)值為DX_COUNT*DY_COUNT。

對(duì)鏈路DMA通道,其COUNT寄存器設(shè)置沒(méi)有限制。在任何情況下,若通道非空閑,則DX_COUNT不能為0。若2DDMA使能,則DY_COUNT不能為0或1。

(3)類型設(shè)置。對(duì)于鏈路口發(fā)送DMA通道4~7,在DP寄存器的TY段,其值只能設(shè)置為2或4,而對(duì)于鏈路口接收DMA通道8~11,TY段只能設(shè)置為1、2或4。

對(duì)于外部口DMA通道0~3,DP寄存器的TY段設(shè)置如表4.2-5所示。(4)?DMA請(qǐng)求。在兩個(gè)AutoDMA通道設(shè)置時(shí),DRQ位(DMA請(qǐng)求)必須置1。對(duì)于外部口DMA通道(通道0~3),兩個(gè)TCB寄存器中DRQ位的設(shè)置必須相同。

(5)數(shù)據(jù)對(duì)齊方式。如果DP寄存器的LEN段設(shè)置為2(長(zhǎng)字),則DI、DX_MODIFY、DY_DODIFY、DY_COUNT位段的設(shè)置必須為偶數(shù)。如果LEN為3,則它們必須設(shè)置為4的整數(shù)倍。如果DP寄存器的TY段設(shè)置為6,則以上這些寄存器也必須設(shè)置為4的整數(shù)倍。4.2.3鏈?zhǔn)紻MA與二維DMA

鏈?zhǔn)紻MA就是處理器在完成一次DMA傳輸后,能自動(dòng)對(duì)DMA參數(shù)寄存器載入新值,實(shí)現(xiàn)自動(dòng)初始化,開始下一次DMA傳輸。這一特性使得TigerSHARC處理器在無(wú)需

處理器干預(yù)的情況下能夠進(jìn)行無(wú)限制的多次DMA傳輸,且每次操作的屬性和I/O都可以不同。

使用鏈?zhǔn)紻MA,必須對(duì)相應(yīng)的DMA通道TCB寄存器進(jìn)行裝載。裝載時(shí),TigerSHARC從內(nèi)存中四字對(duì)齊地址開始的四個(gè)連續(xù)單元中,取出一四字組數(shù)據(jù)載入DMA通道的TCB寄存器。

DMA鏈或外部直接寫操作也可以實(shí)現(xiàn)TCB裝載。在內(nèi)部存儲(chǔ)器和外部存儲(chǔ)器之間進(jìn)行DMA傳送時(shí),必須裝載全部的兩個(gè)TCB。裝載完成后,設(shè)置TCBDP寄存器的鏈?zhǔn)绞鼓芪?位22),將鏈?zhǔn)街羔樦赶蛞粋€(gè)有效的地址,就可以使能鏈?zhǔn)紻MA。

一旦完成3次DMA傳輸,DMA控制器將自動(dòng)載入內(nèi)部存儲(chǔ)器中的TCB值到TCB寄存器,準(zhǔn)備下一次DMA傳輸。圖4.2-5鏈?zhǔn)紻MA在DMA序列中,可以隨時(shí)向DP寄存器的CHPT段載入新值,因此,可以清除TCBx寄存器DP的CHEN位,禁止鏈?zhǔn)紻MA。如果想再次啟動(dòng)鏈?zhǔn)紻MA,則需要將合適的目的地址載入到鏈?zhǔn)街羔樁?CHPT),并設(shè)置鏈?zhǔn)绞鼓芪?CHEN)和定義鏈?zhǔn)侥康牡刂?CHTG)。

鏈?zhǔn)紻MA操作可以跨I/O設(shè)備執(zhí)行。應(yīng)當(dāng)說(shuō)明的是,如果想對(duì)一個(gè)激活的鏈?zhǔn)紻MA載入新的TCB,則應(yīng)向寄存器DCNT的暫停位賦值,暫停其活動(dòng),更新TCB后,數(shù)據(jù)傳輸繼續(xù)從上次暫停的地方開始進(jìn)行。當(dāng)然,在一個(gè)激活的DMA鏈中,插入高優(yōu)先級(jí)DMA或者鏈,也是可以的。要實(shí)現(xiàn)這一點(diǎn),必須設(shè)置DCNT寄存器中的相應(yīng)暫停位。首先暫停當(dāng)前的通道,然后通過(guò)TigerSHARC處理器核向TCB的DP寄存器中的CHEN、CHTG和CHPT位進(jìn)行設(shè)置,插入一個(gè)新的DMA鏈,實(shí)現(xiàn)TCB鏈的更新,繼續(xù)數(shù)據(jù)傳輸。

如果不暫停當(dāng)前的DMA傳輸,則在向一個(gè)激活的TCB寄存器寫入數(shù)據(jù)時(shí),將引起硬件錯(cuò)誤(HWERROR)中斷。如果TCBx寄存器DP的INI(中斷使能)位為高,則當(dāng)前數(shù)據(jù)塊傳送操作完成后將產(chǎn)生一個(gè)中斷。若鏈中最后一個(gè)TCB寄存器的INI位為高,則中斷將在整個(gè)鏈序列結(jié)束后產(chǎn)生,而不是在每次傳送之后產(chǎn)生。

TS處理器的DMA可以尋址和傳送一個(gè)二維存儲(chǔ)陣列,只需使能DP寄存器中的2DDMA位,且定義DXCOUNT和DYCOUNT即可。其中DXCOUNT表示陣列在X方向的大小,DYCOUNT表示陣列在Y方向的大小。二維DMA將存儲(chǔ)區(qū)中的數(shù)據(jù)塊當(dāng)作一個(gè)數(shù)據(jù)陣列進(jìn)行傳輸,這對(duì)執(zhí)行矩陣操作的DSP算法十分有用,可以大大簡(jiǎn)化程序,提高算法的執(zhí)行效率。接收端存儲(chǔ)陣列的大小可以與發(fā)送端的不同,只要兩邊所含的總字?jǐn)?shù)相等即可。二維存儲(chǔ)陣列可以傳送到一個(gè)一維存儲(chǔ)陣列,反之亦然,只要源和目標(biāo)端所包含的總字?jǐn)?shù)相等即可。存儲(chǔ)器中的二維存儲(chǔ)塊可以通過(guò)鏈路口向外發(fā)送,由鏈路口接收的或來(lái)自AutoDMA的數(shù)據(jù)塊也可以按二維存儲(chǔ)陣列的形式保存到存儲(chǔ)器中。二維DMA的尋址可由發(fā)送DMA通道或接收DMA通道之一完成。索引寄存器(TCBDP)保存了數(shù)據(jù)陣列的首地址,每傳送一個(gè)數(shù)據(jù)后,索引寄存器內(nèi)容累加X維修改量,始終指向當(dāng)前地址。X增量寄存器(TCBDXModify)保存的是偏移值,此值加上當(dāng)前地址可以指向X維中的下一數(shù)據(jù)元素(下一列)。X計(jì)數(shù)寄存器(TCBDXCount)和CIX寄存器的初始值是X維的傳送字?jǐn)?shù)。寄存器DCIX用來(lái)在TCBDPCount減至零時(shí)為其重新載入初始值。每傳送一個(gè)數(shù)據(jù),寄存器CX的內(nèi)容減一,它可以指示當(dāng)前行中待傳送的字?jǐn)?shù)。

Y增量寄存器(TCBDYModify)保存的也是偏移值,此值加上當(dāng)前地址可以指向Y維中的下一數(shù)據(jù)元素(下一行的首地址)。X計(jì)數(shù)寄存器減至零的下一周期里,Y增量寄存器內(nèi)容加入當(dāng)前地址,同時(shí)Y計(jì)數(shù)寄存器內(nèi)容減一。TCBDYModify的取值應(yīng)是行間距。

Y計(jì)數(shù)寄存器(TCBDYCount)的初始值是Y維的傳送字?jǐn)?shù)(行數(shù)),每當(dāng)X計(jì)數(shù)寄存器減至零時(shí)其內(nèi)容減一。Y計(jì)數(shù)寄存器減至零時(shí),DMA數(shù)據(jù)塊傳送結(jié)束。若DMA鏈?zhǔn)鼓埽瑒tTCBDP寄存器的鏈指針域(CHPT)指向內(nèi)存中一個(gè)緩沖區(qū)的首地址,從此地址開始的連續(xù)幾個(gè)單元存放著一組用于下一次DMA傳送的TCB參數(shù)。據(jù)此,啟動(dòng)二維DMA需要遵循以下步驟:

(1)輸出保存在TCB的DI寄存器中的當(dāng)前地址,啟動(dòng)一個(gè)DMA存儲(chǔ)器周期。

(2)在此周期內(nèi),將TCB的DX增量寄存器中的X修改量與TCB的DI寄存器中的當(dāng)前地址相加。

(3)?TCB的DXCount寄存器內(nèi)容減1,若TCB的DXCount等于零,則執(zhí)行第(4)步。

(4)寄存器DCIX重新加載TCB的DXCount寄存器中的X計(jì)數(shù)值。

(5)?DMA寄存器中的Y維增量加到TCB的DI寄存器中的當(dāng)前地址。

(6)?TCB的DYCount寄存器內(nèi)容減1。

(7)若TCB的DYCount等于零,則DMA序列結(jié)束,在再次設(shè)置TCB前,需禁止它。圖4.2-68?×?8陣列的4字操作二維DMA操作4.2.4外部口DMA

TS處理器有四個(gè)專用的DMA通道,用于內(nèi)部存儲(chǔ)器與外部存儲(chǔ)器之間的數(shù)據(jù)傳輸。每個(gè)通道有兩個(gè)TCBDP寄存器,一個(gè)發(fā)送TCB,一個(gè)接收TCB,其中發(fā)送端用來(lái)驅(qū)動(dòng)數(shù)據(jù),接收端用來(lái)接收數(shù)據(jù)。DP寄存器的TY域指定了要執(zhí)行的DMA傳送的類型。

1)外部存儲(chǔ)器與內(nèi)部存儲(chǔ)器

從外部存儲(chǔ)器到內(nèi)部存儲(chǔ)器的數(shù)據(jù)傳輸途徑有兩種:

(1)對(duì)四個(gè)DMA通道中的一個(gè)進(jìn)行編程,將數(shù)據(jù)塊從一個(gè)存儲(chǔ)器移入另一個(gè)存儲(chǔ)器。此時(shí),發(fā)送和接收TCB都需要進(jìn)行配置,配置分別如表4.2-6和表4.2-7所示。(2)使用兩個(gè)AutoDMA通道中的一個(gè)。此時(shí),外設(shè)首先對(duì)通道的兩個(gè)TCB寄存器編程,然后向目標(biāo)AutoDMA數(shù)據(jù)寄存器寫入數(shù)據(jù),向這個(gè)地址進(jìn)行寫操作,激活相應(yīng)的DMA通道即可,接收TCB配置如表4.2-8所示。

2)外部I/O設(shè)備與外部存儲(chǔ)器件(飛越傳輸)

在程序設(shè)計(jì)中,要實(shí)現(xiàn)外部存儲(chǔ)器與其他外部設(shè)備之間的數(shù)據(jù)傳輸,通常都需要通過(guò)處理器內(nèi)核將數(shù)據(jù)傳輸?shù)教幚砥鲀?nèi)部。在這種情況下,TS處理器支持一種全新的數(shù)據(jù)傳輸,飛越(Flyby)傳輸方式,此時(shí)不必對(duì)內(nèi)部存儲(chǔ)器進(jìn)行訪問(wèn),數(shù)據(jù)直接在外部存儲(chǔ)器和外部其他設(shè)備之間實(shí)現(xiàn)數(shù)據(jù)傳輸。4.2.5AutoDMA與鏈路口DMA

AutoDMA是實(shí)現(xiàn)從動(dòng)DMA方式的一種技術(shù)。TS處理器有兩個(gè)虛擬寄存器:AutoDMA0和AutoDMA1。每個(gè)AutoDMA都有一個(gè)AutoDMA通道與之相連,分別是通道12和通道13。當(dāng)外部主控處理器(主機(jī)或另一個(gè)TS處理器)寫其中一個(gè)AutoDMA寄存器時(shí),此寄存器向與之對(duì)應(yīng)的通道發(fā)出DMA請(qǐng)求,DMA通道則根據(jù)其TCB編程設(shè)置將數(shù)據(jù)發(fā)送到內(nèi)部存儲(chǔ)器中。在數(shù)據(jù)寄存器和內(nèi)存中傳送數(shù)據(jù)時(shí),數(shù)據(jù)位寬可以是32位、64位或128位。只要TCB寄存器DP中的TY域不等于000,則DMA數(shù)據(jù)寄存器通道始終處于使能狀態(tài)。寄存器DP中還定義了控制位和鏈地址。鏈?zhǔn)紻MA使能后,將加載其中一個(gè)TCB寄存器。應(yīng)當(dāng)說(shuō)明的是,如果向一個(gè)未初始化的AutoDMA進(jìn)行寫操作,則寫入的數(shù)據(jù)會(huì)丟失,同時(shí)寄存器SYSTAT中會(huì)給出相應(yīng)的錯(cuò)誤信息。

TS處理器的四個(gè)鏈路口均可使用DMA方式發(fā)送或接收數(shù)據(jù),可以實(shí)現(xiàn)從鏈路口與內(nèi)部存儲(chǔ)器、外部存儲(chǔ)器或其他鏈路口之間的雙向數(shù)據(jù)傳送,這只需對(duì)TCBxDP寄存器中的TY字段進(jìn)行定義即可。每個(gè)鏈路口分配有兩個(gè)DMA通道,由鏈路口DMA請(qǐng)求信號(hào)指定使用哪個(gè)DMA通道執(zhí)行DMA傳送任務(wù)。鏈路口輸入/輸出通道各有一個(gè)TCB寄存器。傳送的字?jǐn)?shù)為Xcount或Xcount與Ycount之積(如果2DDMA置1),無(wú)論是一維還是二維傳輸,鏈路口都只允許傳送四字組。只要TCB寄存器DP中的TY域不等于000,則鏈路DMA始終處于使能狀態(tài)。DP中同時(shí)定義了控制位和鏈地址,其中,如果鏈?zhǔn)紻MA被使能,則需要載入一個(gè)四字組TCB寄存器。鏈路DMA請(qǐng)求的優(yōu)先級(jí)是固定的,鏈路3最高,鏈路0最低。

1)鏈路口至內(nèi)部/外部存儲(chǔ)器

要實(shí)現(xiàn)鏈路口到內(nèi)部/外部存儲(chǔ)器的數(shù)據(jù)傳送,須首先編程接收TCB。DMA通過(guò)請(qǐng)求內(nèi)部總線啟動(dòng)傳送過(guò)程,同時(shí)數(shù)據(jù)從鏈路口傳送到內(nèi)部或外部存儲(chǔ)器(OFIFO),TCB配置如表4.2-11所示。2)內(nèi)部/外部存儲(chǔ)器至鏈路

使用DMA方式也可以實(shí)現(xiàn)內(nèi)部存儲(chǔ)器/外部存儲(chǔ)器到鏈路口的數(shù)據(jù)傳輸。如果從內(nèi)部存儲(chǔ)器到鏈路口傳輸數(shù)據(jù),則DMA首先向內(nèi)存請(qǐng)求數(shù)據(jù),啟動(dòng)一次傳送操作,數(shù)據(jù)在內(nèi)部數(shù)據(jù)總線生效時(shí)載入到鏈路口。如果從外部存儲(chǔ)器到鏈路口傳輸數(shù)據(jù),則使用DMA時(shí),將啟動(dòng)一個(gè)內(nèi)部傳送操作對(duì)OFIFO緩存進(jìn)行填充,與此同時(shí),外部端口開始向外設(shè)輸出數(shù)據(jù)(數(shù)據(jù)一次輸出還是經(jīng)多次輸出取決于打包方式),鏈路口地址和數(shù)據(jù)存入IFIFO,由此IFIFO請(qǐng)求內(nèi)部總線對(duì)鏈路進(jìn)行訪問(wèn)。一旦IFIFO獲取總線使用權(quán),它就將數(shù)據(jù)驅(qū)動(dòng)到數(shù)據(jù)總線上。使用DMA方式從內(nèi)部/外部存儲(chǔ)器到鏈路口的數(shù)據(jù)傳輸TCB配置如表4.2-12所示。3)鏈路口至鏈路口

TS處理器也可以實(shí)現(xiàn)從一個(gè)鏈路口向另一個(gè)鏈路口的點(diǎn)對(duì)點(diǎn)數(shù)據(jù)傳輸。此時(shí)接收端TCB必須編程為鏈路TCB。使用DMA時(shí),通過(guò)請(qǐng)求內(nèi)部總線啟動(dòng)DMA傳送過(guò)程,同時(shí)數(shù)據(jù)從請(qǐng)求DMA服務(wù)的鏈路口發(fā)送到接收鏈路口。從鏈路口到鏈路口DMA傳輸?shù)腡CB配置如表4.2-13所示。 4.3TS101S的鏈路口

4.3.1鏈路口資源

TS101S處理器片內(nèi)有四個(gè)鏈路口,每個(gè)鏈路口都由8位雙向數(shù)據(jù)線和另外三根控制線構(gòu)成。在進(jìn)行數(shù)據(jù)通信時(shí),鏈路口可以直接由處理器核控制,也可以由DMA控制器控制。在數(shù)據(jù)通信過(guò)程中,在鏈路口時(shí)鐘的上升沿和下降沿對(duì)數(shù)據(jù)進(jìn)行鎖存與驅(qū)動(dòng)。

鏈路口傳輸率在軟件上也是可控的,只需配置相應(yīng)的寄存器位,就可以將鏈路口時(shí)鐘配置為1/2核時(shí)鐘、1/3核時(shí)鐘、1/4核時(shí)鐘和1/8核時(shí)鐘。當(dāng)處理器核工作在250MHz,鏈路口工作在125MHz時(shí),每個(gè)鏈路口的吞吐率可以到達(dá)250MB/s,四個(gè)鏈路口同時(shí)工作時(shí)的數(shù)據(jù)吞吐率可以到達(dá)1GB/s。

當(dāng)利用DMA方式實(shí)現(xiàn)鏈路口之間或者鏈路口與外部存儲(chǔ)器之間的通信時(shí),TS101S提供有八個(gè)專用的DMA通道用于傳輸四字的數(shù)據(jù),其中四個(gè)通道用于發(fā)送數(shù)據(jù),四個(gè)通道用于接收數(shù)據(jù)。

TS101S也可以利用鏈路口實(shí)現(xiàn)系統(tǒng)加載。要實(shí)現(xiàn)TS101S的鏈路口加載,則在硬件設(shè)計(jì)上,需要將前一片TS101S的一個(gè)鏈路口和后一片TS101S的一個(gè)鏈路口連接在一起,構(gòu)成加載鏈。TS101S并不需要強(qiáng)制使用某個(gè)鏈路口用于加載,在VisualDSP++中提供的鏈路加載程序默認(rèn)設(shè)置鏈路口3為加載時(shí)的發(fā)送鏈路口,鏈路口0為接收端口。所以,如果需要將其他鏈路口用于加載,則需要修改鏈路加載程序的參數(shù)。這樣,每個(gè)TS101S至少還有兩個(gè)鏈路口可以根據(jù)用戶的需要與其他TS101S或者其他設(shè)備進(jìn)行數(shù)據(jù)通信。應(yīng)當(dāng)說(shuō)明的是,TS101S鏈路口與先前的SHARC系列的鏈路口不兼容。因此,不能將SHARC系列處理器鏈路口與TS101S鏈路口直接進(jìn)行連接通信。

TS101S鏈路口的結(jié)構(gòu)如圖4.3-1所示。圖4.3-1鏈路口結(jié)構(gòu)4.3.2鏈路口通信協(xié)議

鏈路口通過(guò)8位數(shù)據(jù)總線進(jìn)行通信,另外使用3根控制線控制通信的時(shí)鐘、數(shù)據(jù)傳輸方向和數(shù)據(jù)確認(rèn)應(yīng)答信號(hào)。兩片TS101S處理器通過(guò)鏈路口進(jìn)行通信的硬件連接如圖4.3-2和圖4.3-3所示。圖4.3-2最小鏈路口配置—無(wú)緩沖圖4.3-3使用LxDIR的帶緩沖的鏈路口配置

LxCLKIN是輸入引腳,鏈路口接收數(shù)據(jù)時(shí)用作時(shí)鐘輸入,鏈路口發(fā)送數(shù)據(jù)時(shí)用作應(yīng)答。LxCLKOUT是輸出引腳,鏈路口發(fā)送數(shù)據(jù)時(shí)用作時(shí)鐘輸出,鏈路口接收數(shù)據(jù)時(shí)用作應(yīng)答。每個(gè)LxCLK時(shí)鐘邊沿鏈路口發(fā)送或接收一個(gè)字節(jié)的數(shù)據(jù)。傳送過(guò)程按每四字組(128位)進(jìn)行,傳送操作從字節(jié)0開始。LxDIR是輸出引腳,表示鏈路口是接收還是發(fā)送,只在硬件上使用了帶鏈路緩沖的情況下才使用該引腳。通常,當(dāng)鏈路口布線比較長(zhǎng)時(shí),傳輸線的阻抗將影響信號(hào)的延遲或者會(huì)產(chǎn)生振蕩。這時(shí)需要在鏈路口加上緩沖區(qū),以增強(qiáng)信號(hào)的傳輸驅(qū)動(dòng)能力并進(jìn)行阻抗匹配。

鏈路口傳輸數(shù)據(jù)時(shí),每8個(gè)周期傳送一個(gè)四字組(16字節(jié)),在時(shí)鐘的上、下沿均傳送一個(gè)字節(jié)。在傳送過(guò)程中,發(fā)送端將檢測(cè)接收端的LxCLKOUT信號(hào),僅當(dāng)接收端將它的LxCLKOUT置為高(即接收端處于接收方式),且有空閑的緩沖時(shí),發(fā)送端才可以啟動(dòng)下一個(gè)傳送過(guò)程。

傳送啟動(dòng)過(guò)程如圖4.3-4所示。應(yīng)說(shuō)明的是,圖中的LxCLKIN和LxCLKOUT波形都是從發(fā)送端觀測(cè)到的。圖4.3-4鏈路A向鏈路B啟動(dòng)傳送過(guò)程發(fā)送端驅(qū)動(dòng)LxCLKOUT信號(hào)為低電平,以此向接收端發(fā)出令牌請(qǐng)求。發(fā)出令牌請(qǐng)求后,發(fā)送端等待6個(gè)周期,并控制LxCLKIN是否依舊為高,若是,則啟動(dòng)傳送過(guò)程。傳送過(guò)程啟動(dòng)1個(gè)周期以后,接收端將發(fā)送端的LxCLKIN驅(qū)動(dòng)為低,以此作為連接測(cè)試。若接收完當(dāng)前四字組之后接收端無(wú)法再收到另外的四字組,則接收端保持LxCLKIN為低。在這種情況下,緩沖空閑后,LxCLKIN信號(hào)被禁止。若緩沖為空,則接收端將置LxCLKIN為高電平。作為同步時(shí)鐘,LxCLKOUT信號(hào)由發(fā)送端驅(qū)動(dòng)。數(shù)據(jù)在LxCLKOUT的上升沿和下降沿處被鎖存到接收緩沖中。

鏈路口支持占用工作時(shí)間的錯(cuò)誤檢測(cè),只需對(duì)寄存器LCTLx中的使能校驗(yàn)VERE位進(jìn)行設(shè)置。如果使能了校驗(yàn)位,則根據(jù)設(shè)置進(jìn)行發(fā)送超時(shí)檢測(cè)、連接錯(cuò)誤檢測(cè)以及接收超時(shí)檢測(cè)等。發(fā)生相應(yīng)錯(cuò)誤時(shí),會(huì)產(chǎn)生一個(gè)硬件錯(cuò)誤中斷。如果使能了鏈路口控制寄存器的校驗(yàn)使能位VERE,則在當(dāng)前四字組傳送結(jié)束、下一四字組傳送過(guò)程開始之間,校驗(yàn)和緊接四字組的最后一個(gè)字節(jié)在LxCLKOUT信號(hào)時(shí)鐘上升沿發(fā)出,此時(shí)下降沿處的數(shù)據(jù)是無(wú)效的,校驗(yàn)和字節(jié)將在LxCLKIN的上升沿處采樣。若VERE位清除,禁止校驗(yàn),則下一四字組的首字節(jié)將緊跟當(dāng)前四字組的最后一個(gè)字節(jié)出現(xiàn)。這一過(guò)程如圖4.3-5和圖4.3-6所示。圖4.3-5鏈路A向鏈路B啟動(dòng)傳送過(guò)程圖4.3-6VERE位清除時(shí),一個(gè)四字組傳送結(jié)束,新的四字組傳送過(guò)程開始

LxCLKIN信號(hào)由接收端驅(qū)動(dòng),發(fā)往發(fā)送端,它通常用作“等待”指示信號(hào)。但LxCLKIN信號(hào)也可用作連接測(cè)試信號(hào),以保證接收端能正確地接收當(dāng)前傳送數(shù)據(jù)。

用作等待指示信號(hào)時(shí),接收端驅(qū)動(dòng)LxCLKIN為低電平。若LxCLKIN保持低電平狀態(tài),則發(fā)送端可以完成當(dāng)前的四字組傳送過(guò)程,但無(wú)法啟動(dòng)下一個(gè)四字組傳送操作。若還有其余的數(shù)據(jù)需要傳送,則發(fā)送端須將LxCLKOUT置為低,并等待接收端將LxCLKIN驅(qū)動(dòng)為高電平。如果在第12個(gè)時(shí)鐘沿來(lái)到之前LxCLKIN變?yōu)楦唠娖?,則緊接著傳送的將是新的四字組。這一過(guò)程如圖4.3-7所示。圖4.3-7接收端緩沖區(qū)滿引起的傳送等待以上說(shuō)明了鏈路口的單向數(shù)據(jù)傳輸情況。通過(guò)軟件控制協(xié)議,也可以實(shí)現(xiàn)鏈路口之間的雙向數(shù)據(jù)通信與實(shí)時(shí)切換。在雙向通信時(shí),每個(gè)鏈路口必須清楚哪一方是發(fā)送方,哪一方是接收方,否則,雙方可能同時(shí)發(fā)送數(shù)據(jù),使通信失敗。利用令牌傳輸協(xié)議,則很好地解決了兩個(gè)鏈路口之間的雙向通信。

令牌傳遞是控制兩個(gè)或者多個(gè)DSP之間通信的軟件控制方案。進(jìn)行數(shù)據(jù)通信時(shí),一方作為主方(發(fā)送方),另一方為接收方,但在某個(gè)時(shí)刻,發(fā)送方也可以將主控制權(quán)交給對(duì)方,此后原接收方變?yōu)榘l(fā)送方,但令牌切換只能由發(fā)送端發(fā)起。令牌是雙方數(shù)據(jù)傳遞的軟件標(biāo)志,在系統(tǒng)復(fù)位時(shí),令牌標(biāo)志總是在一方鏈路口,標(biāo)志為發(fā)送者,另一方為接收者。在TS101S處理器中,如果出現(xiàn)以下兩種情況,發(fā)送端將啟動(dòng)令牌切換:一是發(fā)送端不再有新數(shù)據(jù)發(fā)送;二是LCTLx寄存器中的PSIZE位被清除(包大小為64個(gè)四字組),傳送完64個(gè)四字組。

令牌切換的示例如圖4.3-8所示。圖中名稱里帶有LxCLK的信號(hào)均為觀測(cè)第一個(gè)發(fā)送端(TS處理器A)的結(jié)果。發(fā)送端在發(fā)送完最后一個(gè)四字組時(shí)將LxCLKOUT置高,以此表明傳送過(guò)程結(jié)束。圖4.3-8令牌從TS處理器A切換至TS處理器B當(dāng)TS處理器B(接收端)監(jiān)測(cè)到輸入信號(hào)LxCLKIN(連至TS處理器A的LxCLKOUT)在一到兩個(gè)LxCLK周期內(nèi)表現(xiàn)為高電平時(shí),它就可以通過(guò)輸出低電平LxCLKOUT信號(hào)的方法請(qǐng)求令牌切換。LxCLK周期長(zhǎng)度由CCLK和鏈路時(shí)鐘分頻數(shù)兩者共同確定。

當(dāng)LxCLKOUT信號(hào)在相當(dāng)長(zhǎng)的時(shí)間內(nèi)保持為高電平時(shí),表明前一發(fā)送端(本例中的A)同意令牌切換且已做好接收數(shù)據(jù)的準(zhǔn)備時(shí),令牌被交換。鏈路有一個(gè)輸出信號(hào)LxDIR,它可以指示數(shù)據(jù)的傳送方向。LxDIR為高時(shí),鏈路數(shù)據(jù)引腳的方向?yàn)檩敵?。發(fā)送端啟動(dòng)令牌切換時(shí),LxDIR信號(hào)被清除。令牌切換后,LxDIR在發(fā)送數(shù)據(jù)過(guò)程中被置為高電平——兩個(gè)LxDIR高電平不會(huì)出現(xiàn)重疊。此控制信號(hào)可用于數(shù)據(jù)總線上任一類型的雙向數(shù)據(jù)緩存。

若經(jīng)過(guò)一段暫停之后,先前的發(fā)送端再次有數(shù)據(jù)要發(fā)送,而前一接收端還沒(méi)有請(qǐng)求令牌切換,則先前的發(fā)送端可以中止令牌切換,開始啟動(dòng)數(shù)據(jù)發(fā)送。當(dāng)然,這要求先前的發(fā)送端必須保持LxCLKOUT高電平足夠長(zhǎng)的時(shí)間,確保執(zhí)行令牌切換。接收端探測(cè)到它的LxCLKIN變?yōu)楦咧?,必須?qǐng)求令牌切換。若接收端沒(méi)有及時(shí)申請(qǐng)令牌切換,則可以終止令牌切換。令牌終止過(guò)程如圖4.3-9所示。圖4.3-9發(fā)送端終止令牌切換4.3.3鏈路口控制及狀態(tài)寄存器

鏈路口控制寄存器主要完成鏈路緩沖區(qū)的分配、鏈路口操作模式的配置以及實(shí)現(xiàn)鏈路DMA操作等。鏈路控制寄存器有鏈路緩沖控制寄存器LCTLx、鏈路狀態(tài)寄存器LSTATx和鏈路狀態(tài)清除寄存器LSTATCx。TS101S共有4個(gè)鏈路口,每個(gè)鏈路口分配一個(gè)控制寄存器、狀態(tài)寄存器和狀態(tài)清除寄存器??刂萍拇嫫魇强勺x寫的。此外,每個(gè)鏈路口還有兩個(gè)鏈路口緩沖寄存器(LBUFTXx和LBUFRXx)。

LCTLx是一個(gè)32位的寄存器,其字段與位定義如圖4.3-10和表4.3-2所示。圖4.3-10LCTLx寄存器格式 4.4TS20XS處理器的鏈路口

4.4.1TS20XS鏈路口結(jié)構(gòu)

TS201S處理器的片內(nèi)提供了4個(gè)鏈路口,每個(gè)鏈路口都由4位雙向差分?jǐn)?shù)據(jù)線和另外三個(gè)控制信號(hào)構(gòu)成。數(shù)據(jù)通信時(shí),鏈路口可以直接由處理器核控制,也可以由DMA控制器控制。在數(shù)據(jù)通信過(guò)程中,在鏈路口時(shí)鐘的上升沿和下降沿對(duì)數(shù)據(jù)進(jìn)行鎖存與驅(qū)動(dòng)(所謂雙倍數(shù)據(jù)速率)。

TS20XS的鏈路口與SOC總線的連接關(guān)系如圖4.4-1所示。圖4.4-1TS20XS的鏈路口與SOC總線的連接關(guān)系

TS20XS鏈路口傳輸時(shí)的工作時(shí)鐘在軟件上也是可控的,只需配置相應(yīng)的寄存器LTCTLx的相應(yīng)位,就可以將鏈路口時(shí)鐘配置為1/1核時(shí)鐘、1/1.5核時(shí)鐘、1/2核時(shí)鐘和1/4核時(shí)鐘。

TS20XS鏈路口傳輸時(shí)可4位并行,當(dāng)處理器核工作在500MHz時(shí),鏈路口也可工作在500MHz,每個(gè)鏈路口的雙向吞吐率可以達(dá)到1000MB/s,四個(gè)鏈路口同時(shí)工作時(shí)的數(shù)據(jù)吞吐率可以達(dá)到4GB/s。

TS20XS鏈路口傳輸可通過(guò)內(nèi)核中斷或查詢方式控制,也可通過(guò)DMA方式進(jìn)行傳輸,對(duì)每鏈路接收和發(fā)送都有專門的DMA通道。它們還都支持DMA鏈,也都可以用于引導(dǎo)。值得注意的是,TS20XS鏈路口與TS101S以及SHARCDSP鏈路口是不兼容的。圖4.4-2TS20XS鏈路口結(jié)構(gòu)4.4.2鏈路口的控制和狀態(tài)寄存器

TS201S處理器有4個(gè)鏈路口,每個(gè)鏈路口都帶有一個(gè)鏈路口接收緩沖寄存器LBUFRXx和鏈路口發(fā)送緩沖寄存器LBUFTXx。鏈路口接收緩沖寄存器用來(lái)接收鏈路口傳輸時(shí)存放接收到的數(shù)據(jù),鏈路口發(fā)送緩沖寄存器用來(lái)存放鏈路口傳輸時(shí)發(fā)送端的發(fā)送數(shù)據(jù)。鏈路口接收緩沖寄存器和發(fā)送緩沖寄存器都是128位,并且只能采用四字的方式進(jìn)行訪問(wèn)。鏈路口接收緩沖寄存器具有只讀性。

每個(gè)鏈路口都有鏈路口控制寄存器LCTLx、鏈路狀態(tài)寄存器LSTATx和鏈路狀態(tài)清除寄存器LSTATCx,用于控制鏈路口的數(shù)據(jù)傳輸(發(fā)送與接收)操作,描述數(shù)據(jù)傳輸操作后的故障檢測(cè)狀態(tài)。1)鏈路口接收控制寄存器LRCTLx

鏈路口接收控制寄存器(LRCTLx)用來(lái)設(shè)置鏈路口接收端口的參數(shù)。在處理器復(fù)位后,鏈路口接收控制寄存器的默認(rèn)值由外部Strap引腳確定,當(dāng)Strap引腳LINK_DWIDTH=0(RDSIZE=0)時(shí),該寄存器默認(rèn)值為0x00000001;當(dāng)Strap引腳LINK_DWIDTH=1(RDSIZE=1)時(shí),該寄存器默認(rèn)值為0x00000011。圖4.4-3鏈路口接收控制寄存器(LRCTLx)位定義

2)鏈路口發(fā)送控制寄存器LTCTLx

鏈路口發(fā)送控制寄存器(LRCTLx)用來(lái)設(shè)置鏈路口發(fā)送端口的參數(shù),復(fù)位后,默認(rèn)值為0x00000001,位定義如圖4.4-4所示。圖4.4-4鏈路口發(fā)送控制寄存器(LTCTLx)位定義

3)鏈路口接收狀態(tài)寄存器LRSTATx

鏈路口接收狀態(tài)寄存器(LRSTATx)用來(lái)指示鏈路口接收端狀態(tài),復(fù)位后,默認(rèn)值為0x00000000,位定義如圖4.4-5所示。圖4.4-5鏈路口接收狀態(tài)寄存器(LRSTATx)位定義

4)鏈路口發(fā)送狀態(tài)寄存器LTSTATx

鏈路口發(fā)送狀態(tài)寄存器(LTSTATx)用來(lái)指示鏈路口發(fā)送端狀態(tài),復(fù)位后,默認(rèn)值為0x00000000,位定義如圖4.4-6所示。圖4.4-6鏈路口發(fā)送狀態(tài)寄存器(LTSTATx)位定義4.4.3鏈路口的連接方式和工作

TS20XS鏈路口都是獨(dú)立的雙向口,在發(fā)送數(shù)據(jù)的同時(shí)可從對(duì)方接收數(shù)據(jù)。每個(gè)通道的數(shù)據(jù)可達(dá)4位,用LxCLKOUTP/N、LxACKI、LxCLKINP/N和LxACKO信號(hào)控制,LxBCMPI和LxBCMPO用于描述塊傳輸已經(jīng)完成。TS20XS鏈路口的信號(hào)連接如圖4.4-7所示。圖4.4-7ADSP—TS20X鏈路口的信號(hào)連接

TS20XS鏈路口是時(shí)鐘鎖存的LVDS高速數(shù)據(jù)口。LVDS是具有比單端傳輸更高速度、傳輸距離更遠(yuǎn)的差分信號(hào)標(biāo)準(zhǔn)。這個(gè)技術(shù)允許在TS20XS處理器之間、TS20XS與FPGA之間提供更高的頻率、更高的噪聲抑制能力、更低的功耗與更弱的電磁干擾的數(shù)據(jù)傳輸通道。

LVDS信號(hào)要求差分連接,如圖4.4-8所示;要求在接收方加內(nèi)部100Ω端接電阻;印制板電路連線要進(jìn)行阻抗和延遲匹配設(shè)計(jì),以保證所有數(shù)據(jù)引腳和時(shí)鐘有相同的延遲;單端信號(hào)(LxACKI、LxACKO、LxBCMPI和LxBCMPO)要求不嚴(yán)格,但延遲時(shí)間應(yīng)與差分信號(hào)接近。圖4.4-8TS20X鏈路口內(nèi)的差分信號(hào)連接

1)數(shù)據(jù)的發(fā)送和接收

向TS20XS鏈路口的發(fā)送緩沖寄存器寫數(shù)據(jù)就完成了數(shù)據(jù)的發(fā)送,同樣,從接收緩沖寄存器讀數(shù)據(jù)也就完成了數(shù)據(jù)的接收。只要移位寄存器為空,所有寫入發(fā)送緩沖區(qū)的數(shù)據(jù)會(huì)拷貝到移位寄存器中;僅當(dāng)接收移位寄存器為空,或接收緩沖器有多余的空間可以從移位寄存器接收完整的4個(gè)字的接收數(shù)據(jù)時(shí),接收緩沖區(qū)才允許數(shù)據(jù)輸入;當(dāng)接收緩沖器空,并且4個(gè)字的接收已完成時(shí),才允許從移位寄存器讀入數(shù)據(jù)。如果接收緩沖器滿,則會(huì)將數(shù)據(jù)拷貝到臨時(shí)接收緩沖器,一直保持到接收緩沖器空。接收方用LxACKO來(lái)控制數(shù)據(jù)流,在LxACKO有效時(shí)可移入兩個(gè)4字組。

2)鏈路口DMA

每個(gè)鏈路口與兩個(gè)DMA通道相連,分別用于數(shù)據(jù)的發(fā)送和接收。兩個(gè)DMA通道都與內(nèi)部存儲(chǔ)器、外部存儲(chǔ)器及其他鏈路口緩沖器接口。

鏈路口在LBUFTXx寄存器為空且DMA通道使能時(shí)請(qǐng)求發(fā)送DMA通道。當(dāng)它完成4個(gè)字的接收,LBUFRXx接收緩沖器又滿,且DMA通道使能時(shí)請(qǐng)求接收DMA通道。

接收DMA通道通過(guò)寫其他通道的發(fā)送寄存器,可用于旁路發(fā)送器。只要目標(biāo)鏈路口的發(fā)送寄存器為空,DMA就可以傳輸數(shù)據(jù)。

3)鏈路口塊傳輸完成

有時(shí)接收器要準(zhǔn)確知道,它要接收多少個(gè)4字組。鏈路口塊傳輸完成特性使得發(fā)送端可以通告接收器傳輸數(shù)據(jù)塊已全部完成。

當(dāng)DMA寫最后一個(gè)4字組到發(fā)送鏈路口的發(fā)送緩沖器時(shí),它發(fā)出一個(gè)緩沖器完成標(biāo)志,鏈路口發(fā)出LxBCMPO有效信號(hào)。LTCTLx中的TBCMPE位置位。

當(dāng)取樣到有效LxBCMPI信號(hào)時(shí),接收鏈路口將此信息與DMA請(qǐng)求一起發(fā)送到DMA通道。TCB計(jì)數(shù)器被清零,DMA程序完成。

4)鏈路口中斷

當(dāng)鏈路口以處理器內(nèi)核的操作方式完成鏈路口接收時(shí),鏈路口有專門的中斷用于數(shù)據(jù)流的控制。只有在該鏈路口的DMA通道沒(méi)有初始化時(shí),才會(huì)確認(rèn)鏈路口接收中斷。當(dāng)將接收器中收到的4個(gè)字寫入LBUFRXx寄存器時(shí),接收鏈路口也會(huì)確認(rèn)接收中斷。鏈路口接收中斷是電平觸發(fā)的,因此,如果鏈路口中斷被確認(rèn)后與該鏈路口相應(yīng)的DMA通道又被激活,則鏈路口接收中斷將無(wú)效,會(huì)發(fā)出DMA通道請(qǐng)求。

5)鏈路口復(fù)位初始化和引導(dǎo)

鏈路口引導(dǎo)是從引導(dǎo)模式,處理器認(rèn)為引導(dǎo)代碼已在核內(nèi)。復(fù)位后,所有4個(gè)鏈路口的DMA通道都初始化為引導(dǎo)256個(gè)字(引導(dǎo)核)到內(nèi)部存儲(chǔ)器地址0~256單元,在塊傳輸完成后發(fā)出一個(gè)中斷(類似于外部口的DMA),相應(yīng)的DMA中斷服務(wù)入口設(shè)為0地址。不用于引導(dǎo)的DMA通道應(yīng)加以清除并重新初始化。如DMA通道沒(méi)有激活,鏈路口中斷機(jī)制將不工作,它們也可重新初始化。

鏈路口引導(dǎo)時(shí)在BMS引腳與VDD_IO間需上拉500Ω電阻。了解鏈路口引導(dǎo)過(guò)程是很重要的。復(fù)位后鏈路口引導(dǎo)過(guò)程如下:

(1)鏈路口引導(dǎo)始終是使能的,硬件復(fù)位后,LRCTLx初始化設(shè)置為鏈路口接收(REN=1)。

(2)處理器檢測(cè)外部引導(dǎo)引腳(EBOOT)為高,等待一個(gè)外部處理器或鏈路口引導(dǎo)開始。由于鏈路口接收器在復(fù)位后總是使能的,因此鏈路口引導(dǎo)并不由EBOOT引腳值決定。

(3)當(dāng)鏈路口引導(dǎo)的處理器準(zhǔn)備好以后,處理器使能鏈路口的LxBCMPI無(wú)效初始化鏈路口。處理器以鏈路口接收的DMA通道響應(yīng)并接收256個(gè)字的引導(dǎo)核。鏈路口復(fù)位后用LxBCMPI為初始化的硬件握手信號(hào)僅僅發(fā)生一次。注意:由LxBCMPI確認(rèn)到接收初始化要求2500個(gè)SOCCLK時(shí)鐘周期。初始化完成后,LxBCMPI恢復(fù)正常應(yīng)用。

6)鏈路口的軟件初始化

復(fù)位后鏈路口接收器首先要求初始化握手。大多數(shù)系統(tǒng)都以使LxBCMPI無(wú)效來(lái)初始化該鏈路口。當(dāng)一個(gè)器件(如FPGA)用作鏈路口接收器,但它又不能在LxBCMPI引腳產(chǎn)生用于初始化握手信號(hào)時(shí),系統(tǒng)可用軟件初始化該鏈路口。

鏈路口用LRCTLx寄存器中的REN(接收使能)、RINIF(接收器初始化,強(qiáng)制)和RINIV(

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論