首頁(yè) > 評(píng)測(cè) > 又一款I(lǐng)oT開(kāi)發(fā)板-ADICUP3029開(kāi)發(fā)板評(píng)測(cè)

又一款I(lǐng)oT開(kāi)發(fā)板-ADICUP3029開(kāi)發(fā)板評(píng)測(cè)

  • 作者:zhanzr
  • 來(lái)源:21ic
  • [導(dǎo)讀]
  • 最近在深圳的嵌入式展上,MOUSER攜手ADI等廠牌推出現(xiàn)場(chǎng)免費(fèi)送開(kāi)發(fā)板的活動(dòng),筆者也去薅了一把羊毛。ADI的板子,平常大家應(yīng)該接觸的不多,從ADICUP3029來(lái)管窺一豹吧。

軟件開(kāi)發(fā)

因?yàn)槭荂ortex M3的內(nèi)核,理論上使用任何可以開(kāi)發(fā)Cortex M3的開(kāi)發(fā)工具均可以開(kāi)發(fā)之.當(dāng)然需要有配合的芯片寄存器支持包才好,否則若要開(kāi)發(fā)者按照數(shù)據(jù)手冊(cè)來(lái)自己整理頭文件,當(dāng)然不是提倡的高效開(kāi)發(fā)方式.目前該芯片支持的幾種開(kāi)發(fā)方式:

mbed篇

此方式為較為直觀,但作者認(rèn)為只是少數(shù)派人士的選擇.本文不涉及.

IAR篇

此種方式與MDK工具類似,但是開(kāi)發(fā)環(huán)境建立不如MDK方便,故此本文也不詳述.

MDK篇

這個(gè)是作者提倡的方式.Keil MDK在經(jīng)過(guò)ARM公司多年的悉心培養(yǎng),已經(jīng)是當(dāng)今開(kāi)發(fā)Cortex M應(yīng)用的最佳工具之一.這里做重點(diǎn)介紹,本文的幾個(gè)Demo也都是使用該工具開(kāi)發(fā)的.

Demo1:最簡(jiǎn)單的程序框架

首先安裝相關(guān)的設(shè)備包:

image13.png

圖 相關(guān)設(shè)備支持包

以上幾個(gè)設(shè)備支持包,都進(jìn)行安裝.

建立新工程,選擇正確的芯片:

image14.png

圖 選擇器件

再選擇如下幾個(gè)RTE選項(xiàng):

image15.png

圖 選擇RTE選項(xiàng)

嚴(yán)格說(shuō)來(lái),目前MDK對(duì)該設(shè)備的支持還不符合CMSIS標(biāo)準(zhǔn),但是湊和著夠用了.

再新建一個(gè)main.c,內(nèi)容如下:

#include

#include

#include

#include

#include

typedef struct {

ADI_GPIO_PORT Port;

ADI_GPIO_DATA Pins;

} PinMap;

/* LED GPIO assignments */

PinMap LDS4 = {ADI_GPIO_PORT1, ADI_GPIO_PIN_15}; /* Blue LED on GPIO31 (DS4) */

PinMap LDS3 = {ADI_GPIO_PORT2, ADI_GPIO_PIN_0}; /* Green LED on GPIO32 (DS3) */

extern uint32_t SystemCoreClock;

int main(void)

{

uint8_t gpioMemory[ADI_GPIO_MEMORY_SIZE] = {0};

ADI_PWR_RESULT ePwrResult;

ADI_GPIO_RESULT eGpioResult;

ePwrResult = adi_pwr_Init();

ePwrResult = adi_pwr_SetClockDivider(ADI_CLOCK_HCLK, 1u);

ePwrResult = adi_pwr_SetClockDivider(ADI_CLOCK_PCLK, 1u);

/* common init */

common_Init();

/* Initialize GPIO driver */

eGpioResult= adi_gpio_Init(gpioMemory, ADI_GPIO_MEMORY_SIZE);

/* Enable LDS4 output */

eGpioResult = adi_gpio_OutputEnable(LDS4.Port, LDS4.Pins, true);

/* Enable LDS3 output */

eGpioResult = adi_gpio_OutputEnable(LDS3.Port, LDS3.Pins, true);

printf("ADICUP3029 LED UART Demo by zhanzr21 for 21ic BBS @ %u Hz\n", SystemCoreClock);

/* Loop indefinitely */

while (1)

{

adi_gpio_SetHigh(LDS3.Port, LDS3.Pins);

/* Delay between iterations */

for (volatile uint32_t i = 0; i < 1000000; i++)

;

adi_gpio_SetLow(LDS3.Port, LDS3.Pins);

/* Delay between iterations */

for (volatile uint32_t i = 0; i < 1000000; i++)

;

adi_gpio_SetHigh (LDS4.Port, LDS4.Pins);

/* Delay between iterations */

for (volatile uint32_t i = 0; i < 500000; i++)

;

adi_gpio_SetLow (LDS4.Port, LDS4.Pins);

/* Delay between iterations */

for (volatile uint32_t i = 0; i < 500000; i++)

;

}

return 0;

}

至此,我們的第一個(gè)demo,包含LED閃爍與串口的例程即宣告大功告成.如果需要修改默認(rèn)的9600的波特率,請(qǐng)修改adi_uart_config.h中的相關(guān)系數(shù).這就是上文提到的不規(guī)范之處,即某些內(nèi)容(如波特率)還不能以圖形化方式直觀修改. 由此點(diǎn)可見(jiàn),該器件的軟件支持包還處在一個(gè)比較初級(jí)的狀態(tài),期待官方盡快加以完善.如果一切無(wú)誤,該工程即可編譯下載,現(xiàn)象是兩燈閃爍以及串口有輸出.代碼的下載連接請(qǐng)參考文末的git連接.

Demo2: Dhrystone評(píng)測(cè)

有了以上的基礎(chǔ),下面來(lái)做一個(gè)dhrystone的評(píng)測(cè),畢竟該MCU的性能也是值得關(guān)注的.

作評(píng)測(cè),除了打印函數(shù)用以輸出結(jié)果之外,最重要的就是計(jì)時(shí)函數(shù).因?yàn)榇诵酒瑢儆贑ortex M3內(nèi)核,所以有現(xiàn)成的SysTick可以使用.SysTick屬于內(nèi)核中的定時(shí)器而非外設(shè),所以幾乎所有的Cortex M3的MCU的該段代碼完全一模一樣:

#define HZ 1000

/* Configure SysTick */

SysTick_Config(SystemCoreClock/HZ);

volatile static uint32_t g_Ticks;

//SysTick的ISR

void SysTick_Handler(void)

{

g_Ticks++;

}

這樣就可以了,值得一提的是上述這段代碼可以直接拿到任何Cortex M內(nèi)核的MCU上用.對(duì)于某些Cortex M內(nèi)核,ARM公司的規(guī)范是SysTick可選,并非一定需要實(shí)現(xiàn).但是截止目前還沒(méi)有見(jiàn)到?jīng)]有實(shí)現(xiàn)此定時(shí)器的例子.

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

網(wǎng)友評(píng)論

  • 聯(lián)系人:巧克力娃娃
  • 郵箱:board@21ic.com
  • 我要投稿
  • 歡迎入駐,開(kāi)放投稿

熱門(mén)標(biāo)簽
項(xiàng)目外包 more+