www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

首頁 > 評測 > MCU中的奇美拉——Cypress PSoC6系列評測之一

MCU中的奇美拉——Cypress PSoC6系列評測之一

MCU   CYPRESS   PSoC6   BLE   超低功耗   
  • 作者:zhanzr
  • 來源:21ic
  • [導讀]
  • 據(jù)稱是業(yè)內(nèi)最低功耗的M4內(nèi)核MCU產(chǎn)品,同時具有雙核結構和諸多可編程模擬與數(shù)字外設,結合強大的PSoC Creator,這次的PSoC6的體驗可謂是非常酣暢。

因為多核心是個很廣泛的話題,這里也只能少討論一些其他平臺,就PSoC 6這個多核心處理器,作者把自己學習理解過程中的一些疑問與答案列一下子,相信也是大多數(shù)嵌入式程序員關心的話題:

· 問:啟動的時候,兩個核心怎么情況?

· 答:M0+先啟動,M4默認情況是休眠的,這也符合大多數(shù)應用,M4只是需要他才喚醒.

· 問:兩者怎么下載程序?

· 答:兩者共享Flash空間,所以下載程序時下載一個hex就可以了.

· 問:怎么調(diào)試?

· 答:兩個內(nèi)核的調(diào)試單元是通用的,在Creator中可以選擇要調(diào)試哪個內(nèi)核.從Cypress文檔上看,某些第三方調(diào)試器可以支持多核心調(diào)試,但是Creator目前只支持每次調(diào)試一個內(nèi)核.

· 問:兩者怎么通信協(xié)調(diào)?

· 答:跟所有多核心環(huán)境一樣,共享內(nèi)存,Mutex, Semaphore, Mailbox都可以.從硬件上的支持來看,IPC較為完備.可以想象兩個內(nèi)核是電腦程序上的兩個Process.

· 問:兩者時鐘怎么關系?

· 答:通過外設分別為兩個內(nèi)核產(chǎn)生時鐘.

以上是本人學習此處理器的首先研究的幾個問題,當然其他人也許有其他問題可以寫在下面來一起探討.嵌入式處理器多核心環(huán)境怎么編程,是個很新的話題,作者相信搞得很透徹的人不多,大家應該多互相學習.

Creator開發(fā)實驗

說了那么多,這里以一個實踐工程來表現(xiàn)一下子Creator開發(fā)的過程.為了便于演示,這個工程的內(nèi)容為:

· M0+內(nèi)核控制兩個燈閃爍;

· M4內(nèi)核控制另外三個燈閃爍;

雖然號稱多核心,這個工程的特點是:兩個核心各自干各自的.至于雙核心如何同步通信的內(nèi)容,只能說后面的實驗再來詳述.本實驗只是為了演示Creator開發(fā)的一些基本步驟,寫多了反而看起來不易理解.

開始運行Creator 4.2,注意是4.2 Beta版本.下載地址上面有.

先來建立工程:

image20.png

圖 新建空工程

這里建立空工程,各位有興趣的可以試試在已有的例子上面修改.

選擇各種選項:

image22.png

圖 選擇生成其他工具的文件

因為這里不想跟任何第三方工具產(chǎn)生糾葛,全部Disable掉.

再選保存地址:

image23.png

圖 保存地址

開始創(chuàng)作:

image24.png

圖 創(chuàng)作電路圖

這里就跟畫電路圖類似,還要把原理圖的一部分貼在這里以便理解:

image25.png

圖 LED相關原理圖

所以說這些IO口都設定為開漏輸出即可驅(qū)動LED.

再拖幾個電阻,LED,電源節(jié)點上來:

image26.png

圖 拖上無源器件與電源節(jié)點

再就是分配引腳了:

image27.png

圖 分配引腳

其余時鐘,中斷什么的全部留默認的即可:

image28.png

圖 其余留默認

生成代碼,就是將編輯的原理圖,配置等等轉(zhuǎn)換為代碼的過程:

image29.png

圖 生成代碼

生成如果無誤的話在左邊項目結構中可以看到生成的代碼,此處最關心生成的IO口宏:

image30.png

圖 生成的代碼

再就是軟件工夫了,分別在M0+與M4的主文件中作如下編輯:

#include "project.h"

int main(void)

{

__enable_irq(); /* Enable global interrupts. */

/* Enable CM4. CY_CORTEX_M4_APPL_ADDR must be updated if CM4 memory layout is changed. */

Cy_SysEnableCM4(CY_CORTEX_M4_APPL_ADDR);

volatile uint32_t testClk_Cm0 = SystemCoreClock;

for(;;)

{

/* Place your application code here. */

Cy_GPIO_Inv(LED1_0_PORT, LED1_0_NUM); /* toggle the pin */

Cy_GPIO_Inv(LED2_0_PORT, LED2_0_NUM); /* toggle the pin */

  • 本文系21ic原創(chuàng),未經(jīng)許可禁止轉(zhuǎn)載!

網(wǎng)友評論