Arm SAM4S初始化是一个小步骤

Arm SAM4S初始化是一个小步骤,arm,embedded,microcontroller,atmel,Arm,Embedded,Microcontroller,Atmel,这个问题可能很明显,很愚蠢,但我没能找到答案 我正在尝试从Atmel为sam4s解释板创建一个简单的makefile项目 我对ARM是个新手,我对如何让它工作感到有点迷茫。以下是我为使LED正常工作所做的工作: /* Enable clock for PIOC. */ PMC->PMC_WPMR = PMC_WPMR_WPKEY_PASSWD; PMC->PMC_PCER0 = PMC_PCER0_PID13; /* PIOC clock enable. */ /* Ena

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

我正在尝试从Atmel为sam4s解释板创建一个简单的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处应有用户指示灯

电路板示意图:

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

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

使用Atmel Studio 6更新主板上的JLink驱动程序此步骤需要windows。 从Segger下载了适用于Linux的J-Link软件包:。 使用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>

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