首页 > 评测 > 又一款IoT开发板-ADICUP3029开发板评测
又一款IoT开发板-ADICUP3029开发板评测
- [导读]
- 最近在深圳的嵌入式展上,MOUSER携手ADI等厂牌推出现场免费送开发板的活动,笔者也去薅了一把羊毛。ADI的板子,平常大家应该接触的不多,从ADICUP3029来管窥一豹吧。
软件开发
因为是Cortex M3的内核,理论上使用任何可以开发Cortex M3的开发工具均可以开发之.当然需要有配合的芯片寄存器支持包才好,否则若要开发者按照数据手册来自己整理头文件,当然不是提倡的高效开发方式.目前该芯片支持的几种开发方式:
mbed篇
此方式为较为直观,但作者认为只是少数派人士的选择.本文不涉及.
IAR篇
此种方式与MDK工具类似,但是开发环境建立不如MDK方便,故此本文也不详述.
MDK篇
这个是作者提倡的方式.Keil MDK在经过ARM公司多年的悉心培养,已经是当今开发Cortex M应用的最佳工具之一.这里做重点介绍,本文的几个Demo也都是使用该工具开发的.
Demo1:最简单的程序框架
首先安装相关的设备包:
图 相关设备支持包
以上几个设备支持包,都进行安装.
建立新工程,选择正确的芯片:
图 选择器件
再选择如下几个RTE选项:
图 选择RTE选项
严格说来,目前MDK对该设备的支持还不符合CMSIS标准,但是凑和着够用了.
再新建一个main.c,内容如下:
#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中的相关系数.这就是上文提到的不规范之处,即某些内容(如波特率)还不能以图形化方式直观修改. 由此点可见,该器件的软件支持包还处在一个比较初级的状态,期待官方尽快加以完善.如果一切无误,该工程即可编译下载,现象是两灯闪烁以及串口有输出.代码的下载连接请参考文末的git连接.
Demo2: Dhrystone评测
有了以上的基础,下面来做一个dhrystone的评测,毕竟该MCU的性能也是值得关注的.
作评测,除了打印函数用以输出结果之外,最重要的就是计时函数.因为此芯片属于Cortex M3内核,所以有现成的SysTick可以使用.SysTick属于内核中的定时器而非外设,所以几乎所有的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内核的MCU上用.对于某些Cortex M内核,ARM公司的规范是SysTick可选,并非一定需要实现.但是截止目前还没有见到没有实现此定时器的例子.
- 本文系21ic原创,未经许可禁止转载!
网友评论
- 联系人:巧克力娃娃
- 邮箱:board@21ic.com
- 我要投稿
-
欢迎入驻,开放投稿
-
人均百万?英伟达中国员工收入曝光! 2024-08-29
-
《黑神话:悟空》玩家硬盘升级攻略:提升游戏体验,畅享3A大作 2024-08-29
-
数睿数据参加《系统与软件工程 低代码开发平台通用技术要求》国家标准编制 2024-08-29
- NRF52810蓝牙数字耳机找人定制
预算:¥30005天前
- 125KW模块式PCS软硬件外包开发
预算:¥1100000015小时前
- 12V汽车启动电源项目BMS设计
预算:¥50000023小时前
- 数据可视化软件 开发
预算:¥5000023小时前
- PLC项目调试修改
预算:¥100001天前
- 起动电机控制器开发
预算:¥1100001天前