首頁 > 評測 > 又一款I(lǐng)oT開發(fā)板-ADICUP3029開發(fā)板評測

又一款I(lǐng)oT開發(fā)板-ADICUP3029開發(fā)板評測

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

軟件開發(fā)

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

mbed篇

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

IAR篇

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

MDK篇

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

Demo1:最簡單的程序框架

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

image13.png

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

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

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

image14.png

圖 選擇器件

再選擇如下幾個RTE選項:

image15.png

圖 選擇RTE選項

嚴格說來,目前MDK對該設(shè)備的支持還不符合CMSIS標準,但是湊和著夠用了.

再新建一個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;

}

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

Demo2: Dhrystone評測

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

作評測,除了打印函數(shù)用以輸出結(jié)果之外,最重要的就是計時函數(shù).因為此芯片屬于Cortex M3內(nèi)核,所以有現(xiàn)成的SysTick可以使用.SysTick屬于內(nèi)核中的定時器而非外設(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上用.對于某些Cortex M內(nèi)核,ARM公司的規(guī)范是SysTick可選,并非一定需要實現(xiàn).但是截止目前還沒有見到?jīng)]有實現(xiàn)此定時器的例子.

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

網(wǎng)友評論