久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

EEPW首頁 > 嵌入式系統 > 設計應用 > ARM入門筆記(4)

ARM入門筆記(4)

作者: 時間:2016-12-02 來源:網絡 收藏
鍵盤輸入

——I/O輸入實驗

一.實驗目的

能夠正確讀取PIO的管腳狀態,實現當有按鍵按下時,LED點亮,否則滅。

二.實驗程序和參數設置

1>連接器選項設置和啟動代碼都與上個實驗相同

2>C語言的代碼

#i nclude "AT91SAM7S64.h" //特殊功能寄存器頭文件。類似與51單片機中reg51.h
#i nclude "Board.h" //定義目標板的頭文件
int main(void)
{ unsigned int Key_Val;//定義變量,unsigned int為32位,C51是16位
*AT91C_PIOA_PER = LED_MASK | SW_MASK;//使能LED、KEY腳I/O口功能 *AT91C_PIOA_ODR = SW_MASK;//使能4個KEY對應管腳的輸入功能
*AT91C_PIOA_OER = LED_MASK;//使能4個LED管腳的輸出功能
while (1)
{
Key_Val = *AT91C_PIOA_PDSR;//讀管腳的電平狀態
if (Key_Val & SW1)
{
*AT91C_PIOA_SODR = LED1;//將狀態反映給LED
}
else
{
*AT91C_PIOA_COER = LED1;//按鈕按下時,LED1亮
}
}
}

三.出現的問題與解決方法

1> 無論作輸入用的I/O口電平如何變化,管腳狀態寄存器(AT91C_PIOA_PDSR)的內容始終為0,即I/O口的輸入功能沒起作用。
原因是AT91SAM7Sxx內部集成了功率管理控制器,用它來控制所有外設的時鐘以達到優化功耗的目的。所以只有使能了PIO的外圍時鐘,PIO外設才會工作,才能讀入輸入管腳的狀態。那么為什么PIO作為輸出時不需要使能外圍時鐘呢?我個人認為這與內部外設在數字電路上的實現有關,輸出功能只需要組合邏輯電路(不用時鐘)就能實現,而輸入功能則需要用到時序邏輯電路(需要時鐘)才能實現。
因此,必須在main()函數的開頭增加如下兩條時鐘使能的語句:

*AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系統時鐘寄存器的處理器時鐘
*AT91C_PMC_PCER = 1 91C_ID_PIOA; //使能PIOA外圍時鐘

四.總結

當要使AT91SAM7S64特定的外設工作時,必須使能相應外設的時鐘控制寄存器。相反,如果不用相應的外設,禁能相應的時鐘可以降低功耗


評論


技術專區

關閉