SAM4S 初始化步骤

Posted

技术标签:

【中文标题】SAM4S 初始化步骤【英文标题】:SAM4S initialization in baby steps 【发布时间】:2015-05-09 21:29:01 【问题描述】:

这个问题可能很明显,很愚蠢,但我没有找到答案。

我正在尝试为 Atmel 的 sam4s xplained 板制作一个简单的 makefile 项目。

我是 ARM 的新手,对如何让工作正常工作感到有些迷茫。以下是我试图让 LED 工作的方法:

 /* Enable clock for PIOC. */
 PMC->PMC_WPMR = PMC_WPMR_WPKEY_PASSWD;
 PMC->PMC_PCER0 = PMC_PCER0_PID13; /* PIOC clock enable. */

 /* Enable output for LED. */ 
 PIOC->PIO_WPMR = PIO_WPMR_WPKEY_PASSWD; /* Enable writing to registers. */
 PIOC->PIO_PER = PIO_PER_P10 | PIO_PER_P17;  /* Enable pio 10, 17. */               
 PIOC->PIO_OER = PIO_OER_P10 | PIO_OER_P17;  /* Set pio10 and 17 as output. */ 
 PIOC->PIO_SODR = PIO_SODR_P10;          /* Set pio10. */                         
 PIOC->PIO_CODR = PIO_CODR_P17;          /* Clear pio17 . */     

但绝对没有任何反应。我错过了什么吗?

PIOC 10 和 17 应该有用户 LED。

电路板原理图: http://www.atmel.com/webdoc/sam4s16xplained/sam4s16xplained.boardScematics.section_ggo_tyg_xf.html

【问题讨论】:

不确定 SAM,但对于大多数其他 Cortex-M MCU,时钟使能、端口方向等寄存器包含用于不同功能的单个位。所以你只需要改变这些位,而不是覆盖完整的寄存器内容。使用|=&= ~(或使用相应的逻辑运算符进行正常赋值),除非您绝对确定要立即更改整个寄存器内容。否则,您可能会禁用其他(必需)外围设备的时钟。输出设置/复位寄存器通常是一个例外,因为它们在硬件中执行此操作。 另外:你能读取从寄存器写入的值吗?硬件真的执行了写入吗? @Olaf 上面用到的寄存器都是只写的。数据表指定写入 0 无效,这就是我在上面使用它们的原因。有一个单独的“清除”寄存器用于禁用。至于阅读寄存器,我还没有让 OpenOCD 为董事会工作,所以到目前为止我一直在盲目工作,否则我会检查一下。 嗯..有趣。刚刚看了一下数据表。是的,它们似乎确实为所有寄存器提供了这些功能;不错的功能;大多数其他 ARM-MCU 仅将其用于输出寄存器。但是,您实际上可以读取寄存器的值。这只是每个四边形寄存器的另一个寄存器,称为“状态寄存器”(退后一步,看看整个画面)。实际上,有一个寄存器可以从四个相邻的地址寻址并实际编码设置/复位/读取;对于某些寄存器,例如输出数据寄存器,状态可以是:读和写。 【参考方案1】:

问题不在于代码,而在于 Atmel 用于对电路板进行编程的工具。我一直在使用 SAM-BA 系统内编程器对电路板进行编程,但由于某种原因,它未能更改闪存的内容。即使在内存视图中手动设置单曲也会失败。

我尝试了 Seggers JLink 软件并执行了以下步骤:

    使用 Atmel Studio 6 更新板上的 JLink 驱动程序(此步骤需要 Windows)。 从 Segger 下载了适用于 Linux 的 J-Link 软件包:https://www.segger.com/jlink-software.html。 使用 JLinkExe 对开发板进行编程,如下所示:
      确保 JP25 已断开 - 仅 sam-ba 需要。 通过 usb 与 jtag 连接器连接。 启动 JLinkExe

在 JLink 终端中执行:

JLink> device at91sam4s16c
JLink> loadbin <target.bin>, 0x400000

有时我需要在编程后重置电路板才能工作。现在也可以使用 Segger 工具进行调试。使用 JLinkGDBServer 启动 gdb 服务器并使用 arm-none-eabi-gdb 连接:

(gdb) target remote :2331
(gdb) file <target.elf>

【讨论】:

以上是关于SAM4S 初始化步骤的主要内容,如果未能解决你的问题,请参考以下文章

[Java] 类和接口的初始化步骤 - 继承方面

YMP运行初始化步骤

在 Pentaho Kettle 中的步骤初始化之前测试数据库连接?

RHEL系统初始化步骤

ReferenceError:在初始化之前无法访问“步骤”

磁盘显示没有初始化找回文件办法