燈廠們背后的MCU,看LPC如何花式點(diǎn)燈(之三)

EZH介紹完了之后娩践,咱們介紹如何使用LPC55S69片上雙核機(jī)制實(shí)現(xiàn)驅(qū)動(dòng)WS2812燈帶活翩。

可能有大神說(shuō)了,你完全可以用GPIO模擬WS2812的時(shí)序啊欺矫,何必用SPI和EZH來(lái)做纱新。真么說(shuō)對(duì)的,攻城獅認(rèn)為這么寫(xiě)一篇單獨(dú)的GPIO模擬WS2812的時(shí)序 不太劃算太水了穆趴, 所以結(jié)合雙核的應(yīng)用來(lái)這么一篇。一來(lái)介紹了GPIO模擬WS2812遇汞,二來(lái)雙核的工程建立和應(yīng)用也介紹了未妹,內(nèi)容比較豐富些。

雙核工程創(chuàng)建

LPC55S69的雙核工程可以很方便的用MCUXpresso Config Tool工具創(chuàng)建空入。


利用MCUXpresso Config Tool 和SDK的實(shí)例模板 創(chuàng)建一個(gè)雙核工程

新創(chuàng)建的工程络它,由于軟件小bug,incbin.s并沒(méi)有加入core0主核的工程歪赢,incbin.s 是一段匯編化戳,用于把core1 固件的bin文件鏈接到core0的image中。
注意埋凯,Core1的固件是存儲(chǔ)在Flash中的点楼,上電的時(shí)候,由主核Core0搬運(yùn)到RAM中白对,再通知Core1運(yùn)行掠廓。

加入incbin.s

如何把core1的image 編譯進(jìn) core0的image中

首先還是分散加載文件,在生成好的工程中甩恼,core0的分散加載文件已經(jīng)給core1的image默認(rèn)分配了一個(gè)空間蟀瞧,這個(gè)空間段的名字是m0code沉颂,地址從0x00072000,大小是0x00026000悦污,用戶可以根據(jù)自己的實(shí)際需求修改這個(gè)起始地址和重新分配空間的大小铸屉。


core0關(guān)于core1 固件安排的地址空間

前文我們提別提到了incbin.s,顧名思義incbin是insert binary的縮寫(xiě)切端,這個(gè)匯編文件抬探,會(huì)幫我們把core1工程產(chǎn)生的binary文件core1_image.bin在在core0編譯的過(guò)程中放到core1在分散加載文件中定義的空間段。


incbin.s如何插入core1的image固件

當(dāng)然這么設(shè)置完帆赢,還不夠小压。最后關(guān)于雙核的設(shè)置還有一點(diǎn),要在KEIL的工程配置選型卡里椰于,選擇“Asm”配置include的路徑怠益,將core1的image路徑設(shè)置進(jìn)來(lái)。


Asm include路徑配置

Core1 用來(lái)做GPIO的控制驅(qū)動(dòng)WS2812

由于Core1的代碼比較直觀且簡(jiǎn)單瘾婿,我們就不用流程圖來(lái)解釋了蜻牢。大概講下Core1作為小核使用的過(guò)程。
第一步偏陪,調(diào)用MCMGR_Init()這個(gè)API抢呆,來(lái)初始化SDK提供的雙核機(jī)制比如通用事件這類(lèi)功能。
第二步笛谦,獲取Core0啟動(dòng)Core1時(shí)傳來(lái)的參數(shù)抱虐,這個(gè)代碼里,Core0傳遞給Core1的是WS2812TxBuf饥脑,這個(gè)Buffer里包含的LED數(shù)據(jù)數(shù)組的長(zhǎng)度和各個(gè)LED顯示的RGB數(shù)據(jù)內(nèi)容恳邀。
第三步,拉低WS2812 Data的IO口灶轰,延時(shí)大于50uS以上
第四步谣沸,按照每個(gè)WS2812TxBuf里實(shí)際RGB數(shù)據(jù)按照bit,翻轉(zhuǎn)GPIO發(fā)出0/1 信號(hào)
第五步笋颤,發(fā)送完成后乳附,調(diào)用MCMGR_TriggerEvent() API觸發(fā)Core0的中斷,通知主核Core1完成了WS2812數(shù)據(jù)的發(fā)送伴澄。
最后赋除,調(diào)用MCMGR_StopCore() 把自己這個(gè)core1關(guān)閉掉。
注意秉版,代碼delay的配置是以96MHz主頻來(lái)定的贤重,如果改變的MCU的主頻,這個(gè)值需要修改清焕。


