我刚刚从AVR过渡到ARM,我遇到了一些问题,只是让一个简单的闪烁程序工作。我一直在互联网上搜索,在我看来,Atmel ASF库应该是最简单的入门方式,但我似乎无法获得有效的程序。
我正在使用Atmel Studio编写代码并尝试了几个模板但没有成功。我正在使用RobotDYN Cortex-M0,它最多只有最小的支持,所以我在这里有点失明。
这是我到目前为止所做的:
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
答案 0 :(得分:0)
在我发布这篇文章后不久我偶然发现了答案,也许有人可以用ARM控制器/ ASF更好地解释如何捕捉这些东西。我所要做的就是做出以下改变:
scheduler.enterabs(time, priority, action, argument=(), kwargs={})
现在这是ATSAMD21G18A的正常运行程序。我不确定为什么不初始化延迟也会弄乱IO输出,也许其他人可以对此有所了解。