SHARC并行系統(tǒng)軟件設計方法
ADSP2116X提供了獨立的6個鏈路口,每個鏈路口可以實現(xiàn)與其他ADSP2116X或者外圍設備點對點的通信。每個鏈路口包括8位雙向數(shù)據(jù)線(LxDAT7~0),1個雙向時鐘信號(LxCLK),1個雙向確認信號(LxACK)。但是,鏈路口沒有為發(fā)送和接收提供2套管腳,所以在任何時刻鏈路口只能工作在單工狀態(tài)。依靠鏈路口進行雙DSP間的數(shù)據(jù)傳遞時,只需要把2個DSP的10個管腳對應連接即可,不需要任何外部附加邏輯。
在ADSP2116X內部有6個鏈路緩沖器。用戶通過定義LAR寄存器,可以為每個鏈路口選擇一個或幾個緩存器。鏈路緩沖器一端與內部總線相連,另一端通過LAR寄存器與不同的鏈路口相連。需要注意的是,鏈路口與鏈路緩存器是完全不同的概念。鏈路緩沖器可以理解為一個雙向的FIFO,而鏈路口僅僅代表其對外的10個管腳。鏈路口的特性很大程度上是由其正在使用的緩沖器的特性決定的。
ADSP2116X的鏈路口發(fā)送時鐘頻率可以通過LCTLx寄存器的LxCLKD位設置(1,1/2,1/3,1/4核時鐘頻率),鏈路口數(shù)據(jù)線根據(jù)需要可以選擇為8位或4位。發(fā)送方在時鐘LxCLK的上升沿送出8/4位碼,接收方利用時鐘下降沿鎖存8/4位碼,并且接收方使LxACK有效,表示已準備好接收下一個字。在每個字開始發(fā)送時,發(fā)送方如果看到LxACK無效,則將LxCLK保持為高,并等待LxACK有效后才開始發(fā)送新字。當發(fā)送緩沖為空時,LxCLK將保持為低電平。
鏈路口數(shù)據(jù)傳輸可以通過DMA方式和內核直接訪問二種方式。DMA方式傳輸時不需要內核干預,在傳輸數(shù)據(jù)量比較大時效率很高,但是需要首先進行DMA參數(shù)設置。當僅有個別數(shù)據(jù)需要通過鏈路口傳遞的情況下,往往不使用DMA方式,而是通過ADSP2116X的內核直接訪問。用戶可以通過LCOM寄存器中緩沖器的狀態(tài)來控制內核對鏈路口緩沖進行讀寫操作,也可以通過相應的中斷從鏈路口緩沖器中讀寫數(shù)據(jù),如“DM(LBUF0)=R0;”或者“R0=DM(LBUF0);”等。值得注意的是,無論是試圖從一個空的鏈路緩沖中讀,還是試圖向滿的緩沖中寫,內核的指令都會掛起,直到操作成功為止。因此,內核指令直接讀寫鏈路緩存時,需要首先判斷鏈路緩沖狀態(tài)。
ADSP2116X為每個鏈路口提供了一個專用的DMA通道,它們分別占用DMA中的4~9通道。鏈路口的DMA使用非常方便,只需將對應的DMA參數(shù)寄存器(IIx,IMx,Cx)設置完畢,使能LCTLx中對應通道的LxDEN即可。在當前DMA結束(或者鏈式DMA全部結束)后,會觸發(fā)一個可屏蔽中斷通知用戶。啟動鏈路口DMA的順序如下:
(1)由LAR寄存器的AxLB為鏈路口分配一個LBUFx;
(2)由LCTL寄存器的LxEN使能這個LBUFx,并設置好LCTL控制寄存器;
(3)設置DMA參數(shù)(IIy,IMy,Cy);
(4)置位LCTL寄存器的LxDEN,就啟動了DMA。
其中:x=0~5,y=4~9。
下面給出一個利用鏈路口DMA發(fā)送數(shù)據(jù)的示例。
例2:利用鏈路口0進行數(shù)據(jù)發(fā)送。
.SECTION/dm dm_data;
.VAR trans_data[size];
.SECTION/pm pm_code:
……
r0=0x0002c688;
dm(LAR)=r0;
r9=0x00000229; /*LBUF0使能、發(fā)送、8位字寬、核時鐘速率*/
dm(LCTL0)=r9;
r0=trans_data;
dm(II4)=r0; /*需要發(fā)送數(shù)據(jù)的起始地址*/
r0=1;
dm(IM4)=r0;
r0=size;
dm(C4)=r0;
ustat1=dm(LCTL0);
bit set ustat1 L0DEN; /*啟動發(fā)送DMA*/
dm(LCTL0)=ustat1;
如果傳輸?shù)臄?shù)據(jù)不在一段連續(xù)的內存區(qū),而是在多段數(shù)據(jù)塊中,可以利用鏈式DMA。鏈式DMA可以在當前DMA操作結束后自動重新配置當前通道并開始新的DMA,所有這些操作都不需要內核的干預。在鏈式DMA過程中,用戶只要對DMA參數(shù)配置一次,就可以方便地完成多塊數(shù)據(jù)的DMA傳輸。
鏈式DMA是通過CPx寄存器實現(xiàn)的。對于ADSP2116X來說,CPx是一個19位的寄存器。寄存器中低18位表示相對于基地址0x40000的偏移量,用戶在這個地址的內部存儲器中存放下一次DMA的參數(shù),這些參數(shù)叫做TCB(Transfer Control Blocks)。CPx中的第19位是控制當前鏈式DMA完成后是否產(chǎn)生中斷的PCI位。如果把全局地址賦給CPx,則PCI位一定為1,表明一定會產(chǎn)生中斷。

評論