首页 > 评测 > 又一款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
- 我要投稿
-
欢迎入驻,开放投稿
-
RAK831 Lite:基于树莓派3的LoRa网关... 2022-06-17
-
Imagination推出PowerVR AX2185和AX2145神经... 2022-06-17
-
ODROID-GO是一款兼容Arduino的基于ESP32的便... 2022-06-17
- PID温度控制器
预算:¥700003天前
- 摄像头的可视画面需要一直超上(linux系统,ARM)
预算:¥1000018小时前
- DICOM协议搭建(ARM架构,linux系统)
预算:¥1000017小时前
- 需MIPI摄像头隔离电路,实现3-4米能长距离
预算:¥1000017小时前
- 膨宫仪的控制板,控制流量和检测压力
预算:¥1000016分钟前
- 无创自动测量血压计 NIBP模块
预算:¥100007小时前