(1)在片內(nèi)存儲器中建立需要的TCB數(shù)據(jù)塊;
(2)設(shè)置DMA參數(shù)寄存器,使能相應(yīng)的LxDEN和LxCHEN;
(3)將第一個(gè)TCB的最后一個(gè)地址的偏移量寫入CPx寄存器中,即啟動了鏈?zhǔn)紻MA。
鏈路口的數(shù)據(jù)傳遞可以依靠中斷。鏈路口中斷的產(chǎn)生有以下3種情況:
(1)DMA使能時(shí),DMA完成后將產(chǎn)生一個(gè)可屏蔽中斷。
(2)DMA禁止時(shí),發(fā)送時(shí)LxBUF非滿,接收時(shí)LxBUF非空。
(3)外部設(shè)備訪問一個(gè)未指定的鏈路口,或者訪問一個(gè)已指定但LBUF被禁止的鏈路口時(shí),將產(chǎn)生一個(gè)鏈路服務(wù)請求(LSRQ)中斷,且所有的鏈路口公用一個(gè)中斷矢量。
前2種情況比較簡單,只需要注意:ADSP2116X鏈路口的中斷屏蔽、鎖存與ADSP2106X不同,它從IRPTL/IMASK中分離出來,單獨(dú)存在于寄存器LIRPTL中,并且在IMASK中加了一個(gè)鏈路口中斷總開關(guān)LPISUMI。如果要使能某個(gè)鏈路口中斷,則需要設(shè)置3個(gè)控制位。例如使能L0BUF中斷,需要以下指令:“bit set imask LPISUMI;bit set lirptl LP0MSK;bit set mode1 IRPTEN;”。
對于上面的鏈路服務(wù)請求中斷(LSRQ),在多SHARC通信時(shí)比較有效。通過該中斷可以實(shí)現(xiàn)使用同一個(gè)鏈路口完成接收和發(fā)送數(shù)據(jù)的功能,并且在2個(gè)SHARC一個(gè)主動、另一個(gè)被動的情況下不依靠外部邏輯實(shí)現(xiàn)2個(gè)鏈路口的數(shù)據(jù)傳遞同步。例如SHARC-1需要通過鏈路口向SHARC-2傳送數(shù)據(jù),由于SHARC-1主動發(fā)送,因此只需配置好DMA參數(shù),啟動DMA即可。但是對于SHARC-2,由于被動接收,事先并不知道SHARC-1何時(shí)向自己發(fā)送數(shù)據(jù),因此很難在適當(dāng)?shù)臅r(shí)候啟動DMA接收。通過LSRQ中斷,就可以很容易地解決這個(gè)問題。
首先將雙方的鏈路口設(shè)置為無效。當(dāng)SHARC-1需要向SHARC-2通信時(shí)(發(fā)送或接收)將自己的鏈路口設(shè)為有效,并根據(jù)需要從自己的鏈路緩沖中讀寫數(shù)據(jù)。由于鏈路通信協(xié)議規(guī)定:當(dāng)發(fā)送數(shù)據(jù)時(shí),如果對方?jīng)]有響應(yīng),則將LxCLK置為高電平,數(shù)據(jù)線保持不變;當(dāng)需要接收數(shù)據(jù)時(shí),如果對方?jīng)]有響應(yīng),則LxACK保持為高電平。這樣,SHARC-2就會觸發(fā)LSRQ中斷。由于LSRQ中斷的所有鏈路口公用一個(gè)中斷矢量,因此在中斷服務(wù)子程序中,首先需要判斷哪個(gè)鏈路口有服務(wù)請求,且要區(qū)分是發(fā)送還是接收請求,然后配置相應(yīng)的DMA參數(shù),使能該鏈路口,從而在雙方之間建立一個(gè)單向的數(shù)據(jù)通路。雙方傳遞數(shù)據(jù)完成,會產(chǎn)生一個(gè)如上文中鏈路口中斷情況(1)所示的中斷。在中斷服務(wù)程序中,仍然將各自的鏈路口設(shè)置為無效,等待下一次通信請求。下面給出一個(gè)利用LSRQ中斷實(shí)現(xiàn)數(shù)據(jù)傳遞的示例。
例3:配置L0BUF,利用LSRQ中斷實(shí)現(xiàn)數(shù)據(jù)傳遞。
r0=0x0002c688;
dm(LAR)=r0;
ustat1=dm(LCTL0);
bit clr ustat1 L0EN; /*禁止鏈路緩沖0*/
dm(LCTL0)=ustat1;
ustat1=dm(LSRQ);
bit set ustat1 L0TM; /*鏈路0發(fā)送屏蔽*/
bit set ustat1 L0RM; /*鏈路0接收屏蔽*/
dm(LSRQ)=ustat1;
bit set imask LSRQI; /*使能LSRQ中斷*/
bit set mode1 IRPTEN;
……
上面的程序段可以放在主程序的開始。經(jīng)過以上的配置,就可以通過LSRQ中斷方便地實(shí)現(xiàn)與另一片SHARC的鏈路口通信(發(fā)送、接收)。另外需要注意的是,當(dāng)修改鏈路緩沖器的使能位LxEN時(shí),必須將該中斷屏蔽(bit clr imask LSRQI),否則有可能產(chǎn)生不可預(yù)料的LSRQ中斷。
3 結(jié)束語
采用共享存儲器并行系統(tǒng)和分布存儲器并行系統(tǒng)各有特色,結(jié)合這二種系統(tǒng)設(shè)計(jì)的思想更易于構(gòu)建并行處理系統(tǒng)。設(shè)計(jì)時(shí),可以采用子模塊結(jié)構(gòu)把這二者結(jié)合起來。子模塊內(nèi)部,采用共享存儲器和分布存儲器并存,各個(gè)SHARC間根據(jù)需要既可以通過總線傳送數(shù)據(jù),又可以通過鏈路口傳送數(shù)據(jù)。子模塊之間采用分布式存儲器系統(tǒng),通過鏈路口進(jìn)行數(shù)據(jù)傳遞。采用以上設(shè)計(jì),可以實(shí)現(xiàn)有效的并行處理,使系統(tǒng)整體性能有很大的提高。
評論
查看更多