首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >皮层-M0+ ASF基函数

皮层-M0+ ASF基函数
EN

Stack Overflow用户
提问于 2018-02-18 07:57:51
回答 1查看 550关注 0票数 0

我只是从AVR到ARM的过渡,我有一些问题,只是得到一个简单的眨眼程序工作。我一直在互联网上搜索,在我看来,Atmel ASF库应该是最简单的开始,但我似乎无法得到一个工作的程序。

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

以下是我到目前为止所拥有的:

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

main.c:

代码语言:javascript
复制
#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,在板上似乎什么也没有发生,当它试图执行delay_ms时,它进入延迟,但永远不会返回。当我暂停程序执行时,似乎等待延迟在delay_cycles中完成,但当我查看延迟函数中的参数const uint32_t n时,它只会给出一条消息“优化输出”。

我遗漏了什么?是否有需要导入的编译器开关或其他ASF库?

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

代码语言:javascript
复制
-x c -mthumb -D__SAMD21G18A__ -DDEBUG -DBOARD=USER_BOARD -DARM_MATH_CM0PLUS=true -DSYSTICK_MODE  -I"../src/ASF/common/boards" -I"../src/ASF/sam0/utils" -I"../src/ASF/sam0/utils/header_files" -I"../src/ASF/sam0/utils/preprocessor" -I"../src/ASF/thirdparty/CMSIS/Include" -I"../src/ASF/thirdparty/CMSIS/Lib/GCC" -I"../src/ASF/common/utils" -I"../src/ASF/sam0/utils/cmsis/samd21/include" -I"../src/ASF/sam0/utils/cmsis/samd21/source" -I"../src/ASF/sam0/drivers/system" -I"../src/ASF/sam0/drivers/system/clock/clock_samd21_r21_da_ha1" -I"../src/ASF/sam0/drivers/system/clock" -I"../src/ASF/sam0/drivers/system/interrupt" -I"../src/ASF/sam0/drivers/system/interrupt/system_interrupt_samd21" -I"../src/ASF/sam0/drivers/system/pinmux" -I"../src/ASF/sam0/drivers/system/power" -I"../src/ASF/sam0/drivers/system/power/power_sam_d_r_h" -I"../src/ASF/sam0/drivers/system/reset" -I"../src/ASF/sam0/drivers/system/reset/reset_sam_d_r_h" -I"../src/ASF/common2/boards/user_board" -I"../src" -I"../src/config" -I"../src/ASF/common2/services/delay" -I"../src/ASF/common2/services/delay/sam0" -I"../src/ASF/common/services/ioport"  -O1 -fdata-sections -ffunction-sections -mlong-calls -g3 -Wall -mcpu=cortex-m0plus -c -pipe -fno-strict-aliasing -Wall -Wstrict-prototypes -Wmissing-prototypes -Werror-implicit-function-declaration -Wpointer-arith -std=gnu99 -ffunction-sections -fdata-sections -Wchar-subscripts -Wcomment -Wformat=2 -Wimplicit-int -Wmain -Wparentheses -Wsequence-point -Wreturn-type -Wswitch -Wtrigraphs -Wunused -Wuninitialized -Wunknown-pragmas -Wfloat-equal -Wundef -Wshadow -Wbad-function-cast -Wwrite-strings -Wsign-compare -Waggregate-return  -Wmissing-declarations -Wformat -Wmissing-format-attribute -Wno-deprecated-declarations -Wpacked -Wredundant-decls -Wnested-externs -Wlong-long -Wunreachable-code -Wcast-align --param max-inline-insns-single=500 -MD -MP -MF "$(@:%.o=%.d)" -MT"$(@:%.o=%.d)" -MT"$(@:%.o=%.o)" 
EN

回答 1

Stack Overflow用户

发布于 2018-02-18 08:13:03

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

代码语言:javascript
复制
#include <asf.h>
#include <delay.h>

#define TEST_PIN PIN_PA17

int main (void)
{
   system_init();

   ioport_init();
   delay_init();  /*** Must initialize the Delays ***/

   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);
   }
}

现在,这是一个ATSAMD21G18A的功能程序。我不知道为什么不初始化延迟也会破坏IO输出,也许其他人可以对此有所了解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48849600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档