新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > SHARC并行系統(tǒng)軟件設(shè)計(jì)方法

SHARC并行系統(tǒng)軟件設(shè)計(jì)方法

作者: 時(shí)間:2014-02-17 來源:網(wǎng)絡(luò) 收藏
eight: 25px; background-color: rgb(255, 255, 255); ">  用戶只需要在內(nèi)存區(qū)填寫多個(gè)TCB的表格,用其中的CPx字段將每個(gè)表格串起來并將第一個(gè)表格的結(jié)束地址放入CPx寄存器,就可以啟動(dòng)鏈?zhǔn)紻MA。要終止一個(gè)鏈?zhǔn)紻MA,只需要把最后一個(gè)TCB中的CPx字段填0即可。TCB結(jié)構(gòu)如圖1所示。

本文引用地址:http://butianyuan.cn/article/241699.htm

  

下面是建立一個(gè)鏈?zhǔn)紻MA的順序:

  (1)在片內(nèi)存儲(chǔ)器中建立需要的TCB數(shù)據(jù)塊;

  (2)設(shè)置DMA參數(shù)寄存器,使能相應(yīng)的LxDEN和LxCHEN;

  (3)將第一個(gè)TCB的最后一個(gè)地址的偏移量寫入CPx寄存器中,即啟動(dòng)了鏈?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ù)請(qǐng)求(LSRQ)中斷,且所有的鏈路口公用一個(gè)中斷矢量。

  前2種情況比較簡(jiǎn)單,只需要注意: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;”。

  對(duì)于上面的鏈路服務(wù)請(qǐng)求中斷(LSRQ),在多通信時(shí)比較有效。通過該中斷可以實(shí)現(xiàn)使用同一個(gè)鏈路口完成接收和發(fā)送數(shù)據(jù)的功能,并且在2個(gè)一個(gè)主動(dòng)、另一個(gè)被動(dòng)的情況下不依靠外部邏輯實(shí)現(xiàn)2個(gè)鏈路口的數(shù)據(jù)傳遞同步。例如-1需要通過鏈路口向SHARC-2傳送數(shù)據(jù),由于SHARC-1主動(dòng)發(fā)送,因此只需配置好DMA參數(shù),啟動(dòng)DMA即可。但是對(duì)于SHARC-2,由于被動(dòng)接收,事先并不知道SHARC-1何時(shí)向自己發(fā)送數(shù)據(jù),因此很難在適當(dāng)?shù)臅r(shí)候啟動(dòng)DMA接收。通過LSRQ中斷,就可以很容易地解決這個(gè)問題。

  首先將雙方的鏈路口設(shè)置為無效。當(dāng)SHARC-1需要向SHARC-2通信時(shí)(發(fā)送或接收)將自己的鏈路口設(shè)為有效,并根據(jù)需要從自己的鏈路緩沖中讀寫數(shù)據(jù)。由于鏈路通信協(xié)議規(guī)定:當(dāng)發(fā)送數(shù)據(jù)時(shí),如果對(duì)方?jīng)]有響應(yīng),則將LxCLK置為高電平,數(shù)據(jù)線保持不變;當(dāng)需要接收數(shù)據(jù)時(shí),如果對(duì)方?jīng)]有響應(yīng),則LxACK保持為高電平。這樣,SHARC-2就會(huì)觸發(fā)LSRQ中斷。由于LSRQ中斷的所有鏈路口公用一個(gè)中斷矢量,因此在中斷服務(wù)子程序中,首先需要判斷哪個(gè)鏈路口有服務(wù)請(qǐng)求,且要區(qū)分是發(fā)送還是接收請(qǐng)求,然后配置相應(yīng)的DMA參數(shù),使能該鏈路口,從而在雙方之間建立一個(gè)單向的數(shù)據(jù)通路。雙方傳遞數(shù)據(jù)完成,會(huì)產(chǎn)生一個(gè)如上文中鏈路口中斷情況(1)所示的中斷。在中斷服務(wù)程序中,仍然將各自的鏈路口設(shè)置為無效,等待下一次通信請(qǐng)求。下面給出一個(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é)束語

  采用共享存儲(chǔ)器并行系統(tǒng)和分布存儲(chǔ)器并行系統(tǒng)各有特色,結(jié)合這二種系統(tǒng)設(shè)計(jì)的思想更易于構(gòu)建并行處理系統(tǒng)。設(shè)計(jì)時(shí),可以采用子模塊結(jié)構(gòu)把這二者結(jié)合起來。子模塊內(nèi)部,采用共享存儲(chǔ)器和分布存儲(chǔ)器并存,各個(gè)SHARC間根據(jù)需要既可以通過總線傳送數(shù)據(jù),又可以通過鏈路口傳送數(shù)據(jù)。子模塊之間采用分布式存儲(chǔ)器系統(tǒng),通過鏈路口進(jìn)行數(shù)據(jù)傳遞。采用以上設(shè)計(jì),可以實(shí)現(xiàn)有效的并行處理,使系統(tǒng)整體性能有很大的提高。


上一頁 1 2 3 下一頁

關(guān)鍵詞: SHARC 并行系統(tǒng)軟件

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