首頁 > 評測 > 又一款I(lǐng)oT開發(fā)板-ADICUP3029開發(fā)板評測
又一款I(lǐng)oT開發(fā)板-ADICUP3029開發(fā)板評測
- [導(dǎo)讀]
- 最近在深圳的嵌入式展上,MOUSER攜手ADI等廠牌推出現(xiàn)場免費送開發(fā)板的活動,筆者也去薅了一把羊毛。ADI的板子,平常大家應(yīng)該接觸的不多,從ADICUP3029來管窺一豹吧。
軟件開發(fā)
因為是Cortex M3的內(nèi)核,理論上使用任何可以開發(fā)Cortex M3的開發(fā)工具均可以開發(fā)之.當(dāng)然需要有配合的芯片寄存器支持包才好,否則若要開發(fā)者按照數(shù)據(jù)手冊來自己整理頭文件,當(dāng)然不是提倡的高效開發(fā)方式.目前該芯片支持的幾種開發(fā)方式:
mbed篇
此方式為較為直觀,但作者認(rèn)為只是少數(shù)派人士的選擇.本文不涉及.
IAR篇
此種方式與MDK工具類似,但是開發(fā)環(huán)境建立不如MDK方便,故此本文也不詳述.
MDK篇
這個是作者提倡的方式.Keil MDK在經(jīng)過ARM公司多年的悉心培養(yǎng),已經(jīng)是當(dāng)今開發(fā)Cortex M應(yīng)用的最佳工具之一.這里做重點介紹,本文的幾個Demo也都是使用該工具開發(fā)的.
Demo1:最簡單的程序框架
首先安裝相關(guān)的設(shè)備包:
圖 相關(guān)設(shè)備支持包
以上幾個設(shè)備支持包,都進(jìn)行安裝.
建立新工程,選擇正確的芯片:
圖 選擇器件
再選擇如下幾個RTE選項:
圖 選擇RTE選項
嚴(yán)格說來,目前MDK對該設(shè)備的支持還不符合CMSIS標(biāo)準(zhǔn),但是湊和著夠用了.
再新建一個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閃爍與串口的例程即宣告大功告成.如果需要修改默認(rèn)的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)友評論
- 聯(lián)系人:巧克力娃娃
- 郵箱:board@21ic.com
- 我要投稿
-
歡迎入駐,開放投稿
-
人均百萬?英偉達(dá)中國員工收入曝光! 2024-08-29
-
《黑神話:悟空》玩家硬盤升級攻略:提升游戲體驗,暢享3A大作 2024-08-29
-
數(shù)睿數(shù)據(jù)參加《系統(tǒng)與軟件工程 低代碼開發(fā)平臺通用技術(shù)要求》國家標(biāo)準(zhǔn)編制 2024-08-29
- NRF52810藍(lán)牙數(shù)字耳機(jī)找人定制
預(yù)算:¥30005天前
- 125KW模塊式PCS軟硬件外包開發(fā)
預(yù)算:¥1100000015小時前
- 12V汽車啟動電源項目BMS設(shè)計
預(yù)算:¥50000023小時前
- 數(shù)據(jù)可視化軟件 開發(fā)
預(yù)算:¥5000023小時前
- PLC項目調(diào)試修改
預(yù)算:¥100001天前
- 起動電機(jī)控制器開發(fā)
預(yù)算:¥1100001天前