新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 裸機AMP(非對稱多進程處理模式)

        裸機AMP(非對稱多進程處理模式)

        作者: 時間:2017-10-13 來源:網絡 收藏

        在上一篇博客中,我們已經將 啟動并運行起來,在(非對稱多進程處理)模式下使用了兩個ARM Cortex-A9 MPCore處理器,然而因為上一篇博客已經相當長了,我沒有詳細的介紹軟件方面的工程細節。

        本文引用地址:http://www.104case.com/article/201710/365673.htm

        其實 在兩個處理器上運行的軟件工程也非常的簡單。這里我將為你們展示通過OCM(片上存儲器件)實現 的兩個處理器之間的通信。然而,現在的軟件工程非常的簡單,因此我們可以從這個基礎工程開始,繼續完善。

        上周我們完成的例子中的軟件工程主要完成以下幾個任務:

        Core 0 是主設備,它可以激活Core 1。它也利用了片上的UART串口以固定的延遲向一個終端輸出打印信息。這個延遲不適用定時計數器等,盡管在這里使用私有的定時計數器很容易,我將在后面的博客中介紹同時使用兩個私有的定時計數器。

        一旦Core 0 啟動起來,Core 1初始化它的私有資源,輸出切換信號,控制位于MicroZed I/O擴展板上的八個LED燈亮滅,這里我們需要使用Core 1私有的定時計數器和通過GIC使能中斷,實現以上功能。

        這些應用程序之間是沒有聯系的,它們并不分享資源。然而,接下來我們想讓這些應用程序之間能夠通信,分享資源。

        運行在 Core 0上的應用程序是非常簡單的。它主要實現的是激活運行在Core 1上的應用程序,然后在一個無限循環中通過UART 0輸出打印出一段簡單的信息。

        然而,我們計劃使用Core 1的中斷控制器,所以第一步我們必須配置GIC(通用中斷控制器),將下圖所示的代碼加入到Core 0的應用程序的源代碼文件中:

        Core 1的應用程序代碼可能要更加復雜一些,因為我們要在 的PL(可編程邏輯)部分調用GPIO模塊,用于驅動控制MicroZed I/O擴展板上的LED燈。同賽靈思其他的接口一樣,standalone OS使用一句 #include “xgpio.h”代碼就提供了gpio接口的驅動信息,這個文件與我們之前驅動PS部分的MIO/EMIO GPIO接口所使用的xgpio_ps.h文件有一些小的不同,在這個例程中我想為大家展示如何在Zynq SoC的PL部分使用GPIO接口。

        為了確保我們能夠看出LED燈的亮滅狀態的切換,我們將使用Core 1私有的定時器,這與我們之前使用Core 0定時器是一樣的。

        在 Core 1的程序開始執行它的主程序之前,我們需要禁止片上存儲(OCM)的緩存功能,初始化GPIO接口,初始化私有的定時器,和配置中斷控制器,這樣私有的定時器中斷才能夠被用來控制LED燈亮滅狀態的切換。我們將使用Zynq SoC應用程序和禁止緩存的異常機制完成這些功能。

        現在我們可以開始編寫相當簡單的中斷服務程序,當私有的定時器計時結束然后重新計時時,這些中斷服務程序就能夠控制LED燈的亮滅。這個處理過程會一直進行,我選擇使用十六進制的AA和55交替轉變賦值給LED燈,控制LED燈的亮滅狀態。這個選擇將會是所有的LED燈“流動起來”,與所有LED燈的全亮或者全滅狀態是有一些區別的。

        下圖是程序執行的結果,通過Core 0輸出到終端對話框窗口:



        關鍵詞: AMP Zynq SoC

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 城市| 句容市| 崇仁县| 射洪县| 吉木萨尔县| 金阳县| 兰州市| 民权县| 邻水| 定陶县| 宜君县| 原平市| 黄石市| 垫江县| 思茅市| 水城县| 芦山县| 安乡县| 会泽县| 宜兰市| 泽库县| 大渡口区| 武冈市| 福建省| 巴林左旗| 郑州市| 河东区| 鹿泉市| 东莞市| 汨罗市| 呼图壁县| 夏邑县| 方山县| 武功县| 循化| 双柏县| 含山县| 英德市| 营山县| 深水埗区| 克东县|