2015-05-09 75 views
0

這個問題可能非常明顯,它很愚蠢,但我無法爲它提出一個答案。在嬰兒步驟中初始化SAM4S

我正在嘗試爲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 . */  

但是絕對沒有任何反應。我錯過了什麼嗎?

應該有用戶LED在PIOC 10和17

板原理圖: http://www.atmel.com/webdoc/sam4s16xplained/sam4s16xplained.boardScematics.section_ggo_tyg_xf.html

+0

不知道的SAM,但對於大多數其他的Cortex-M微控制器,時鐘寄存器啓用端口方向等含有單個位用於不同的功能。所以你只需要改變這些位,而不是覆蓋整個寄存器的內容。使用'| ='和'&=〜'(或者使用相應的邏輯運算符進行正常賦值),除非您絕對確定要一次更改整個寄存器內容。否則,您可能會禁用其他(必需)外設的時鐘。輸出置位/復位寄存器通常是一個例外,因爲它們在硬件中執行此操作。 – Olaf

+0

另外:你可以讀取從寄存器寫入的值嗎?硬件真的執行了寫操作嗎? – Olaf

+0

@Olaf上面使用的寄存器都是隻寫的。數據表指定寫入0沒有影響,這是使用它們的原因,正如我上面所做的那樣。有一個單獨的「清除」註冊禁用。至於閱讀寄存器,我還沒有得到OpenOCD的董事會工作,所以我工作盲目,否則我會檢查這一點。 – Kenneth

回答

0

的問題是不是代碼,但用於對電路板進行編程愛特梅爾的工具。我一直在使用SAM-BA系統內編程器對電路板進行編程,但由於某種原因,它未能更改閃存的內容。即使在內存視圖中手動設置單個視圖也會失敗。

我,而不是試圖Seggers JLINK軟件,並做了以下步驟:

  1. 更新上採用Atmel Studio 6中的板JLINK的驅動程序(這一步需要Windows)。
  2. 從Segger下載適用於Linux的J-Link軟件包:https://www.segger.com/jlink-software.html
  3. 使用JLinkExe對板進行編程,如下所示:
    1. 確保JP25已斷開連接 - 僅用於sam-ba。
    2. 通過USB連接到jtag連接器。
    3. 開始JLinkExe

在JLINK終端做:

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

有時候,我需要重置板其編程之後工作之前。使用Segger工具現在可以調試。與JLinkGDBServer啓動GDB服務器,並使用臂無 - EABI-GDB與連接:

(gdb) target remote :2331 
(gdb) file <target.elf> 
相關問題