Core1代碼

Core0 用來(lái)做數(shù)據(jù)整理并且通知Core1發(fā)送

這樣做的好處是解放了Core0的資源并蝗,不會(huì)被各種delay函數(shù)浪費(fèi)了資源祭犯。
Core0調(diào)用Core1的資源前,要先初始化SDK的雙核管理機(jī)制
MCMGR_Init()
然后將Core1的Image從Flash 復(fù)制到其本身定義的RAM區(qū)域滚停。
如果需要Core1在完成時(shí)觸發(fā)中斷通知沃粗,則用MCMGR_RegisterEvent()注冊(cè)一個(gè)回調(diào)函數(shù),在Core1中斷發(fā)出的時(shí)候在Core0的中斷處理函數(shù)中調(diào)用這個(gè)回調(diào)函數(shù)


core0初始化core1的代碼

Core0啟動(dòng)Core1發(fā)送數(shù)據(jù)的方式比較簡(jiǎn)單键畴,在整理好數(shù)據(jù)后最盅,直接調(diào)用MCMGR_StartCore() API 即可。這里我們希望Core1和Core0之間是異步執(zhí)行的起惕,所以在第四個(gè)形參里使用的是異步模式涡贱。

Core0啟動(dòng)Core1

實(shí)際的點(diǎn)燈代碼

實(shí)際的點(diǎn)燈代碼的API,我這邊將SPI惹想,EZH问词,雙核,SCT都是統(tǒng)一的嘀粱,main函數(shù)里邊的內(nèi)容一樣激挪,參考EZH那篇(之二)末尾介紹的API即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末锋叨,一起剝皮案震驚了整個(gè)濱河市垄分,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌娃磺,老刑警劉巖薄湿,帶你破解...
    沈念sama閱讀 217,084評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異豌鸡,居然都是意外死亡嘿般,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,623評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)涯冠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人逼庞,你說(shuō)我怎么就攤上這事蛇更。” “怎么了赛糟?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,450評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵派任,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我璧南,道長(zhǎng)掌逛,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,322評(píng)論 1 293
  • 正文 為了忘掉前任司倚,我火速辦了婚禮豆混,結(jié)果婚禮上篓像,老公的妹妹穿的比我還像新娘。我一直安慰自己皿伺,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,370評(píng)論 6 390
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著余黎,像睡著了一般萄凤。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妒穴,一...
    開(kāi)封第一講書(shū)人閱讀 51,274評(píng)論 1 300
  • 那天宋税,我揣著相機(jī)與錄音,去河邊找鬼讼油。 笑死杰赛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汁讼。 我是一名探鬼主播淆攻,決...
    沈念sama閱讀 40,126評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嘿架!你這毒婦竟也來(lái)了瓶珊?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,980評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤耸彪,失蹤者是張志新(化名)和其女友劉穎伞芹,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝉娜,經(jīng)...
    沈念sama閱讀 45,414評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡唱较,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,599評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了召川。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片南缓。...
    茶點(diǎn)故事閱讀 39,773評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荧呐,靈堂內(nèi)的尸體忽然破棺而出汉形,到底是詐尸還是另有隱情,我是刑警寧澤倍阐,帶...
    沈念sama閱讀 35,470評(píng)論 5 344
  • 正文 年R本政府宣布概疆,位于F島的核電站,受9級(jí)特大地震影響峰搪,放射性物質(zhì)發(fā)生泄漏岔冀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,080評(píng)論 3 327
  • 文/蒙蒙 一概耻、第九天 我趴在偏房一處隱蔽的房頂上張望使套。 院中可真熱鬧罐呼,春花似錦、人聲如沸童漩。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,713評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)矫膨。三九已至差凹,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間侧馅,已是汗流浹背危尿。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,852評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留馁痴,地道東北人谊娇。 一個(gè)月前我還...
    沈念sama閱讀 47,865評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像罗晕,于是被迫代替她去往敵國(guó)和親济欢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,689評(píng)論 2 354