新聞中心

        ARM入門筆記(4)

        作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
        鍵盤輸入

        ——I/O輸入實(shí)驗(yàn)

        一.實(shí)驗(yàn)?zāi)康?br />
        能夠正確讀取PIO的管腳狀態(tài),實(shí)現(xiàn)當(dāng)有按鍵按下時(shí),LED點(diǎn)亮,否則滅。

        二.實(shí)驗(yàn)程序和參數(shù)設(shè)置

        1>連接器選項(xiàng)設(shè)置和啟動(dòng)代碼都與上個(gè)實(shí)驗(yàn)相同

        2>C語言的代碼

        #i nclude "AT91SAM7S64.h" //特殊功能寄存器頭文件。類似與51單片機(jī)中reg51.h
        #i nclude "Board.h" //定義目標(biāo)板的頭文件
        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個(gè)KEY對(duì)應(yīng)管腳的輸入功能
        *AT91C_PIOA_OER = LED_MASK;//使能4個(gè)LED管腳的輸出功能
        while (1)
        {
        Key_Val = *AT91C_PIOA_PDSR;//讀管腳的電平狀態(tài)
        if (Key_Val & SW1)
        {
        *AT91C_PIOA_SODR = LED1;//將狀態(tài)反映給LED
        }
        else
        {
        *AT91C_PIOA_COER = LED1;//按鈕按下時(shí),LED1亮
        }
        }
        }

        三.出現(xiàn)的問題與解決方法

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

        *AT91C_PMC_SCER = AT91C_CKGR_MOSCEN;//使能系統(tǒng)時(shí)鐘寄存器的處理器時(shí)鐘
        *AT91C_PMC_PCER = 1 91C_ID_PIOA; //使能PIOA外圍時(shí)鐘

        四.總結(jié)

        當(dāng)要使AT91SAM7S64特定的外設(shè)工作時(shí),必須使能相應(yīng)外設(shè)的時(shí)鐘控制寄存器。相反,如果不用相應(yīng)的外設(shè),禁能相應(yīng)的時(shí)鐘可以降低功耗。


        關(guān)鍵詞: ARM入門筆記鍵盤輸

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 曲沃县| 开平市| 长泰县| 涿鹿县| 晋中市| 肇庆市| 新和县| 迁安市| 嫩江县| 郧西县| 永福县| 安阳市| 康马县| 祁阳县| 洛南县| 双江| 平罗县| 永登县| 淮阳县| 德化县| 莎车县| 澄迈县| 固安县| 凤冈县| 海伦市| 达州市| 林甸县| 紫阳县| 虹口区| 农安县| 荣成市| 葵青区| 安化县| 堆龙德庆县| 宽甸| 侯马市| 佳木斯市| 安徽省| 建宁县| 光山县| 定陶县|