Cortex-M0 + ASF基础知识

时间:2018-02-18 07:57:52

标签: c++ c microcontroller cortex-m samd21

我刚刚从AVR过渡到ARM,我遇到了一些问题,只是让一个简单的闪烁程序工作。我一直在互联网上搜索,在我看来,Atmel ASF库应该是最简单的入门方式,但我似乎无法获得有效的程序。

我正在使用Atmel Studio编写代码并尝试了几个模板但没有成功。我正在使用RobotDYN Cortex-M0,它最多只有最小的支持,所以我在这里有点失明。

这是我到目前为止所做的:

  • 使用用户板模板创建了一个新的C ASF Board项目 ATSAMD21G18A(确认芯片)
  • 使用ASF向导我添加了:
    • IOPORT - 通用I / O服务
    • 延迟例程服务

main.c中:

#include <asf.h>
#include <delay.h>

#define TEST_PIN PIN_PA17

int main (void)
{
    system_init();

   ioport_init();
   ioport_set_pin_dir(TEST_PIN, IOPORT_DIR_OUTPUT); 

   while(1){
      ioport_set_pin_level(TEST_PIN, 1);
      delay_ms(1000);
      ioport_set_pin_level(TEST_PIN, 0);
      delay_ms(1000);
   }

}

一切似乎编译良好我可以启动调试器(使用Atmel-ICE)并且程序到达第一个ioport_set_pin_level并且在板上似乎没有发生任何事情并且当它尝试执行{{1它进入延迟但永远不会返回。当我暂停程序执行时,似乎它等待延迟在delay_ms中完成,但当我查看延迟函数中的参数delay_cycles时,它只是给出一条消息&#34;优化了&#34;。

我错过了什么?我需要导入一些编译器开关或其他ASF库吗?

以下是我目前对C编译器选项的看法:

const uint32_t n

1 个答案:

答案 0 :(得分:0)

在我发布这篇文章后不久我偶然发现了答案,也许有人可以用ARM控制器/ ASF更好地解释如何捕捉这些东西。我所要做的就是做出以下改变:

scheduler.enterabs(time, priority, action, argument=(), kwargs={})

现在这是ATSAMD21G18A的正常运行程序。我不确定为什么不初始化延迟也会弄乱IO输出,也许其他人可以对此有所了解。