這次奉上與LPC5500“核心”相關(guān)的“硬核”技術(shù)——雙核,以饗讀者。誠(chéng)然,MCU雙核已不是什么新鮮玩意兒。但是,LPC5500博采了LPC4300和LPC54110這兩個(gè)系列所長(zhǎng),使得雙核更簡(jiǎn)單實(shí)用。
LPC5500雙核基本架構(gòu)
雙核并不高深,所謂雙核就是兩個(gè)CPU——中央處理單元,也就是一個(gè)MCU芯片內(nèi)置了兩個(gè)CPU。
和之前支持雙核的LPC系列一樣,針對(duì)于MCU嵌入式應(yīng)用,LPC5500依然采用簡(jiǎn)單的非對(duì)稱架構(gòu),即一個(gè)主CPU,一個(gè)從CPU,這類似于有些產(chǎn)品采用主MCU和從MCU的設(shè)計(jì)。只是支持雙核的MCU,是共享此MCU所有的存儲(chǔ)器和外設(shè)接口資源。
共享就帶來(lái)競(jìng)爭(zhēng)的問(wèn)題,處理不當(dāng)則影響性能。LPC5500有配套的系統(tǒng)架構(gòu)來(lái)使得此共享可轉(zhuǎn)化為并行的,從而盡量避免競(jìng)爭(zhēng),來(lái)保證性能不被影響。
應(yīng)對(duì)競(jìng)爭(zhēng)架構(gòu)上的考慮,如下圖所示,主要有兩條:
內(nèi)部AHB總線是多層矩陣架構(gòu);
分離出多塊獨(dú)立的SRAM。
圖中所示:紅色框是多層AHB矩陣總線;綠色框是多塊分立的存儲(chǔ)塊。主CPU和從CPU的代碼數(shù)據(jù)可存放在不同存儲(chǔ)塊中,它們和圖中左下角大量外設(shè)接口并行的掛在矩陣總線上。
這樣,藍(lán)色框中的雙核CPU0和CPU1,可以同時(shí)并行地對(duì)存儲(chǔ)塊和外設(shè)接口進(jìn)行訪問(wèn),即程序可以同時(shí)運(yùn)行。如此,則雙核的威力能夠得以充分的發(fā)揮。
至此,我們初步認(rèn)識(shí)了LPC5500雙核,了解了其基本框架。但是,這好比我們只是遠(yuǎn)遠(yuǎn)的看見(jiàn)了一個(gè)人,大概知道其身形,他具體容貌怎樣的呢?讓我們一起往下看
LPC5500雙核面貌特征
上面提到,LPC5500雙核分為主從,主CPU命名為CPU0,從CPU命名為CPU1。它們都是基于ARM Cortex-M33的。
它們的基本配置構(gòu)成如下:
1、CPU0 (r0p3版):
頻率最高可達(dá)100MHz
TrustZone、DSP、浮點(diǎn)單元和存儲(chǔ)保護(hù)單元(MPU)
內(nèi)置嵌套向量中斷控制器(NVIC)
串行線調(diào)試接口(SWD)
系統(tǒng)嘀嗒定時(shí)器(System tick timer)
內(nèi)置嵌套向量中斷控制器(NVIC)
串行線調(diào)試接口(SWD)
系統(tǒng)嘀嗒定時(shí)器(System tick timer)
2、CPU1 (r0p3版):
頻率最高可達(dá)100 MHz
內(nèi)置嵌套向量中斷控制器(NVIC)
串行線調(diào)試接口(SWD)
系統(tǒng)嘀嗒定時(shí)器(System tick timer)
顯然,作為從的CPU1比主CPU0少了TrustZone、浮點(diǎn)單元(FPU)等,這使得主CPU0天然地計(jì)算處理能力更強(qiáng)。
但是賦予主CPU0這些亮點(diǎn),不是讓它做顏值擔(dān)當(dāng),而是任務(wù)擔(dān)當(dāng)?shù)?。這讓我們自然想到雙核的典型應(yīng)用——相信這也是大家很關(guān)心的。
LPC5500雙核典型應(yīng)用
LPC5500的雙核典型應(yīng)用,即基本應(yīng)用思路,與之前LPC4300和LPC54110一樣。
主CPU用來(lái)做處理計(jì)算任務(wù)(比如算法),從CPU負(fù)責(zé)外設(shè)實(shí)時(shí)控制和數(shù)據(jù)傳輸。
這樣,能充分利用雙核達(dá)到更好性能。參見(jiàn)下圖:
哦,LPC5500雙核很“酷”的樣子,有點(diǎn)“喜歡”上它了,可是,相愛(ài)容易相處難???!
不要擔(dān)心,難,那是因?yàn)椴欢萌绾巍跋嗵帯薄?/p>
接下來(lái),讓我們來(lái)聊聊如何和LPC5500雙核“相處”——雙核的實(shí)現(xiàn),這主要涉及到以下內(nèi)容:雙核啟動(dòng);雙核通訊;雙核調(diào)試。
1雙核啟動(dòng)
對(duì)于單核MCU,上電啟動(dòng)過(guò)程簡(jiǎn)單明了,如單身狗的生活簡(jiǎn)單自由,該干啥干啥,不能指望也無(wú)需考慮他人。
兩人世界就需要協(xié)商著行動(dòng)了,LPC5500采取了和最早LPC4300系列類似的雙核啟動(dòng)機(jī)制,即出廠默認(rèn)并固定一個(gè)核為主,另一個(gè)為從,不能更改,“專制”卻簡(jiǎn)單易用。
隨后的LPC54110系列則實(shí)行“民主”機(jī)制,兩個(gè)核可以輪流坐莊,即用戶可以在啟動(dòng)過(guò)程中選擇其中之一為主核,這樣提供了靈活性,但略微復(fù)雜。
為了簡(jiǎn)單起見(jiàn),如今新的LPC5500雙核使用固定的主從模式。
LPC5500上電時(shí),自然地按照主從,主核CPU0如單核一樣直接啟動(dòng),從核CPU1則hold住不動(dòng)——這由硬件自動(dòng)完成。
主核啟動(dòng)后負(fù)責(zé)初始化運(yùn)行環(huán)境,然后配置好從核的啟動(dòng)地址(即從核代碼映像運(yùn)行的起始地址),最后釋放從核CPU1——這些由軟件完成。這時(shí),主從雙核就分別如同單核一樣同時(shí)運(yùn)行它們各自的代碼了。
要讓雙核“和諧”運(yùn)作,關(guān)鍵是要讓兩個(gè)核的代碼映像存儲(chǔ)和運(yùn)行空間獨(dú)立互不干擾(參見(jiàn)前面關(guān)于多層總線矩陣和多塊存儲(chǔ)塊的介紹),這點(diǎn)具體實(shí)現(xiàn)方法是靈活的,比單核來(lái)得復(fù)雜些。這里就不具體展開(kāi),有需要的可找相關(guān)資料學(xué)習(xí),比如,我們有篇應(yīng)用筆記通過(guò)測(cè)試雙核coremark分?jǐn)?shù),提供了一種達(dá)到最好性能的實(shí)現(xiàn)方法。不關(guān)心這些細(xì)節(jié)也不用擔(dān)心,NXP已經(jīng)提供了相關(guān)SDK庫(kù)可直接借用。
2雙核通訊
當(dāng)兩個(gè)核都運(yùn)行起來(lái)后,它們可以像兩個(gè)不同行業(yè)的人,各自做著自己的本職工作,默默為社會(huì)貢獻(xiàn)自己的力量,老死不相往來(lái)。但大多數(shù)應(yīng)用中,兩個(gè)核除了各司其職,還需要互相通訊,協(xié)同工作。
LPC5500提供了一套簡(jiǎn)單的硬件通訊機(jī)制,叫內(nèi)部CPU郵箱通訊機(jī)制,可以適用于大多數(shù)嵌入式系統(tǒng)雙核的通訊應(yīng)用。
這套機(jī)制從LPC54110系列繼承而來(lái),最早的LPC4300系列雙核通訊幾乎完全靠軟件來(lái)實(shí)現(xiàn),占用資源,且給使用帶來(lái)不少難度。目前這套機(jī)制,簡(jiǎn)單易用,但不死板,留給用戶一定靈活發(fā)揮空間。
它主要提供了兩種寄存器,一種是32位的CPU中斷寄存器,兩個(gè)CPU都能訪問(wèn)它,32位中只要有一位不為零,就能產(chǎn)生中斷請(qǐng)求,且每一位可代表一個(gè)不同狀況,比如事件或者狀態(tài),這完全可由用戶自己定義。
這樣CPU間就可相互實(shí)時(shí)通訊了,比如一個(gè)CPU完成某項(xiàng)任務(wù),寫入一個(gè)非0值到此寄存器,發(fā)出中斷信號(hào),另一CPU中斷后讀取此值,來(lái)決定后續(xù)工作。
通訊的一大需求就是同步,這就需要另一個(gè)叫做互斥寄存器的來(lái)完成,它只有第0位(bit0)可用,復(fù)位后默認(rèn)值為1。當(dāng)讀此寄存器時(shí),讀出數(shù)值的同時(shí)這位自動(dòng)被清0;當(dāng)寫它時(shí),這位將再次被置為1。
此正是互斥量的特性,以用于實(shí)現(xiàn)CPU間對(duì)任何共享資源的握手同步。例如,當(dāng)一個(gè)CPU要訪問(wèn)某共享資源時(shí),先讀此寄存器,若讀到的是1,表示資源可用,同時(shí)1被自動(dòng)清為0;若讀到0,則表示資源被占用;在CPU用完共享資源時(shí),即寫此寄存器,使其置1,表示釋放了資源為可用。
這套郵箱機(jī)制簡(jiǎn)單框架圖如下:
順便提下,我們?cè)贚PC5500 SDK包中還提供了一套開(kāi)源多核軟件開(kāi)發(fā)包,包括庫(kù)和大量例程。通過(guò)庫(kù)的API提供了支持用戶實(shí)現(xiàn)復(fù)雜的多核通訊機(jī)制。
這套多核SDK的庫(kù)代碼包含在LPC5500SDK包以下路徑:
例程則在:
3雙核調(diào)試
LPC5500的雙核都支持SWD調(diào)試模式,就調(diào)試的級(jí)別來(lái)說(shuō),它們是”平等”的。實(shí)際實(shí)現(xiàn)時(shí),每個(gè)核一般有自己的工程,它們各自的調(diào)試和單核無(wú)異。
但在兩個(gè)核有關(guān)聯(lián)時(shí)(即前面提到的雙核啟動(dòng)和雙核通訊過(guò)程),調(diào)試要有所注意,關(guān)鍵就是要真正理解了這兩個(gè)過(guò)程機(jī)制,依據(jù)這兩個(gè)機(jī)制的特點(diǎn)進(jìn)行調(diào)試,則基本沒(méi)什么問(wèn)題。
-
mcu
+關(guān)注
關(guān)注
146文章
16922瀏覽量
349989 -
存儲(chǔ)器
+關(guān)注
關(guān)注
38文章
7440瀏覽量
163529 -
cpu
+關(guān)注
關(guān)注
68文章
10813瀏覽量
210880
原文標(biāo)題:【硬核干貨】LPC5500——簡(jiǎn)便易用的雙核技術(shù)
文章出處:【微信號(hào):Zlgmcu7890,微信公眾號(hào):周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論