這個問題可能非常明顯,它很愚蠢,但我無法爲它提出一個答案。在嬰兒步驟中初始化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
不知道的SAM,但對於大多數其他的Cortex-M微控制器,時鐘寄存器啓用端口方向等含有單個位用於不同的功能。所以你只需要改變這些位,而不是覆蓋整個寄存器的內容。使用'| ='和'&=〜'(或者使用相應的邏輯運算符進行正常賦值),除非您絕對確定要一次更改整個寄存器內容。否則,您可能會禁用其他(必需)外設的時鐘。輸出置位/復位寄存器通常是一個例外,因爲它們在硬件中執行此操作。 – Olaf
另外:你可以讀取從寄存器寫入的值嗎?硬件真的執行了寫操作嗎? – Olaf
@Olaf上面使用的寄存器都是隻寫的。數據表指定寫入0沒有影響,這是使用它們的原因,正如我上面所做的那樣。有一個單獨的「清除」註冊禁用。至於閱讀寄存器,我還沒有得到OpenOCD的董事會工作,所以我工作盲目,否則我會檢查這一點。 – Kenneth